@Override public void enterAutoIncrementColumnConstraint(MySqlParser.AutoIncrementColumnConstraintContext ctx) { columnEditor.autoIncremented(true); columnEditor.generated(true); super.enterAutoIncrementColumnConstraint(ctx); }
/** * Returns a {@link ColumnEditor} representing the current record of the given result set of column metadata, if * included in the column whitelist. */ protected Optional<ColumnEditor> readTableColumn(ResultSet columnMetadata, TableId tableId, ColumnNameFilter columnFilter) throws SQLException { final String columnName = columnMetadata.getString(4); if (columnFilter == null || columnFilter.matches(tableId.catalog(), tableId.schema(), tableId.table(), columnName)) { final ColumnEditor column = Column.editor().name(columnName); column.jdbcType(columnMetadata.getInt(5)); column.type(columnMetadata.getString(6)); column.length(columnMetadata.getInt(7)); if (columnMetadata.getObject(9) != null) { column.scale(columnMetadata.getInt(9)); } column.optional(isNullable(columnMetadata.getInt(11))); column.position(columnMetadata.getInt(17)); column.autoIncremented("YES".equalsIgnoreCase(columnMetadata.getString(23))); String autogenerated = null; try { autogenerated = columnMetadata.getString(24); } catch (SQLException e) { // ignore, some drivers don't have this index - e.g. Postgres } column.generated("YES".equalsIgnoreCase(autogenerated)); column.nativeType(resolveNativeType(column.typeName())); return Optional.of(column); } return Optional.empty(); }
/** * Determine the column definitions for the supplied result set and add each column to the specified consumer. * * @param resultSet the query result set; may not be null * @param consumer the consumer of the definitions; may not be null * @throws SQLException if an error occurs while using the result set */ public static void columnsFor(ResultSet resultSet, Consumer<Column> consumer) throws SQLException { ResultSetMetaData metadata = resultSet.getMetaData(); ColumnEditor column = Column.editor(); for (int position = 1; position <= metadata.getColumnCount(); ++position) { String columnLabel = metadata.getColumnLabel(position); column.name(columnLabel != null ? columnLabel : metadata.getColumnName(position)); column.type(metadata.getColumnTypeName(position)); column.jdbcType(metadata.getColumnType(position)); column.length(metadata.getPrecision(position)); column.scale(metadata.getScale(position)); column.optional(isNullable(metadata.isNullable(position))); column.autoIncremented(metadata.isAutoIncrement(position)); column.generated(false); consumer.accept(column.create()); } }
@Override public void enterAlterByChangeDefault(MySqlParser.AlterByChangeDefaultContext ctx) { parser.runIfNotNull(() -> { String columnName = parser.parseName(ctx.uid()); Column column = tableEditor.columnWithName(columnName); if (column != null) { ColumnEditor columnEditor = column.edit(); columnEditor.generated(ctx.DROP() != null); } }, tableEditor); super.enterAlterByChangeDefault(ctx); }
.scale(selectedColumn.scale().orElse(null)) .autoIncremented(selectedColumn.isAutoIncremented()) .generated(selectedColumn.isGenerated()) .optional(selectedColumn.isOptional()).create());
protected void parseIdentityColumnSpec(Marker start, ColumnEditor column) { column.generated(true); column.autoIncremented(true); column.optional(false); tokens.consume("GENERATED"); if (tokens.canConsume("BY")) { tokens.consume("DEFAULT"); } else { tokens.consume("ALWAYS"); if (tokens.canConsume("AS", "(")) { // Consume everything (we don't care what it is) ... tokens.consumeThrough(')', '('); return; } } tokens.consume("AS", "IDENTITY"); if (tokens.canConsume('(')) { // Consume everything (we don't care what it is) ... tokens.consumeThrough(')', '('); } }
.optional(v.getBoolean("optional")) .autoIncremented(v.getBoolean("autoIncremented")) .generated(v.getBoolean("generated"));
protected void createColumnWithAllFieldsSetToNonDefaults() { column = editor.name("price") .type("NUMBER") .jdbcType(Types.DOUBLE) .length(5) .scale(2) .position(4) .optional(true) .autoIncremented(true) .generated(true) .create(); }
@Override public ColumnEditor edit() { final ColumnEditor editor = Column.editor() .name(name()) .type(typeName(), typeExpression()) .jdbcType(jdbcType()) .nativeType(nativeType) .charsetName(charsetName) .length(length()) .scale(scale().orElse(null)) .position(position()) .optional(isOptional()) .autoIncremented(isAutoIncremented()) .generated(isGenerated()); if (hasDefaultValue()) { editor.defaultValue(defaultValue()); } return editor; } }
@Test public void shouldFindGeneratedColumns() { editor.tableId(id); Column c1 = columnEditor.name("C1").type("VARCHAR").jdbcType(Types.VARCHAR).length(10).position(1).create(); Column c2 = columnEditor.name("C2").type("NUMBER").jdbcType(Types.NUMERIC).length(5).generated(true).create(); Column c3 = columnEditor.name("C3").type("DATE").jdbcType(Types.DATE).generated(true).create(); editor.addColumns(c1, c2, c3); editor.setPrimaryKeyNames("C1"); table = editor.create(); assertThat(table.retrieveColumnNames()).containsExactly("C1", "C2", "C3"); table.columns().forEach(col -> { assertThat(table.isGenerated(col.name())).isEqualTo(col.isGenerated()); }); assertValidPositions(editor); }
column.generated(true);
@Before public void beforeEach() { table = Table.editor() .tableId(id) .addColumns(Column.editor().name("C1") .type("VARCHAR").jdbcType(Types.VARCHAR).length(10) .generated(true) .optional(false) .create(), Column.editor().name("C2") .type("NUMBER").jdbcType(Types.NUMERIC).length(5) .optional(false) .create(), Column.editor().name("C3") .type("DATE").jdbcType(Types.DATE).length(4) .optional(true) .create(), Column.editor().name("C4") .type("COUNTER").jdbcType(Types.INTEGER) .autoIncremented(true) .optional(true) .create()) .setPrimaryKeyNames("C1", "C2") .create(); c1 = table.columnWithName("C1"); c2 = table.columnWithName("C2"); c3 = table.columnWithName("C3"); c4 = table.columnWithName("C4"); }
.type("VARCHAR").jdbcType(Types.VARCHAR).length(10) .optional(false) .generated(true) .create(), Column.editor().name("C2")
/** * Returns a {@link ColumnEditor} representing the current record of the given result set of column metadata, if * included in the column whitelist. */ protected Optional<ColumnEditor> readTableColumn(ResultSet columnMetadata, TableId tableId, ColumnNameFilter columnFilter) throws SQLException { final String columnName = columnMetadata.getString(4); if (columnFilter == null || columnFilter.matches(tableId.catalog(), tableId.schema(), tableId.table(), columnName)) { final ColumnEditor column = Column.editor().name(columnName); column.jdbcType(columnMetadata.getInt(5)); column.type(columnMetadata.getString(6)); column.length(columnMetadata.getInt(7)); if (columnMetadata.getObject(9) != null) { column.scale(columnMetadata.getInt(9)); } column.optional(isNullable(columnMetadata.getInt(11))); column.position(columnMetadata.getInt(17)); column.autoIncremented("YES".equalsIgnoreCase(columnMetadata.getString(23))); String autogenerated = null; try { autogenerated = columnMetadata.getString(24); } catch (SQLException e) { // ignore, some drivers don't have this index - e.g. Postgres } column.generated("YES".equalsIgnoreCase(autogenerated)); column.nativeType(resolveNativeType(column.typeName())); return Optional.of(column); } return Optional.empty(); }
/** * Determine the column definitions for the supplied result set and add each column to the specified consumer. * * @param resultSet the query result set; may not be null * @param consumer the consumer of the definitions; may not be null * @throws SQLException if an error occurs while using the result set */ public static void columnsFor(ResultSet resultSet, Consumer<Column> consumer) throws SQLException { ResultSetMetaData metadata = resultSet.getMetaData(); ColumnEditor column = Column.editor(); for (int position = 1; position <= metadata.getColumnCount(); ++position) { String columnLabel = metadata.getColumnLabel(position); column.name(columnLabel != null ? columnLabel : metadata.getColumnName(position)); column.type(metadata.getColumnTypeName(position)); column.jdbcType(metadata.getColumnType(position)); column.length(metadata.getPrecision(position)); column.scale(metadata.getScale(position)); column.optional(isNullable(metadata.isNullable(position))); column.autoIncremented(metadata.isAutoIncrement(position)); column.generated(false); consumer.accept(column.create()); } }
protected void parseIdentityColumnSpec(Marker start, ColumnEditor column) { column.generated(true); column.autoIncremented(true); column.optional(false); tokens.consume("GENERATED"); if (tokens.canConsume("BY")) { tokens.consume("DEFAULT"); } else { tokens.consume("ALWAYS"); if (tokens.canConsume("AS", "(")) { // Consume everything (we don't care what it is) ... tokens.consumeThrough(')', '('); return; } } tokens.consume("AS", "IDENTITY"); if (tokens.canConsume('(')) { // Consume everything (we don't care what it is) ... tokens.consumeThrough(')', '('); } }
.optional(v.getBoolean("optional")) .autoIncremented(v.getBoolean("autoIncremented")) .generated(v.getBoolean("generated"));
@Override public ColumnEditor edit() { final ColumnEditor editor = Column.editor() .name(name()) .type(typeName(), typeExpression()) .jdbcType(jdbcType()) .nativeType(nativeType) .charsetName(charsetName) .length(length()) .scale(scale().orElse(null)) .position(position()) .optional(isOptional()) .autoIncremented(isAutoIncremented()) .generated(isGenerated()); if (hasDefaultValue()) { editor.defaultValue(defaultValue()); } return editor; } }