{"record":{"id":"d4a3f14db9b5e74d","repo":"SonarSource/sonarqube","slug":"unknown-dialect-s","errorCode":null,"errorMessage":"Unknown dialect '%s'","messagePattern":"Unknown dialect '(.+?)'","errorType":"exception","errorClass":"java.lang.UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/def/DecimalColumnDef.java","lineNumber":65,"sourceCode":"  public static Builder newDecimalColumnDefBuilder() {\n    return new Builder();\n  }\n\n  public int getPrecision() {\n    return precision;\n  }\n\n  public int getScale() {\n    return scale;\n  }\n\n  @Override\n  public String generateSqlType(Dialect dialect) {\n    return switch (dialect.getId()) {\n      case PostgreSql.ID, Oracle.ID -> String.format(\"NUMERIC (%s,%s)\", precision, scale);\n      case MsSql.ID -> String.format(\"DECIMAL (%s,%s)\", precision, scale);\n      case H2.ID -> \"DOUBLE\";\n      default -> throw new UnsupportedOperationException(String.format(\"Unknown dialect '%s'\", dialect.getId()));\n    };\n  }\n\n  public static class Builder {\n    @CheckForNull\n    private String columnName;\n    private int precision = DEFAULT_PRECISION;\n    private int scale = DEFAULT_SCALE;\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 isNullable) {\n      this.isNullable = isNullable;\n      return this;","sourceCodeStart":47,"sourceCodeEnd":83,"githubUrl":"https://github.com/SonarSource/sonarqube/blob/184c821202192afc1c599fc912d0889b69fffa53/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/def/DecimalColumnDef.java#L47-L83","documentation":"DecimalColumnDef.generateSqlType maps a migration Dialect to the SQL type string for a DECIMAL/NUMERIC column. It only supports PostgreSQL, Oracle, MsSql and H2; any other dialect id reaches the default branch and throws UnsupportedOperationException \"Unknown dialect '%s'\". This indicates a migration is being run against an unsupported or unknown database dialect.","triggerScenarios":"A database migration generates SQL for a decimal column while dialect.getId() returns an id not in {postgresql, oracle, mssql, h2} — e.g. an unsupported engine or a broken dialect lookup.","commonSituations":"Pointing SonarQube at a database engine it does not support (MySQL, MariaDB, SQLite) via sonar.jdbc.url; a custom/embedded dialect whose id is unrecognized; unit tests passing a stub Dialect with an unregistered id.","solutions":["Switch sonar.jdbc.url to a supported database: PostgreSQL, Microsoft SQL Server, Oracle, or the embedded H2 (dev only).","If you intended a supported DB, verify the dialect detection (sonar.jdbc.driver / URL pattern) so the correct Dialect implementation is resolved.","In tests, use one of the registered Dialect constants (PostgreSql.ID, Oracle.ID, MsSql.ID, H2.ID) instead of a custom id.","If adding a new dialect, add the corresponding case to DecimalColumnDef.generateSqlType."],"exampleFix":"// before (sonar.properties)\nsonar.jdbc.url=jdbc:mysql://db:3306/sonar\n\n// after — supported dialect only\nsonar.jdbc.url=jdbc:postgresql://db:5432/sonarqube","handlingStrategy":"validation","validationCode":"Set<String> supported = Set.of(PostgreSql.ID, Oracle.ID, MsSql.ID, H2.ID);\nif (!supported.contains(dialect.getId())) {\n  throw new IllegalArgumentException(\"DB engine \" + dialect.getId() + \" is not supported by SonarQube\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  String sql = decimalColumnDef.generateSqlType(dialect);\n} catch (UnsupportedOperationException e) {\n  throw new IllegalStateException(\"Configure a supported DB engine (postgres/mssql/oracle/h2)\", e);\n}","preventionTips":["Only use officially supported databases (PostgreSQL, SQL Server, Oracle; H2 for dev).","In tests, always construct Dialects from the supported ID constants.","When adding a dialect, update every *ColumnDef.generateSqlType switch, not just one."],"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"}