{"record":{"id":"8ccd28732629b14d","repo":"SonarSource/sonarqube","slug":"unknown-dialect-s-8ccd28","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/TinyIntColumnDef.java","lineNumber":51,"sourceCode":" */\n@Immutable\npublic class TinyIntColumnDef extends AbstractColumnDef {\n\n  private TinyIntColumnDef(Builder builder) {\n    super(builder.columnName, builder.isNullable, builder.defaultValue);\n  }\n\n  public static Builder newTinyIntColumnDefBuilder() {\n    return new Builder();\n  }\n\n  @Override\n  public String generateSqlType(Dialect dialect) {\n    return switch (dialect.getId()) {\n      case PostgreSql.ID -> \"SMALLINT\";\n      case Oracle.ID -> \"NUMBER(3)\";\n      case MsSql.ID, H2.ID -> \"TINYINT\";\n      default -> throw new UnsupportedOperationException(String.format(\"Unknown dialect '%s'\", dialect.getId()));\n    };\n  }\n\n  public static class Builder extends AbstractIntegerColumnDefBuilder<Builder> {\n\n    public TinyIntColumnDef build() {\n      validateColumnName(columnName);\n      return new TinyIntColumnDef(this);\n    }\n  }\n\n}\n","sourceCodeStart":33,"sourceCodeEnd":64,"githubUrl":"https://github.com/SonarSource/sonarqube/blob/184c821202192afc1c599fc912d0889b69fffa53/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/def/TinyIntColumnDef.java#L33-L64","documentation":"TinyIntColumnDef.generateSqlType maps dialects to SMALLINT (PostgreSQL), NUMBER(3) (Oracle) or TINYINT (MsSql, H2). Unknown dialect ids throw UnsupportedOperationException \"Unknown dialect '%s'\". As with the other column definitions, only the four supported database engines can be migrated.","triggerScenarios":"Migration DDL generation for a TINYINT column when dialect.getId() is not postgresql, oracle, mssql or h2.","commonSituations":"SonarQube pointed at an unsupported engine like MySQL/MariaDB (where TINYINT would naturally exist); test Dialect stubs with unknown ids; broken dialect resolution from a misconfigured JDBC URL.","solutions":["Switch to a supported database (PostgreSQL, SQL Server, Oracle, H2 dev-only) in sonar.jdbc.url.","Verify dialect detection picks the intended implementation (check driver class and URL pattern).","In tests, use one of the supported Dialect id constants.","Add a case to TinyIntColumnDef.generateSqlType if introducing a new dialect."],"exampleFix":"// before\nsonar.jdbc.url=jdbc:mysql://db:3306/sonar?useSSL=false\n\n// after\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(\"Dialect \" + dialect.getId() + \" not supported for tinyint columns\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  String sql = tinyIntColumnDef.generateSqlType(dialect);\n} catch (UnsupportedOperationException e) {\n  throw new IllegalStateException(\"Switch sonar.jdbc.url to a supported database\", e);\n}","preventionTips":["Use only supported DB engines in production; validate the URL early in deployment scripts.","Keep dialect id constants (not raw strings) in tests to avoid typos.","Add new dialect cases across all column definition classes."],"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"}