@Test public void drop_columns_on_oracle() { assertThat(new DropColumnsBuilder(new Oracle(), "issues", "date_in_ms", "name").build()) .containsOnly("ALTER TABLE issues SET UNUSED (date_in_ms, name)"); }
@Test public void executes_handler() throws Exception { Oracle dialect = new Oracle(); when(underTest.getHandler(dialect)).thenReturn(handler); when(db.getDialect()).thenReturn(dialect); underTest.check(DatabaseCharsetChecker.State.UPGRADE); verify(handler).handle(any(Connection.class), eq(DatabaseCharsetChecker.State.UPGRADE)); }
@Test public void when_SQ_is_connected_to_Oracle_an_ISE_should_NOT_be_thrown() { when(database.getDialect()).thenReturn(new Oracle()); underTest.start(); }
@Test public void add_columns_on_oracle() { assertThat(createSampleBuilder(new Oracle()).build()) .isEqualTo("ALTER TABLE issues ADD (date_in_ms NUMBER (38) NULL, name VARCHAR2 (10 CHAR) NOT NULL, col_with_default NUMBER(1) DEFAULT 0 NOT NULL, varchar_col_with_default VARCHAR2 (3 CHAR) DEFAULT 'foo' NOT NULL)"); }
@Test public void throws_ISE_if_handler_fails() throws Exception { Oracle dialect = new Oracle(); when(underTest.getHandler(dialect)).thenReturn(handler); when(db.getDialect()).thenReturn(dialect); doThrow(new SQLException("failure")).when(handler).handle(any(Connection.class), any(DatabaseCharsetChecker.State.class)); expectedException.expect(IllegalStateException.class); expectedException.expectMessage("failure"); underTest.check(DatabaseCharsetChecker.State.UPGRADE); }
@Test public void rename_table_on_oracle() { verifySql(new Oracle(), "DROP TRIGGER foo_idt", "RENAME foo TO bar", "RENAME foo_seq TO bar_seq", "CREATE OR REPLACE TRIGGER bar_idt BEFORE INSERT ON bar FOR EACH ROW BEGIN IF :new.id IS null THEN SELECT bar_seq.nextval INTO :new.id FROM dual; END IF; END;"); }
@Test public void when_SQ_is_connected_to_Postgres_an_ISE_should_NOT_be_thrown() { when(database.getDialect()).thenReturn(new Oracle()); underTest.start(); } }
@Test public void start_runs_MigrationEngine_on_Oracle_if_fresh_install() { start_runs_MigrationEngine_for_dialect_if_fresh_install(new Oracle()); }
@Test public void rename_table_on_oracle_when_auto_generated_id_is_false() { verifySqlWhenAutoGeneratedIdIsFalse(new Oracle(), "RENAME foo TO bar"); }
@Test public void getHandler_returns_OracleCharsetHandler_if_oracle() { assertThat(underTest.getHandler(new Oracle())).isInstanceOf(OracleCharsetHandler.class); }
@Test public void generate_sql_type() { TimestampColumnDef def = newTimestampColumnDefBuilder() .setColumnName("created_at") .build(); assertThat(def.generateSqlType(new H2())).isEqualTo("TIMESTAMP"); assertThat(def.generateSqlType(new PostgreSql())).isEqualTo("TIMESTAMP"); assertThat(def.generateSqlType(new MsSql())).isEqualTo("DATETIME"); assertThat(def.generateSqlType(new MySql())).isEqualTo("DATETIME"); assertThat(def.generateSqlType(new Oracle())).isEqualTo("TIMESTAMP (6)"); }
@Test public void update_columns_on_oracle() { assertThat(createSampleBuilder(new Oracle()).build()) .containsOnly( "ALTER TABLE issues MODIFY (value NUMERIC (30,20) NULL)", "ALTER TABLE issues MODIFY (name VARCHAR2 (10 CHAR) NULL)"); }
@Test public void update_not_nullable_column_on_oracle() { assertThat(createNotNullableBuilder(new Oracle()).build()) .containsOnly("ALTER TABLE issues MODIFY (name VARCHAR2 (10 CHAR) NOT NULL)"); }
@Test public void generate_sql_type() { TinyIntColumnDef def = new TinyIntColumnDef.Builder() .setColumnName("foo") .setIsNullable(true) .build(); assertThat(def.generateSqlType(new H2())).isEqualTo("TINYINT"); assertThat(def.generateSqlType(new PostgreSql())).isEqualTo("SMALLINT"); assertThat(def.generateSqlType(new MsSql())).isEqualTo("TINYINT"); assertThat(def.generateSqlType(new MySql())).isEqualTo("TINYINT(2)"); assertThat(def.generateSqlType(new Oracle())).isEqualTo("NUMBER(3)"); }
@Test public void generate_sql_type() { BooleanColumnDef def = new BooleanColumnDef.Builder() .setColumnName("enabled") .setIsNullable(true) .build(); assertThat(def.generateSqlType(new H2())).isEqualTo("BOOLEAN"); assertThat(def.generateSqlType(new PostgreSql())).isEqualTo("BOOLEAN"); assertThat(def.generateSqlType(new MsSql())).isEqualTo("BIT"); assertThat(def.generateSqlType(new MySql())).isEqualTo("TINYINT(1)"); assertThat(def.generateSqlType(new Oracle())).isEqualTo("NUMBER(1)"); }
@Test public void generate_sql_type() { BigIntegerColumnDef def = new BigIntegerColumnDef.Builder() .setColumnName("issues") .setIsNullable(true) .build(); assertThat(def.generateSqlType(new H2())).isEqualTo("BIGINT"); assertThat(def.generateSqlType(new PostgreSql())).isEqualTo("BIGINT"); assertThat(def.generateSqlType(new MsSql())).isEqualTo("BIGINT"); assertThat(def.generateSqlType(new MySql())).isEqualTo("BIGINT"); assertThat(def.generateSqlType(new Oracle())).isEqualTo("NUMBER (38)"); }
@Test public void generate_sql_type() { VarcharColumnDef def = new VarcharColumnDef.Builder() .setColumnName("issues") .setLimit(10) .setIsNullable(true) .build(); assertThat(def.generateSqlType(new H2())).isEqualTo("VARCHAR (10)"); assertThat(def.generateSqlType(new PostgreSql())).isEqualTo("VARCHAR (10)"); assertThat(def.generateSqlType(new MySql())).isEqualTo("VARCHAR (10)"); assertThat(def.generateSqlType(new MsSql())).isEqualTo("NVARCHAR (10)"); assertThat(def.generateSqlType(new Oracle())).isEqualTo("VARCHAR2 (10 CHAR)"); }
@Test public void generateSqlType_does_not_set_unit_on_oracle_if_legacy_mode() { VarcharColumnDef def = new VarcharColumnDef.Builder() .setColumnName("issues") .setLimit(10) .setIsNullable(true) .setIgnoreOracleUnit(true) .build(); assertThat(def.generateSqlType(new Oracle())).isEqualTo("VARCHAR2 (10)"); }
@Test public void index_length_is_not_specified_on_big_varchar_columns_if_not_mysql() { Arrays.<Dialect>asList(new H2(), new MsSql(), new PostgreSql(), new Oracle()) .forEach(dialect -> verifySql(new CreateIndexBuilder(dialect) .setTable("issues") .setName("issues_key") .addColumn(newVarcharColumnDefBuilder().setColumnName("kee").setLimit(4000).build()), "CREATE INDEX issues_key ON issues (kee)")); }
@Test public void drop_index_in_table() { verifySql(new H2(), "DROP INDEX IF EXISTS issues_key"); verifySql(new MsSql(), "DROP INDEX issues_key ON issues"); verifySql(new MySql(), "DROP INDEX issues_key ON issues"); verifySql(new Oracle(), "DROP INDEX issues_key"); verifySql(new PostgreSql(), "DROP INDEX IF EXISTS issues_key"); }