{"record":{"id":"b8afdbcdfecbe78c","repo":"SonarSource/sonarqube","slug":"unsupported-dialect-id-b8afdb","errorCode":null,"errorMessage":"Unsupported dialect id ","messagePattern":"Unsupported dialect id ","errorType":"exception","errorClass":"java.lang.IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/def/TimestampColumnDef.java","lineNumber":55,"sourceCode":"@Immutable\n@Deprecated\npublic class TimestampColumnDef extends AbstractColumnDef {\n\n  private TimestampColumnDef(Builder builder) {\n    super(builder.columnName, builder.isNullable, null);\n  }\n\n  public static Builder newTimestampColumnDefBuilder() {\n    return new Builder();\n  }\n\n  @Override\n  public String generateSqlType(Dialect dialect) {\n    return switch (dialect.getId()) {\n      case MsSql.ID -> \"DATETIME\";\n      case Oracle.ID -> \"TIMESTAMP (6)\";\n      case H2.ID, PostgreSql.ID -> \"TIMESTAMP\";\n      default -> throw new IllegalArgumentException(\"Unsupported dialect id \" + dialect.getId());\n    };\n  }\n\n  public static class Builder {\n    private String columnName;\n    private boolean isNullable = true;\n\n    public Builder setColumnName(String columnName) {\n      this.columnName = validateColumnName(columnName);\n      return this;\n    }\n\n    public Builder setIsNullable(boolean b) {\n      this.isNullable = b;\n      return this;\n    }\n\n    public TimestampColumnDef build() {","sourceCodeStart":37,"sourceCodeEnd":73,"githubUrl":"https://github.com/SonarSource/sonarqube/blob/184c821202192afc1c599fc912d0889b69fffa53/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/def/TimestampColumnDef.java#L37-L73","documentation":"TimestampColumnDef.generateSqlType maps dialects to DATETIME (MsSql), TIMESTAMP (6) (Oracle) or TIMESTAMP (H2/PostgreSQL); unknown dialect ids throw IllegalArgumentException \"Unsupported dialect id \". It prevents generating timestamp DDL for databases SonarQube migrations do not support.","triggerScenarios":"Migration DDL generation for a TIMESTAMP column when dialect.getId() is not mssql, oracle, h2 or postgresql.","commonSituations":"Unsupported DB engine configured (MySQL, etc.); test stubs with unregistered ids; dialect detection returning a bogus id because of a wrong JDBC driver/URL.","solutions":["Point sonar.jdbc.url at a supported database: PostgreSQL, SQL Server, Oracle, or H2 (dev).","Confirm the JDBC driver configuration resolves to the correct Dialect implementation at startup.","Use supported Dialect constants in tests instead of arbitrary ids.","Extend the switch with a new case if adding dialect support."],"exampleFix":"// before\nString type = new TimestampColumnDef.Builder().build().generateSqlType(new FakeDialect(\"db2\"));\n// after\nString type = new TimestampColumnDef.Builder().build().generateSqlType(new PostgreSql()); // \"TIMESTAMP\"","handlingStrategy":"validation","validationCode":"if (!Stream.of(PostgreSql.ID, H2.ID, MsSql.ID, Oracle.ID).anyMatch(id -> id.equals(dialect.getId()))) {\n  throw new IllegalArgumentException(\"Unsupported dialect id \" + dialect.getId());\n}","typeGuard":null,"tryCatchPattern":"try {\n  String sql = timestampColumnDef.generateSqlType(dialect);\n} catch (IllegalArgumentException e) {\n  throw new IllegalStateException(\"Unsupported database engine for migrations\", e);\n}","preventionTips":["Confirm the JDBC driver's URL pattern resolves to a supported Dialect at startup.","Use supported dialect constants in migration unit tests.","Cover all *ColumnDef classes when introducing a new dialect."],"tags":["database","migration","dialect","unsupported","sonarqube"],"backgroundTag":"unsupported-enum-value","analyzedSha":"184c821202192afc1c599fc912d0889b69fffa53","analyzedAt":"2026-09-09T12:23:51.573Z","contentChangedAt":"2026-09-09T12:23:51.573Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}