public static GenericRecord jdbcResultSetToGenericRecord()

in spanner-data-validator-java/src/main/java/com/google/migration/Helpers.java [168:246]


  public static GenericRecord jdbcResultSetToGenericRecord(String recordName,
      String schemaAsJson,
      ResultSet jdbcResultSet) throws SQLException {

    // TODO: optimize schema building (maybe pass it in)
    FieldAssembler<Schema> fields = SchemaBuilder
        .record(recordName).namespace("com.google.spannermigration.schemas")
        .fields();

    ResultSetMetaData rsMetaData = jdbcResultSet.getMetaData();
    int colCount = rsMetaData.getColumnCount();
    for(int i = 0; i < colCount; i++) {
      int colOrdinal = i+1;
      String colName = rsMetaData.getColumnName(colOrdinal);
      int type = rsMetaData.getColumnType(colOrdinal);

      // https://docs.oracle.com/javase/8/docs/api/constant-values.html
      // look for (java.sql.Types)
      switch (type) {
        case Types.CHAR:
        case Types.VARCHAR:
        case Types.OTHER:
          fields = fields.name(colName).type().nullable().stringType().noDefault();
          break;
        case Types.BIT:
        case Types.BOOLEAN:
          fields = fields.name(colName).type().nullable().booleanType().noDefault();
          break;
        case Types.INTEGER:
          fields = fields.name(colName).type().nullable().intType().noDefault();
          break;
        case Types.BIGINT:
        case Types.TIMESTAMP:
        case Types.TIME_WITH_TIMEZONE:
          fields = fields.name(colName).type().nullable().longType().noDefault();
          break;
        default:
          LOG.error(String.format("Unsupported type: %d", type));
          throw new RuntimeException(String.format("Unsupported type: %d", type));
      } // switch
    } // for

    Schema schema = fields.endRecord();
    GenericRecord record = new Record(schema);

    for(int i = 0; i < colCount; i++) {
      int colOrdinal = i+1;
      String colName = rsMetaData.getColumnName(colOrdinal);
      int type = rsMetaData.getColumnType(colOrdinal);

      // https://docs.oracle.com/javase/8/docs/api/constant-values.html
      // look for (java.sql.Types)
      switch (type) {
        case Types.CHAR:
        case Types.VARCHAR:
        case Types.OTHER:
          record.put(colName, jdbcResultSet.getString(colOrdinal));
          break;
        case Types.BIT:
        case Types.BOOLEAN:
          record.put(colName, jdbcResultSet.getBoolean(colOrdinal));
          break;
        case Types.INTEGER:
          record.put(colName, jdbcResultSet.getInt(colOrdinal));
          break;
        case Types.BIGINT:
          record.put(colName, jdbcResultSet.getLong(colOrdinal));
        case Types.TIMESTAMP:
        case Types.TIME_WITH_TIMEZONE:
          record.put(colName, jdbcResultSet.getTimestamp(colOrdinal).getTime());
          break;
        default:
          LOG.error(String.format("Unsupported type: %d", type));
          throw new RuntimeException(String.format("Unsupported type: %d", type));
      } // switch
    } // for

    return record;
  }