[PostgreSQL] parser fixes
This commit is contained in:
@@ -643,6 +643,7 @@ TIMEZONE_MINUTE : T I M E Z O N E '_' M I N U T E;
|
||||
TIMING : T I M I N G;
|
||||
TO : T O;
|
||||
TOAST : T O A S T;
|
||||
TOP : T O P;
|
||||
TOP_LEVEL_COUNT : T O P '_' L E V E L '_' C O U N T;
|
||||
TRAILING : T R A I L I N G;
|
||||
TRANSACTION : T R A N S A C T I O N;
|
||||
|
||||
@@ -1323,7 +1323,7 @@ values_stmt
|
||||
;
|
||||
|
||||
selector_clause
|
||||
:(ALL | (DISTINCT (ON expr_list)?))? column_list
|
||||
:(ALL | (DISTINCT (ON expr_list)?) | TOP INTEGER_LITERAL)? column_list
|
||||
;
|
||||
|
||||
from_clause
|
||||
@@ -1477,7 +1477,7 @@ expr
|
||||
) expr
|
||||
| expr (NOT LIKE | LIKE) expr //(STRING_LITERAL_SINGLE_Q | REGEX_STRING)
|
||||
| expr NOT? BETWEEN expr AND expr
|
||||
| expr IN expr
|
||||
| expr (NOT IN | IN) expr
|
||||
| expr op=(LT | GT | EQUAL | LTE | GTE | LT_GT | BANG_EQUAL) expr
|
||||
| expr op=IS (bool_expr | NULL | NOT NULL)
|
||||
| expr IS NOT? DISTINCT FROM expr
|
||||
@@ -1889,7 +1889,7 @@ non_reserved_keyword
|
||||
| SUBCLASS_ORIGIN | SUBMULTISET | SUBSTRING | SUM | SYSID
|
||||
| SYSTEM | SYSTEM_USER | TABLESPACE | TABLE_NAME
|
||||
| TEMP | TEMPLATE | TEMPORARY | TEXT | TIES | TIME
|
||||
| TIMESTAMP | TIMEZONE_HOUR | TIMEZONE_MINUTE | TOP_LEVEL_COUNT | TRANSACTION
|
||||
| TIMESTAMP | TIMEZONE_HOUR | TIMEZONE_MINUTE | TOP | TOP_LEVEL_COUNT | TRANSACTION
|
||||
| TRANSACTIONS_COMMITTED | TRANSACTIONS_ROLLED_BACK | TRANSACTION_ACTIVE | TRANSFORM | TRANSFORMS
|
||||
| TRANSLATE | TRANSLATION | TREAT | TRIGGER | TRIGGER_CATALOG
|
||||
| TRIGGER_NAME | TRIGGER_SCHEMA | TRIM | TRUE | TRUNCATE | TRUSTED
|
||||
@@ -1898,7 +1898,7 @@ non_reserved_keyword
|
||||
| UNTIL | UPDATE | UPPER | USAGE | USER_DEFINED_TYPE_CATALOG
|
||||
| USER_DEFINED_TYPE_CODE | USER_DEFINED_TYPE_NAME | USER_DEFINED_TYPE_SCHEMA | VACUUM | VALID
|
||||
| VALIDATOR | VALUE | VALUES | VARCHAR | VARYING
|
||||
| VAR_POP | VAR_SAMP | VIEW | VOLATILE | WHENEVER
|
||||
| VAR_POP | VAR_SAMP | VERSION | VIEW | VOLATILE | WHENEVER
|
||||
| WHITESPACE | WIDTH_BUCKET | WITHIN | WITHOUT | WORK
|
||||
| WRITE | YEAR | ZONE
|
||||
;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -178,4 +178,34 @@ public class PostgreSqlSemanticTokensTest {
|
||||
assertThat(tokens.get(10)).isEqualTo(new SemanticTokenData(44, 45, "operator", new String[0]));
|
||||
assertThat(tokens.get(11)).isEqualTo(new SemanticTokenData(45, 50, "parameter", new String[0]));
|
||||
}
|
||||
|
||||
@Test
|
||||
void notInInsideWhereClausePredicate() {
|
||||
List<SemanticTokenData> tokens = provider.computeTokens("delete from SAMPLE_TABLE where id not in (select top 1 id from SAMPLE_TABLE order by TABLE_NAME desc)", 0);
|
||||
assertThat(tokens.size()).isEqualTo(19);
|
||||
}
|
||||
|
||||
@Test
|
||||
void keywordAsIdentifier() {
|
||||
List<SemanticTokenData> tokens = provider.computeTokens("SELECT SCHEMA_NAME, TABLE_NAME, VERSION from SAMPLE_TABLE", 0);
|
||||
assertThat(tokens.size()).isEqualTo(8);
|
||||
}
|
||||
|
||||
@Test
|
||||
void topInSelectClause() {
|
||||
List<SemanticTokenData> tokens = provider.computeTokens("select top 1 * from SAMPLE_TABLE where SCHEMA_NAME = ?1", 0);
|
||||
assertThat(tokens.size()).isEqualTo(11);
|
||||
|
||||
assertThat(tokens.get(0)).isEqualTo(new SemanticTokenData(0, 6, "keyword", new String[0]));
|
||||
assertThat(tokens.get(1)).isEqualTo(new SemanticTokenData(7, 10, "keyword", new String[0]));
|
||||
assertThat(tokens.get(2)).isEqualTo(new SemanticTokenData(11, 12, "number", new String[0]));
|
||||
assertThat(tokens.get(3)).isEqualTo(new SemanticTokenData(13, 14, "operator", new String[0]));
|
||||
assertThat(tokens.get(4)).isEqualTo(new SemanticTokenData(15, 19, "keyword", new String[0]));
|
||||
assertThat(tokens.get(5)).isEqualTo(new SemanticTokenData(20, 32, "variable", new String[0]));
|
||||
assertThat(tokens.get(6)).isEqualTo(new SemanticTokenData(33, 38, "keyword", new String[0]));
|
||||
assertThat(tokens.get(7)).isEqualTo(new SemanticTokenData(39, 50, "keyword", new String[0]));
|
||||
assertThat(tokens.get(8)).isEqualTo(new SemanticTokenData(51, 52, "operator", new String[0]));
|
||||
assertThat(tokens.get(9)).isEqualTo(new SemanticTokenData(53, 54, "operator", new String[0]));
|
||||
assertThat(tokens.get(10)).isEqualTo(new SemanticTokenData(54, 55, "parameter", new String[0]));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user