diff --git a/be/src/exec/schema_scanner/schema_columns_scanner.cpp b/be/src/exec/schema_scanner/schema_columns_scanner.cpp index c96c9862ed..640f7bd1e4 100644 --- a/be/src/exec/schema_scanner/schema_columns_scanner.cpp +++ b/be/src/exec/schema_scanner/schema_columns_scanner.cpp @@ -39,6 +39,7 @@ SchemaScanner::ColumnDesc SchemaColumnsScanner::_s_col_columns[] = { { "CHARACTER_OCTET_LENGTH", TYPE_BIGINT, sizeof(int64_t), true }, { "NUMERIC_PRECISION", TYPE_BIGINT, sizeof(int64_t), true }, { "NUMERIC_SCALE", TYPE_BIGINT, sizeof(int64_t), true }, + { "DATETIME_PRECISION", TYPE_BIGINT, sizeof(int64_t), true }, { "CHARACTER_SET_NAME", TYPE_VARCHAR, sizeof(StringValue), true }, { "COLLATION_NAME", TYPE_VARCHAR, sizeof(StringValue), true }, { "COLUMN_TYPE", TYPE_VARCHAR, sizeof(StringValue), false }, @@ -48,6 +49,8 @@ SchemaScanner::ColumnDesc SchemaColumnsScanner::_s_col_columns[] = { { "COLUMN_COMMENT", TYPE_VARCHAR, sizeof(StringValue), false }, { "COLUMN_SIZE", TYPE_BIGINT, sizeof(int64_t), true }, { "DECIMAL_DIGITS", TYPE_BIGINT, sizeof(int64_t), true }, + { "GENERATION_EXPRESSION", TYPE_VARCHAR, sizeof(StringValue), true }, + { "SRS_ID", TYPE_BIGINT, sizeof(int64_t), true }, }; SchemaColumnsScanner::SchemaColumnsScanner() : diff --git a/fe/fe-core/src/main/cup/sql_parser.cup b/fe/fe-core/src/main/cup/sql_parser.cup index 5ae323c79e..fcd265a1b9 100644 --- a/fe/fe-core/src/main/cup/sql_parser.cup +++ b/fe/fe-core/src/main/cup/sql_parser.cup @@ -231,7 +231,7 @@ terminal String KW_ADD, KW_ADMIN, KW_AFTER, KW_AGGREGATE, KW_ALL, KW_ALTER, KW_A KW_BACKEND, KW_BACKUP, KW_BETWEEN, KW_BEGIN, KW_BIGINT, KW_BITMAP, KW_BITMAP_UNION, KW_BOOLEAN, KW_BOTH, KW_BROKER, KW_BACKENDS, KW_BY, KW_BUILTIN, KW_CANCEL, KW_CASE, KW_CAST, KW_CHAIN, KW_CHAR, KW_CHARSET, KW_CHECK, KW_CLUSTER, KW_CLUSTERS, KW_COLLATE, KW_COLLATION, KW_COLUMN, KW_COLUMNS, KW_COMMENT, KW_COMMIT, KW_COMMITTED, - KW_CONFIG, KW_CONNECTION, KW_CONNECTION_ID, KW_CONSISTENT, KW_COUNT, KW_CREATE, KW_CROSS, KW_CUBE, KW_CURRENT, KW_CURRENT_USER, + KW_CONFIG, KW_CONNECTION, KW_CONNECTION_ID, KW_CONSISTENT, KW_CONVERT, KW_COUNT, KW_CREATE, KW_CROSS, KW_CUBE, KW_CURRENT, KW_CURRENT_USER, KW_DATA, KW_DATABASE, KW_DATABASES, KW_DATE, KW_DATETIME, KW_DAY, KW_DECIMAL, KW_DECOMMISSION, KW_DEFAULT, KW_DESC, KW_DESCRIBE, KW_DELETE, KW_DISTINCT, KW_DISTINCTPC, KW_DISTINCTPCSA, KW_DISTRIBUTED, KW_DISTRIBUTION, KW_DYNAMIC, KW_BUCKETS, KW_DIV, KW_DOUBLE, KW_DROP, KW_DROPP, KW_DUPLICATE, KW_ELSE, KW_ENABLE, KW_END, KW_ENGINE, KW_ENGINES, KW_ENTER, KW_ERRORS, KW_EVENTS, KW_EXCEPT, KW_EXISTS, KW_EXPORT, KW_EXTERNAL, KW_EXTRACT, @@ -255,7 +255,7 @@ terminal String KW_ADD, KW_ADMIN, KW_AFTER, KW_AGGREGATE, KW_ALL, KW_ALTER, KW_A KW_RANDOM, KW_RANGE, KW_READ, KW_RECOVER, KW_REGEXP, KW_RELEASE, KW_RENAME, KW_REPAIR, KW_REPEATABLE, KW_REPOSITORY, KW_REPOSITORIES, KW_REPLACE, KW_REPLACE_IF_NOT_NULL, KW_REPLICA, KW_RESOURCE, KW_RESOURCES, KW_RESTORE, KW_RETURNS, KW_RESUME, KW_REVOKE, KW_RIGHT, KW_ROLE, KW_ROLES, KW_ROLLBACK, KW_ROLLUP, KW_ROUTINE, KW_ROW, KW_ROWS, - KW_SCHEMA, KW_SCHEMAS, KW_SECOND, KW_SELECT, KW_SEMI, KW_SERIALIZABLE, KW_SESSION, KW_SET, KW_SETS, KW_SHOW, + KW_SCHEMA, KW_SCHEMAS, KW_SECOND, KW_SELECT, KW_SEMI, KW_SERIALIZABLE, KW_SESSION, KW_SET, KW_SETS, KW_SHOW, KW_SIGNED, KW_SMALLINT, KW_SNAPSHOT, KW_SONAME, KW_SPLIT, KW_START, KW_STATUS, KW_STOP, KW_STORAGE, KW_STRING, KW_SUM, KW_SUPERUSER, KW_SYNC, KW_SYSTEM, KW_TABLE, KW_TABLES, KW_TABLET, KW_TASK, KW_TEMPORARY, KW_TERMINATED, KW_THAN, KW_TIME, KW_THEN, KW_TIMESTAMP, KW_TINYINT, @@ -478,6 +478,8 @@ nonterminal Boolean opt_tmp; nonterminal OutFileClause opt_outfile; nonterminal RoutineLoadDataSourceProperties opt_datasource_properties; +nonterminal Boolean opt_signed_unsigned; + precedence nonassoc COMMA; precedence nonassoc STRING_LITERAL; precedence nonassoc KW_COLUMNS; @@ -3788,7 +3790,7 @@ type ::= {: RESULT = Type.TINYINT; :} | KW_SMALLINT opt_field_length {: RESULT = Type.SMALLINT; :} - | KW_INT opt_field_length + | opt_signed_unsigned KW_INT opt_field_length {: RESULT = Type.INT; :} | KW_BIGINT opt_field_length {: RESULT = Type.BIGINT; :} @@ -3844,6 +3846,17 @@ opt_field_length ::= {: RESULT = null; :} ; +// signed and unsigned is meaningless for Doris. +// This is just for MySQL compatibility now. +opt_signed_unsigned ::= + /* empty */ + {: RESULT = true; :} + | KW_SIGNED + {: RESULT = true; :} + | KW_UNSIGNED + {: RESULT = false; :} + ; + type_def ::= type:t {: RESULT = new TypeDef(t); :} @@ -4034,6 +4047,8 @@ non_pred_expr ::= {: RESULT = new BoolLiteral(true); :} | KW_NULL KW_IS KW_NOT KW_NULL {: RESULT = new BoolLiteral(false); :} + | KW_CONVERT LPAREN expr:e COMMA type_def:targetType RPAREN + {: RESULT = new CastExpr(targetType, e); :} ; expr_pipe_list ::= @@ -4563,6 +4578,8 @@ keyword ::= {: RESULT = id; :} | KW_CONNECTION_ID:id {: RESULT = id; :} + | KW_CONVERT:id + {: RESULT = id; :} | KW_DATA:id {: RESULT = id; :} | KW_DATE:id diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/SchemaTable.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/SchemaTable.java index 83ceebde74..a3788e20c2 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/SchemaTable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/SchemaTable.java @@ -221,6 +221,7 @@ public class SchemaTable extends Table { ScalarType.createType(PrimitiveType.BIGINT)) .column("NUMERIC_PRECISION", ScalarType.createType(PrimitiveType.BIGINT)) .column("NUMERIC_SCALE", ScalarType.createType(PrimitiveType.BIGINT)) + .column("DATETIME_PRECISION", ScalarType.createType(PrimitiveType.BIGINT)) .column("CHARACTER_SET_NAME", ScalarType.createVarchar(32)) .column("COLLATION_NAME", ScalarType.createVarchar(32)) .column("COLUMN_TYPE", ScalarType.createVarchar(32)) @@ -230,6 +231,8 @@ public class SchemaTable extends Table { .column("COLUMN_COMMENT", ScalarType.createVarchar(255)) .column("COLUMN_SIZE", ScalarType.createType(PrimitiveType.BIGINT)) .column("DECIMAL_DIGITS", ScalarType.createType(PrimitiveType.BIGINT)) + .column("GENERATION_EXPRESSION", ScalarType.createVarchar(64)) + .column("SRS_ID", ScalarType.createType(PrimitiveType.BIGINT)) .build())) .put("character_sets", new SchemaTable( SystemIdGenerator.getNextId(), @@ -307,3 +310,4 @@ public class SchemaTable extends Table { return tTableDescriptor; } } + diff --git a/fe/fe-core/src/main/jflex/sql_scanner.flex b/fe/fe-core/src/main/jflex/sql_scanner.flex index 564e5142d8..21371ecb58 100644 --- a/fe/fe-core/src/main/jflex/sql_scanner.flex +++ b/fe/fe-core/src/main/jflex/sql_scanner.flex @@ -135,6 +135,7 @@ import org.apache.doris.qe.SqlModeHelper; keywordMap.put("connection", new Integer(SqlParserSymbols.KW_CONNECTION)); keywordMap.put("connection_id", new Integer(SqlParserSymbols.KW_CONNECTION_ID)); keywordMap.put("consistent", new Integer(SqlParserSymbols.KW_CONSISTENT)); + keywordMap.put("convert", new Integer(SqlParserSymbols.KW_CONVERT)); keywordMap.put("count", new Integer(SqlParserSymbols.KW_COUNT)); keywordMap.put("create", new Integer(SqlParserSymbols.KW_CREATE)); keywordMap.put("cross", new Integer(SqlParserSymbols.KW_CROSS)); @@ -328,6 +329,7 @@ import org.apache.doris.qe.SqlModeHelper; keywordMap.put("set", new Integer(SqlParserSymbols.KW_SET)); keywordMap.put("sets", new Integer(SqlParserSymbols.KW_SETS)); keywordMap.put("show", new Integer(SqlParserSymbols.KW_SHOW)); + keywordMap.put("signed", new Integer(SqlParserSymbols.KW_SIGNED)); keywordMap.put("smallint", new Integer(SqlParserSymbols.KW_SMALLINT)); keywordMap.put("snapshot", new Integer(SqlParserSymbols.KW_SNAPSHOT)); keywordMap.put("soname", new Integer(SqlParserSymbols.KW_SONAME));