Skip to content

Commit

Permalink
Merge pull request #3995 from katzyn/comma
Browse files Browse the repository at this point in the history
Disallow trailing comma in select list
  • Loading branch information
katzyn committed Feb 3, 2024
2 parents 9378cfe + 80ef1a6 commit 806cdc5
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 24 deletions.
4 changes: 4 additions & 0 deletions h2/src/docsrc/html/changelog.html
Expand Up @@ -21,6 +21,10 @@ <h1>Change Log</h1>

<h2>Next Version (unreleased)</h2>
<ul>
<li>Issue #3106: Trailing commas in SELECT are accepted by the parser
</li>
<li>PR #3992: Add IPv6 support to H2 Console
</li>
<li>Issue #3966: Unable to insert null into a JSON column
</li>
<li>Issue #3554: Regression in 2.1.214 when joining 2 recursive CTE containing bind values
Expand Down
46 changes: 24 additions & 22 deletions h2/src/main/org/h2/command/Parser.java
Expand Up @@ -2759,34 +2759,36 @@ private void parseSelectExpressions(Select command) {
} else {
readIf(ALL);
}
ArrayList<Expression> expressions = Utils.newSmallArrayList();
do {
if (readIf(ASTERISK)) {
expressions.add(parseWildcard(null, null));
} else {
switch (currentTokenType) {
case FROM:
case WHERE:
case GROUP:
case HAVING:
case WINDOW:
case QUALIFY:
case ORDER:
case OFFSET:
case FETCH:
case CLOSE_PAREN:
case SEMICOLON:
case END_OF_INPUT:
break;
default:
ArrayList<Expression> expressions;
switch (currentTokenType) {
case FROM:
case WHERE:
case GROUP:
case HAVING:
case WINDOW:
case QUALIFY:
case ORDER:
case OFFSET:
case FETCH:
case CLOSE_PAREN:
case SEMICOLON:
case END_OF_INPUT:
expressions = new ArrayList<>();
break;
default:
expressions = Utils.newSmallArrayList();
do {
if (readIf(ASTERISK)) {
expressions.add(parseWildcard(null, null));
} else {
Expression expr = readExpression();
if (readIf(AS) || isIdentifier()) {
expr = new Alias(expr, readIdentifier(), database.getMode().aliasColumnName);
}
expressions.add(expr);
}
}
} while (readIf(COMMA));
} while (readIf(COMMA));
}
command.setExpressions(expressions);
}

Expand Down
2 changes: 1 addition & 1 deletion h2/src/test/org/h2/test/scripts/datatypes/clob.sql
Expand Up @@ -25,7 +25,7 @@ DROP TABLE TEST;
CREATE TABLE TEST(C0 CLOB(10), C1 CLOB(10K), C2 CLOB(10M CHARACTERS), C3 CLOB(10G OCTETS), C4 CLOB(10T), C5 CLOB(10P));
> ok

SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, FROM INFORMATION_SCHEMA.COLUMNS
SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'TEST' ORDER BY ORDINAL_POSITION;
> COLUMN_NAME DATA_TYPE CHARACTER_MAXIMUM_LENGTH
> ----------- ---------------------- ------------------------
Expand Down
Expand Up @@ -3,7 +3,7 @@
-- Initial Developer: H2 Group
--

SELECT HISTOGRAM(X), FROM VALUES (1), (2), (3), (1), (2), (NULL), (5) T(X);
SELECT HISTOGRAM(X) FROM VALUES (1), (2), (3), (1), (2), (NULL), (5) T(X);
>> [ROW (null, 1), ROW (1, 2), ROW (2, 2), ROW (3, 1), ROW (5, 1)]

SELECT HISTOGRAM(X) FILTER (WHERE X > 1) FROM VALUES (1), (2), (3), (1), (2), (NULL), (5) T(X);
Expand Down
3 changes: 3 additions & 0 deletions h2/src/test/org/h2/test/scripts/queries/select.sql
Expand Up @@ -1211,3 +1211,6 @@ where -1 is distinct from -1 or 2 is distinct from x0;

drop table test;
> ok

SELECT X, FROM (VALUES 1) T(X);
> exception SYNTAX_ERROR_2

0 comments on commit 806cdc5

Please sign in to comment.