You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2020/08/27 04:08:08 UTC
[incubator-doris] branch master updated: [Mysql Compatibility]
Support convert() and signed/unsigned interger cast (#4364)
This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
The following commit(s) were added to refs/heads/master by this push:
new f218327 [Mysql Compatibility] Support convert() and signed/unsigned interger cast (#4364)
f218327 is described below
commit f218327dd97c10691b649e6fde7ad6f9fa14beaa
Author: Mingyu Chen <mo...@gmail.com>
AuthorDate: Thu Aug 27 12:07:58 2020 +0800
[Mysql Compatibility] Support convert() and signed/unsigned interger cast (#4364)
1. Support convert(expr, target_type) function, which is same as CastExpr
2. Support cast (expr as signed/unsigned int)
This is just for compatibility, the signed/unsigned specification is meaningless.
---
.../exec/schema_scanner/schema_columns_scanner.cpp | 3 +++
fe/fe-core/src/main/cup/sql_parser.cup | 23 +++++++++++++++++++---
.../java/org/apache/doris/catalog/SchemaTable.java | 4 ++++
fe/fe-core/src/main/jflex/sql_scanner.flex | 2 ++
4 files changed, 29 insertions(+), 3 deletions(-)
diff --git a/be/src/exec/schema_scanner/schema_columns_scanner.cpp b/be/src/exec/schema_scanner/schema_columns_scanner.cpp
index c96c986..640f7bd 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 5ae323c..fcd265a 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 83ceebd..a3788e2 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 564e514..21371ec 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));
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org