@Override public GPOMutable convert(Map<String, Object> inputEvent) { FieldsDescriptor fd = schema.getValuesDescriptor(); GPOMutable values = new GPOMutable(fd); List<String> fields = fd.getFieldList(); for (int index = 0; index < fields.size(); index++) { String field = fields.get(index); values.setFieldGeneric(field, inputEvent.get(getMapField(field))); } return values; }
@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); } } } }
/** * @param ps The {@link java.sql.PreparedStatement} which will do an insert into the Mysql * database. * @param gpo The {@link GPOMutable} object whose values need to be set in the preparted * statement. * @param qCounter The current index in the prepared statement * @param isKey TODO use this * @return The current index in the prepared statement. * @throws SQLException */ private int setParams(PreparedStatement ps, GPOMutable gpo, int qCounter, boolean isKey) throws SQLException { FieldsDescriptor fd = gpo.getFieldDescriptor(); Map<String, Type> fieldToType = fd.getFieldToType(); List<String> fields = fd.getFieldList(); for (int fieldCounter = 0; fieldCounter < fields.size(); fieldCounter++, qCounter++) { String fieldName = fields.get(fieldCounter); if (fieldName.equals(DimensionsDescriptor.DIMENSION_TIME_BUCKET)) { continue; } Type type = fieldToType.get(fieldName); switch (type) { case BOOLEAN: { ps.setByte(qCounter, (byte) (gpo.getFieldBool(fieldName) ? 1 : 0)); break; } case BYTE: { ps.setByte(qCounter, gpo.getFieldByte(fieldName)); break; } case CHAR: { ps.setString(qCounter, Character.toString(gpo.getFieldChar(fieldName))); break; } case STRING: { ps.setString(qCounter, gpo.getFieldString(fieldName)); break; } case SHORT: { ps.setInt(qCounter, gpo.getFieldShort(fieldName)); break; } case INTEGER: { ps.setInt(qCounter, gpo.getFieldInt(fieldName)); break; } case LONG: { ps.setLong(qCounter, gpo.getFieldLong(fieldName)); break; } case FLOAT: { ps.setFloat(qCounter, gpo.getFieldFloat(fieldName)); break; } case DOUBLE: { ps.setDouble(qCounter, gpo.getFieldDouble(fieldName)); break; } default: { throw new UnsupportedOperationException("The type: " + type + " is not supported."); } } } return qCounter; }