MySQL parser allow from/to keywords to be identifiers

This commit is contained in:
aboyko
2024-12-05 19:21:53 -05:00
parent c583cbcb88
commit f53f1d70d2
3 changed files with 4531 additions and 5329 deletions

View File

@@ -2846,6 +2846,7 @@ keywordsCanBeId
| FLUSH
| FOLLOWS
| FOUND
| FROM
| FULL
| FUNCTION
| GENERAL
@@ -3095,6 +3096,7 @@ keywordsCanBeId
| TEMPORARY
| TEMPTABLE
| THAN
| TO
| TP_CONNECTION_ADMIN
| TRADITIONAL
| TRANSACTION

View File

@@ -109,4 +109,36 @@ public class MySqlSemanticTokensTest {
assertThat(tokens.size()).isEqualTo(20);
}
@Test
void fromIsIdentifierInQuery() {
List<SemanticTokenData> tokens = provider.computeTokens("SELECT inv FROM service WHERE inv.issued_date >= :from AND inv.issued_date <= :to GROUP BY inv.id");
assertThat(tokens.size()).isEqualTo(25);
assertThat(tokens.get(0)).isEqualTo(new SemanticTokenData(0, 6, "keyword", new String[0])); // SELECR
assertThat(tokens.get(1)).isEqualTo(new SemanticTokenData(7, 10, "variable", new String[0])); // inv
assertThat(tokens.get(2)).isEqualTo(new SemanticTokenData(11, 15, "keyword", new String[0])); // FROM
assertThat(tokens.get(3)).isEqualTo(new SemanticTokenData(16, 23, "variable", new String[0])); // service
assertThat(tokens.get(4)).isEqualTo(new SemanticTokenData(24, 29, "keyword", new String[0])); // WHERE
assertThat(tokens.get(5)).isEqualTo(new SemanticTokenData(30, 33, "variable", new String[0])); // inv
assertThat(tokens.get(6)).isEqualTo(new SemanticTokenData(33, 34, "operator", new String[0])); // .
assertThat(tokens.get(7)).isEqualTo(new SemanticTokenData(34, 45, "property", new String[0])); // issued_date
assertThat(tokens.get(8)).isEqualTo(new SemanticTokenData(46, 47, "operator", new String[0])); // >
assertThat(tokens.get(9)).isEqualTo(new SemanticTokenData(47, 48, "operator", new String[0])); // =
assertThat(tokens.get(10)).isEqualTo(new SemanticTokenData(49, 50, "operator", new String[0])); // :
assertThat(tokens.get(11)).isEqualTo(new SemanticTokenData(50, 54, "parameter", new String[0])); // from
assertThat(tokens.get(12)).isEqualTo(new SemanticTokenData(55, 58, "keyword", new String[0])); // AND
assertThat(tokens.get(13)).isEqualTo(new SemanticTokenData(59, 62, "variable", new String[0])); // inv
assertThat(tokens.get(14)).isEqualTo(new SemanticTokenData(62, 63, "operator", new String[0])); // .
assertThat(tokens.get(15)).isEqualTo(new SemanticTokenData(63, 74, "property", new String[0])); // issued_date
assertThat(tokens.get(16)).isEqualTo(new SemanticTokenData(75, 76, "operator", new String[0])); // <
assertThat(tokens.get(17)).isEqualTo(new SemanticTokenData(76, 77, "operator", new String[0])); // =
assertThat(tokens.get(18)).isEqualTo(new SemanticTokenData(78, 79, "operator", new String[0])); // :
assertThat(tokens.get(19)).isEqualTo(new SemanticTokenData(79, 81, "parameter", new String[0])); // to
assertThat(tokens.get(20)).isEqualTo(new SemanticTokenData(82, 87, "keyword", new String[0])); // GROUP
assertThat(tokens.get(21)).isEqualTo(new SemanticTokenData(88, 90, "keyword", new String[0])); // BY
assertThat(tokens.get(22)).isEqualTo(new SemanticTokenData(91, 94, "variable", new String[0])); // inv
assertThat(tokens.get(23)).isEqualTo(new SemanticTokenData(94, 95, "operator", new String[0])); // .
assertThat(tokens.get(24)).isEqualTo(new SemanticTokenData(95, 97, "property", new String[0])); // id
}
}