I understand SELECT CURRENT_TIMESTAMP is valid. I just didn't expect SELECT x to be valid. Anyway, thanks for the clarification!
-- Michael Mior mm...@apache.org Le mer. 23 mars 2022 à 14:30, Julian Hyde <jhyde.apa...@gmail.com> a écrit : > SELECT CURRENT_TIMESTAMP > > Is a synactically and semantically valid query (because CURRENT_TIMESTAMP > happens to be a built-in function that doesn’t take parentheses or > arguments). On the other hand > > SELECT x > > Is syntactically valid but semantically invalid (because there is no ‘x’ > in global scope). Lastly, > > SELECT language > > Is syntactically invalid (and gives a different error to ’SELECT x’). The > following patch demonstrates: > > diff --git > a/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java > b/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java > index 0dd79138ea..e45809105a 100644 > --- > a/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java > +++ > b/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java > @@ -8769,6 +8769,14 @@ private static Consumer<List<? extends Throwable>> > checkWarnings( > sql(sql).ok(expected); > } > > + @Test void testLanguage() { > + final String sql = "select x"; > + sql(sql).ok("SELECT `X`"); > + > + final String sql2 = "select language"; > + sql(sql2).ok("SELECT `X`"); > + } > + > @Test void testMatchRecognizePatternSkip5() { > final String sql = "select *\n" > + " from t match_recognize\n" > > > > > > On Mar 23, 2022, at 11:20 AM, Michael Mior <mm...@apache.org> wrote: > > > > I was hinting that there might be a syntax issue caused by a missing part > > of the query. I would not have assumed "SELECT foobar" is a valid query > > both in syntax and semantics. > > -- > > Michael Mior > > mm...@apache.org > > > > > > Le mer. 23 mars 2022 à 14:12, Julian Hyde <jhyde.apa...@gmail.com> a > écrit : > > > >> If there’s nowhere for LANGUAGE to come from that would make it > >> semantically invalid but wouldn’t affect the syntactic validity. (In > other > >> words, you’d get an error from SqlValidator but not from SqlParser.) > >> > >> In this case, the problem is that LANGUAGE is a reserved keyword in both > >> standard SQL and Calcite. > >> > >> Julian > >> > >> > >>> On Mar 23, 2022, at 11:05 AM, Michael Mior <mm...@apache.org> wrote: > >>> > >>> What would you expect this query to return? You haven't specified a > FROM > >>> clause, so there's no indication where "language" should come from. > >>> > >>> -- > >>> Michael Mior > >>> mm...@apache.org > >>> > >>> > >>> Le mer. 23 mars 2022 à 14:02, Adolfo Ochagavía <ado...@ochagavia.nl> a > >>> écrit : > >>> > >>>> Hi there, > >>>> > >>>> I am trying to find my way using Calcite to parse SQL queries, and was > >>>> surprised to find out that parsing the query "SELECT language" fails > >> with > >>>> an exception. > >>>> > >>>> This is the code: > >>>>> var config = SqlParser.Config.DEFAULT.withLex(Lex.MYSQL); > >>>>> var parser = SqlParser.create("SELECT language", config); > >>>>> var parsed = parser.parseQuery(); > >>>> > >>>> This is the exception: > >>>>> org.apache.calcite.sql.parser.SqlParseException: Encountered ". > >>>> language" at line 1, column 18. > >>>>> Was expecting one of: > >>>>> <EOF> > >>>>> "AS" ... > >>>>> [the rest is omitted for brevity, but about 60 more lines follow] > >>>> > >>>> Am I missing something or is this a bug? Note that the query is a > >>>> simplified excerpt of an autoconfiguration query issued by MySQL's > JDBC > >>>> driver and seems to be handled well by MySQL servers. Below I am > pasting > >>>> the full query, in case someone would like to see the original: > >>>>> /* mysql-connector-java-8.0.19 (Revision: > >>>> a0ca826f5cdf51a98356fdfb1bf251eb042f80bf) */SELECT > >>>> @@session.auto_increment_increment AS auto_increment_increment, > >>>> @@character_set_client AS character_set_client, > >>>> @@character_set_connection AS character_set_connection, > >>>> @@character_set_results AS character_set_results, > >>>> @@character_set_server AS character_set_server, @@collation_server AS > >>>> collation_server, @@collation_connection AS collation_connection, > >>>> @@init_connect AS init_connect, @@interactive_timeout AS > >>>> interactive_timeout, @@language AS language, @@license AS license, > >>>> @@lower_case_table_names AS lower_case_table_names, > >>>> @@max_allowed_packet AS max_allowed_packet, @@net_write_timeout AS > >>>> net_write_timeout, @@performance_schema AS performance_schema, > >>>> @@query_cache_size AS query_cache_size, @@query_cache_type AS > >>>> query_cache_type, @@sql_mode AS sql_mode, @@system_time_zone AS > >>>> system_time_zone, @@time_zone AS time_zone, @@tx_isolation AS > >>>> transaction_isolation, @@wait_timeout AS wait_timeout > >>>> > >>>> Thanks for helping out ;) > >>>> Adolfo > >> > >> > >