From 7b3dbc645e564db8dee06caeec59f39d8cb560cf Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 29 Jan 2021 11:04:55 +0100 Subject: [PATCH] [jOOQ/jOOQ#11333] Add parser support for hash style comments (#) in MariaDB, MySQL --- jOOQ/src/main/java/org/jooq/impl/ParserImpl.java | 15 +++++++++++++-- jOOQ/src/main/java/org/jooq/impl/Tools.java | 4 ++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 807f763331..8a23f89003 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -48,6 +48,10 @@ import static org.jooq.JoinType.JOIN; // ... // ... // ... +import static org.jooq.SQLDialect.MARIADB; +// ... +import static org.jooq.SQLDialect.MYSQL; +// ... // ... // ... // ... @@ -748,6 +752,7 @@ final class ParserContext { + static final Set SUPPORTS_HASH_COMMENT_SYNTAX = SQLDialect.supportedBy(MARIADB, MYSQL); final Queries parse() { List result = new ArrayList<>(); @@ -12397,8 +12402,14 @@ final class ParserContext { break loop; case '-': - if (i + 1 < sql.length && sql[i + 1] == '-') { - i = i + 2; + case '#': + if (sql[i] == '-' && i + 1 < sql.length && sql[i + 1] == '-' || + sql[i] == '#' && SUPPORTS_HASH_COMMENT_SYNTAX.contains(dialect())) { + + if (sql[i] == '-') + i = i + 2; + else + i++; while (i < sql.length) { if (!(ignoreComment = peekIgnoreComment(ignoreComment, ignoreCommentStart, ignoreCommentStop, checkIgnoreComment, i))) { diff --git a/jOOQ/src/main/java/org/jooq/impl/Tools.java b/jOOQ/src/main/java/org/jooq/impl/Tools.java index 2bf4fde63f..27cf89593b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Tools.java +++ b/jOOQ/src/main/java/org/jooq/impl/Tools.java @@ -152,6 +152,7 @@ import static org.jooq.impl.Keywords.K_START_WITH; import static org.jooq.impl.Keywords.K_THEN; import static org.jooq.impl.Keywords.K_THROW; import static org.jooq.impl.Keywords.K_WHEN; +import static org.jooq.impl.ParserContext.SUPPORTS_HASH_COMMENT_SYNTAX; import static org.jooq.impl.SQLDataType.BLOB; import static org.jooq.impl.SQLDataType.CLOB; import static org.jooq.impl.SQLDataType.JSON; @@ -818,7 +819,6 @@ final class Tools { private static final Set NO_SUPPORT_CAST_TYPE_IN_DDL = SQLDialect.supportedBy(MARIADB, MYSQL); private static final Set SUPPORT_NON_BIND_VARIABLE_SUFFIXES = SQLDialect.supportedBy(POSTGRES); private static final Set DEFAULT_BEFORE_NULL = SQLDialect.supportedBy(FIREBIRD, HSQLDB); - private static final Set SUPPORT_MYSQL_SYNTAX = SQLDialect.supportedBy(MARIADB, MYSQL); static final Set NO_SUPPORT_TIMESTAMP_PRECISION = SQLDialect.supportedBy(DERBY); private static final Set DEFAULT_TIMESTAMP_NOT_NULL = SQLDialect.supportedBy(MARIADB); @@ -2325,7 +2325,7 @@ final class Tools { if (render == null) render = new DefaultRenderContext(bind.configuration()); SQLDialect family = render.family(); - boolean mysql = SUPPORT_MYSQL_SYNTAX.contains(render.dialect()); + boolean mysql = SUPPORTS_HASH_COMMENT_SYNTAX.contains(render.dialect()); char[][][] quotes = QUOTES.get(family); // [#3630] Depending on this setting, we need to consider backslashes as escape characters within string literals.