You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2019/10/11 00:53:21 UTC

[calcite] 01/02: Re-format and re-organize config.fmpp files that customize the SQL parser

This is an automated email from the ASF dual-hosted git repository.

jhyde pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git

commit 05a086bc6b453baa5d761c6198d496ffe361aafe
Author: Julian Hyde <jh...@apache.org>
AuthorDate: Wed Oct 9 16:16:44 2019 -0700

    Re-format and re-organize config.fmpp files that customize the SQL parser
    
    Re-indent, standardizing on indent 2 so that we can easily diff the
    (almost identical) files in core, core/test, babel, server.
    
    Also remove trailing commas, and sort lists.
    
    Add two new lists, nonReservedKeywordsToAdd and nonReservedKeywordsToRemove,
    to allow sub-projects to add and remove keywords without chaning the list
    inherited from core.
---
 babel/src/main/codegen/config.fmpp        | 1711 +++++++++++++++--------------
 core/src/main/codegen/config.fmpp         |  616 ++++++-----
 core/src/main/codegen/templates/Parser.jj |    6 +-
 core/src/test/codegen/config.fmpp         |  761 ++++++-------
 server/src/main/codegen/config.fmpp       |  812 +++++++-------
 5 files changed, 1975 insertions(+), 1931 deletions(-)

diff --git a/babel/src/main/codegen/config.fmpp b/babel/src/main/codegen/config.fmpp
index baa88fb..c120557 100644
--- a/babel/src/main/codegen/config.fmpp
+++ b/babel/src/main/codegen/config.fmpp
@@ -14,875 +14,884 @@
 # limitations under the License.
 
 data: {
-    parser: {
-      # Generated parser implementation class package and name
-      package: "org.apache.calcite.sql.parser.babel",
-      class: "SqlBabelParserImpl",
+  parser: {
+    # Generated parser implementation class package and name
+    package: "org.apache.calcite.sql.parser.babel",
+    class: "SqlBabelParserImpl",
 
-      # List of import statements.
-      imports: [
-      ]
+    # List of import statements.
+    imports: [
+    ]
 
-      # List of keywords.
-      keywords: [
-        "SEMI"
-      ]
+    # List of keywords.
+    keywords: [
+      "SEMI"
+    ]
 
-      # List of keywords from "keywords" section that are not reserved.
-      nonReservedKeywords: [
-        "A"
-        "ABSENT"
-        "ABSOLUTE"
-        "ACTION"
-        "ADA"
-        "ADD"
-        "ADMIN"
-        "AFTER"
-        "ALWAYS"
-        "APPLY"
-        "ASC"
-        "ASSERTION"
-        "ASSIGNMENT"
-        "ATTRIBUTE"
-        "ATTRIBUTES"
-        "BEFORE"
-        "BERNOULLI"
-        "BREADTH"
-        "C"
-        "CASCADE"
-        "CATALOG"
-        "CATALOG_NAME"
-        "CENTURY"
-        "CHAIN"
-        "CHARACTER_SET_CATALOG"
-        "CHARACTER_SET_NAME"
-        "CHARACTER_SET_SCHEMA"
-        "CHARACTERISTICS"
-        "CHARACTERS"
-        "CLASS_ORIGIN"
-        "COBOL"
-        "COLLATION"
-        "COLLATION_CATALOG"
-        "COLLATION_NAME"
-        "COLLATION_SCHEMA"
-        "COLUMN_NAME"
-        "COMMAND_FUNCTION"
-        "COMMAND_FUNCTION_CODE"
-        "COMMITTED"
-        "CONDITION_NUMBER"
-        "CONDITIONAL"
-        "CONNECTION"
-        "CONNECTION_NAME"
-        "CONSTRAINT_CATALOG"
-        "CONSTRAINT_NAME"
-        "CONSTRAINT_SCHEMA"
-        "CONSTRAINTS"
-        "CONSTRUCTOR"
-        "CONTINUE"
-        "CURSOR_NAME"
-        "DATA"
-        "DATABASE"
-        "DATETIME_INTERVAL_CODE"
-        "DATETIME_INTERVAL_PRECISION"
-        "DECADE"
-        "DEFAULTS"
-        "DEFERRABLE"
-        "DEFERRED"
-        "DEFINED"
-        "DEFINER"
-        "DEGREE"
-        "DEPTH"
-        "DERIVED"
-        "DESC"
-        "DESCRIPTION"
-        "DESCRIPTOR"
-        "DIAGNOSTICS"
-        "DISPATCH"
-        "DOMAIN"
-        "DOW"
-        "DOY"
-        "DYNAMIC_FUNCTION"
-        "DYNAMIC_FUNCTION_CODE"
-        "ENCODING"
-        "EPOCH"
-        "ERROR"
-        "EXCEPTION"
-        "EXCLUDE"
-        "EXCLUDING"
-        "FINAL"
-        "FIRST"
-        "FOLLOWING"
-        "FORMAT"
-        "FORTRAN"
-        "FOUND"
-        "FRAC_SECOND"
-        "G"
-        "GENERAL"
-        "GENERATED"
-        "GEOMETRY"
-        "GO"
-        "GOTO"
-        "GRANTED"
-        "HIERARCHY"
-        "IGNORE"
-        "IMMEDIATE"
-        "IMMEDIATELY"
-        "IMPLEMENTATION"
-        "INCLUDING"
-        "INCREMENT"
-        "INITIALLY"
-        "INPUT"
-        "INSTANCE"
-        "INSTANTIABLE"
-        "INVOKER"
-        "ISODOW"
-        "ISOYEAR"
-        "ISOLATION"
-        "JAVA"
-        "JSON"
-        "K"
-        "KEY"
-        "KEY_MEMBER"
-        "KEY_TYPE"
-        "LABEL"
-        "LAST"
-        "LENGTH"
-        "LEVEL"
-        "LIBRARY"
-        "LOCATOR"
-        "M"
-        "MAP"
-        "MATCHED"
-        "MAXVALUE"
-        "MICROSECOND"
-        "MESSAGE_LENGTH"
-        "MESSAGE_OCTET_LENGTH"
-        "MESSAGE_TEXT"
-        "MILLISECOND"
-        "MILLENNIUM"
-        "MINVALUE"
-        "MORE_"
-        "MUMPS"
-        "NAME"
-        "NAMES"
-        "NANOSECOND"
-        "NESTING"
-        "NORMALIZED"
-        "NULLABLE"
-        "NULLS"
-        "NUMBER"
-        "OBJECT"
-        "OCTETS"
-        "OPTION"
-        "OPTIONS"
-        "ORDERING"
-        "ORDINALITY"
-        "OTHERS"
-        "OUTPUT"
-        "OVERRIDING"
-        "PAD"
-        "PARAMETER_MODE"
-        "PARAMETER_NAME"
-        "PARAMETER_ORDINAL_POSITION"
-        "PARAMETER_SPECIFIC_CATALOG"
-        "PARAMETER_SPECIFIC_NAME"
-        "PARAMETER_SPECIFIC_SCHEMA"
-        "PARTIAL"
-        "PASCAL"
-        "PASSING"
-        "PASSTHROUGH"
-        "PAST"
-        "PATH"
-        "PLACING"
-        "PLAN"
-        "PLI"
-        "PRECEDING"
-        "PRESERVE"
-        "PRIOR"
-        "PRIVILEGES"
-        "PUBLIC"
-        "QUARTER"
-        "READ"
-        "RELATIVE"
-        "REPEATABLE"
-        "REPLACE"
-        "RESPECT"
-        "RESTART"
-        "RESTRICT"
-        "RETURNED_CARDINALITY"
-        "RETURNED_LENGTH"
-        "RETURNED_OCTET_LENGTH"
-        "RETURNED_SQLSTATE"
-        "RETURNING"
-        "ROLE"
-        "ROUTINE"
-        "ROUTINE_CATALOG"
-        "ROUTINE_NAME"
-        "ROUTINE_SCHEMA"
-        "ROW_COUNT"
-        "SCALAR"
-        "SCALE"
-        "SCHEMA"
-        "SCHEMA_NAME"
-        "SCOPE_CATALOGS"
-        "SCOPE_NAME"
-        "SCOPE_SCHEMA"
-        "SECTION"
-        "SECURITY"
-        "SELF"
-        "SEQUENCE"
-        "SERIALIZABLE"
-        "SERVER"
-        "SERVER_NAME"
-        "SESSION"
-        "SETS"
-        "SIMPLE"
-        "SIZE"
-        "SOURCE"
-        "SPACE"
-        "SPECIFIC_NAME"
-        "SQL_BIGINT"
-        "SQL_BINARY"
-        "SQL_BIT"
-        "SQL_BLOB"
-        "SQL_BOOLEAN"
-        "SQL_CHAR"
-        "SQL_CLOB"
-        "SQL_DATE"
-        "SQL_DECIMAL"
-        "SQL_DOUBLE"
-        "SQL_FLOAT"
-        "SQL_INTEGER"
-        "SQL_INTERVAL_DAY"
-        "SQL_INTERVAL_DAY_TO_HOUR"
-        "SQL_INTERVAL_DAY_TO_MINUTE"
-        "SQL_INTERVAL_DAY_TO_SECOND"
-        "SQL_INTERVAL_HOUR"
-        "SQL_INTERVAL_HOUR_TO_MINUTE"
-        "SQL_INTERVAL_HOUR_TO_SECOND"
-        "SQL_INTERVAL_MINUTE"
-        "SQL_INTERVAL_MINUTE_TO_SECOND"
-        "SQL_INTERVAL_MONTH"
-        "SQL_INTERVAL_SECOND"
-        "SQL_INTERVAL_YEAR"
-        "SQL_INTERVAL_YEAR_TO_MONTH"
-        "SQL_LONGVARBINARY"
-        "SQL_LONGVARNCHAR"
-        "SQL_LONGVARCHAR"
-        "SQL_NCHAR"
-        "SQL_NCLOB"
-        "SQL_NUMERIC"
-        "SQL_NVARCHAR"
-        "SQL_REAL"
-        "SQL_SMALLINT"
-        "SQL_TIME"
-        "SQL_TIMESTAMP"
-        "SQL_TINYINT"
-        "SQL_TSI_DAY"
-        "SQL_TSI_FRAC_SECOND"
-        "SQL_TSI_HOUR"
-        "SQL_TSI_MICROSECOND"
-        "SQL_TSI_MINUTE"
-        "SQL_TSI_MONTH"
-        "SQL_TSI_QUARTER"
-        "SQL_TSI_SECOND"
-        "SQL_TSI_WEEK"
-        "SQL_TSI_YEAR"
-        "SQL_VARBINARY"
-        "SQL_VARCHAR"
-        "STATE"
-        "STATEMENT"
-        "STRUCTURE"
-        "STYLE"
-        "SUBCLASS_ORIGIN"
-        "SUBSTITUTE"
-        "TABLE_NAME"
-        "TEMPORARY"
-        "TIES"
-        "TIMESTAMPADD"
-        "TIMESTAMPDIFF"
-        "TOP_LEVEL_COUNT"
-        "TRANSACTION"
-        "TRANSACTIONS_ACTIVE"
-        "TRANSACTIONS_COMMITTED"
-        "TRANSACTIONS_ROLLED_BACK"
-        "TRANSFORM"
-        "TRANSFORMS"
-        "TRIGGER_CATALOG"
-        "TRIGGER_NAME"
-        "TRIGGER_SCHEMA"
-        "TYPE"
-        "UNBOUNDED"
-        "UNCOMMITTED"
-        "UNCONDITIONAL"
-        "UNDER"
-        "UNNAMED"
-        "USAGE"
-        "USER_DEFINED_TYPE_CATALOG"
-        "USER_DEFINED_TYPE_CODE"
-        "USER_DEFINED_TYPE_NAME"
-        "USER_DEFINED_TYPE_SCHEMA"
-        "UTF8"
-        "UTF16"
-        "UTF32"
-        "VERSION"
-        "VIEW"
-        "WEEK"
-        "WRAPPER"
-        "WORK"
-        "WRITE"
-        "XML"
-        "ZONE"
+    # List of keywords from "keywords" section that are not reserved.
+    nonReservedKeywords: [
+      "A"
+      "ABSENT"
+      "ABSOLUTE"
+      "ACTION"
+      "ADA"
+      "ADD"
+      "ADMIN"
+      "AFTER"
+      "ALWAYS"
+      "APPLY"
+      "ASC"
+      "ASSERTION"
+      "ASSIGNMENT"
+      "ATTRIBUTE"
+      "ATTRIBUTES"
+      "BEFORE"
+      "BERNOULLI"
+      "BREADTH"
+      "C"
+      "CASCADE"
+      "CATALOG"
+      "CATALOG_NAME"
+      "CENTURY"
+      "CHAIN"
+      "CHARACTERISTICS"
+      "CHARACTERS"
+      "CHARACTER_SET_CATALOG"
+      "CHARACTER_SET_NAME"
+      "CHARACTER_SET_SCHEMA"
+      "CLASS_ORIGIN"
+      "COBOL"
+      "COLLATION"
+      "COLLATION_CATALOG"
+      "COLLATION_NAME"
+      "COLLATION_SCHEMA"
+      "COLUMN_NAME"
+      "COMMAND_FUNCTION"
+      "COMMAND_FUNCTION_CODE"
+      "COMMITTED"
+      "CONDITIONAL"
+      "CONDITION_NUMBER"
+      "CONNECTION"
+      "CONNECTION_NAME"
+      "CONSTRAINT_CATALOG"
+      "CONSTRAINT_NAME"
+      "CONSTRAINTS"
+      "CONSTRAINT_SCHEMA"
+      "CONSTRUCTOR"
+      "CONTINUE"
+      "CURSOR_NAME"
+      "DATA"
+      "DATABASE"
+      "DATETIME_INTERVAL_CODE"
+      "DATETIME_INTERVAL_PRECISION"
+      "DECADE"
+      "DEFAULTS"
+      "DEFERRABLE"
+      "DEFERRED"
+      "DEFINED"
+      "DEFINER"
+      "DEGREE"
+      "DEPTH"
+      "DERIVED"
+      "DESC"
+      "DESCRIPTION"
+      "DESCRIPTOR"
+      "DIAGNOSTICS"
+      "DISPATCH"
+      "DOMAIN"
+      "DOW"
+      "DOY"
+      "DYNAMIC_FUNCTION"
+      "DYNAMIC_FUNCTION_CODE"
+      "ENCODING"
+      "EPOCH"
+      "ERROR"
+      "EXCEPTION"
+      "EXCLUDE"
+      "EXCLUDING"
+      "FINAL"
+      "FIRST"
+      "FOLLOWING"
+      "FORMAT"
+      "FORTRAN"
+      "FOUND"
+      "FRAC_SECOND"
+      "G"
+      "GENERAL"
+      "GENERATED"
+      "GEOMETRY"
+      "GO"
+      "GOTO"
+      "GRANTED"
+      "HIERARCHY"
+      "IGNORE"
+      "IMMEDIATE"
+      "IMMEDIATELY"
+      "IMPLEMENTATION"
+      "INCLUDING"
+      "INCREMENT"
+      "INITIALLY"
+      "INPUT"
+      "INSTANCE"
+      "INSTANTIABLE"
+      "INVOKER"
+      "ISODOW"
+      "ISOLATION"
+      "ISOYEAR"
+      "JAVA"
+      "JSON"
+      "K"
+      "KEY"
+      "KEY_MEMBER"
+      "KEY_TYPE"
+      "LABEL"
+      "LAST"
+      "LENGTH"
+      "LEVEL"
+      "LIBRARY"
+      "LOCATOR"
+      "M"
+      "MAP"
+      "MATCHED"
+      "MAXVALUE"
+      "MESSAGE_LENGTH"
+      "MESSAGE_OCTET_LENGTH"
+      "MESSAGE_TEXT"
+      "MICROSECOND"
+      "MILLENNIUM"
+      "MILLISECOND"
+      "MINVALUE"
+      "MORE_"
+      "MUMPS"
+      "NAME"
+      "NAMES"
+      "NANOSECOND"
+      "NESTING"
+      "NORMALIZED"
+      "NULLABLE"
+      "NULLS"
+      "NUMBER"
+      "OBJECT"
+      "OCTETS"
+      "OPTION"
+      "OPTIONS"
+      "ORDERING"
+      "ORDINALITY"
+      "OTHERS"
+      "OUTPUT"
+      "OVERRIDING"
+      "PAD"
+      "PARAMETER_MODE"
+      "PARAMETER_NAME"
+      "PARAMETER_ORDINAL_POSITION"
+      "PARAMETER_SPECIFIC_CATALOG"
+      "PARAMETER_SPECIFIC_NAME"
+      "PARAMETER_SPECIFIC_SCHEMA"
+      "PARTIAL"
+      "PASCAL"
+      "PASSING"
+      "PASSTHROUGH"
+      "PAST"
+      "PATH"
+      "PLACING"
+      "PLAN"
+      "PLI"
+      "PRECEDING"
+      "PRESERVE"
+      "PRIOR"
+      "PRIVILEGES"
+      "PUBLIC"
+      "QUARTER"
+      "READ"
+      "RELATIVE"
+      "REPEATABLE"
+      "REPLACE"
+      "RESPECT"
+      "RESTART"
+      "RESTRICT"
+      "RETURNED_CARDINALITY"
+      "RETURNED_LENGTH"
+      "RETURNED_OCTET_LENGTH"
+      "RETURNED_SQLSTATE"
+      "RETURNING"
+      "ROLE"
+      "ROUTINE"
+      "ROUTINE_CATALOG"
+      "ROUTINE_NAME"
+      "ROUTINE_SCHEMA"
+      "ROW_COUNT"
+      "SCALAR"
+      "SCALE"
+      "SCHEMA"
+      "SCHEMA_NAME"
+      "SCOPE_CATALOGS"
+      "SCOPE_NAME"
+      "SCOPE_SCHEMA"
+      "SECTION"
+      "SECURITY"
+      "SELF"
+      "SEQUENCE"
+      "SERIALIZABLE"
+      "SERVER"
+      "SERVER_NAME"
+      "SESSION"
+      "SETS"
+      "SIMPLE"
+      "SIZE"
+      "SOURCE"
+      "SPACE"
+      "SPECIFIC_NAME"
+      "SQL_BIGINT"
+      "SQL_BINARY"
+      "SQL_BIT"
+      "SQL_BLOB"
+      "SQL_BOOLEAN"
+      "SQL_CHAR"
+      "SQL_CLOB"
+      "SQL_DATE"
+      "SQL_DECIMAL"
+      "SQL_DOUBLE"
+      "SQL_FLOAT"
+      "SQL_INTEGER"
+      "SQL_INTERVAL_DAY"
+      "SQL_INTERVAL_DAY_TO_HOUR"
+      "SQL_INTERVAL_DAY_TO_MINUTE"
+      "SQL_INTERVAL_DAY_TO_SECOND"
+      "SQL_INTERVAL_HOUR"
+      "SQL_INTERVAL_HOUR_TO_MINUTE"
+      "SQL_INTERVAL_HOUR_TO_SECOND"
+      "SQL_INTERVAL_MINUTE"
+      "SQL_INTERVAL_MINUTE_TO_SECOND"
+      "SQL_INTERVAL_MONTH"
+      "SQL_INTERVAL_SECOND"
+      "SQL_INTERVAL_YEAR"
+      "SQL_INTERVAL_YEAR_TO_MONTH"
+      "SQL_LONGVARBINARY"
+      "SQL_LONGVARCHAR"
+      "SQL_LONGVARNCHAR"
+      "SQL_NCHAR"
+      "SQL_NCLOB"
+      "SQL_NUMERIC"
+      "SQL_NVARCHAR"
+      "SQL_REAL"
+      "SQL_SMALLINT"
+      "SQL_TIME"
+      "SQL_TIMESTAMP"
+      "SQL_TINYINT"
+      "SQL_TSI_DAY"
+      "SQL_TSI_FRAC_SECOND"
+      "SQL_TSI_HOUR"
+      "SQL_TSI_MICROSECOND"
+      "SQL_TSI_MINUTE"
+      "SQL_TSI_MONTH"
+      "SQL_TSI_QUARTER"
+      "SQL_TSI_SECOND"
+      "SQL_TSI_WEEK"
+      "SQL_TSI_YEAR"
+      "SQL_VARBINARY"
+      "SQL_VARCHAR"
+      "STATE"
+      "STATEMENT"
+      "STRUCTURE"
+      "STYLE"
+      "SUBCLASS_ORIGIN"
+      "SUBSTITUTE"
+      "TABLE_NAME"
+      "TEMPORARY"
+      "TIES"
+      "TIMESTAMPADD"
+      "TIMESTAMPDIFF"
+      "TOP_LEVEL_COUNT"
+      "TRANSACTION"
+      "TRANSACTIONS_ACTIVE"
+      "TRANSACTIONS_COMMITTED"
+      "TRANSACTIONS_ROLLED_BACK"
+      "TRANSFORM"
+      "TRANSFORMS"
+      "TRIGGER_CATALOG"
+      "TRIGGER_NAME"
+      "TRIGGER_SCHEMA"
+      "TYPE"
+      "UNBOUNDED"
+      "UNCOMMITTED"
+      "UNCONDITIONAL"
+      "UNDER"
+      "UNNAMED"
+      "USAGE"
+      "USER_DEFINED_TYPE_CATALOG"
+      "USER_DEFINED_TYPE_CODE"
+      "USER_DEFINED_TYPE_NAME"
+      "USER_DEFINED_TYPE_SCHEMA"
+      "UTF16"
+      "UTF32"
+      "UTF8"
+      "VERSION"
+      "VIEW"
+      "WEEK"
+      "WORK"
+      "WRAPPER"
+      "WRITE"
+      "XML"
+      "ZONE"
+    ]
 
-        # not in core, added in babel
-        "SEMI",
+    # List of non-reserved keywords to remove;
+    # items in this list become reserved
+    nonReservedKeywordsToRemove: [
+    ]
 
-        # The following keywords are reserved in core Calcite,
-        # are reserved in some version of SQL,
-        # but are not reserved in Babel.
-        #
-        # Words that are commented out (e.g. "AND") are still reserved.
-        # These are the most important reserved words, and SQL cannot be
-        # unambiguously parsed if they are not reserved. For example, if
-        # "INNER" is not reserved then in the query
-        #
-        #   select * from emp inner join dept using (deptno)"
-        #
-        # "inner" could be a table alias for "emp".
-        #
-        "ABS",
-        "ABSOLUTE",
-        "ACTION",
-        "ADD",
-        "AFTER",
-        "ALL",
-        "ALLOCATE",
-        "ALLOW",
-        "ALTER",
-        "AND",
-#       "ANY",
-        "ARE",
-        "ARRAY",
-#       "ARRAY_AGG", # not a keyword in Calcite
-        "ARRAY_MAX_CARDINALITY",
-        "AS",
-        "ASC",
-        "ASENSITIVE",
-        "ASSERTION",
-        "ASYMMETRIC",
-        "AT",
-        "ATOMIC",
-        "AUTHORIZATION",
-        "AVG",
-        "BEFORE",
-        "BEGIN",
-        "BEGIN_FRAME",
-        "BEGIN_PARTITION",
-        "BETWEEN",
-        "BIGINT",
-        "BINARY",
-        "BIT",
-#       "BIT_LENGTH", # not a keyword in Calcite
-        "BLOB",
-        "BOOLEAN",
-        "BOTH",
-        "BREADTH",
-        "BY",
-#       "CALL",
-        "CALLED",
-        "CARDINALITY",
-        "CASCADE",
-        "CASCADED",
-#       "CASE",
-        "CAST",
-        "CATALOG",
-        "CEIL",
-        "CEILING",
-        "CHAR",
-        "CHARACTER",
-        "CHARACTER_LENGTH",
-        "CHAR_LENGTH",
-        "CHECK",
-        "CLASSIFIER",
-        "CLOB",
-        "CLOSE",
-        "COALESCE",
-        "COLLATE",
-        "COLLATION",
-        "COLLECT",
-        "COLUMN",
-        "COMMIT",
-        "CONDITION",
-        "CONNECT",
-        "CONNECTION",
-        "CONSTRAINT",
-        "CONSTRAINTS",
-        "CONSTRUCTOR",
-        "CONTAINS",
-        "CONTINUE",
-        "CONVERT",
-        "CORR",
-        "CORRESPONDING",
-        "COUNT",
-        "COVAR_POP",
-        "COVAR_SAMP",
-#       "CREATE",
-#       "CROSS",
-        "CUBE",
-        "CUME_DIST",
-#       "CURRENT",
-        "CURRENT_CATALOG",
-        "CURRENT_DATE",
-        "CURRENT_DEFAULT_TRANSFORM_GROUP",
-        "CURRENT_PATH",
-        "CURRENT_ROLE",
-        "CURRENT_ROW",
-        "CURRENT_SCHEMA",
-        "CURRENT_TIME",
-        "CURRENT_TIMESTAMP",
-        "CURRENT_TRANSFORM_GROUP_FOR_TYPE",
-        "CURRENT_USER",
-#       "CURSOR",
-        "CYCLE",
-        "DATA",
-#       "DATE",
-        "DAY",
-#       "DAYS", # not a keyword in Calcite
-        "DEALLOCATE",
-        "DEC",
-        "DECIMAL",
-        "DECLARE",
-#       "DEFAULT",
-        "DEFERRABLE",
-        "DEFERRED",
-#       "DEFINE",
-#       "DELETE",
-        "DENSE_RANK",
-        "DEPTH",
-        "DEREF",
-        "DESC",
-#       "DESCRIBE", # must be reserved
-        "DESCRIPTOR",
-        "DETERMINISTIC",
-        "DIAGNOSTICS",
-        "DISALLOW",
-        "DISCONNECT",
-#       "DISTINCT",
-#       "DO",  # not a keyword in Calcite
-        "DOMAIN",
-        "DOUBLE",
-#       "DROP", # probably must be reserved
-        "DYNAMIC",
-        "EACH",
-        "ELEMENT",
-        "ELSE",
-#       "ELSEIF", # not a keyword in Calcite
-        "EMPTY",
-        "END",
-#       "END-EXEC", # not a keyword in Calcite, and contains '-'
-        "END_FRAME",
-        "END_PARTITION",
-        "EQUALS",
-        "ESCAPE",
-        "EVERY",
-#       "EXCEPT", # must be reserved
-        "EXCEPTION",
-        "EXEC",
-        "EXECUTE",
-        "EXISTS",
-#       "EXIT", # not a keyword in Calcite
-        "EXP",
-#       "EXPLAIN", # must be reserved
-        "EXTEND",
-        "EXTERNAL",
-        "EXTRACT",
-        "FALSE",
-#       "FETCH",
-        "FILTER",
-        "FIRST",
-        "FIRST_VALUE",
-        "FLOAT",
-        "FLOOR",
-        "FOR",
-        "FOREIGN",
-#       "FOREVER", # not a keyword in Calcite
-        "FOUND",
-        "FRAME_ROW",
-        "FREE",
-#       "FROM", # must be reserved
-#       "FULL", # must be reserved
-        "FUNCTION",
-        "FUSION",
-        "GENERAL",
-        "GET",
-        "GLOBAL",
-        "GO",
-        "GOTO",
-#       "GRANT",
-#       "GROUP",
-#       "GROUPING",
-        "GROUPS",
-#       "HANDLER", # not a keyword in Calcite
-#       "HAVING",
-        "HOLD",
-        "HOUR",
-#       "HOURS", # not a keyword in Calcite
-        "IDENTITY",
-#       "IF", # not a keyword in Calcite
-        "IMMEDIATE",
-        "IMMEDIATELY",
-        "IMPORT",
-#       "IN",
-        "INDICATOR",
-        "INITIAL",
-        "INITIALLY",
-#       "INNER",
-        "INOUT",
-        "INPUT",
-        "INSENSITIVE",
-#       "INSERT",
-        "INT",
-        "INTEGER",
-#       "INTERSECT",
-        "INTERSECTION",
-#       "INTERVAL",
-#       "INTO",
-        "IS",
-        "ISOLATION",
-#       "ITERATE", # not a keyword in Calcite
-#       "JOIN",
-        "JSON_ARRAY",
-        "JSON_ARRAYAGG",
-        "JSON_EXISTS",
-        "JSON_OBJECT",
-        "JSON_OBJECTAGG",
-        "JSON_QUERY",
-        "JSON_VALUE",
-#       "KEEP", # not a keyword in Calcite
-        "KEY",
-        "LAG",
-        "LANGUAGE",
-        "LARGE",
-        "LAST",
-        "LAST_VALUE",
-#       "LATERAL",
-        "LEAD",
-        "LEADING",
-#       "LEAVE", # not a keyword in Calcite
-#       "LEFT",
-        "LEVEL",
-        "LIKE",
-        "LIKE_REGEX",
-#       "LIMIT",
-        "LN",
-        "LOCAL",
-        "LOCALTIME",
-        "LOCALTIMESTAMP",
-        "LOCATOR",
-#       "LOOP", # not a keyword in Calcite
-        "LOWER",
-        "MAP",
-        "MATCH",
-        "MATCHES",
-        "MATCH_NUMBER",
-#       "MATCH_RECOGNIZE",
-        "MAX",
-#       "MAX_CARDINALITY", # not a keyword in Calcite
-        "MEASURES",
-        "MEMBER",
-#       "MERGE",
-        "METHOD",
-        "MIN",
-#       "MINUS",
-        "MINUTE",
-#       "MINUTES", # not a keyword in Calcite
-        "MOD",
-        "MODIFIES",
-        "MODULE",
-        "MONTH",
-        "MULTISET",
-        "NAMES",
-        "NATIONAL",
-#       "NATURAL",
-        "NCHAR",
-        "NCLOB",
-#       "NEW",
-#       "NEXT",
-        "NO",
-        "NONE",
-        "NORMALIZE",
-        "NOT",
-        "NTH_VALUE",
-        "NTILE",
-#       "NULL",
-        "NULLIF",
-        "NUMERIC",
-        "OBJECT",
-        "OCCURRENCES_REGEX",
-        "OCTET_LENGTH",
-        "OF",
-#       "OFFSET",
-        "OLD",
-        "OMIT",
-#       "ON",
-        "ONE",
-        "ONLY",
-        "OPEN",
-        "OPTION",
-        "OR",
-#       "ORDER",
-        "ORDINALITY",
-        "OUT",
-#       "OUTER",
-        "OUTPUT",
-#       "OVER",
-        "OVERLAPS",
-        "OVERLAY",
-        "PAD",
-        "PARAMETER",
-        "PARTIAL",
-#       "PARTITION",
-        "PATH",
-#       "PATTERN",
-        "PER",
-        "PERCENT",
-        "PERCENTILE_CONT",
-        "PERCENTILE_DISC",
-        "PERCENT_RANK",
-        "PERIOD",
-        "PERMUTE",
-        "PORTION",
-        "POSITION",
-        "POSITION_REGEX",
-        "POWER",
-        "PRECEDES",
-        "PRECISION",
-        "PREPARE",
-        "PRESERVE",
-        "PREV",
-        "PRIMARY",
-        "PRIOR",
-        "PRIVILEGES",
-        "PROCEDURE",
-        "PUBLIC",
-#       "RANGE",
-        "RANK",
-        "READ",
-        "READS",
-        "REAL",
-        "RECURSIVE",
-        "REF",
-        "REFERENCES",
-        "REFERENCING",
-        "REGR_AVGX",
-        "REGR_AVGY",
-        "REGR_COUNT",
-        "REGR_INTERCEPT",
-        "REGR_R2",
-        "REGR_SLOPE",
-        "REGR_SXX",
-        "REGR_SXY",
-        "REGR_SYY",
-        "RELATIVE",
-        "RELEASE",
-#       "REPEAT", # not a keyword in Calcite
-        "RESET",
-#       "RESIGNAL", # not a keyword in Calcite
-        "RESTRICT",
-        "RESULT",
-        "RETURN",
-        "RETURNS",
-        "REVOKE",
-#       "RIGHT",
-        "ROLE",
-        "ROLLBACK",
-#       "ROLLUP",
-        "ROUTINE",
-#       "ROW",
-#       "ROWS",
-        "ROW_NUMBER",
-        "RUNNING",
-        "SAVEPOINT",
-        "SCHEMA",
-        "SCOPE",
-        "SCROLL",
-        "SEARCH",
-        "SECOND",
-#       "SECONDS", # not a keyword in Calcite
-        "SECTION",
-        "SEEK",
-#       "SELECT",
-        "SENSITIVE",
-        "SESSION",
-        "SESSION_USER",
-#       "SET",
-#       "SETS",
-        "SHOW",
-#       "SIGNAL", # not a keyword in Calcite
-        "SIMILAR",
-        "SIZE",
-#       "SKIP", # messes with JavaCC's <SKIP> token
-        "SMALLINT",
-#       "SOME",
-        "SPACE",
-        "SPECIFIC",
-        "SPECIFICTYPE",
-        "SQL",
-#       "SQLCODE", # not a keyword in Calcite
-#       "SQLERROR", # not a keyword in Calcite
-        "SQLEXCEPTION",
-        "SQLSTATE",
-        "SQLWARNING",
-        "SQRT",
-        "START",
-        "STATE",
-        "STATIC",
-        "STDDEV_POP",
-        "STDDEV_SAMP",
-#       "STREAM",
-        "SUBMULTISET",
-        "SUBSET",
-        "SUBSTRING",
-        "SUBSTRING_REGEX",
-        "SUCCEEDS",
-        "SUM",
-        "SYMMETRIC",
-        "SYSTEM",
-        "SYSTEM_TIME",
-        "SYSTEM_USER",
-#       "TABLE",
-#       "TABLESAMPLE",
-        "TEMPORARY",
-#       "THEN",
-#       "TIME",
-#       "TIMESTAMP",
-        "TIMEZONE_HOUR",
-        "TIMEZONE_MINUTE",
-        "TINYINT",
-        "TO",
-        "TRAILING",
-        "TRANSACTION",
-        "TRANSLATE",
-        "TRANSLATE_REGEX",
-        "TRANSLATION",
-        "TREAT",
-        "TRIGGER",
-        "TRIM",
-        "TRIM_ARRAY",
-        "TRUE",
-        "TRUNCATE",
-        "UESCAPE",
-        "UNDER",
-#       "UNDO", # not a keyword in Calcite
-#       "UNION",
-        "UNIQUE",
-        "UNKNOWN",
-#       "UNNEST",
-#       "UNTIL", # not a keyword in Calcite
-#       "UPDATE",
-        "UPPER",
-        "UPSERT",
-        "USAGE",
-        "USER",
-#       "USING",
-        "VALUE",
-#       "VALUES",
-        "VALUE_OF",
-        "VARBINARY",
-        "VARCHAR",
-        "VARYING",
-        "VAR_POP",
-        "VAR_SAMP",
-        "VERSION",
-        "VERSIONING",
-#       "VERSIONS", # not a keyword in Calcite
-        "VIEW",
-#       "WHEN",
-        "WHENEVER",
-#       "WHERE",
-#       "WHILE", # not a keyword in Calcite
-        "WIDTH_BUCKET",
-#       "WINDOW",
-#       "WITH",
-        "WITHIN",
-        "WITHOUT",
-        "WORK",
-        "WRITE",
-        "YEAR",
-#       "YEARS", # not a keyword in Calcite
-        "ZONE",
-      ]
+    # List of non-reserved keywords to add;
+    # items in this list become non-reserved
+    nonReservedKeywordsToAdd: [
+      # not in core, added in babel
+      "SEMI"
 
-      # List of additional join types. Each is a method with no arguments.
-      # Example: LeftSemiJoin()
-      joinTypes: [
-        "LeftSemiJoin"
-      ]
+      # The following keywords are reserved in core Calcite,
+      # are reserved in some version of SQL,
+      # but are not reserved in Babel.
+      #
+      # Words that are commented out (e.g. "AND") are still reserved.
+      # These are the most important reserved words, and SQL cannot be
+      # unambiguously parsed if they are not reserved. For example, if
+      # "INNER" is not reserved then in the query
+      #
+      #   select * from emp inner join dept using (deptno)"
+      #
+      # "inner" could be a table alias for "emp".
+      #
+      "ABS"
+      "ABSOLUTE"
+      "ACTION"
+      "ADD"
+      "AFTER"
+      "ALL"
+      "ALLOCATE"
+      "ALLOW"
+      "ALTER"
+      "AND"
+#     "ANY"
+      "ARE"
+      "ARRAY"
+#     "ARRAY_AGG" # not a keyword in Calcite
+      "ARRAY_MAX_CARDINALITY"
+      "AS"
+      "ASC"
+      "ASENSITIVE"
+      "ASSERTION"
+      "ASYMMETRIC"
+      "AT"
+      "ATOMIC"
+      "AUTHORIZATION"
+      "AVG"
+      "BEFORE"
+      "BEGIN"
+      "BEGIN_FRAME"
+      "BEGIN_PARTITION"
+      "BETWEEN"
+      "BIGINT"
+      "BINARY"
+      "BIT"
+#     "BIT_LENGTH" # not a keyword in Calcite
+      "BLOB"
+      "BOOLEAN"
+      "BOTH"
+      "BREADTH"
+      "BY"
+#     "CALL"
+      "CALLED"
+      "CARDINALITY"
+      "CASCADE"
+      "CASCADED"
+#     "CASE"
+      "CAST"
+      "CATALOG"
+      "CEIL"
+      "CEILING"
+      "CHAR"
+      "CHARACTER"
+      "CHARACTER_LENGTH"
+      "CHAR_LENGTH"
+      "CHECK"
+      "CLASSIFIER"
+      "CLOB"
+      "CLOSE"
+      "COALESCE"
+      "COLLATE"
+      "COLLATION"
+      "COLLECT"
+      "COLUMN"
+      "COMMIT"
+      "CONDITION"
+      "CONNECT"
+      "CONNECTION"
+      "CONSTRAINT"
+      "CONSTRAINTS"
+      "CONSTRUCTOR"
+      "CONTAINS"
+      "CONTINUE"
+      "CONVERT"
+      "CORR"
+      "CORRESPONDING"
+      "COUNT"
+      "COVAR_POP"
+      "COVAR_SAMP"
+#     "CREATE"
+#     "CROSS"
+      "CUBE"
+      "CUME_DIST"
+#     "CURRENT"
+      "CURRENT_CATALOG"
+      "CURRENT_DATE"
+      "CURRENT_DEFAULT_TRANSFORM_GROUP"
+      "CURRENT_PATH"
+      "CURRENT_ROLE"
+      "CURRENT_ROW"
+      "CURRENT_SCHEMA"
+      "CURRENT_TIME"
+      "CURRENT_TIMESTAMP"
+      "CURRENT_TRANSFORM_GROUP_FOR_TYPE"
+      "CURRENT_USER"
+#     "CURSOR"
+      "CYCLE"
+      "DATA"
+#     "DATE"
+      "DAY"
+#     "DAYS" # not a keyword in Calcite
+      "DEALLOCATE"
+      "DEC"
+      "DECIMAL"
+      "DECLARE"
+#     "DEFAULT"
+      "DEFERRABLE"
+      "DEFERRED"
+#     "DEFINE"
+#     "DELETE"
+      "DENSE_RANK"
+      "DEPTH"
+      "DEREF"
+      "DESC"
+#     "DESCRIBE" # must be reserved
+      "DESCRIPTOR"
+      "DETERMINISTIC"
+      "DIAGNOSTICS"
+      "DISALLOW"
+      "DISCONNECT"
+#     "DISTINCT"
+#     "DO"  # not a keyword in Calcite
+      "DOMAIN"
+      "DOUBLE"
+#     "DROP" # probably must be reserved
+      "DYNAMIC"
+      "EACH"
+      "ELEMENT"
+      "ELSE"
+#     "ELSEIF" # not a keyword in Calcite
+      "EMPTY"
+      "END"
+#     "END-EXEC" # not a keyword in Calcite, and contains '-'
+      "END_FRAME"
+      "END_PARTITION"
+      "EQUALS"
+      "ESCAPE"
+      "EVERY"
+#     "EXCEPT" # must be reserved
+      "EXCEPTION"
+      "EXEC"
+      "EXECUTE"
+      "EXISTS"
+#     "EXIT" # not a keyword in Calcite
+      "EXP"
+#     "EXPLAIN" # must be reserved
+      "EXTEND"
+      "EXTERNAL"
+      "EXTRACT"
+      "FALSE"
+#     "FETCH"
+      "FILTER"
+      "FIRST"
+      "FIRST_VALUE"
+      "FLOAT"
+      "FLOOR"
+      "FOR"
+      "FOREIGN"
+#     "FOREVER" # not a keyword in Calcite
+      "FOUND"
+      "FRAME_ROW"
+      "FREE"
+#     "FROM" # must be reserved
+#     "FULL" # must be reserved
+      "FUNCTION"
+      "FUSION"
+      "GENERAL"
+      "GET"
+      "GLOBAL"
+      "GO"
+      "GOTO"
+#     "GRANT"
+#     "GROUP"
+#     "GROUPING"
+      "GROUPS"
+#     "HANDLER" # not a keyword in Calcite
+#     "HAVING"
+      "HOLD"
+      "HOUR"
+#     "HOURS" # not a keyword in Calcite
+      "IDENTITY"
+#     "IF" # not a keyword in Calcite
+      "IMMEDIATE"
+      "IMMEDIATELY"
+      "IMPORT"
+#     "IN"
+      "INDICATOR"
+      "INITIAL"
+      "INITIALLY"
+#     "INNER"
+      "INOUT"
+      "INPUT"
+      "INSENSITIVE"
+#     "INSERT"
+      "INT"
+      "INTEGER"
+#     "INTERSECT"
+      "INTERSECTION"
+#     "INTERVAL"
+#     "INTO"
+      "IS"
+      "ISOLATION"
+#     "ITERATE" # not a keyword in Calcite
+#     "JOIN"
+      "JSON_ARRAY"
+      "JSON_ARRAYAGG"
+      "JSON_EXISTS"
+      "JSON_OBJECT"
+      "JSON_OBJECTAGG"
+      "JSON_QUERY"
+      "JSON_VALUE"
+#     "KEEP" # not a keyword in Calcite
+      "KEY"
+      "LAG"
+      "LANGUAGE"
+      "LARGE"
+      "LAST"
+      "LAST_VALUE"
+#     "LATERAL"
+      "LEAD"
+      "LEADING"
+#     "LEAVE" # not a keyword in Calcite
+#     "LEFT"
+      "LEVEL"
+      "LIKE"
+      "LIKE_REGEX"
+#     "LIMIT"
+      "LN"
+      "LOCAL"
+      "LOCALTIME"
+      "LOCALTIMESTAMP"
+      "LOCATOR"
+#     "LOOP" # not a keyword in Calcite
+      "LOWER"
+      "MAP"
+      "MATCH"
+      "MATCHES"
+      "MATCH_NUMBER"
+#     "MATCH_RECOGNIZE"
+      "MAX"
+#     "MAX_CARDINALITY" # not a keyword in Calcite
+      "MEASURES"
+      "MEMBER"
+#     "MERGE"
+      "METHOD"
+      "MIN"
+#     "MINUS"
+      "MINUTE"
+#     "MINUTES" # not a keyword in Calcite
+      "MOD"
+      "MODIFIES"
+      "MODULE"
+      "MONTH"
+      "MULTISET"
+      "NAMES"
+      "NATIONAL"
+#     "NATURAL"
+      "NCHAR"
+      "NCLOB"
+#     "NEW"
+#     "NEXT"
+      "NO"
+      "NONE"
+      "NORMALIZE"
+      "NOT"
+      "NTH_VALUE"
+      "NTILE"
+#     "NULL"
+      "NULLIF"
+      "NUMERIC"
+      "OBJECT"
+      "OCCURRENCES_REGEX"
+      "OCTET_LENGTH"
+      "OF"
+#     "OFFSET"
+      "OLD"
+      "OMIT"
+#     "ON"
+      "ONE"
+      "ONLY"
+      "OPEN"
+      "OPTION"
+      "OR"
+#     "ORDER"
+      "ORDINALITY"
+      "OUT"
+#     "OUTER"
+      "OUTPUT"
+#     "OVER"
+      "OVERLAPS"
+      "OVERLAY"
+      "PAD"
+      "PARAMETER"
+      "PARTIAL"
+#     "PARTITION"
+      "PATH"
+#     "PATTERN"
+      "PER"
+      "PERCENT"
+      "PERCENTILE_CONT"
+      "PERCENTILE_DISC"
+      "PERCENT_RANK"
+      "PERIOD"
+      "PERMUTE"
+      "PORTION"
+      "POSITION"
+      "POSITION_REGEX"
+      "POWER"
+      "PRECEDES"
+      "PRECISION"
+      "PREPARE"
+      "PRESERVE"
+      "PREV"
+      "PRIMARY"
+      "PRIOR"
+      "PRIVILEGES"
+      "PROCEDURE"
+      "PUBLIC"
+#     "RANGE"
+      "RANK"
+      "READ"
+      "READS"
+      "REAL"
+      "RECURSIVE"
+      "REF"
+      "REFERENCES"
+      "REFERENCING"
+      "REGR_AVGX"
+      "REGR_AVGY"
+      "REGR_COUNT"
+      "REGR_INTERCEPT"
+      "REGR_R2"
+      "REGR_SLOPE"
+      "REGR_SXX"
+      "REGR_SXY"
+      "REGR_SYY"
+      "RELATIVE"
+      "RELEASE"
+#     "REPEAT" # not a keyword in Calcite
+      "RESET"
+#     "RESIGNAL" # not a keyword in Calcite
+      "RESTRICT"
+      "RESULT"
+      "RETURN"
+      "RETURNS"
+      "REVOKE"
+#     "RIGHT"
+      "ROLE"
+      "ROLLBACK"
+#     "ROLLUP"
+      "ROUTINE"
+#     "ROW"
+#     "ROWS"
+      "ROW_NUMBER"
+      "RUNNING"
+      "SAVEPOINT"
+      "SCHEMA"
+      "SCOPE"
+      "SCROLL"
+      "SEARCH"
+      "SECOND"
+#     "SECONDS" # not a keyword in Calcite
+      "SECTION"
+      "SEEK"
+#     "SELECT"
+      "SENSITIVE"
+      "SESSION"
+      "SESSION_USER"
+#     "SET"
+#     "SETS"
+      "SHOW"
+#     "SIGNAL" # not a keyword in Calcite
+      "SIMILAR"
+      "SIZE"
+#     "SKIP" # messes with JavaCC's <SKIP> token
+      "SMALLINT"
+#     "SOME"
+      "SPACE"
+      "SPECIFIC"
+      "SPECIFICTYPE"
+      "SQL"
+#     "SQLCODE" # not a keyword in Calcite
+#     "SQLERROR" # not a keyword in Calcite
+      "SQLEXCEPTION"
+      "SQLSTATE"
+      "SQLWARNING"
+      "SQRT"
+      "START"
+      "STATE"
+      "STATIC"
+      "STDDEV_POP"
+      "STDDEV_SAMP"
+#     "STREAM"
+      "SUBMULTISET"
+      "SUBSET"
+      "SUBSTRING"
+      "SUBSTRING_REGEX"
+      "SUCCEEDS"
+      "SUM"
+      "SYMMETRIC"
+      "SYSTEM"
+      "SYSTEM_TIME"
+      "SYSTEM_USER"
+#     "TABLE"
+#     "TABLESAMPLE"
+      "TEMPORARY"
+#     "THEN"
+#     "TIME"
+#     "TIMESTAMP"
+      "TIMEZONE_HOUR"
+      "TIMEZONE_MINUTE"
+      "TINYINT"
+      "TO"
+      "TRAILING"
+      "TRANSACTION"
+      "TRANSLATE"
+      "TRANSLATE_REGEX"
+      "TRANSLATION"
+      "TREAT"
+      "TRIGGER"
+      "TRIM"
+      "TRIM_ARRAY"
+      "TRUE"
+      "TRUNCATE"
+      "UESCAPE"
+      "UNDER"
+#     "UNDO" # not a keyword in Calcite
+#     "UNION"
+      "UNIQUE"
+      "UNKNOWN"
+#     "UNNEST"
+#     "UNTIL" # not a keyword in Calcite
+#     "UPDATE"
+      "UPPER"
+      "UPSERT"
+      "USAGE"
+      "USER"
+#     "USING"
+      "VALUE"
+#     "VALUES"
+      "VALUE_OF"
+      "VARBINARY"
+      "VARCHAR"
+      "VARYING"
+      "VAR_POP"
+      "VAR_SAMP"
+      "VERSION"
+      "VERSIONING"
+#     "VERSIONS" # not a keyword in Calcite
+      "VIEW"
+#     "WHEN"
+      "WHENEVER"
+#     "WHERE"
+#     "WHILE" # not a keyword in Calcite
+      "WIDTH_BUCKET"
+#     "WINDOW"
+#     "WITH"
+      "WITHIN"
+      "WITHOUT"
+      "WORK"
+      "WRITE"
+      "YEAR"
+#     "YEARS" # not a keyword in Calcite
+      "ZONE"
+    ]
 
-      # List of methods for parsing custom SQL statements.
-      statementParserMethods: [
-      ]
+    # List of additional join types. Each is a method with no arguments.
+    # Example: LeftSemiJoin()
+    joinTypes: [
+      "LeftSemiJoin"
+    ]
 
-      # List of methods for parsing custom literals.
-      # Return type of method implementation should be "SqlNode".
-      # Example: ParseJsonLiteral().
-      literalParserMethods: [
-      ]
+    # List of methods for parsing custom SQL statements.
+    statementParserMethods: [
+    ]
 
-      # List of methods for parsing custom data types.
-      # Return type of method implementation should be "SqlIdentifier".
-      # Example: SqlParseTimeStampZ().
-      dataTypeParserMethods: [
-      ]
+    # List of methods for parsing custom literals.
+    # Return type of method implementation should be "SqlNode".
+    # Example: ParseJsonLiteral().
+    literalParserMethods: [
+    ]
 
-      # List of methods for parsing builtin function calls.
-      # Return type of method implementation should be "SqlNode".
-      # Example: DateFunctionCall().
-      builtinFunctionCallMethods: [
-         "DateFunctionCall()"
-         "DateaddFunctionCall()"
-      ]
+    # List of methods for parsing custom data types.
+    # Return type of method implementation should be "SqlTypeNameSpec".
+    # Example: SqlParseTimeStampZ().
+    dataTypeParserMethods: [
+    ]
 
-      # List of methods for parsing extensions to "ALTER <scope>" calls.
-      # Each must accept arguments "(SqlParserPos pos, String scope)".
-      alterStatementParserMethods: [
-      ]
+    # List of methods for parsing builtin function calls.
+    # Return type of method implementation should be "SqlNode".
+    # Example: DateFunctionCall().
+    builtinFunctionCallMethods: [
+       "DateFunctionCall()"
+       "DateaddFunctionCall()"
+    ]
 
-      # List of methods for parsing extensions to "CREATE [OR REPLACE]" calls.
-      # Each must accept arguments "(SqlParserPos pos, boolean replace)".
-      createStatementParserMethods: [
-      ]
+    # List of methods for parsing extensions to "ALTER <scope>" calls.
+    # Each must accept arguments "(SqlParserPos pos, String scope)".
+    alterStatementParserMethods: [
+    ]
 
-      # List of methods for parsing extensions to "DROP" calls.
-      # Each must accept arguments "(SqlParserPos pos)".
-      dropStatementParserMethods: [
-      ]
+    # List of methods for parsing extensions to "CREATE [OR REPLACE]" calls.
+    # Each must accept arguments "(SqlParserPos pos, boolean replace)".
+    createStatementParserMethods: [
+    ]
 
-      # Binary operators tokens
-      binaryOperatorsTokens: [
-        "< INFIX_CAST: \"::\" >"
-      ]
+    # List of methods for parsing extensions to "DROP" calls.
+    # Each must accept arguments "(SqlParserPos pos)".
+    dropStatementParserMethods: [
+    ]
 
-      # Binary operators initialization
-      extraBinaryExpressions: [
-        "InfixCast"
-      ]
+    # Binary operators tokens
+    binaryOperatorsTokens: [
+      "< INFIX_CAST: \"::\" >"
+    ]
 
-      # List of files in @includes directory that have parser method
-      # implementations for parsing custom SQL statements, literals or types
-      # given as part of "statementParserMethods", "literalParserMethods" or
-      # "dataTypeParserMethods".
-      implementationFiles: [
-        "parserImpls.ftl"
-      ]
+    # Binary operators initialization
+    extraBinaryExpressions: [
+      "InfixCast"
+    ]
 
-      includePosixOperators: true
-      includeCompoundIdentifier: true
-      includeBraces: true
-      includeAdditionalDeclarations: false
+    # List of files in @includes directory that have parser method
+    # implementations for parsing custom SQL statements, literals or types
+    # given as part of "statementParserMethods", "literalParserMethods" or
+    # "dataTypeParserMethods".
+    implementationFiles: [
+      "parserImpls.ftl"
+    ]
 
-    }
+    includePosixOperators: true
+    includeCompoundIdentifier: true
+    includeBraces: true
+    includeAdditionalDeclarations: false
+  }
 }
+
 freemarkerLinks: {
-    includes: includes/
+  includes: includes/
 }
diff --git a/core/src/main/codegen/config.fmpp b/core/src/main/codegen/config.fmpp
index a44b8b7..e2bde0f 100644
--- a/core/src/main/codegen/config.fmpp
+++ b/core/src/main/codegen/config.fmpp
@@ -50,309 +50,319 @@ data: {
 
     # List of keywords from "keywords" section that are not reserved.
     nonReservedKeywords: [
-        "A"
-        "ABSENT"
-        "ABSOLUTE"
-        "ACTION"
-        "ADA"
-        "ADD"
-        "ADMIN"
-        "AFTER"
-        "ALWAYS"
-        "APPLY"
-        "ASC"
-        "ASSERTION"
-        "ASSIGNMENT"
-        "ATTRIBUTE"
-        "ATTRIBUTES"
-        "BEFORE"
-        "BERNOULLI"
-        "BREADTH"
-        "C"
-        "CASCADE"
-        "CATALOG"
-        "CATALOG_NAME"
-        "CENTURY"
-        "CHAIN"
-        "CHARACTER_SET_CATALOG"
-        "CHARACTER_SET_NAME"
-        "CHARACTER_SET_SCHEMA"
-        "CHARACTERISTICS"
-        "CHARACTERS"
-        "CLASS_ORIGIN"
-        "COBOL"
-        "COLLATION"
-        "COLLATION_CATALOG"
-        "COLLATION_NAME"
-        "COLLATION_SCHEMA"
-        "COLUMN_NAME"
-        "COMMAND_FUNCTION"
-        "COMMAND_FUNCTION_CODE"
-        "COMMITTED"
-        "CONDITION_NUMBER"
-        "CONDITIONAL"
-        "CONNECTION"
-        "CONNECTION_NAME"
-        "CONSTRAINT_CATALOG"
-        "CONSTRAINT_NAME"
-        "CONSTRAINT_SCHEMA"
-        "CONSTRAINTS"
-        "CONSTRUCTOR"
-        "CONTINUE"
-        "CURSOR_NAME"
-        "DATA"
-        "DATABASE"
-        "DATETIME_INTERVAL_CODE"
-        "DATETIME_INTERVAL_PRECISION"
-        "DECADE"
-        "DEFAULTS"
-        "DEFERRABLE"
-        "DEFERRED"
-        "DEFINED"
-        "DEFINER"
-        "DEGREE"
-        "DEPTH"
-        "DERIVED"
-        "DESC"
-        "DESCRIPTION"
-        "DESCRIPTOR"
-        "DIAGNOSTICS"
-        "DISPATCH"
-        "DOMAIN"
-        "DOW"
-        "DOY"
-        "DYNAMIC_FUNCTION"
-        "DYNAMIC_FUNCTION_CODE"
-        "ENCODING"
-        "EPOCH"
-        "ERROR"
-        "EXCEPTION"
-        "EXCLUDE"
-        "EXCLUDING"
-        "FINAL"
-        "FIRST"
-        "FOLLOWING"
-        "FORMAT"
-        "FORTRAN"
-        "FOUND"
-        "FRAC_SECOND"
-        "G"
-        "GENERAL"
-        "GENERATED"
-        "GEOMETRY"
-        "GO"
-        "GOTO"
-        "GRANTED"
-        "HIERARCHY"
-        "IGNORE"
-        "IMMEDIATE"
-        "IMMEDIATELY"
-        "IMPLEMENTATION"
-        "INCLUDING"
-        "INCREMENT"
-        "INITIALLY"
-        "INPUT"
-        "INSTANCE"
-        "INSTANTIABLE"
-        "INVOKER"
-        "ISODOW"
-        "ISOYEAR"
-        "ISOLATION"
-        "JAVA"
-        "JSON"
-        "K"
-        "KEY"
-        "KEY_MEMBER"
-        "KEY_TYPE"
-        "LABEL"
-        "LAST"
-        "LENGTH"
-        "LEVEL"
-        "LIBRARY"
-        "LOCATOR"
-        "M"
-        "MAP"
-        "MATCHED"
-        "MAXVALUE"
-        "MICROSECOND"
-        "MESSAGE_LENGTH"
-        "MESSAGE_OCTET_LENGTH"
-        "MESSAGE_TEXT"
-        "MILLISECOND"
-        "MILLENNIUM"
-        "MINVALUE"
-        "MORE_"
-        "MUMPS"
-        "NAME"
-        "NAMES"
-        "NANOSECOND"
-        "NESTING"
-        "NORMALIZED"
-        "NULLABLE"
-        "NULLS"
-        "NUMBER"
-        "OBJECT"
-        "OCTETS"
-        "OPTION"
-        "OPTIONS"
-        "ORDERING"
-        "ORDINALITY"
-        "OTHERS"
-        "OUTPUT"
-        "OVERRIDING"
-        "PAD"
-        "PARAMETER_MODE"
-        "PARAMETER_NAME"
-        "PARAMETER_ORDINAL_POSITION"
-        "PARAMETER_SPECIFIC_CATALOG"
-        "PARAMETER_SPECIFIC_NAME"
-        "PARAMETER_SPECIFIC_SCHEMA"
-        "PARTIAL"
-        "PASCAL"
-        "PASSING"
-        "PASSTHROUGH"
-        "PAST"
-        "PATH"
-        "PLACING"
-        "PLAN"
-        "PLI"
-        "PRECEDING"
-        "PRESERVE"
-        "PRIOR"
-        "PRIVILEGES"
-        "PUBLIC"
-        "QUARTER"
-        "READ"
-        "RELATIVE"
-        "REPEATABLE"
-        "REPLACE"
-        "RESPECT"
-        "RESTART"
-        "RESTRICT"
-        "RETURNED_CARDINALITY"
-        "RETURNED_LENGTH"
-        "RETURNED_OCTET_LENGTH"
-        "RETURNED_SQLSTATE"
-        "RETURNING"
-        "ROLE"
-        "ROUTINE"
-        "ROUTINE_CATALOG"
-        "ROUTINE_NAME"
-        "ROUTINE_SCHEMA"
-        "ROW_COUNT"
-        "SCALAR"
-        "SCALE"
-        "SCHEMA"
-        "SCHEMA_NAME"
-        "SCOPE_CATALOGS"
-        "SCOPE_NAME"
-        "SCOPE_SCHEMA"
-        "SECTION"
-        "SECURITY"
-        "SELF"
-        "SEQUENCE"
-        "SERIALIZABLE"
-        "SERVER"
-        "SERVER_NAME"
-        "SESSION"
-        "SETS"
-        "SIMPLE"
-        "SIZE"
-        "SOURCE"
-        "SPACE"
-        "SPECIFIC_NAME"
-        "SQL_BIGINT"
-        "SQL_BINARY"
-        "SQL_BIT"
-        "SQL_BLOB"
-        "SQL_BOOLEAN"
-        "SQL_CHAR"
-        "SQL_CLOB"
-        "SQL_DATE"
-        "SQL_DECIMAL"
-        "SQL_DOUBLE"
-        "SQL_FLOAT"
-        "SQL_INTEGER"
-        "SQL_INTERVAL_DAY"
-        "SQL_INTERVAL_DAY_TO_HOUR"
-        "SQL_INTERVAL_DAY_TO_MINUTE"
-        "SQL_INTERVAL_DAY_TO_SECOND"
-        "SQL_INTERVAL_HOUR"
-        "SQL_INTERVAL_HOUR_TO_MINUTE"
-        "SQL_INTERVAL_HOUR_TO_SECOND"
-        "SQL_INTERVAL_MINUTE"
-        "SQL_INTERVAL_MINUTE_TO_SECOND"
-        "SQL_INTERVAL_MONTH"
-        "SQL_INTERVAL_SECOND"
-        "SQL_INTERVAL_YEAR"
-        "SQL_INTERVAL_YEAR_TO_MONTH"
-        "SQL_LONGVARBINARY"
-        "SQL_LONGVARNCHAR"
-        "SQL_LONGVARCHAR"
-        "SQL_NCHAR"
-        "SQL_NCLOB"
-        "SQL_NUMERIC"
-        "SQL_NVARCHAR"
-        "SQL_REAL"
-        "SQL_SMALLINT"
-        "SQL_TIME"
-        "SQL_TIMESTAMP"
-        "SQL_TINYINT"
-        "SQL_TSI_DAY"
-        "SQL_TSI_FRAC_SECOND"
-        "SQL_TSI_HOUR"
-        "SQL_TSI_MICROSECOND"
-        "SQL_TSI_MINUTE"
-        "SQL_TSI_MONTH"
-        "SQL_TSI_QUARTER"
-        "SQL_TSI_SECOND"
-        "SQL_TSI_WEEK"
-        "SQL_TSI_YEAR"
-        "SQL_VARBINARY"
-        "SQL_VARCHAR"
-        "STATE"
-        "STATEMENT"
-        "STRUCTURE"
-        "STYLE"
-        "SUBCLASS_ORIGIN"
-        "SUBSTITUTE"
-        "TABLE_NAME"
-        "TEMPORARY"
-        "TIES"
-        "TIMESTAMPADD"
-        "TIMESTAMPDIFF"
-        "TOP_LEVEL_COUNT"
-        "TRANSACTION"
-        "TRANSACTIONS_ACTIVE"
-        "TRANSACTIONS_COMMITTED"
-        "TRANSACTIONS_ROLLED_BACK"
-        "TRANSFORM"
-        "TRANSFORMS"
-        "TRIGGER_CATALOG"
-        "TRIGGER_NAME"
-        "TRIGGER_SCHEMA"
-        "TYPE"
-        "UNBOUNDED"
-        "UNCOMMITTED"
-        "UNCONDITIONAL"
-        "UNDER"
-        "UNNAMED"
-        "USAGE"
-        "USER_DEFINED_TYPE_CATALOG"
-        "USER_DEFINED_TYPE_CODE"
-        "USER_DEFINED_TYPE_NAME"
-        "USER_DEFINED_TYPE_SCHEMA"
-        "UTF8"
-        "UTF16"
-        "UTF32"
-        "VERSION"
-        "VIEW"
-        "WEEK"
-        "WRAPPER"
-        "WORK"
-        "WRITE"
-        "XML"
-        "ZONE"
+      "A"
+      "ABSENT"
+      "ABSOLUTE"
+      "ACTION"
+      "ADA"
+      "ADD"
+      "ADMIN"
+      "AFTER"
+      "ALWAYS"
+      "APPLY"
+      "ASC"
+      "ASSERTION"
+      "ASSIGNMENT"
+      "ATTRIBUTE"
+      "ATTRIBUTES"
+      "BEFORE"
+      "BERNOULLI"
+      "BREADTH"
+      "C"
+      "CASCADE"
+      "CATALOG"
+      "CATALOG_NAME"
+      "CENTURY"
+      "CHAIN"
+      "CHARACTERISTICS"
+      "CHARACTERS"
+      "CHARACTER_SET_CATALOG"
+      "CHARACTER_SET_NAME"
+      "CHARACTER_SET_SCHEMA"
+      "CLASS_ORIGIN"
+      "COBOL"
+      "COLLATION"
+      "COLLATION_CATALOG"
+      "COLLATION_NAME"
+      "COLLATION_SCHEMA"
+      "COLUMN_NAME"
+      "COMMAND_FUNCTION"
+      "COMMAND_FUNCTION_CODE"
+      "COMMITTED"
+      "CONDITIONAL"
+      "CONDITION_NUMBER"
+      "CONNECTION"
+      "CONNECTION_NAME"
+      "CONSTRAINT_CATALOG"
+      "CONSTRAINT_NAME"
+      "CONSTRAINTS"
+      "CONSTRAINT_SCHEMA"
+      "CONSTRUCTOR"
+      "CONTINUE"
+      "CURSOR_NAME"
+      "DATA"
+      "DATABASE"
+      "DATETIME_INTERVAL_CODE"
+      "DATETIME_INTERVAL_PRECISION"
+      "DECADE"
+      "DEFAULTS"
+      "DEFERRABLE"
+      "DEFERRED"
+      "DEFINED"
+      "DEFINER"
+      "DEGREE"
+      "DEPTH"
+      "DERIVED"
+      "DESC"
+      "DESCRIPTION"
+      "DESCRIPTOR"
+      "DIAGNOSTICS"
+      "DISPATCH"
+      "DOMAIN"
+      "DOW"
+      "DOY"
+      "DYNAMIC_FUNCTION"
+      "DYNAMIC_FUNCTION_CODE"
+      "ENCODING"
+      "EPOCH"
+      "ERROR"
+      "EXCEPTION"
+      "EXCLUDE"
+      "EXCLUDING"
+      "FINAL"
+      "FIRST"
+      "FOLLOWING"
+      "FORMAT"
+      "FORTRAN"
+      "FOUND"
+      "FRAC_SECOND"
+      "G"
+      "GENERAL"
+      "GENERATED"
+      "GEOMETRY"
+      "GO"
+      "GOTO"
+      "GRANTED"
+      "HIERARCHY"
+      "IGNORE"
+      "IMMEDIATE"
+      "IMMEDIATELY"
+      "IMPLEMENTATION"
+      "INCLUDING"
+      "INCREMENT"
+      "INITIALLY"
+      "INPUT"
+      "INSTANCE"
+      "INSTANTIABLE"
+      "INVOKER"
+      "ISODOW"
+      "ISOLATION"
+      "ISOYEAR"
+      "JAVA"
+      "JSON"
+      "K"
+      "KEY"
+      "KEY_MEMBER"
+      "KEY_TYPE"
+      "LABEL"
+      "LAST"
+      "LENGTH"
+      "LEVEL"
+      "LIBRARY"
+      "LOCATOR"
+      "M"
+      "MAP"
+      "MATCHED"
+      "MAXVALUE"
+      "MESSAGE_LENGTH"
+      "MESSAGE_OCTET_LENGTH"
+      "MESSAGE_TEXT"
+      "MICROSECOND"
+      "MILLENNIUM"
+      "MILLISECOND"
+      "MINVALUE"
+      "MORE_"
+      "MUMPS"
+      "NAME"
+      "NAMES"
+      "NANOSECOND"
+      "NESTING"
+      "NORMALIZED"
+      "NULLABLE"
+      "NULLS"
+      "NUMBER"
+      "OBJECT"
+      "OCTETS"
+      "OPTION"
+      "OPTIONS"
+      "ORDERING"
+      "ORDINALITY"
+      "OTHERS"
+      "OUTPUT"
+      "OVERRIDING"
+      "PAD"
+      "PARAMETER_MODE"
+      "PARAMETER_NAME"
+      "PARAMETER_ORDINAL_POSITION"
+      "PARAMETER_SPECIFIC_CATALOG"
+      "PARAMETER_SPECIFIC_NAME"
+      "PARAMETER_SPECIFIC_SCHEMA"
+      "PARTIAL"
+      "PASCAL"
+      "PASSING"
+      "PASSTHROUGH"
+      "PAST"
+      "PATH"
+      "PLACING"
+      "PLAN"
+      "PLI"
+      "PRECEDING"
+      "PRESERVE"
+      "PRIOR"
+      "PRIVILEGES"
+      "PUBLIC"
+      "QUARTER"
+      "READ"
+      "RELATIVE"
+      "REPEATABLE"
+      "REPLACE"
+      "RESPECT"
+      "RESTART"
+      "RESTRICT"
+      "RETURNED_CARDINALITY"
+      "RETURNED_LENGTH"
+      "RETURNED_OCTET_LENGTH"
+      "RETURNED_SQLSTATE"
+      "RETURNING"
+      "ROLE"
+      "ROUTINE"
+      "ROUTINE_CATALOG"
+      "ROUTINE_NAME"
+      "ROUTINE_SCHEMA"
+      "ROW_COUNT"
+      "SCALAR"
+      "SCALE"
+      "SCHEMA"
+      "SCHEMA_NAME"
+      "SCOPE_CATALOGS"
+      "SCOPE_NAME"
+      "SCOPE_SCHEMA"
+      "SECTION"
+      "SECURITY"
+      "SELF"
+      "SEQUENCE"
+      "SERIALIZABLE"
+      "SERVER"
+      "SERVER_NAME"
+      "SESSION"
+      "SETS"
+      "SIMPLE"
+      "SIZE"
+      "SOURCE"
+      "SPACE"
+      "SPECIFIC_NAME"
+      "SQL_BIGINT"
+      "SQL_BINARY"
+      "SQL_BIT"
+      "SQL_BLOB"
+      "SQL_BOOLEAN"
+      "SQL_CHAR"
+      "SQL_CLOB"
+      "SQL_DATE"
+      "SQL_DECIMAL"
+      "SQL_DOUBLE"
+      "SQL_FLOAT"
+      "SQL_INTEGER"
+      "SQL_INTERVAL_DAY"
+      "SQL_INTERVAL_DAY_TO_HOUR"
+      "SQL_INTERVAL_DAY_TO_MINUTE"
+      "SQL_INTERVAL_DAY_TO_SECOND"
+      "SQL_INTERVAL_HOUR"
+      "SQL_INTERVAL_HOUR_TO_MINUTE"
+      "SQL_INTERVAL_HOUR_TO_SECOND"
+      "SQL_INTERVAL_MINUTE"
+      "SQL_INTERVAL_MINUTE_TO_SECOND"
+      "SQL_INTERVAL_MONTH"
+      "SQL_INTERVAL_SECOND"
+      "SQL_INTERVAL_YEAR"
+      "SQL_INTERVAL_YEAR_TO_MONTH"
+      "SQL_LONGVARBINARY"
+      "SQL_LONGVARCHAR"
+      "SQL_LONGVARNCHAR"
+      "SQL_NCHAR"
+      "SQL_NCLOB"
+      "SQL_NUMERIC"
+      "SQL_NVARCHAR"
+      "SQL_REAL"
+      "SQL_SMALLINT"
+      "SQL_TIME"
+      "SQL_TIMESTAMP"
+      "SQL_TINYINT"
+      "SQL_TSI_DAY"
+      "SQL_TSI_FRAC_SECOND"
+      "SQL_TSI_HOUR"
+      "SQL_TSI_MICROSECOND"
+      "SQL_TSI_MINUTE"
+      "SQL_TSI_MONTH"
+      "SQL_TSI_QUARTER"
+      "SQL_TSI_SECOND"
+      "SQL_TSI_WEEK"
+      "SQL_TSI_YEAR"
+      "SQL_VARBINARY"
+      "SQL_VARCHAR"
+      "STATE"
+      "STATEMENT"
+      "STRUCTURE"
+      "STYLE"
+      "SUBCLASS_ORIGIN"
+      "SUBSTITUTE"
+      "TABLE_NAME"
+      "TEMPORARY"
+      "TIES"
+      "TIMESTAMPADD"
+      "TIMESTAMPDIFF"
+      "TOP_LEVEL_COUNT"
+      "TRANSACTION"
+      "TRANSACTIONS_ACTIVE"
+      "TRANSACTIONS_COMMITTED"
+      "TRANSACTIONS_ROLLED_BACK"
+      "TRANSFORM"
+      "TRANSFORMS"
+      "TRIGGER_CATALOG"
+      "TRIGGER_NAME"
+      "TRIGGER_SCHEMA"
+      "TYPE"
+      "UNBOUNDED"
+      "UNCOMMITTED"
+      "UNCONDITIONAL"
+      "UNDER"
+      "UNNAMED"
+      "USAGE"
+      "USER_DEFINED_TYPE_CATALOG"
+      "USER_DEFINED_TYPE_CODE"
+      "USER_DEFINED_TYPE_NAME"
+      "USER_DEFINED_TYPE_SCHEMA"
+      "UTF16"
+      "UTF32"
+      "UTF8"
+      "VERSION"
+      "VIEW"
+      "WEEK"
+      "WORK"
+      "WRAPPER"
+      "WRITE"
+      "XML"
+      "ZONE"
+    ]
+
+    # List of non-reserved keywords to add;
+    # items in this list become non-reserved
+    nonReservedKeywordsToAdd: [
+    ]
+
+    # List of non-reserved keywords to remove;
+    # items in this list become reserved
+    nonReservedKeywordsToRemove: [
     ]
 
     # List of additional join types. Each is a method with no arguments.
diff --git a/core/src/main/codegen/templates/Parser.jj b/core/src/main/codegen/templates/Parser.jj
index a063aa5..47a88bc 100644
--- a/core/src/main/codegen/templates/Parser.jj
+++ b/core/src/main/codegen/templates/Parser.jj
@@ -7147,7 +7147,7 @@ void NonReservedKeyWord0of3() :
 }
 {
     (
-<#list parser.nonReservedKeywords as keyword>
+<#list parser.nonReservedKeywords + parser.nonReservedKeywordsToAdd as keyword>
 <#if keyword?index == 0>
         <${keyword}>
 <#elseif keyword?index % 3 == 0>
@@ -7163,7 +7163,7 @@ void NonReservedKeyWord1of3() :
 }
 {
     (
-<#list parser.nonReservedKeywords as keyword>
+<#list parser.nonReservedKeywords + parser.nonReservedKeywordsToAdd as keyword>
 <#if keyword?index == 1>
         <${keyword}>
 <#elseif keyword?index % 3 == 1>
@@ -7179,7 +7179,7 @@ void NonReservedKeyWord2of3() :
 }
 {
     (
-<#list parser.nonReservedKeywords as keyword>
+<#list parser.nonReservedKeywords + parser.nonReservedKeywordsToAdd as keyword>
 <#if keyword?index == 2>
         <${keyword}>
 <#elseif keyword?index % 3 == 2>
diff --git a/core/src/test/codegen/config.fmpp b/core/src/test/codegen/config.fmpp
index 5790d8e..5be63a4 100644
--- a/core/src/test/codegen/config.fmpp
+++ b/core/src/test/codegen/config.fmpp
@@ -14,396 +14,409 @@
 # limitations under the License.
 
 data: {
-    parser: {
-      # Generated parser implementation class package and name
-      package: "org.apache.calcite.sql.parser.parserextensiontesting",
-      class: "ExtensionSqlParserImpl",
+  parser: {
+    # Generated parser implementation class package and name
+    package: "org.apache.calcite.sql.parser.parserextensiontesting",
+    class: "ExtensionSqlParserImpl",
 
-      # List of import statements.
-      imports: [
-        "org.apache.calcite.sql.SqlCreate",
-        "org.apache.calcite.sql.parser.parserextensiontesting.SqlCreateTable",
-        "org.apache.calcite.sql.parser.parserextensiontesting.SqlUploadJarNode"
-      ]
+    # List of import statements.
+    imports: [
+      "org.apache.calcite.sql.SqlCreate",
+      "org.apache.calcite.sql.parser.parserextensiontesting.SqlCreateTable",
+      "org.apache.calcite.sql.parser.parserextensiontesting.SqlUploadJarNode"
+    ]
 
-      # List of keywords.
-      keywords: [
-        "UPLOAD"
-        "JAR"
-      ]
+    # List of keywords.
+    keywords: [
+      "UPLOAD"
+      "JAR"
+    ]
 
-      # List of keywords from "keywords" section that are not reserved.
-      nonReservedKeywords: [
-        "A"
-        "ABSENT"
-        "ABSOLUTE"
-        "ACTION"
-        "ADA"
-        "ADD"
-        "ADMIN"
-        "AFTER"
-        "ALWAYS"
-        "APPLY"
-        "ASC"
-        "ASSERTION"
-        "ASSIGNMENT"
-        "ATTRIBUTE"
-        "ATTRIBUTES"
-        "BEFORE"
-        "BERNOULLI"
-        "BREADTH"
-        "C"
-        "CASCADE"
-        "CATALOG"
-        "CATALOG_NAME"
-        "CENTURY"
-        "CHAIN"
-        "CHARACTER_SET_CATALOG"
-        "CHARACTER_SET_NAME"
-        "CHARACTER_SET_SCHEMA"
-        "CHARACTERISTICS"
-        "CHARACTERS"
-        "CLASS_ORIGIN"
-        "COBOL"
-        "COLLATION"
-        "COLLATION_CATALOG"
-        "COLLATION_NAME"
-        "COLLATION_SCHEMA"
-        "COLUMN_NAME"
-        "COMMAND_FUNCTION"
-        "COMMAND_FUNCTION_CODE"
-        "COMMITTED"
-        "CONDITION_NUMBER"
-        "CONDITIONAL"
-        "CONNECTION"
-        "CONNECTION_NAME"
-        "CONSTRAINT_CATALOG"
-        "CONSTRAINT_NAME"
-        "CONSTRAINT_SCHEMA"
-        "CONSTRAINTS"
-        "CONSTRUCTOR"
-        "CONTINUE"
-        "CURSOR_NAME"
-        "DATA"
-        "DATABASE"
-        "DATETIME_INTERVAL_CODE"
-        "DATETIME_INTERVAL_PRECISION"
-        "DECADE"
-        "DEFAULTS"
-        "DEFERRABLE"
-        "DEFERRED"
-        "DEFINED"
-        "DEFINER"
-        "DEGREE"
-        "DEPTH"
-        "DERIVED"
-        "DESC"
-        "DESCRIPTION"
-        "DESCRIPTOR"
-        "DIAGNOSTICS"
-        "DISPATCH"
-        "DOMAIN"
-        "DOW"
-        "DOY"
-        "DYNAMIC_FUNCTION"
-        "DYNAMIC_FUNCTION_CODE"
-        "ENCODING"
-        "EPOCH"
-        "ERROR"
-        "EXCEPTION"
-        "EXCLUDE"
-        "EXCLUDING"
-        "FINAL"
-        "FIRST"
-        "FOLLOWING"
-        "FORMAT"
-        "FORTRAN"
-        "FOUND"
-        "FRAC_SECOND"
-        "G"
-        "GENERAL"
-        "GENERATED"
-        "GEOMETRY"
-        "GO"
-        "GOTO"
-        "GRANTED"
-        "HIERARCHY"
-        "IGNORE"
-        "IMMEDIATE"
-        "IMMEDIATELY"
-        "IMPLEMENTATION"
-        "INCLUDING"
-        "INCREMENT"
-        "INITIALLY"
-        "INPUT"
-        "INSTANCE"
-        "INSTANTIABLE"
-        "INVOKER"
-        "ISODOW"
-        "ISOYEAR"
-        "ISOLATION"
-        "JAVA"
-        "JSON"
-        "K"
-        "KEY"
-        "KEY_MEMBER"
-        "KEY_TYPE"
-        "LABEL"
-        "LAST"
-        "LENGTH"
-        "LEVEL"
-        "LIBRARY"
-        "LOCATOR"
-        "M"
-        "MAP"
-        "MATCHED"
-        "MAXVALUE"
-        "MICROSECOND"
-        "MESSAGE_LENGTH"
-        "MESSAGE_OCTET_LENGTH"
-        "MESSAGE_TEXT"
-        "MILLISECOND"
-        "MILLENNIUM"
-        "MINVALUE"
-        "MORE_"
-        "MUMPS"
-        "NAME"
-        "NAMES"
-        "NANOSECOND"
-        "NESTING"
-        "NORMALIZED"
-        "NULLABLE"
-        "NULLS"
-        "NUMBER"
-        "OBJECT"
-        "OCTETS"
-        "OPTION"
-        "OPTIONS"
-        "ORDERING"
-        "ORDINALITY"
-        "OTHERS"
-        "OUTPUT"
-        "OVERRIDING"
-        "PAD"
-        "PARAMETER_MODE"
-        "PARAMETER_NAME"
-        "PARAMETER_ORDINAL_POSITION"
-        "PARAMETER_SPECIFIC_CATALOG"
-        "PARAMETER_SPECIFIC_NAME"
-        "PARAMETER_SPECIFIC_SCHEMA"
-        "PARTIAL"
-        "PASCAL"
-        "PASSING"
-        "PASSTHROUGH"
-        "PAST"
-        "PATH"
-        "PLACING"
-        "PLAN"
-        "PLI"
-        "PRECEDING"
-        "PRESERVE"
-        "PRIOR"
-        "PRIVILEGES"
-        "PUBLIC"
-        "QUARTER"
-        "READ"
-        "RELATIVE"
-        "REPEATABLE"
-        "REPLACE"
-        "RESPECT"
-        "RESTART"
-        "RESTRICT"
-        "RETURNED_CARDINALITY"
-        "RETURNED_LENGTH"
-        "RETURNED_OCTET_LENGTH"
-        "RETURNED_SQLSTATE"
-        "RETURNING"
-        "ROLE"
-        "ROUTINE"
-        "ROUTINE_CATALOG"
-        "ROUTINE_NAME"
-        "ROUTINE_SCHEMA"
-        "ROW_COUNT"
-        "SCALAR"
-        "SCALE"
-        "SCHEMA"
-        "SCHEMA_NAME"
-        "SCOPE_CATALOGS"
-        "SCOPE_NAME"
-        "SCOPE_SCHEMA"
-        "SECTION"
-        "SECURITY"
-        "SELF"
-        "SEQUENCE"
-        "SERIALIZABLE"
-        "SERVER"
-        "SERVER_NAME"
-        "SESSION"
-        "SETS"
-        "SIMPLE"
-        "SIZE"
-        "SOURCE"
-        "SPACE"
-        "SPECIFIC_NAME"
-        "SQL_BIGINT"
-        "SQL_BINARY"
-        "SQL_BIT"
-        "SQL_BLOB"
-        "SQL_BOOLEAN"
-        "SQL_CHAR"
-        "SQL_CLOB"
-        "SQL_DATE"
-        "SQL_DECIMAL"
-        "SQL_DOUBLE"
-        "SQL_FLOAT"
-        "SQL_INTEGER"
-        "SQL_INTERVAL_DAY"
-        "SQL_INTERVAL_DAY_TO_HOUR"
-        "SQL_INTERVAL_DAY_TO_MINUTE"
-        "SQL_INTERVAL_DAY_TO_SECOND"
-        "SQL_INTERVAL_HOUR"
-        "SQL_INTERVAL_HOUR_TO_MINUTE"
-        "SQL_INTERVAL_HOUR_TO_SECOND"
-        "SQL_INTERVAL_MINUTE"
-        "SQL_INTERVAL_MINUTE_TO_SECOND"
-        "SQL_INTERVAL_MONTH"
-        "SQL_INTERVAL_SECOND"
-        "SQL_INTERVAL_YEAR"
-        "SQL_INTERVAL_YEAR_TO_MONTH"
-        "SQL_LONGVARBINARY"
-        "SQL_LONGVARNCHAR"
-        "SQL_LONGVARCHAR"
-        "SQL_NCHAR"
-        "SQL_NCLOB"
-        "SQL_NUMERIC"
-        "SQL_NVARCHAR"
-        "SQL_REAL"
-        "SQL_SMALLINT"
-        "SQL_TIME"
-        "SQL_TIMESTAMP"
-        "SQL_TINYINT"
-        "SQL_TSI_DAY"
-        "SQL_TSI_FRAC_SECOND"
-        "SQL_TSI_HOUR"
-        "SQL_TSI_MICROSECOND"
-        "SQL_TSI_MINUTE"
-        "SQL_TSI_MONTH"
-        "SQL_TSI_QUARTER"
-        "SQL_TSI_SECOND"
-        "SQL_TSI_WEEK"
-        "SQL_TSI_YEAR"
-        "SQL_VARBINARY"
-        "SQL_VARCHAR"
-        "STATE"
-        "STATEMENT"
-        "STRUCTURE"
-        "STYLE"
-        "SUBCLASS_ORIGIN"
-        "SUBSTITUTE"
-        "TABLE_NAME"
-        "TEMPORARY"
-        "TIES"
-        "TIMESTAMPADD"
-        "TIMESTAMPDIFF"
-        "TOP_LEVEL_COUNT"
-        "TRANSACTION"
-        "TRANSACTIONS_ACTIVE"
-        "TRANSACTIONS_COMMITTED"
-        "TRANSACTIONS_ROLLED_BACK"
-        "TRANSFORM"
-        "TRANSFORMS"
-        "TRIGGER_CATALOG"
-        "TRIGGER_NAME"
-        "TRIGGER_SCHEMA"
-        "TYPE"
-        "UNBOUNDED"
-        "UNCOMMITTED"
-        "UNCONDITIONAL"
-        "UNDER"
-        "UNNAMED"
-        "USAGE"
-        "USER_DEFINED_TYPE_CATALOG"
-        "USER_DEFINED_TYPE_CODE"
-        "USER_DEFINED_TYPE_NAME"
-        "USER_DEFINED_TYPE_SCHEMA"
-        "UTF8"
-        "UTF16"
-        "UTF32"
-        "VERSION"
-        "VIEW"
-        "WEEK"
-        "WRAPPER"
-        "WORK"
-        "WRITE"
-        "XML"
-        "ZONE"
-      ]
+    # List of keywords from "keywords" section that are not reserved.
+    nonReservedKeywords: [
+      "A"
+      "ABSENT"
+      "ABSOLUTE"
+      "ACTION"
+      "ADA"
+      "ADD"
+      "ADMIN"
+      "AFTER"
+      "ALWAYS"
+      "APPLY"
+      "ASC"
+      "ASSERTION"
+      "ASSIGNMENT"
+      "ATTRIBUTE"
+      "ATTRIBUTES"
+      "BEFORE"
+      "BERNOULLI"
+      "BREADTH"
+      "C"
+      "CASCADE"
+      "CATALOG"
+      "CATALOG_NAME"
+      "CENTURY"
+      "CHAIN"
+      "CHARACTERISTICS"
+      "CHARACTERS"
+      "CHARACTER_SET_CATALOG"
+      "CHARACTER_SET_NAME"
+      "CHARACTER_SET_SCHEMA"
+      "CLASS_ORIGIN"
+      "COBOL"
+      "COLLATION"
+      "COLLATION_CATALOG"
+      "COLLATION_NAME"
+      "COLLATION_SCHEMA"
+      "COLUMN_NAME"
+      "COMMAND_FUNCTION"
+      "COMMAND_FUNCTION_CODE"
+      "COMMITTED"
+      "CONDITIONAL"
+      "CONDITION_NUMBER"
+      "CONNECTION"
+      "CONNECTION_NAME"
+      "CONSTRAINT_CATALOG"
+      "CONSTRAINT_NAME"
+      "CONSTRAINTS"
+      "CONSTRAINT_SCHEMA"
+      "CONSTRUCTOR"
+      "CONTINUE"
+      "CURSOR_NAME"
+      "DATA"
+      "DATABASE"
+      "DATETIME_INTERVAL_CODE"
+      "DATETIME_INTERVAL_PRECISION"
+      "DECADE"
+      "DEFAULTS"
+      "DEFERRABLE"
+      "DEFERRED"
+      "DEFINED"
+      "DEFINER"
+      "DEGREE"
+      "DEPTH"
+      "DERIVED"
+      "DESC"
+      "DESCRIPTION"
+      "DESCRIPTOR"
+      "DIAGNOSTICS"
+      "DISPATCH"
+      "DOMAIN"
+      "DOW"
+      "DOY"
+      "DYNAMIC_FUNCTION"
+      "DYNAMIC_FUNCTION_CODE"
+      "ENCODING"
+      "EPOCH"
+      "ERROR"
+      "EXCEPTION"
+      "EXCLUDE"
+      "EXCLUDING"
+      "FINAL"
+      "FIRST"
+      "FOLLOWING"
+      "FORMAT"
+      "FORTRAN"
+      "FOUND"
+      "FRAC_SECOND"
+      "G"
+      "GENERAL"
+      "GENERATED"
+      "GEOMETRY"
+      "GO"
+      "GOTO"
+      "GRANTED"
+      "HIERARCHY"
+      "IGNORE"
+      "IMMEDIATE"
+      "IMMEDIATELY"
+      "IMPLEMENTATION"
+      "INCLUDING"
+      "INCREMENT"
+      "INITIALLY"
+      "INPUT"
+      "INSTANCE"
+      "INSTANTIABLE"
+      "INVOKER"
+      "ISODOW"
+      "ISOLATION"
+      "ISOYEAR"
+      "JAVA"
+      "JSON"
+      "K"
+      "KEY"
+      "KEY_MEMBER"
+      "KEY_TYPE"
+      "LABEL"
+      "LAST"
+      "LENGTH"
+      "LEVEL"
+      "LIBRARY"
+      "LOCATOR"
+      "M"
+      "MAP"
+      "MATCHED"
+      "MAXVALUE"
+      "MESSAGE_LENGTH"
+      "MESSAGE_OCTET_LENGTH"
+      "MESSAGE_TEXT"
+      "MICROSECOND"
+      "MILLENNIUM"
+      "MILLISECOND"
+      "MINVALUE"
+      "MORE_"
+      "MUMPS"
+      "NAME"
+      "NAMES"
+      "NANOSECOND"
+      "NESTING"
+      "NORMALIZED"
+      "NULLABLE"
+      "NULLS"
+      "NUMBER"
+      "OBJECT"
+      "OCTETS"
+      "OPTION"
+      "OPTIONS"
+      "ORDERING"
+      "ORDINALITY"
+      "OTHERS"
+      "OUTPUT"
+      "OVERRIDING"
+      "PAD"
+      "PARAMETER_MODE"
+      "PARAMETER_NAME"
+      "PARAMETER_ORDINAL_POSITION"
+      "PARAMETER_SPECIFIC_CATALOG"
+      "PARAMETER_SPECIFIC_NAME"
+      "PARAMETER_SPECIFIC_SCHEMA"
+      "PARTIAL"
+      "PASCAL"
+      "PASSING"
+      "PASSTHROUGH"
+      "PAST"
+      "PATH"
+      "PLACING"
+      "PLAN"
+      "PLI"
+      "PRECEDING"
+      "PRESERVE"
+      "PRIOR"
+      "PRIVILEGES"
+      "PUBLIC"
+      "QUARTER"
+      "READ"
+      "RELATIVE"
+      "REPEATABLE"
+      "REPLACE"
+      "RESPECT"
+      "RESTART"
+      "RESTRICT"
+      "RETURNED_CARDINALITY"
+      "RETURNED_LENGTH"
+      "RETURNED_OCTET_LENGTH"
+      "RETURNED_SQLSTATE"
+      "RETURNING"
+      "ROLE"
+      "ROUTINE"
+      "ROUTINE_CATALOG"
+      "ROUTINE_NAME"
+      "ROUTINE_SCHEMA"
+      "ROW_COUNT"
+      "SCALAR"
+      "SCALE"
+      "SCHEMA"
+      "SCHEMA_NAME"
+      "SCOPE_CATALOGS"
+      "SCOPE_NAME"
+      "SCOPE_SCHEMA"
+      "SECTION"
+      "SECURITY"
+      "SELF"
+      "SEQUENCE"
+      "SERIALIZABLE"
+      "SERVER"
+      "SERVER_NAME"
+      "SESSION"
+      "SETS"
+      "SIMPLE"
+      "SIZE"
+      "SOURCE"
+      "SPACE"
+      "SPECIFIC_NAME"
+      "SQL_BIGINT"
+      "SQL_BINARY"
+      "SQL_BIT"
+      "SQL_BLOB"
+      "SQL_BOOLEAN"
+      "SQL_CHAR"
+      "SQL_CLOB"
+      "SQL_DATE"
+      "SQL_DECIMAL"
+      "SQL_DOUBLE"
+      "SQL_FLOAT"
+      "SQL_INTEGER"
+      "SQL_INTERVAL_DAY"
+      "SQL_INTERVAL_DAY_TO_HOUR"
+      "SQL_INTERVAL_DAY_TO_MINUTE"
+      "SQL_INTERVAL_DAY_TO_SECOND"
+      "SQL_INTERVAL_HOUR"
+      "SQL_INTERVAL_HOUR_TO_MINUTE"
+      "SQL_INTERVAL_HOUR_TO_SECOND"
+      "SQL_INTERVAL_MINUTE"
+      "SQL_INTERVAL_MINUTE_TO_SECOND"
+      "SQL_INTERVAL_MONTH"
+      "SQL_INTERVAL_SECOND"
+      "SQL_INTERVAL_YEAR"
+      "SQL_INTERVAL_YEAR_TO_MONTH"
+      "SQL_LONGVARBINARY"
+      "SQL_LONGVARCHAR"
+      "SQL_LONGVARNCHAR"
+      "SQL_NCHAR"
+      "SQL_NCLOB"
+      "SQL_NUMERIC"
+      "SQL_NVARCHAR"
+      "SQL_REAL"
+      "SQL_SMALLINT"
+      "SQL_TIME"
+      "SQL_TIMESTAMP"
+      "SQL_TINYINT"
+      "SQL_TSI_DAY"
+      "SQL_TSI_FRAC_SECOND"
+      "SQL_TSI_HOUR"
+      "SQL_TSI_MICROSECOND"
+      "SQL_TSI_MINUTE"
+      "SQL_TSI_MONTH"
+      "SQL_TSI_QUARTER"
+      "SQL_TSI_SECOND"
+      "SQL_TSI_WEEK"
+      "SQL_TSI_YEAR"
+      "SQL_VARBINARY"
+      "SQL_VARCHAR"
+      "STATE"
+      "STATEMENT"
+      "STRUCTURE"
+      "STYLE"
+      "SUBCLASS_ORIGIN"
+      "SUBSTITUTE"
+      "TABLE_NAME"
+      "TEMPORARY"
+      "TIES"
+      "TIMESTAMPADD"
+      "TIMESTAMPDIFF"
+      "TOP_LEVEL_COUNT"
+      "TRANSACTION"
+      "TRANSACTIONS_ACTIVE"
+      "TRANSACTIONS_COMMITTED"
+      "TRANSACTIONS_ROLLED_BACK"
+      "TRANSFORM"
+      "TRANSFORMS"
+      "TRIGGER_CATALOG"
+      "TRIGGER_NAME"
+      "TRIGGER_SCHEMA"
+      "TYPE"
+      "UNBOUNDED"
+      "UNCOMMITTED"
+      "UNCONDITIONAL"
+      "UNDER"
+      "UNNAMED"
+      "USAGE"
+      "USER_DEFINED_TYPE_CATALOG"
+      "USER_DEFINED_TYPE_CODE"
+      "USER_DEFINED_TYPE_NAME"
+      "USER_DEFINED_TYPE_SCHEMA"
+      "UTF16"
+      "UTF32"
+      "UTF8"
+      "VERSION"
+      "VIEW"
+      "WEEK"
+      "WORK"
+      "WRAPPER"
+      "WRITE"
+      "XML"
+      "ZONE"
+    ]
 
-      # List of additional join types. Each is a method with no arguments.
-      # Example: LeftSemiJoin()
-      joinTypes: [
-      ]
+    # List of non-reserved keywords to add;
+    # items in this list become non-reserved
+    nonReservedKeywordsToAdd: [
+    ]
 
-      # List of methods for parsing custom SQL statements.
-      statementParserMethods: [
-        "SqlDescribeSpacePower()"
-      ]
+    # List of non-reserved keywords to remove;
+    # items in this list become reserved
+    nonReservedKeywordsToRemove: [
+    ]
 
-      # List of methods for parsing custom literals.
-      # Example: ParseJsonLiteral().
-      literalParserMethods: [
-      ]
+    # List of additional join types. Each is a method with no arguments.
+    # Example: LeftSemiJoin()
+    joinTypes: [
+    ]
 
-      # List of methods for parsing custom data types.
-      dataTypeParserMethods: [
-      ]
+    # List of methods for parsing custom SQL statements.
+    statementParserMethods: [
+      "SqlDescribeSpacePower()"
+    ]
 
-      # List of methods for parsing builtin function calls.
-      # Return type of method implementation should be "SqlNode".
-      # Example: DateFunctionCall().
-      builtinFunctionCallMethods: [
-      ]
+    # List of methods for parsing custom literals.
+    # Return type of method implementation should be "SqlNode".
+    # Example: ParseJsonLiteral().
+    literalParserMethods: [
+    ]
 
-      # List of methods for parsing extensions to "ALTER <scope>" calls.
-      # Each must accept arguments "(SqlParserPos pos, String scope)".
-      alterStatementParserMethods: [
-        "SqlUploadJarNode"
-      ]
+    # List of methods for parsing custom data types.
+    # Return type of method implementation should be "SqlTypeNameSpec".
+    # Example: SqlParseTimeStampZ().
+    dataTypeParserMethods: [
+    ]
 
-      # List of methods for parsing extensions to "CREATE [OR REPLACE]" calls.
-      # Each must accept arguments "(SqlParserPos pos, boolean replace)".
-      createStatementParserMethods: [
-        "SqlCreateTable"
-      ]
+    # List of methods for parsing builtin function calls.
+    # Return type of method implementation should be "SqlNode".
+    # Example: DateFunctionCall().
+    builtinFunctionCallMethods: [
+    ]
 
-      # List of methods for parsing extensions to "DROP" calls.
-      # Each must accept arguments "(SqlParserPos pos)".
-      dropStatementParserMethods: [
-      ]
+    # List of methods for parsing extensions to "ALTER <scope>" calls.
+    # Each must accept arguments "(SqlParserPos pos, String scope)".
+    alterStatementParserMethods: [
+      "SqlUploadJarNode"
+    ]
 
-      # Binary operators tokens
-      binaryOperatorsTokens: [
-      ]
+    # List of methods for parsing extensions to "CREATE [OR REPLACE]" calls.
+    # Each must accept arguments "(SqlParserPos pos, boolean replace)".
+    createStatementParserMethods: [
+      "SqlCreateTable"
+    ]
 
-      # Binary operators initialization
-      extraBinaryExpressions: [
-      ]
+    # List of methods for parsing extensions to "DROP" calls.
+    # Each must accept arguments "(SqlParserPos pos)".
+    dropStatementParserMethods: [
+    ]
 
-      # List of files in @includes directory that have parser method
-      # implementations for parsing custom SQL statements, literals or types
-      # given as part of "statementParserMethods", "literalParserMethods" or
-      # "dataTypeParserMethods".
-      implementationFiles: [
-        "parserImpls.ftl"
-      ]
+    # Binary operators tokens
+    binaryOperatorsTokens: [
+    ]
 
-      includePosixOperators: false
-      includeCompoundIdentifier: true
-      includeBraces: true
-      includeAdditionalDeclarations: false
+    # Binary operators initialization
+    extraBinaryExpressions: [
+    ]
 
-    }
+    # List of files in @includes directory that have parser method
+    # implementations for parsing custom SQL statements, literals or types
+    # given as part of "statementParserMethods", "literalParserMethods" or
+    # "dataTypeParserMethods".
+    implementationFiles: [
+      "parserImpls.ftl"
+    ]
+
+    includePosixOperators: false
+    includeCompoundIdentifier: true
+    includeBraces: true
+    includeAdditionalDeclarations: false
+  }
 }
+
 freemarkerLinks: {
-    includes: includes/
+  includes: includes/
 }
diff --git a/server/src/main/codegen/config.fmpp b/server/src/main/codegen/config.fmpp
index 6ea921c..c2e9e2a 100644
--- a/server/src/main/codegen/config.fmpp
+++ b/server/src/main/codegen/config.fmpp
@@ -14,423 +14,435 @@
 # limitations under the License.
 
 data: {
-    parser: {
-      # Generated parser implementation class package and name
-      package: "org.apache.calcite.sql.parser.ddl",
-      class: "SqlDdlParserImpl",
+  parser: {
+    # Generated parser implementation class package and name
+    package: "org.apache.calcite.sql.parser.ddl",
+    class: "SqlDdlParserImpl",
 
-      # List of import statements.
-      imports: [
-        "org.apache.calcite.schema.ColumnStrategy"
-        "org.apache.calcite.sql.SqlCreate"
-        "org.apache.calcite.sql.SqlDrop"
-        "org.apache.calcite.sql.ddl.SqlDdlNodes"
-        "java.util.Map"
-        "java.util.HashMap"
-      ]
+    # List of import statements.
+    imports: [
+      "org.apache.calcite.schema.ColumnStrategy"
+      "org.apache.calcite.sql.SqlCreate"
+      "org.apache.calcite.sql.SqlDrop"
+      "org.apache.calcite.sql.ddl.SqlDdlNodes"
+      "java.util.Map"
+      "java.util.HashMap"
+    ]
 
-      # List of keywords.
-      keywords: [
-        "IF"
-        "MATERIALIZED"
-        "STORED"
-        "VIRTUAL"
-        "JAR"
-        "FILE"
-        "ARCHIVE"
-      ]
+    # List of keywords.
+    keywords: [
+      "IF"
+      "MATERIALIZED"
+      "STORED"
+      "VIRTUAL"
+      "JAR"
+      "FILE"
+      "ARCHIVE"
+    ]
 
-      # List of keywords from "keywords" section that are not reserved.
-      nonReservedKeywords: [
-        "A"
-        "ABSENT"
-        "ABSOLUTE"
-        "ACTION"
-        "ADA"
-        "ADD"
-        "ADMIN"
-        "AFTER"
-        "ALWAYS"
-        "APPLY"
-        "ASC"
-        "ASSERTION"
-        "ASSIGNMENT"
-        "ATTRIBUTE"
-        "ATTRIBUTES"
-        "BEFORE"
-        "BERNOULLI"
-        "BREADTH"
-        "C"
-        "CASCADE"
-        "CATALOG"
-        "CATALOG_NAME"
-        "CENTURY"
-        "CHAIN"
-        "CHARACTER_SET_CATALOG"
-        "CHARACTER_SET_NAME"
-        "CHARACTER_SET_SCHEMA"
-        "CHARACTERISTICS"
-        "CHARACTERS"
-        "CLASS_ORIGIN"
-        "COBOL"
-        "COLLATION"
-        "COLLATION_CATALOG"
-        "COLLATION_NAME"
-        "COLLATION_SCHEMA"
-        "COLUMN_NAME"
-        "COMMAND_FUNCTION"
-        "COMMAND_FUNCTION_CODE"
-        "COMMITTED"
-        "CONDITION_NUMBER"
-        "CONDITIONAL"
-        "CONNECTION"
-        "CONNECTION_NAME"
-        "CONSTRAINT_CATALOG"
-        "CONSTRAINT_NAME"
-        "CONSTRAINT_SCHEMA"
-        "CONSTRAINTS"
-        "CONSTRUCTOR"
-        "CONTINUE"
-        "CURSOR_NAME"
-        "DATA"
-        "DATABASE"
-        "DATETIME_INTERVAL_CODE"
-        "DATETIME_INTERVAL_PRECISION"
-        "DECADE"
-        "DEFAULTS"
-        "DEFERRABLE"
-        "DEFERRED"
-        "DEFINED"
-        "DEFINER"
-        "DEGREE"
-        "DEPTH"
-        "DERIVED"
-        "DESC"
-        "DESCRIPTION"
-        "DESCRIPTOR"
-        "DIAGNOSTICS"
-        "DISPATCH"
-        "DOMAIN"
-        "DOW"
-        "DOY"
-        "DYNAMIC_FUNCTION"
-        "DYNAMIC_FUNCTION_CODE"
-        "ENCODING"
-        "EPOCH"
-        "ERROR"
-        "EXCEPTION"
-        "EXCLUDE"
-        "EXCLUDING"
-        "FINAL"
-        "FIRST"
-        "FOLLOWING"
-        "FORMAT"
-        "FORTRAN"
-        "FOUND"
-        "FRAC_SECOND"
-        "G"
-        "GENERAL"
-        "GENERATED"
-        "GEOMETRY"
-        "GO"
-        "GOTO"
-        "GRANTED"
-        "HIERARCHY"
-        "IGNORE"
-        "IMMEDIATE"
-        "IMMEDIATELY"
-        "IMPLEMENTATION"
-        "INCLUDING"
-        "INCREMENT"
-        "INITIALLY"
-        "INPUT"
-        "INSTANCE"
-        "INSTANTIABLE"
-        "INVOKER"
-        "ISODOW"
-        "ISOYEAR"
-        "ISOLATION"
-        "JAVA"
-        "JSON"
-        "K"
-        "KEY"
-        "KEY_MEMBER"
-        "KEY_TYPE"
-        "LABEL"
-        "LAST"
-        "LENGTH"
-        "LEVEL"
-        "LIBRARY"
-        "LOCATOR"
-        "M"
-        "MAP"
-        "MATCHED"
-        "MAXVALUE"
-        "MICROSECOND"
-        "MESSAGE_LENGTH"
-        "MESSAGE_OCTET_LENGTH"
-        "MESSAGE_TEXT"
-        "MILLISECOND"
-        "MILLENNIUM"
-        "MINVALUE"
-        "MORE_"
-        "MUMPS"
-        "NAME"
-        "NAMES"
-        "NANOSECOND"
-        "NESTING"
-        "NORMALIZED"
-        "NULLABLE"
-        "NULLS"
-        "NUMBER"
-        "OBJECT"
-        "OCTETS"
-        "OPTION"
-        "OPTIONS"
-        "ORDERING"
-        "ORDINALITY"
-        "OTHERS"
-        "OUTPUT"
-        "OVERRIDING"
-        "PAD"
-        "PARAMETER_MODE"
-        "PARAMETER_NAME"
-        "PARAMETER_ORDINAL_POSITION"
-        "PARAMETER_SPECIFIC_CATALOG"
-        "PARAMETER_SPECIFIC_NAME"
-        "PARAMETER_SPECIFIC_SCHEMA"
-        "PARTIAL"
-        "PASCAL"
-        "PASSING"
-        "PASSTHROUGH"
-        "PAST"
-        "PATH"
-        "PLACING"
-        "PLAN"
-        "PLI"
-        "PRECEDING"
-        "PRESERVE"
-        "PRIOR"
-        "PRIVILEGES"
-        "PUBLIC"
-        "QUARTER"
-        "READ"
-        "RELATIVE"
-        "REPEATABLE"
-        "REPLACE"
-        "RESPECT"
-        "RESTART"
-        "RESTRICT"
-        "RETURNED_CARDINALITY"
-        "RETURNED_LENGTH"
-        "RETURNED_OCTET_LENGTH"
-        "RETURNED_SQLSTATE"
-        "RETURNING"
-        "ROLE"
-        "ROUTINE"
-        "ROUTINE_CATALOG"
-        "ROUTINE_NAME"
-        "ROUTINE_SCHEMA"
-        "ROW_COUNT"
-        "SCALAR"
-        "SCALE"
-        "SCHEMA"
-        "SCHEMA_NAME"
-        "SCOPE_CATALOGS"
-        "SCOPE_NAME"
-        "SCOPE_SCHEMA"
-        "SECTION"
-        "SECURITY"
-        "SELF"
-        "SEQUENCE"
-        "SERIALIZABLE"
-        "SERVER"
-        "SERVER_NAME"
-        "SESSION"
-        "SETS"
-        "SIMPLE"
-        "SIZE"
-        "SOURCE"
-        "SPACE"
-        "SPECIFIC_NAME"
-        "SQL_BIGINT"
-        "SQL_BINARY"
-        "SQL_BIT"
-        "SQL_BLOB"
-        "SQL_BOOLEAN"
-        "SQL_CHAR"
-        "SQL_CLOB"
-        "SQL_DATE"
-        "SQL_DECIMAL"
-        "SQL_DOUBLE"
-        "SQL_FLOAT"
-        "SQL_INTEGER"
-        "SQL_INTERVAL_DAY"
-        "SQL_INTERVAL_DAY_TO_HOUR"
-        "SQL_INTERVAL_DAY_TO_MINUTE"
-        "SQL_INTERVAL_DAY_TO_SECOND"
-        "SQL_INTERVAL_HOUR"
-        "SQL_INTERVAL_HOUR_TO_MINUTE"
-        "SQL_INTERVAL_HOUR_TO_SECOND"
-        "SQL_INTERVAL_MINUTE"
-        "SQL_INTERVAL_MINUTE_TO_SECOND"
-        "SQL_INTERVAL_MONTH"
-        "SQL_INTERVAL_SECOND"
-        "SQL_INTERVAL_YEAR"
-        "SQL_INTERVAL_YEAR_TO_MONTH"
-        "SQL_LONGVARBINARY"
-        "SQL_LONGVARNCHAR"
-        "SQL_LONGVARCHAR"
-        "SQL_NCHAR"
-        "SQL_NCLOB"
-        "SQL_NUMERIC"
-        "SQL_NVARCHAR"
-        "SQL_REAL"
-        "SQL_SMALLINT"
-        "SQL_TIME"
-        "SQL_TIMESTAMP"
-        "SQL_TINYINT"
-        "SQL_TSI_DAY"
-        "SQL_TSI_FRAC_SECOND"
-        "SQL_TSI_HOUR"
-        "SQL_TSI_MICROSECOND"
-        "SQL_TSI_MINUTE"
-        "SQL_TSI_MONTH"
-        "SQL_TSI_QUARTER"
-        "SQL_TSI_SECOND"
-        "SQL_TSI_WEEK"
-        "SQL_TSI_YEAR"
-        "SQL_VARBINARY"
-        "SQL_VARCHAR"
-        "STATE"
-        "STATEMENT"
-        "STRUCTURE"
-        "STYLE"
-        "SUBCLASS_ORIGIN"
-        "SUBSTITUTE"
-        "TABLE_NAME"
-        "TEMPORARY"
-        "TIES"
-        "TIMESTAMPADD"
-        "TIMESTAMPDIFF"
-        "TOP_LEVEL_COUNT"
-        "TRANSACTION"
-        "TRANSACTIONS_ACTIVE"
-        "TRANSACTIONS_COMMITTED"
-        "TRANSACTIONS_ROLLED_BACK"
-        "TRANSFORM"
-        "TRANSFORMS"
-        "TRIGGER_CATALOG"
-        "TRIGGER_NAME"
-        "TRIGGER_SCHEMA"
-        "TYPE"
-        "UNBOUNDED"
-        "UNCOMMITTED"
-        "UNCONDITIONAL"
-        "UNDER"
-        "UNNAMED"
-        "USAGE"
-        "USER_DEFINED_TYPE_CATALOG"
-        "USER_DEFINED_TYPE_CODE"
-        "USER_DEFINED_TYPE_NAME"
-        "USER_DEFINED_TYPE_SCHEMA"
-        "UTF8"
-        "UTF16"
-        "UTF32"
-        "VERSION"
-        "VIEW"
-        "WEEK"
-        "WRAPPER"
-        "WORK"
-        "WRITE"
-        "XML"
-        "ZONE"
+    # List of keywords from "keywords" section that are not reserved.
+    nonReservedKeywords: [
+      "A"
+      "ABSENT"
+      "ABSOLUTE"
+      "ACTION"
+      "ADA"
+      "ADD"
+      "ADMIN"
+      "AFTER"
+      "ALWAYS"
+      "APPLY"
+      "ASC"
+      "ASSERTION"
+      "ASSIGNMENT"
+      "ATTRIBUTE"
+      "ATTRIBUTES"
+      "BEFORE"
+      "BERNOULLI"
+      "BREADTH"
+      "C"
+      "CASCADE"
+      "CATALOG"
+      "CATALOG_NAME"
+      "CENTURY"
+      "CHAIN"
+      "CHARACTERISTICS"
+      "CHARACTERS"
+      "CHARACTER_SET_CATALOG"
+      "CHARACTER_SET_NAME"
+      "CHARACTER_SET_SCHEMA"
+      "CLASS_ORIGIN"
+      "COBOL"
+      "COLLATION"
+      "COLLATION_CATALOG"
+      "COLLATION_NAME"
+      "COLLATION_SCHEMA"
+      "COLUMN_NAME"
+      "COMMAND_FUNCTION"
+      "COMMAND_FUNCTION_CODE"
+      "COMMITTED"
+      "CONDITIONAL"
+      "CONDITION_NUMBER"
+      "CONNECTION"
+      "CONNECTION_NAME"
+      "CONSTRAINT_CATALOG"
+      "CONSTRAINT_NAME"
+      "CONSTRAINTS"
+      "CONSTRAINT_SCHEMA"
+      "CONSTRUCTOR"
+      "CONTINUE"
+      "CURSOR_NAME"
+      "DATA"
+      "DATABASE"
+      "DATETIME_INTERVAL_CODE"
+      "DATETIME_INTERVAL_PRECISION"
+      "DECADE"
+      "DEFAULTS"
+      "DEFERRABLE"
+      "DEFERRED"
+      "DEFINED"
+      "DEFINER"
+      "DEGREE"
+      "DEPTH"
+      "DERIVED"
+      "DESC"
+      "DESCRIPTION"
+      "DESCRIPTOR"
+      "DIAGNOSTICS"
+      "DISPATCH"
+      "DOMAIN"
+      "DOW"
+      "DOY"
+      "DYNAMIC_FUNCTION"
+      "DYNAMIC_FUNCTION_CODE"
+      "ENCODING"
+      "EPOCH"
+      "ERROR"
+      "EXCEPTION"
+      "EXCLUDE"
+      "EXCLUDING"
+      "FINAL"
+      "FIRST"
+      "FOLLOWING"
+      "FORMAT"
+      "FORTRAN"
+      "FOUND"
+      "FRAC_SECOND"
+      "G"
+      "GENERAL"
+      "GENERATED"
+      "GEOMETRY"
+      "GO"
+      "GOTO"
+      "GRANTED"
+      "HIERARCHY"
+      "IGNORE"
+      "IMMEDIATE"
+      "IMMEDIATELY"
+      "IMPLEMENTATION"
+      "INCLUDING"
+      "INCREMENT"
+      "INITIALLY"
+      "INPUT"
+      "INSTANCE"
+      "INSTANTIABLE"
+      "INVOKER"
+      "ISODOW"
+      "ISOLATION"
+      "ISOYEAR"
+      "JAVA"
+      "JSON"
+      "K"
+      "KEY"
+      "KEY_MEMBER"
+      "KEY_TYPE"
+      "LABEL"
+      "LAST"
+      "LENGTH"
+      "LEVEL"
+      "LIBRARY"
+      "LOCATOR"
+      "M"
+      "MAP"
+      "MATCHED"
+      "MAXVALUE"
+      "MESSAGE_LENGTH"
+      "MESSAGE_OCTET_LENGTH"
+      "MESSAGE_TEXT"
+      "MICROSECOND"
+      "MILLENNIUM"
+      "MILLISECOND"
+      "MINVALUE"
+      "MORE_"
+      "MUMPS"
+      "NAME"
+      "NAMES"
+      "NANOSECOND"
+      "NESTING"
+      "NORMALIZED"
+      "NULLABLE"
+      "NULLS"
+      "NUMBER"
+      "OBJECT"
+      "OCTETS"
+      "OPTION"
+      "OPTIONS"
+      "ORDERING"
+      "ORDINALITY"
+      "OTHERS"
+      "OUTPUT"
+      "OVERRIDING"
+      "PAD"
+      "PARAMETER_MODE"
+      "PARAMETER_NAME"
+      "PARAMETER_ORDINAL_POSITION"
+      "PARAMETER_SPECIFIC_CATALOG"
+      "PARAMETER_SPECIFIC_NAME"
+      "PARAMETER_SPECIFIC_SCHEMA"
+      "PARTIAL"
+      "PASCAL"
+      "PASSING"
+      "PASSTHROUGH"
+      "PAST"
+      "PATH"
+      "PLACING"
+      "PLAN"
+      "PLI"
+      "PRECEDING"
+      "PRESERVE"
+      "PRIOR"
+      "PRIVILEGES"
+      "PUBLIC"
+      "QUARTER"
+      "READ"
+      "RELATIVE"
+      "REPEATABLE"
+      "REPLACE"
+      "RESPECT"
+      "RESTART"
+      "RESTRICT"
+      "RETURNED_CARDINALITY"
+      "RETURNED_LENGTH"
+      "RETURNED_OCTET_LENGTH"
+      "RETURNED_SQLSTATE"
+      "RETURNING"
+      "ROLE"
+      "ROUTINE"
+      "ROUTINE_CATALOG"
+      "ROUTINE_NAME"
+      "ROUTINE_SCHEMA"
+      "ROW_COUNT"
+      "SCALAR"
+      "SCALE"
+      "SCHEMA"
+      "SCHEMA_NAME"
+      "SCOPE_CATALOGS"
+      "SCOPE_NAME"
+      "SCOPE_SCHEMA"
+      "SECTION"
+      "SECURITY"
+      "SELF"
+      "SEQUENCE"
+      "SERIALIZABLE"
+      "SERVER"
+      "SERVER_NAME"
+      "SESSION"
+      "SETS"
+      "SIMPLE"
+      "SIZE"
+      "SOURCE"
+      "SPACE"
+      "SPECIFIC_NAME"
+      "SQL_BIGINT"
+      "SQL_BINARY"
+      "SQL_BIT"
+      "SQL_BLOB"
+      "SQL_BOOLEAN"
+      "SQL_CHAR"
+      "SQL_CLOB"
+      "SQL_DATE"
+      "SQL_DECIMAL"
+      "SQL_DOUBLE"
+      "SQL_FLOAT"
+      "SQL_INTEGER"
+      "SQL_INTERVAL_DAY"
+      "SQL_INTERVAL_DAY_TO_HOUR"
+      "SQL_INTERVAL_DAY_TO_MINUTE"
+      "SQL_INTERVAL_DAY_TO_SECOND"
+      "SQL_INTERVAL_HOUR"
+      "SQL_INTERVAL_HOUR_TO_MINUTE"
+      "SQL_INTERVAL_HOUR_TO_SECOND"
+      "SQL_INTERVAL_MINUTE"
+      "SQL_INTERVAL_MINUTE_TO_SECOND"
+      "SQL_INTERVAL_MONTH"
+      "SQL_INTERVAL_SECOND"
+      "SQL_INTERVAL_YEAR"
+      "SQL_INTERVAL_YEAR_TO_MONTH"
+      "SQL_LONGVARBINARY"
+      "SQL_LONGVARCHAR"
+      "SQL_LONGVARNCHAR"
+      "SQL_NCHAR"
+      "SQL_NCLOB"
+      "SQL_NUMERIC"
+      "SQL_NVARCHAR"
+      "SQL_REAL"
+      "SQL_SMALLINT"
+      "SQL_TIME"
+      "SQL_TIMESTAMP"
+      "SQL_TINYINT"
+      "SQL_TSI_DAY"
+      "SQL_TSI_FRAC_SECOND"
+      "SQL_TSI_HOUR"
+      "SQL_TSI_MICROSECOND"
+      "SQL_TSI_MINUTE"
+      "SQL_TSI_MONTH"
+      "SQL_TSI_QUARTER"
+      "SQL_TSI_SECOND"
+      "SQL_TSI_WEEK"
+      "SQL_TSI_YEAR"
+      "SQL_VARBINARY"
+      "SQL_VARCHAR"
+      "STATE"
+      "STATEMENT"
+      "STRUCTURE"
+      "STYLE"
+      "SUBCLASS_ORIGIN"
+      "SUBSTITUTE"
+      "TABLE_NAME"
+      "TEMPORARY"
+      "TIES"
+      "TIMESTAMPADD"
+      "TIMESTAMPDIFF"
+      "TOP_LEVEL_COUNT"
+      "TRANSACTION"
+      "TRANSACTIONS_ACTIVE"
+      "TRANSACTIONS_COMMITTED"
+      "TRANSACTIONS_ROLLED_BACK"
+      "TRANSFORM"
+      "TRANSFORMS"
+      "TRIGGER_CATALOG"
+      "TRIGGER_NAME"
+      "TRIGGER_SCHEMA"
+      "TYPE"
+      "UNBOUNDED"
+      "UNCOMMITTED"
+      "UNCONDITIONAL"
+      "UNDER"
+      "UNNAMED"
+      "USAGE"
+      "USER_DEFINED_TYPE_CATALOG"
+      "USER_DEFINED_TYPE_CODE"
+      "USER_DEFINED_TYPE_NAME"
+      "USER_DEFINED_TYPE_SCHEMA"
+      "UTF16"
+      "UTF32"
+      "UTF8"
+      "VERSION"
+      "VIEW"
+      "WEEK"
+      "WORK"
+      "WRAPPER"
+      "WRITE"
+      "XML"
+      "ZONE"
+    ]
 
-        # not in core, added in server
-        "IF"
-        "MATERIALIZED"
-        "STORED"
-        "VIRTUAL"
-        "JAR"
-        "FILE"
-        "ARCHIVE"
-      ]
+    # List of non-reserved keywords to add;
+    # items in this list become non-reserved
+    nonReservedKeywordsToAdd: [
+      # not in core, added in server
+      "IF"
+      "MATERIALIZED"
+      "STORED"
+      "VIRTUAL"
+      "JAR"
+      "FILE"
+      "ARCHIVE"
+    ]
 
-      # List of additional join types. Each is a method with no arguments.
-      # Example: LeftSemiJoin()
-      joinTypes: [
-      ]
+    # List of non-reserved keywords to remove;
+    # items in this list become reserved
+    nonReservedKeywordsToRemove: [
+    ]
 
-      # List of methods for parsing custom SQL statements.
-      statementParserMethods: [
-      ]
+    # List of additional join types. Each is a method with no arguments.
+    # Example: LeftSemiJoin()
+    joinTypes: [
+    ]
 
-      # List of methods for parsing custom literals.
-      # Example: ParseJsonLiteral().
-      literalParserMethods: [
-      ]
+    # List of methods for parsing custom SQL statements.
+    statementParserMethods: [
+    ]
 
-      # List of methods for parsing custom data types.
-      dataTypeParserMethods: [
-      ]
+    # List of methods for parsing custom literals.
+    # Return type of method implementation should be "SqlNode".
+    # Example: ParseJsonLiteral().
+    literalParserMethods: [
+    ]
 
-      # List of methods for parsing builtin function calls.
-      # Return type of method implementation should be "SqlNode".
-      # Example: DateFunctionCall().
-      builtinFunctionCallMethods: [
-      ]
+    # List of methods for parsing custom data types.
+    # Return type of method implementation should be "SqlTypeNameSpec".
+    # Example: SqlParseTimeStampZ().
+    dataTypeParserMethods: [
+    ]
 
-      # List of methods for parsing extensions to "ALTER <scope>" calls.
-      # Each must accept arguments "(SqlParserPos pos, String scope)".
-      alterStatementParserMethods: [
-      ]
+    # List of methods for parsing builtin function calls.
+    # Return type of method implementation should be "SqlNode".
+    # Example: DateFunctionCall().
+    builtinFunctionCallMethods: [
+    ]
 
-      # List of methods for parsing extensions to "CREATE [OR REPLACE]" calls.
-      # Each must accept arguments "(SqlParserPos pos, boolean replace)".
-      createStatementParserMethods: [
-        "SqlCreateForeignSchema"
-        "SqlCreateMaterializedView"
-        "SqlCreateSchema"
-        "SqlCreateTable"
-        "SqlCreateType"
-        "SqlCreateView"
-        "SqlCreateFunction"
-      ]
+    # List of methods for parsing extensions to "ALTER <scope>" calls.
+    # Each must accept arguments "(SqlParserPos pos, String scope)".
+    alterStatementParserMethods: [
+    ]
 
-      # List of methods for parsing extensions to "DROP" calls.
-      # Each must accept arguments "(SqlParserPos pos)".
-      dropStatementParserMethods: [
-        "SqlDropMaterializedView"
-        "SqlDropSchema"
-        "SqlDropTable"
-        "SqlDropType"
-        "SqlDropView"
-        "SqlDropFunction"
-      ]
+    # List of methods for parsing extensions to "CREATE [OR REPLACE]" calls.
+    # Each must accept arguments "(SqlParserPos pos, boolean replace)".
+    createStatementParserMethods: [
+      "SqlCreateForeignSchema"
+      "SqlCreateMaterializedView"
+      "SqlCreateSchema"
+      "SqlCreateTable"
+      "SqlCreateType"
+      "SqlCreateView"
+      "SqlCreateFunction"
+    ]
 
-      # Binary operators tokens
-      binaryOperatorsTokens: [
-      ]
+    # List of methods for parsing extensions to "DROP" calls.
+    # Each must accept arguments "(SqlParserPos pos)".
+    dropStatementParserMethods: [
+      "SqlDropMaterializedView"
+      "SqlDropSchema"
+      "SqlDropTable"
+      "SqlDropType"
+      "SqlDropView"
+      "SqlDropFunction"
+    ]
 
-      # Binary operators initialization
-      extraBinaryExpressions: [
-      ]
+    # Binary operators tokens
+    binaryOperatorsTokens: [
+    ]
 
-      # List of files in @includes directory that have parser method
-      # implementations for parsing custom SQL statements, literals or types
-      # given as part of "statementParserMethods", "literalParserMethods" or
-      # "dataTypeParserMethods".
-      implementationFiles: [
-        "parserImpls.ftl"
-      ]
+    # Binary operators initialization
+    extraBinaryExpressions: [
+    ]
 
-      includePosixOperators: false
-      includeCompoundIdentifier: true
-      includeBraces: true
-      includeAdditionalDeclarations: false
+    # List of files in @includes directory that have parser method
+    # implementations for parsing custom SQL statements, literals or types
+    # given as part of "statementParserMethods", "literalParserMethods" or
+    # "dataTypeParserMethods".
+    implementationFiles: [
+      "parserImpls.ftl"
+    ]
 
-    }
+    includePosixOperators: false
+    includeCompoundIdentifier: true
+    includeBraces: true
+    includeAdditionalDeclarations: false
+  }
 }
+
 freemarkerLinks: {
-    includes: includes/
+  includes: includes/
 }