linkedin / transport

A framework for writing performant user-defined functions (UDFs) that are portable across a variety of engines including Apache Spark, Apache Hive, and Presto.
BSD 2-Clause "Simplified" License
297 stars 73 forks source link

Trino: Quote reserved keywords in type signatures #114

Closed ljfgem closed 2 years ago

ljfgem commented 2 years ago

This PR is to quote the reserved keywords which might appear as field names in the type signatures, i.e. row(key varchar, values varchar) -> row(key varchar, "values" varchar), if they are not quoted, io.trino.sql.analyzer.TypeSignatureTranslator.parseTypeSignature will throw exception like:

io.trino.sql.parser.ParsingException: line 1:24: mismatched input 'values'. Expecting: <identifier>, <type>
    at io.trino.sql.parser.ErrorHandler.syntaxError(ErrorHandler.java:108)
    at org.antlr.v4.runtime.ProxyErrorListener.syntaxError(ProxyErrorListener.java:41)
    at org.antlr.v4.runtime.Parser.notifyErrorListeners(Parser.java:544)
    at org.antlr.v4.runtime.DefaultErrorStrategy.reportUnwantedToken(DefaultErrorStrategy.java:377)
    at org.antlr.v4.runtime.DefaultErrorStrategy.singleTokenDeletion(DefaultErrorStrategy.java:548)
    at org.antlr.v4.runtime.DefaultErrorStrategy.sync(DefaultErrorStrategy.java:266)
    at io.trino.sql.parser.SqlBaseParser.rowField(SqlBaseParser.java:11435)
    at io.trino.sql.parser.SqlBaseParser.type(SqlBaseParser.java:11103)
    at io.trino.sql.parser.SqlBaseParser.typeParameter(SqlBaseParser.java:11645)
    at io.trino.sql.parser.SqlBaseParser.type(SqlBaseParser.java:11329)
    at io.trino.sql.parser.SqlBaseParser.standaloneType(SqlBaseParser.java:404)
    at io.trino.sql.parser.SqlParser.invokeParser(SqlParser.java:139)
    at io.trino.sql.parser.SqlParser.createType(SqlParser.java:94)
    at io.trino.sql.analyzer.TypeSignatureTranslator.parseTypeSignature(TypeSignatureTranslator.java:98)

Tests:

  1. Unit tests, which will fail without quoting
  2. ./gradlew clean build