From 15bd0f2429d73d6156db611d1a4a9797adbb575b Mon Sep 17 00:00:00 2001 From: lukaseder Date: Wed, 31 Jan 2018 23:04:54 +0100 Subject: [PATCH] [#6485] Add support for parsing T-SQL apostrophe-quoted column aliases --- .../main/java/org/jooq/impl/ParserImpl.java | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index a94c4904f0..fd2ad72ef5 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -705,14 +705,7 @@ final class ParserImpl implements Parser { private static final SelectQueryImpl parseSelect(ParserContext ctx, Integer degree) { return parseSelect(ctx, degree, null); } -/* - * QueryPart condition = parseNot(ctx); - while (parseKeywordIf(ctx, "AND")) - condition = toCondition(ctx, condition).and(toCondition(ctx, parseNot(ctx))); - - return condition; - */ private static final SelectQueryImpl parseSelect(ParserContext ctx, Integer degree, WithImpl with) { SelectQueryImpl result = parseQueryExpressionBody(ctx, degree, with); @@ -3254,9 +3247,9 @@ final class ParserImpl implements Parser { Name alias = null; if (parseKeywordIf(ctx, "AS")) - alias = parseIdentifier(ctx); + alias = parseIdentifier(ctx, true); else if (!peekKeyword(ctx, SELECT_KEYWORDS)) - alias = parseIdentifierIf(ctx); + alias = parseIdentifierIf(ctx, true); result.add(alias == null ? field : field.as(alias)); } @@ -5798,7 +5791,11 @@ final class ParserImpl implements Parser { } private static final Name parseIdentifier(ParserContext ctx) { - Name result = parseIdentifierIf(ctx); + return parseIdentifier(ctx, false); + } + + private static final Name parseIdentifier(ParserContext ctx, boolean allowAposQuotes) { + Name result = parseIdentifierIf(ctx, allowAposQuotes); if (result == null) throw ctx.expected("Identifier"); @@ -5807,12 +5804,17 @@ final class ParserImpl implements Parser { } private static final Name parseIdentifierIf(ParserContext ctx) { + return parseIdentifierIf(ctx, false); + } + + private static final Name parseIdentifierIf(ParserContext ctx, boolean allowAposQuotes) { parseWhitespaceIf(ctx); char quoteEnd = parseIf(ctx, '"') ? '"' : parseIf(ctx, '`') ? '`' : parseIf(ctx, '[') ? ']' + : allowAposQuotes && parseIf(ctx, '\'') ? '\'' : 0; int start = ctx.position;