{"record":{"id":"bf95989a2710bbef","repo":"OtterMind/Chat2DB","slug":"invalid-oscar-default-value-defaultvalue","errorCode":null,"errorMessage":"Invalid Oscar default value: ${defaultValue}","messagePattern":"Invalid Oscar default value: (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"chat2db-community-server/chat2db-community-plugins/chat2db-community-oscar/src/main/java/ai/chat2db/plugin/oscar/OscarSqlGuards.java","lineNumber":44,"sourceCode":"            \"NOT\", \"NULL\", \"PRIMARY\", \"REFERENCES\", \"UNIQUE\");\n    private static final Set<String> STATEMENT_KEYWORDS = Set.of(\n            \"ALTER\", \"CREATE\", \"DELETE\", \"DROP\", \"GRANT\", \"INSERT\", \"MERGE\",\n            \"REVOKE\", \"SELECT\", \"TRUNCATE\", \"UPDATE\");\n\n    private OscarSqlGuards() {\n    }\n\n    /**\n     * Validates a raw DEFAULT expression emitted verbatim into DDL (positions where\n     * quoting would change semantics). Accepts numeric literals, single-quoted string\n     * literals (with '' escapes), plain keywords such as SYSDATE/CURRENT_TIMESTAMP,\n     * and simple function calls such as sys_guid() or to_date('2024-01-01','YYYY-MM-DD').\n     * Quoted-literal and function-call shapes are recognized with linear-time scanners\n     * (no regex), so the check cannot be driven into regex backtracking.\n     */\n    public static String requireDefaultValueExpression(String defaultValue) {\n        if (StringUtils.isBlank(defaultValue)) {\n            throw new IllegalArgumentException(\"Invalid Oscar default value: \" + defaultValue);\n        }\n        String value = defaultValue.trim();\n        if (NUMERIC_DEFAULT_PATTERN.matcher(value).matches()\n                || KEYWORD_DEFAULT_PATTERN.matcher(value).matches()\n                || isQuotedStringLiteral(value)\n                || isSimpleFunctionCall(value)) {\n            return value;\n        }\n        throw new IllegalArgumentException(\"Invalid Oscar default value: \" + defaultValue);\n    }\n\n    /**\n     * True when {@code s} is exactly one single-quoted string literal with '' escapes.\n     * Linear scan, no backtracking.\n     */\n    static boolean isQuotedStringLiteral(String s) {\n        return s.length() >= 2 && s.charAt(0) == '\\'' && quotedLiteralEnd(s, 0) == s.length();\n    }","sourceCodeStart":26,"sourceCodeEnd":62,"githubUrl":"https://github.com/OtterMind/Chat2DB/blob/5ee1e990e73fbcae1969dc554be254fedb3ab888/chat2db-community-server/chat2db-community-plugins/chat2db-community-oscar/src/main/java/ai/chat2db/plugin/oscar/OscarSqlGuards.java#L26-L62","documentation":"Error \"Invalid Oscar default value: ${defaultValue}\" thrown in OtterMind/Chat2DB.","triggerScenarios":"An Oscar column definition carried a default value that failed validation.","commonSituations":"See trigger scenarios.","solutions":["Correct the column default value so it is valid for Oscar SQL, or remove the default."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"5ee1e990e73fbcae1969dc554be254fedb3ab888","analyzedAt":"2026-08-14T07:05:03.077Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}