private static void appendCollationClause(StringBuilder res, Dialect dialect) { if (MySql.ID.equals(dialect.getId())) { res.append(" ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin"); } }
@Override public String generateSqlType(Dialect dialect) { switch (dialect.getId()) { case MsSql.ID: return format("NVARCHAR (%d)", columnSize); case Oracle.ID: return format("VARCHAR2 (%d%s)", columnSize, ignoreOracleUnit ? "" : " CHAR"); default: return format("VARCHAR (%d)", columnSize); } }
private String buildDeleteFromQuery(String tableName, String alias, String whereClause) { String dialectId = getDialect().getId(); if ("mssql".equals(dialectId) || "mysql".equals(dialectId)) { return "delete " + alias + " from " + tableName + " as " + alias + " where " + whereClause; } return "delete from " + tableName + " " + alias + " where " + whereClause; }
public UpdatePermissionTooLongTemplateKeys(Database db, UuidFactory uuidFactory) { super(db); this.uuidFactory = uuidFactory; if (db.getDialect().getId().equals(MsSql.ID)) { lengthFunction = "len"; } else { lengthFunction = "length"; } }
public FixMissingQualityProfilesOnOrganizations(Database db, System2 system2, UuidFactory uuidFactory, Configuration configuration) { super(db); this.system2 = system2; this.uuidFactory = uuidFactory; this.configuration = configuration; if (db.getDialect().getId().equals(MySql.ID) || db.getDialect().getId().equals(MsSql.ID)) { as = " AS "; } else { as = ""; } }
@Override public void start() { if (MySql.ID.equals(database.getDialect().getId())) { throw new IllegalStateException("MySQL is not supported for Data Center Edition. Please connect to a supported database: Oracle, PostgreSQL, Microsoft SQL Server."); } }
private Stream<String> createOracleAutoIncrementStatements() { if (!Oracle.ID.equals(dialect.getId())) { return Stream.empty(); } return pkColumnDefs.stream() .filter(this::isAutoIncrement) .flatMap(columnDef -> of(createSequenceFor(tableName), createOracleTriggerForTable(tableName))); }
private String createTruncateSql(String table) { if (dbClient.getDatabase().getDialect().getId().equals(Oracle.ID)) { // truncate operation is needs to lock the table on Oracle. Unfortunately // it fails sometimes in our QA environment because table is locked. // We never found the root cause (no locks found when displaying them just after // receiving the error). // Workaround is to use "delete" operation. It does not require lock on table. return "DELETE FROM " + table; } return "TRUNCATE TABLE " + table; }
public static DatabaseCommands forDialect(Dialect dialect) { DatabaseCommands command = ImmutableMap.of( org.sonar.db.dialect.H2.ID, H2, MsSql.ID, MSSQL, MySql.ID, MYSQL, Oracle.ID, ORACLE, PostgreSql.ID, POSTGRESQL).get(dialect.getId()); return Preconditions.checkNotNull(command, "Unknown database: " + dialect); }
private Object toBool(boolean guarded) { Dialect dialect = db.database().getDialect(); if (dialect.getId().equals(Oracle.ID)) { return guarded ? 1L : 0L; } return guarded; }
private String selectDual() { String sql = "SELECT 1"; if (Oracle.ID.equals(dbTester.database().getDialect().getId())) { sql = "SELECT 1 FROM DUAL"; } return sql; }
@Override public void execute(Context context) throws SQLException { if (getDialect().getId().equals(MsSql.ID)) { // this should be handled automatically by DropColumnsBuilder dropMssqlConstraints(); } context.execute(new DropColumnsBuilder(getDialect(), TABLE_NAME, COLUMN_NAME).build()); }
public void start() { if (!isDefault && !H2.ID.equals(db.getDialect().getId())) { throw new AssumptionViolatedException("Test disabled because it supports only H2"); } }
@VisibleForTesting void installH2() { Connection connection = null; try (DbSession session = dbClient.openSession(false)) { connection = session.getConnection(); createH2Schema(connection, dbClient.getDatabase().getDialect().getId()); } finally { DbUtils.closeQuietly(connection); } }
@Test public void generateSqlType_thows_IAE_for_unknown_dialect() { Dialect dialect = mock(Dialect.class); when(dialect.getId()).thenReturn("AAA"); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Unsupported dialect id AAA"); underTest.generateSqlType(dialect); }
@Test public void getHandler_throws_IAE_if_unsupported_db() { Dialect unsupportedDialect = mock(Dialect.class); when(unsupportedDialect.getId()).thenReturn("foo"); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Database not supported: foo"); underTest.getHandler(unsupportedDialect); } }
@Test public void generateSqlType_thows_IAE_for_unknown_dialect() { Dialect dialect = mock(Dialect.class); when(dialect.getId()).thenReturn("AAA"); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Unsupported dialect id AAA"); underTest.generateSqlType(dialect); } }
@Before public void disableIfNotH2() { // TODO dbTester.selectFirst() returns keys with different case // depending on target db (lower-case for MySQL but upper-case for H2). // It has to be fixed in order to reactive this test for all dbs. assumeTrue(dbTester.database().getDialect().getId().equals(H2.ID)); }
@Test public void shouldGuessDialectFromUrl() { Settings settings = new MapSettings(); settings.setProperty("sonar.jdbc.url", "jdbc:postgresql://localhost/sonar"); DefaultDatabase database = new DefaultDatabase(logbackHelper, settings); database.initSettings(); assertThat(database.getDialect().getId()).isEqualTo(PostgreSql.ID); }
@Test public void fail_with_UOE_to_generate_sql_type_when_unknown_dialect() { thrown.expect(UnsupportedOperationException.class); thrown.expectMessage("Unknown dialect 'unknown'"); TinyIntColumnDef def = new TinyIntColumnDef.Builder() .setColumnName("foo") .setIsNullable(true) .build(); Dialect dialect = mock(Dialect.class); when(dialect.getId()).thenReturn("unknown"); def.generateSqlType(dialect); } }