[jOOQ/jOOQ#11333] Add parser support for hash style comments (#) in MariaDB, MySQL

This commit is contained in:
Lukas Eder 2021-01-29 11:04:55 +01:00
parent b35d11dfe3
commit 7b3dbc645e
2 changed files with 15 additions and 4 deletions

View File

@ -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<SQLDialect> SUPPORTS_HASH_COMMENT_SYNTAX = SQLDialect.supportedBy(MARIADB, MYSQL);
final Queries parse() {
List<Query> 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))) {

View File

@ -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<SQLDialect> NO_SUPPORT_CAST_TYPE_IN_DDL = SQLDialect.supportedBy(MARIADB, MYSQL);
private static final Set<SQLDialect> SUPPORT_NON_BIND_VARIABLE_SUFFIXES = SQLDialect.supportedBy(POSTGRES);
private static final Set<SQLDialect> DEFAULT_BEFORE_NULL = SQLDialect.supportedBy(FIREBIRD, HSQLDB);
private static final Set<SQLDialect> SUPPORT_MYSQL_SYNTAX = SQLDialect.supportedBy(MARIADB, MYSQL);
static final Set<SQLDialect> NO_SUPPORT_TIMESTAMP_PRECISION = SQLDialect.supportedBy(DERBY);
private static final Set<SQLDialect> 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.