/** * Returns a {@link com.datastax.driver.core.BatchStatement} with all the alter statements necessary to modify an existing table. * <p> * Note: Columns will only be added or modified, not dropped. * * @param existing the existing table to be modified * @param desired the desired end result * @return a set of statements to modify an existing table */ public static List<AlterTable> alter(TableMetadata existing, CreateTable desired) { List<AlterTable> results = new ArrayList<>(); for (BuiltTableStatement.Column column : desired.getColumns()) { ColumnMetadata columnMetadata = existing.getColumn(column.getName()); if (columnMetadata == null) { results.add(alter(desired.getKeyspace(), desired.getTable()).addColumn(column.getName(), column.getType())); } else if (!columnMetadata.getType().toString().equalsIgnoreCase(column.getType())) { if (columnMetadata.isStatic()) { throw new IllegalArgumentException("A static column cannot have its type modified"); } results.add(alter(desired.getKeyspace(), desired.getTable()).alterColumn(column.getName(), column.getType())); } } return results; }
/** * Returns a {@link com.datastax.driver.core.BatchStatement} with all the alter statements necessary to modify an existing table. * <p> * Note: Columns will only be added or modified, not dropped. * * @param existing the existing table to be modified * @param desired the desired end result * @return a set of statements to modify an existing table */ public static List<AlterTable> alter(AbstractTableMetadata existing, CreateTable desired) { List<AlterTable> results = new ArrayList<>(); for (BuiltTableStatement.Column column : desired.getColumns()) { ColumnMetadata columnMetadata = existing.getColumn(column.getName()); if (columnMetadata == null) { results.add(alter(desired.getKeyspace(), desired.getTable()).addColumn(column.getName(), column.getType())); } else if (!columnMetadata.getType().toString().equalsIgnoreCase(column.getType())) { if (columnMetadata.isStatic()) { throw new IllegalArgumentException("A static column cannot have its type modified"); } results.add(alter(desired.getKeyspace(), desired.getTable()).alterColumn(column.getName(), column.getType())); } } return results; }
/** * Returns a {@link com.datastax.driver.core.BatchStatement} with all the alter statements necessary to modify an existing table. * <p> * Note: Columns will only be added or modified, not dropped. * * @param existing the existing table to be modified * @param desired the desired end result * @return a set of statements to modify an existing table */ public static List<AlterTable> alter(AbstractTableMetadata existing, CreateTable desired) { List<AlterTable> results = new ArrayList<>(); for (BuiltTableStatement.Column column : desired.getColumns()) { ColumnMetadata columnMetadata = existing.getColumn(column.getName()); if (columnMetadata == null) { results.add(alter(desired.getKeyspace(), desired.getTable()).addColumn(column.getName(), column.getType())); } else if (!columnMetadata.getType().toString().equalsIgnoreCase(column.getType())) { if (columnMetadata.isStatic()) { throw new IllegalArgumentException("A static column cannot have its type modified"); } results.add(alter(desired.getKeyspace(), desired.getTable()).alterColumn(column.getName(), column.getType())); } } return results; }
@Test public void testAdd() throws Exception { AlterTable alter = TableBuilder.alter("test_keyspace", "test_table") .addColumn("col1", "text"); String cql = alter.getQueryString(); assertEquals("ALTER TABLE test_keyspace.test_table ADD col1 text", cql); }
@Test public void testRename() throws Exception { AlterTable alter = TableBuilder.alter("test_keyspace", "test_table") .renameColumn("col1", "col2"); String cql = alter.getQueryString(); assertEquals("ALTER TABLE test_keyspace.test_table RENAME col1 TO col2", cql); } }
@Test public void testAlter() throws Exception { AlterTable alter = TableBuilder.alter("test_keyspace", "test_table") .alterColumn("col1", "text"); String cql = alter.getQueryString(); assertEquals("ALTER TABLE test_keyspace.test_table ALTER col1 TYPE text", cql); }
@Test public void testDrop() throws Exception { AlterTable alter = TableBuilder.alter("test_keyspace", "test_table") .dropColumn("col1"); String cql = alter.getQueryString(); assertEquals("ALTER TABLE test_keyspace.test_table DROP col1", cql); }
@Test public void testAlter() throws Exception { CreateTable desired = TableBuilder.create("test_keyspace", "test_table") .column("col1", "text") .column("col2", "bigint") .column("col3", "int") .column("col4", "text") .primaryKey("col1"); List<AlterTable> statements = TableBuilder.alter(existing, desired); assertEquals(3, statements.size()); assertEquals("ALTER TABLE test_keyspace.test_table ALTER col2 TYPE bigint", statements.get(0).toString()); assertEquals("ALTER TABLE test_keyspace.test_table ADD col3 int", statements.get(1).toString()); assertEquals("ALTER TABLE test_keyspace.test_table ADD col4 text", statements.get(2).toString()); }
List<AlterTable> alterStatements = TableBuilder.alter(tableMetadata, createTable);