{"record":{"id":"8fba8525c6bde36a","repo":"provectus/kafka-ui","slug":"invalid-syntax","errorCode":null,"errorMessage":"Invalid syntax: ","messagePattern":"Invalid syntax: ","errorType":"validation","errorClass":"ValidationException","httpStatus":400,"severity":"error","filePath":"kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/ksql/KsqlGrammar.java","lineNumber":54,"sourceCode":"    }\n    return Optional.of(new KsqlStatements(parsed.singleStatement()));\n  }\n\n  static boolean isSelect(KsqlGrammarParser.SingleStatementContext statement) {\n    return statement.statement() instanceof ksql.KsqlGrammarParser.QueryStatementContext;\n  }\n\n  private static ksql.KsqlGrammarParser.StatementsContext parseStatements(final String sql) {\n    var lexer = new KsqlGrammarLexer(CaseInsensitiveStream.from(CharStreams.fromString(sql)));\n    var tokenStream = new CommonTokenStream(lexer);\n    var grammarParser = new ksql.KsqlGrammarParser(tokenStream);\n\n    lexer.addErrorListener(new BaseErrorListener() {\n      @Override\n      public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol,\n                              int line, int charPositionInLine,\n                              String msg, RecognitionException e) {\n        throw new ValidationException(\"Invalid syntax: \" + msg);\n      }\n    });\n    grammarParser.getInterpreter().setPredictionMode(PredictionMode.LL);\n    try {\n      return grammarParser.statements();\n    } catch (Exception e) {\n      throw new ValidationException(\"Error parsing ksql query: \" + e.getMessage());\n    }\n  }\n\n  // impl copied from https://github.com/confluentinc/ksql/blob/master/ksqldb-parser/src/main/java/io/confluent/ksql/parser/CaseInsensitiveStream.java\n  @RequiredArgsConstructor\n  private static class CaseInsensitiveStream implements CharStream {\n    @Delegate\n    final CharStream stream;\n\n    public static CaseInsensitiveStream from(CharStream stream) {\n      // we only need to override LA method","sourceCodeStart":36,"sourceCodeEnd":72,"githubUrl":"https://github.com/provectus/kafka-ui/blob/83b5a60cc08501b570a0c4d0b4cdfceb1b88d6b7/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/ksql/KsqlGrammar.java#L36-L72","documentation":"KsqlGrammar configures an ANTLR lexer/parser with a BaseErrorListener that converts any ANTLR syntaxError callback into a ValidationException('Invalid syntax: <msg>'). It fires during tokenization/parsing of a ksql statement that does not conform to the ksql grammar.","triggerScenarios":"Submitting a ksql query via KsqlServiceV2/parseStatements whose text violates the grammar — typos in keywords, missing semicolons, unsupported statements, malformed identifiers.","commonSituations":"Queries written for a different ksqlDB version with syntax kafka-ui's bundled grammar doesn't accept; plain SQL (not ksql) pasted in; unbalanced quotes/parentheses; copy-paste artifacts.","solutions":["Fix the ksql statement syntax reported by the ANTLR message appended after 'Invalid syntax: '","Test the query in ksqlDB CLI to confirm valid ksql syntax","Check for unsupported statements/keywords in the grammar used by kafka-ui","Verify quoting of identifiers and string literals"],"exampleFix":"// before\nKsqlGrammar.parseStatements(\"SELCT * FROM orders;\")\n// after\nKsqlGrammar.parseStatements(\"SELECT * FROM orders;\");","handlingStrategy":"try-catch","validationCode":"// Basic sanity before sending ksql\nString q = query.trim().toUpperCase();\nif (!(q.startsWith(\"SELECT\") || q.startsWith(\"CREATE\") || q.startsWith(\"INSERT\") || q.startsWith(\"SHOW\") || q.startsWith(\"DESCRIBE\") || q.startsWith(\"DROP\") || q.startsWith(\"PRINT\") || q.startsWith(\"TERMINATE\") || q.startsWith(\"EXPLAIN\") || q.startsWith(\"LIST\"))) {\n  throw new IllegalArgumentException(\"Not a ksql statement\");\n}\nif (!query.trim().endsWith(\";\")) throw new IllegalArgumentException(\"ksql statements must end with ';'\");","typeGuard":null,"tryCatchPattern":"try {\n  Flux<KsqlResponseTable> tables = ksqlService.execute(commandId);\n} catch (ValidationException e) {\n  if (e.getMessage().startsWith(\"Invalid syntax:\")) {\n    log.error(\"ksql syntax error: {}\", e.getMessage().substring(\"Invalid syntax:\".length()));\n  } else { throw e; }\n}","preventionTips":["Validate queries in ksqlDB CLI before embedding them","End every statement with a semicolon","Avoid SQL dialect features not in the ksql grammar","Check keyword spelling and quoting of identifiers"],"tags":["ksql","antlr","syntax","validation"],"backgroundTag":"schema-validation-failed","analyzedSha":"83b5a60cc08501b570a0c4d0b4cdfceb1b88d6b7","analyzedAt":"2026-09-08T04:35:39.002Z","contentChangedAt":"2026-09-08T04:35:39.002Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}