calcite建表语句解析时,需要进行的字符匹配序列:
varchar添加了长度之后就会报错,估计是没法匹配左括号吧,
final public void TableElement(List<SqlNode> list) throws ParseException { final SqlIdentifier id; final SqlDataTypeSpec type; final boolean nullable; final SqlNode e; final SqlNode constraint; SqlIdentifier name = null; final SqlNodeList columnList; final Span s = Span.of(); final ColumnStrategy strategy; if (jj_2_4(2)) { id = SimpleIdentifier(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case A: case ABSENT: case ABSOLUTE: case ACTION: case ADA: case ADD: case ADMIN: case AFTER: case ALWAYS: case ANY: case APPLY: case ASC: case ASSERTION: case ASSIGNMENT: case ATTRIBUTE: case ATTRIBUTES: case BEFORE: case BERNOULLI: case BIGINT: case BINARY: case BOOLEAN: case BREADTH: case C: case CASCADE: case CATALOG: case CATALOG_NAME: case CENTURY: case CHAIN: case CHAR: case CHARACTER: case CHARACTER_SET_CATALOG: case CHARACTER_SET_NAME: case CHARACTER_SET_SCHEMA: case CHARACTERISTICS: case CHARACTERS: case CLASS_ORIGIN: case COBOL: case COLLATION: case COLLATION_CATALOG: case COLLATION_NAME: case COLLATION_SCHEMA: case COLUMN_NAME: case COMMAND_FUNCTION: case COMMAND_FUNCTION_CODE: case COMMITTED: case CONDITIONAL: case CONDITION_NUMBER: case CONNECTION: case CONNECTION_NAME: case CONSTRAINT_CATALOG: case CONSTRAINT_NAME: case CONSTRAINT_SCHEMA: case CONSTRAINTS: case CONSTRUCTOR: case CONTINUE: case CURSOR_NAME: case DATA: case DATABASE: case DATE: case DATETIME_INTERVAL_CODE: case DATETIME_INTERVAL_PRECISION: case DAYS: case DEC: case DECADE: case DECIMAL: case DEFAULTS: case DEFERRABLE: case DEFERRED: case DEFINED: case DEFINER: case DEGREE: case DEPTH: case DERIVED: case DESC: case DESCRIPTION: case DESCRIPTOR: case DIAGNOSTICS: case DISPATCH: case DOMAIN: case DOUBLE: case DOW: case DOY: case DYNAMIC_FUNCTION: case DYNAMIC_FUNCTION_CODE: case ENCODING: case EPOCH: case ERROR: case EXCEPTION: case EXCLUDE: case EXCLUDING: case FINAL: case FIRST: case FLOAT: case FOLLOWING: case FORMAT: case FORTRAN: case FOUND: case FRAC_SECOND: case G: case GENERAL: case GENERATED: case GEOMETRY: case GO: case GOTO: case GRANTED: case HIERARCHY: case HOURS: case IGNORE: case IMMEDIATE: case IMMEDIATELY: case IMPLEMENTATION: case INCLUDING: case INCREMENT: case INITIALLY: case INPUT: case INSTANCE: case INSTANTIABLE: case INT: case INTEGER: case INVOKER: case ISODOW: case ISOYEAR: case ISOLATION: case JAVA: case JSON: case K: case KEY: case KEY_MEMBER: case KEY_TYPE: case LABEL: case LAST: case LENGTH: case LEVEL: case LIBRARY: case LOCATOR: case M: case MAP: case MATCHED: case MAXVALUE: case MESSAGE_LENGTH: case MESSAGE_OCTET_LENGTH: case MESSAGE_TEXT: case MICROSECOND: case MILLISECOND: case MILLENNIUM: case MINUTES: case MINVALUE: case MONTHS: case MORE_: case MUMPS: case NAME: case NAMES: case NANOSECOND: case NESTING: case NORMALIZED: case NULLABLE: case NULLS: case NUMBER: case NUMERIC: case OBJECT: case OCTETS: case OPTION: case OPTIONS: case ORDERING: case ORDINALITY: case OTHERS: case OUTPUT: case OVERRIDING: case PAD: case PARAMETER_MODE: case PARAMETER_NAME: case PARAMETER_ORDINAL_POSITION: case PARAMETER_SPECIFIC_CATALOG: case PARAMETER_SPECIFIC_NAME: case PARAMETER_SPECIFIC_SCHEMA: case PARTIAL: case PASCAL: case PASSING: case PASSTHROUGH: case PAST: case PATH: case PLACING: case PLAN: case PLI: case PRECEDING: case PRESERVE: case PRIOR: case PRIVILEGES: case PUBLIC: case QUARTER: case READ: case REAL: case RELATIVE: case REPEATABLE: case REPLACE: case RESPECT: case RESTART: case RESTRICT: case RETURNED_CARDINALITY: case RETURNED_LENGTH: case RETURNED_OCTET_LENGTH: case RETURNED_SQLSTATE: case RETURNING: case ROLE: case ROUTINE: case ROUTINE_CATALOG: case ROUTINE_NAME: case ROUTINE_SCHEMA: case ROW: case ROW_COUNT: case SCALAR: case SCALE: case SCHEMA: case SCHEMA_NAME: case SCOPE_CATALOGS: case SCOPE_NAME: case SCOPE_SCHEMA: case SECONDS: case SECTION: case SECURITY: case SELF: case SEQUENCE: case SERIALIZABLE: case SERVER: case SERVER_NAME: case SESSION: case SETS: case SIMPLE: case SIZE: case SMALLINT: case SOURCE: case SPACE: case SPECIFIC_NAME: case SQL_BIGINT: case SQL_BINARY: case SQL_BIT: case SQL_BLOB: case SQL_BOOLEAN: case SQL_CHAR: case SQL_CLOB: case SQL_DATE: case SQL_DECIMAL: case SQL_DOUBLE: case SQL_FLOAT: case SQL_INTEGER: case SQL_INTERVAL_DAY: case SQL_INTERVAL_DAY_TO_HOUR: case SQL_INTERVAL_DAY_TO_MINUTE: case SQL_INTERVAL_DAY_TO_SECOND: case SQL_INTERVAL_HOUR: case SQL_INTERVAL_HOUR_TO_MINUTE: case SQL_INTERVAL_HOUR_TO_SECOND: case SQL_INTERVAL_MINUTE: case SQL_INTERVAL_MINUTE_TO_SECOND: case SQL_INTERVAL_MONTH: case SQL_INTERVAL_SECOND: case SQL_INTERVAL_YEAR: case SQL_INTERVAL_YEAR_TO_MONTH: case SQL_LONGVARBINARY: case SQL_LONGVARCHAR: case SQL_LONGVARNCHAR: case SQL_NCHAR: case SQL_NCLOB: case SQL_NUMERIC: case SQL_NVARCHAR: case SQL_REAL: case SQL_SMALLINT: case SQL_TIME: case SQL_TIMESTAMP: case SQL_TINYINT: case SQL_TSI_DAY: case SQL_TSI_FRAC_SECOND: case SQL_TSI_HOUR: case SQL_TSI_MICROSECOND: case SQL_TSI_MINUTE: case SQL_TSI_MONTH: case SQL_TSI_QUARTER: case SQL_TSI_SECOND: case SQL_TSI_WEEK: case SQL_TSI_YEAR: case SQL_VARBINARY: case SQL_VARCHAR: case STATE: case STATEMENT: case STRUCTURE: case STYLE: case SUBCLASS_ORIGIN: case SUBSTITUTE: case TABLE_NAME: case TEMPORARY: case TIES: case TIME: case TIMESTAMP: case TIMESTAMPADD: case TIMESTAMPDIFF: case TINYINT: case TOP_LEVEL_COUNT: case TRANSACTION: case TRANSACTIONS_ACTIVE: case TRANSACTIONS_COMMITTED: case TRANSACTIONS_ROLLED_BACK: case TRANSFORM: case TRANSFORMS: case TRIGGER_CATALOG: case TRIGGER_NAME: case TRIGGER_SCHEMA: case TYPE: case UNBOUNDED: case UNCOMMITTED: case UNCONDITIONAL: case UNDER: case UNNAMED: case USAGE: case USER_DEFINED_TYPE_CATALOG: case USER_DEFINED_TYPE_CODE: case USER_DEFINED_TYPE_NAME: case USER_DEFINED_TYPE_SCHEMA: case UTF8: case UTF16: case UTF32: case VARBINARY: case VARCHAR: case VERSION: case VIEW: case WEEK: case WORK: case WRAPPER: case WRITE: case XML: case YEARS: case ZONE: case IF: case MATERIALIZED: case STORED: case VIRTUAL: case JAR: case FILE: case ARCHIVE: case BRACKET_QUOTED_IDENTIFIER: case QUOTED_IDENTIFIER: case BACK_QUOTED_IDENTIFIER: case IDENTIFIER: case UNICODE_QUOTED_IDENTIFIER: type = DataType(); nullable = NullableOptDefaultTrue(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case AS: case GENERATED: switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case GENERATED: jj_consume_token(GENERATED); jj_consume_token(ALWAYS); break; default: jj_la1[29] = jj_gen; ; } jj_consume_token(AS); jj_consume_token(LPAREN); e = Expression(ExprContext.ACCEPT_SUB_QUERY); jj_consume_token(RPAREN); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case VIRTUAL: jj_consume_token(VIRTUAL); strategy = ColumnStrategy.VIRTUAL; break; case STORED: jj_consume_token(STORED); strategy = ColumnStrategy.STORED; break; default: jj_la1[30] = jj_gen; strategy = ColumnStrategy.VIRTUAL; } break; case DEFAULT_: jj_consume_token(DEFAULT_); e = Expression(ExprContext.ACCEPT_SUB_QUERY); strategy = ColumnStrategy.DEFAULT; break; default: jj_la1[31] = jj_gen; e = null; strategy = nullable ? ColumnStrategy.NULLABLE : ColumnStrategy.NOT_NULLABLE; } list.add( SqlDdlNodes.column(s.add(id).end(this), id, type.withNullable(nullable), e, strategy)); break; default: jj_la1[32] = jj_gen; list.add(id); } } else { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case A: case ABSENT: case ABSOLUTE: case ACTION: case ADA: case ADD: case ADMIN: case AFTER: case ALWAYS: case APPLY: case ASC: case ASSERTION: case ASSIGNMENT: case ATTRIBUTE: case ATTRIBUTES: case BEFORE: case BERNOULLI: case BREADTH: case C: case CASCADE: case CATALOG: case CATALOG_NAME: case CENTURY: case CHAIN: case CHARACTER_SET_CATALOG: case CHARACTER_SET_NAME: case CHARACTER_SET_SCHEMA: case CHARACTERISTICS: case CHARACTERS: case CLASS_ORIGIN: case COBOL: case COLLATION: case COLLATION_CATALOG: case COLLATION_NAME: case COLLATION_SCHEMA: case COLUMN_NAME: case COMMAND_FUNCTION: case COMMAND_FUNCTION_CODE: case COMMITTED: case CONDITIONAL: case CONDITION_NUMBER: case CONNECTION: case CONNECTION_NAME: case CONSTRAINT_CATALOG: case CONSTRAINT_NAME: case CONSTRAINT_SCHEMA: case CONSTRAINTS: case CONSTRUCTOR: case CONTINUE: case CURSOR_NAME: case DATA: case DATABASE: case DATETIME_INTERVAL_CODE: case DATETIME_INTERVAL_PRECISION: case DAYS: case DECADE: case DEFAULTS: case DEFERRABLE: case DEFERRED: case DEFINED: case DEFINER: case DEGREE: case DEPTH: case DERIVED: case DESC: case DESCRIPTION: case DESCRIPTOR: case DIAGNOSTICS: case DISPATCH: case DOMAIN: case DOW: case DOY: case DYNAMIC_FUNCTION: case DYNAMIC_FUNCTION_CODE: case ENCODING: case EPOCH: case ERROR: case EXCEPTION: case EXCLUDE: case EXCLUDING: case FINAL: case FIRST: case FOLLOWING: case FORMAT: case FORTRAN: case FOUND: case FRAC_SECOND: case G: case GENERAL: case GENERATED: case GEOMETRY: case GO: case GOTO: case GRANTED: case HIERARCHY: case HOURS: case IGNORE: case IMMEDIATE: case IMMEDIATELY: case IMPLEMENTATION: case INCLUDING: case INCREMENT: case INITIALLY: case INPUT: case INSTANCE: case INSTANTIABLE: case INVOKER: case ISODOW: case ISOYEAR: case ISOLATION: case JAVA: case JSON: case K: case KEY: case KEY_MEMBER: case KEY_TYPE: case LABEL: case LAST: case LENGTH: case LEVEL: case LIBRARY: case LOCATOR: case M: case MAP: case MATCHED: case MAXVALUE: case MESSAGE_LENGTH: case MESSAGE_OCTET_LENGTH: case MESSAGE_TEXT: case MICROSECOND: case MILLISECOND: case MILLENNIUM: case MINUTES: case MINVALUE: case MONTHS: case MORE_: case MUMPS: case NAME: case NAMES: case NANOSECOND: case NESTING: case NORMALIZED: case NULLABLE: case NULLS: case NUMBER: case OBJECT: case OCTETS: case OPTION: case OPTIONS: case ORDERING: case ORDINALITY: case OTHERS: case OUTPUT: case OVERRIDING: case PAD: case PARAMETER_MODE: case PARAMETER_NAME: case PARAMETER_ORDINAL_POSITION: case PARAMETER_SPECIFIC_CATALOG: case PARAMETER_SPECIFIC_NAME: case PARAMETER_SPECIFIC_SCHEMA: case PARTIAL: case PASCAL: case PASSING: case PASSTHROUGH: case PAST: case PATH: case PLACING: case PLAN: case PLI: case PRECEDING: case PRESERVE: case PRIOR: case PRIVILEGES: case PUBLIC: case QUARTER: case READ: case RELATIVE: case REPEATABLE: case REPLACE: case RESPECT: case RESTART: case RESTRICT: case RETURNED_CARDINALITY: case RETURNED_LENGTH: case RETURNED_OCTET_LENGTH: case RETURNED_SQLSTATE: case RETURNING: case ROLE: case ROUTINE: case ROUTINE_CATALOG: case ROUTINE_NAME: case ROUTINE_SCHEMA: case ROW_COUNT: case SCALAR: case SCALE: case SCHEMA: case SCHEMA_NAME: case SCOPE_CATALOGS: case SCOPE_NAME: case SCOPE_SCHEMA: case SECONDS: case SECTION: case SECURITY: case SELF: case SEQUENCE: case SERIALIZABLE: case SERVER: case SERVER_NAME: case SESSION: case SETS: case SIMPLE: case SIZE: case SOURCE: case SPACE: case SPECIFIC_NAME: case SQL_BIGINT: case SQL_BINARY: case SQL_BIT: case SQL_BLOB: case SQL_BOOLEAN: case SQL_CHAR: case SQL_CLOB: case SQL_DATE: case SQL_DECIMAL: case SQL_DOUBLE: case SQL_FLOAT: case SQL_INTEGER: case SQL_INTERVAL_DAY: case SQL_INTERVAL_DAY_TO_HOUR: case SQL_INTERVAL_DAY_TO_MINUTE: case SQL_INTERVAL_DAY_TO_SECOND: case SQL_INTERVAL_HOUR: case SQL_INTERVAL_HOUR_TO_MINUTE: case SQL_INTERVAL_HOUR_TO_SECOND: case SQL_INTERVAL_MINUTE: case SQL_INTERVAL_MINUTE_TO_SECOND: case SQL_INTERVAL_MONTH: case SQL_INTERVAL_SECOND: case SQL_INTERVAL_YEAR: case SQL_INTERVAL_YEAR_TO_MONTH: case SQL_LONGVARBINARY: case SQL_LONGVARCHAR: case SQL_LONGVARNCHAR: case SQL_NCHAR: case SQL_NCLOB: case SQL_NUMERIC: case SQL_NVARCHAR: case SQL_REAL: case SQL_SMALLINT: case SQL_TIME: case SQL_TIMESTAMP: case SQL_TINYINT: case SQL_TSI_DAY: case SQL_TSI_FRAC_SECOND: case SQL_TSI_HOUR: case SQL_TSI_MICROSECOND: case SQL_TSI_MINUTE: case SQL_TSI_MONTH: case SQL_TSI_QUARTER: case SQL_TSI_SECOND: case SQL_TSI_WEEK: case SQL_TSI_YEAR: case SQL_VARBINARY: case SQL_VARCHAR: case STATE: case STATEMENT: case STRUCTURE: case STYLE: case SUBCLASS_ORIGIN: case SUBSTITUTE: case TABLE_NAME: case TEMPORARY: case TIES: case TIMESTAMPADD: case TIMESTAMPDIFF: case TOP_LEVEL_COUNT: case TRANSACTION: case TRANSACTIONS_ACTIVE: case TRANSACTIONS_COMMITTED: case TRANSACTIONS_ROLLED_BACK: case TRANSFORM: case TRANSFORMS: case TRIGGER_CATALOG: case TRIGGER_NAME: case TRIGGER_SCHEMA: case TYPE: case UNBOUNDED: case UNCOMMITTED: case UNCONDITIONAL: case UNDER: case UNNAMED: case USAGE: case USER_DEFINED_TYPE_CATALOG: case USER_DEFINED_TYPE_CODE: case USER_DEFINED_TYPE_NAME: case USER_DEFINED_TYPE_SCHEMA: case UTF8: case UTF16: case UTF32: case VERSION: case VIEW: case WEEK: case WORK: case WRAPPER: case WRITE: case XML: case YEARS: case ZONE: case IF: case MATERIALIZED: case STORED: case VIRTUAL: case JAR: case FILE: case ARCHIVE: case BRACKET_QUOTED_IDENTIFIER: case QUOTED_IDENTIFIER: case BACK_QUOTED_IDENTIFIER: case IDENTIFIER: case UNICODE_QUOTED_IDENTIFIER: id = SimpleIdentifier(); list.add(id); break; case CHECK: case CONSTRAINT: case PRIMARY: case UNIQUE: switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case CONSTRAINT: jj_consume_token(CONSTRAINT); s.add(this); name = SimpleIdentifier(); break; default: jj_la1[33] = jj_gen; ; } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case CHECK: jj_consume_token(CHECK); s.add(this); jj_consume_token(LPAREN); e = Expression(ExprContext.ACCEPT_SUB_QUERY); jj_consume_token(RPAREN); list.add(SqlDdlNodes.check(s.end(this), name, e)); break; case UNIQUE: jj_consume_token(UNIQUE); s.add(this); columnList = ParenthesizedSimpleIdentifierList(); list.add(SqlDdlNodes.unique(s.end(columnList), name, columnList)); break; case PRIMARY: jj_consume_token(PRIMARY); s.add(this); jj_consume_token(KEY); columnList = ParenthesizedSimpleIdentifierList(); list.add(SqlDdlNodes.primary(s.end(columnList), name, columnList)); break; default: jj_la1[34] = jj_gen; jj_consume_token(-1); throw new ParseException(); } break; default: jj_la1[35] = jj_gen; jj_consume_token(-1); throw new ParseException(); } } }