/** * Sets the parameters on the {@link java.sql.PreparedStatement} based on the values in the given * {@link Aggregate}. * * @param aggregate The {@link Aggregate} whose values will be set on the corresponding {@link * java.sql.PreparedStatement}. */ private void setStatementParameters(Aggregate aggregate) { EventKey eventKey = aggregate.getEventKey(); int ddID = eventKey.getDimensionDescriptorID(); int aggID = eventKey.getAggregatorID(); FieldsDescriptor keyFD = schema.getDimensionsDescriptorIDToKeyDescriptor().get(ddID); FieldsDescriptor aggFD = schema .getDimensionsDescriptorIDToAggregatorIDToOutputAggregatorDescriptor() .get(ddID) .get(aggID); GPOMutable key = eventKey.getKey(); key.setFieldDescriptor(keyFD); GPOMutable value = aggregate.getAggregates(); value.setFieldDescriptor(aggFD); int qCounter = 1; PreparedStatement ps = ddIDToAggIDToStatement.get(ddID).get(aggID); try { qCounter = setParams(ps, key, qCounter, true); setParams(ps, value, qCounter, false); ps.addBatch(); } catch (SQLException ex) { throw new RuntimeException(ex); } }
@Override public void setup(Context.OperatorContext context) { super.setup(context); LOG.info("Done setting up super"); aggregatorRegistry.setup(); // Create prepared statements schema = new DimensionalConfigurationSchema(eventSchema, aggregatorRegistry); List<FieldsDescriptor> keyFDs = schema.getDimensionsDescriptorIDToKeyDescriptor(); for (int ddID = 0; ddID < keyFDs.size(); ddID++) { LOG.info("ddID {}", ddID); FieldsDescriptor keyFD = keyFDs.get(ddID); Int2ObjectMap<FieldsDescriptor> aggIDToAggFD = schema.getDimensionsDescriptorIDToAggregatorIDToOutputAggregatorDescriptor().get(ddID); Map<Integer, PreparedStatement> aggIDToStatement = ddIDToAggIDToStatement.get(ddID); if (aggIDToStatement == null) { aggIDToStatement = Maps.newHashMap(); ddIDToAggIDToStatement.put(ddID, aggIDToStatement); } for (Map.Entry<String, String> aggTable : tableNames.get(ddID).entrySet()) { int aggID = aggregatorRegistry.getIncrementalAggregatorNameToID().get(aggTable.getKey()); LOG.info("aggID {}", aggID); FieldsDescriptor aggFD = aggIDToAggFD.get(aggID); List<String> keyNames = keyFD.getFieldList(); keyNames.remove(DimensionsDescriptor.DIMENSION_TIME_BUCKET); List<String> aggregateNames = aggFD.getFieldList(); String tableName = aggTable.getValue(); String statementString = buildStatement(tableName, keyNames, aggregateNames); try { aggIDToStatement.put(aggID, store.getConnection().prepareStatement(statementString)); } catch (SQLException ex) { throw new RuntimeException(ex); } } } }