{"record":{"id":"16128a0c2d3b2148","repo":"apache/druid","slug":"s-set-to-true-but-has-been-removed-see-s-for","errorCode":null,"errorMessage":"%s set to 'true', but has been removed, see %s for details for how to migrate to SQL compliant behavior","messagePattern":"(.+?) set to 'true', but has been removed, see (.+?) for details for how to migrate to SQL compliant behavior","errorType":"validation","errorClass":"ISE","httpStatus":null,"severity":"critical","filePath":"processing/src/main/java/org/apache/druid/guice/StartupInjectorBuilder.java","lineNumber":142,"sourceCode":"   */\n  private static final class PropertiesValidator\n  {\n    private final Properties properties;\n\n    @Inject\n    public PropertiesValidator(Properties properties)\n    {\n      this.properties = properties;\n    }\n\n    public void validate()\n    {\n      final boolean defaultValueMode = Boolean.parseBoolean(\n          properties.getProperty(NULL_HANDLING_CONFIG_STRING, \"false\")\n      );\n      if (defaultValueMode) {\n        final String docsLink = StringUtils.format(\"https://druid.apache.org/docs/%s/release-info/migr-ansi-sql-null\", getVersionString());\n        throw new ISE(\n            \"%s set to 'true', but has been removed, see %s for details for how to migrate to SQL compliant behavior\",\n            NULL_HANDLING_CONFIG_STRING,\n            docsLink\n        );\n      }\n\n      final boolean no3vl = !Boolean.parseBoolean(\n          properties.getProperty(THREE_VALUE_LOGIC_CONFIG_STRING, \"true\")\n      );\n      if (no3vl) {\n        final String docsLink = StringUtils.format(\"https://druid.apache.org/docs/%s/release-info/migr-ansi-sql-null\", getVersionString());\n        throw new ISE(\n            \"%s set to 'false', but has been removed, see %s for details for how to migrate to SQL compliant behavior\",\n            THREE_VALUE_LOGIC_CONFIG_STRING,\n            docsLink\n        );\n      }\n","sourceCodeStart":124,"sourceCodeEnd":160,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/processing/src/main/java/org/apache/druid/guice/StartupInjectorBuilder.java#L124-L160","documentation":"The legacy null-handling toggle druid.query.defaultNullValue has been removed from Druid. StartupInjectorBuilder.validate() refuses startup with an ISE if the property is still set to 'true', directing users to the ANSI SQL null-handling migration doc for the version in use.","triggerScenarios":"validate() parses properties.getProperty(NULL_HANDLING_CONFIG_STRING, \"false\") during injector startup; any occurrence of the removed key set to 'true' in runtime properties triggers the throw.","commonSituations":"Upgrading Druid from a pre-ANSI-SQL version to a recent one while keeping old common.runtime.properties; copied config templates that still carry the removed flag.","solutions":["Remove the property (set only valid values or delete the line) from runtime properties","Follow the migration guide at the docs link in the error (release-info/migr-ansi-sql-null) to adapt queries to SQL-compliant NULL behavior","Test queries that relied on the old default-null substitution behavior and adjust them (e.g. COALESCE) before/after upgrading"],"exampleFix":"// before (runtime.properties)\ndruid.query.defaultNullValue=true\n// after\n# property removed entirely","handlingStrategy":"validation","validationCode":"String v = props.getProperty(\"druid.query.defaultNullValue\");\nif (\"true\".equalsIgnoreCase(v)) throw new IllegalStateException(\"Removed config druid.query.defaultNullValue=true; migrate per druid.apache.org docs\");","typeGuard":null,"tryCatchPattern":"try { injector = StartupInjectorBuilder.build(); } catch (ISE e) { if (e.getMessage().contains(\"has been removed\")) log.error(\"Remove legacy null-handling config; see migration doc\"); throw e; }","preventionTips":["Diff runtime.properties against the new version's docs on every upgrade","Delete properties named in 'removed' warnings instead of 'fixing' their values","Read the release-info/migr-ansi-sql-null guide before upgrading across the ANSI-SQL null-handling boundary"],"tags":["configuration","sql","null-handling","migration","startup"],"backgroundTag":"removed-config-option","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}