From e0cb60dcd27a4e6639807849dd45a7adce18ae1d Mon Sep 17 00:00:00 2001 From: Roman Nozdrin Date: Tue, 11 Feb 2020 19:28:07 +0300 Subject: [PATCH] Merge pull request #1024 from LinuxJedi/collate_warn MCOL-3721 Allow collate and warn on ORDER BY --- dbcon/ddlpackage/ddl.l | 1 + dbcon/ddlpackage/ddl.y | 24 +++++++++++++++++++++--- dbcon/mysql/ha_mcs_execplan.cpp | 5 +++++ 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/dbcon/ddlpackage/ddl.l b/dbcon/ddlpackage/ddl.l index 4cef8182e..b4034c732 100644 --- a/dbcon/ddlpackage/ddl.l +++ b/dbcon/ddlpackage/ddl.l @@ -171,6 +171,7 @@ FLOAT {return IDB_FLOAT;} DOUBLE {return DOUBLE;} REAL {return REAL;} CHARSET {return CHARSET;} +COLLATE {return COLLATE;} IF {return IDB_IF;} EXISTS {return EXISTS;} CHANGE {return CHANGE;} diff --git a/dbcon/ddlpackage/ddl.y b/dbcon/ddlpackage/ddl.y index 177a64caa..d0f408e86 100644 --- a/dbcon/ddlpackage/ddl.y +++ b/dbcon/ddlpackage/ddl.y @@ -111,7 +111,7 @@ MATCH MAX_ROWS MEDIUMBLOB MEDIUMTEXT MIN_ROWS MODIFY NO NOT NULL_TOK NUMBER NUMERIC ON PARTIAL PRECISION PRIMARY REFERENCES RENAME RESTRICT SET SMALLINT TABLE TEXT TINYBLOB TINYTEXT TINYINT TO UNIQUE UNSIGNED UPDATE USER SESSION_USER SYSTEM_USER VARCHAR VARBINARY -VARYING WITH ZONE DOUBLE IDB_FLOAT REAL CHARSET IDB_IF EXISTS CHANGE TRUNCATE +VARYING WITH ZONE DOUBLE IDB_FLOAT REAL CHARSET COLLATE IDB_IF EXISTS CHANGE TRUNCATE BOOL BOOLEAN MEDIUMINT TIMESTAMP %token DQ_IDENT IDENT FCONST SCONST CP_SEARCH_CONDITION_TEXT ICONST DATE TIME @@ -485,8 +485,14 @@ table_option: } | DEFAULT CHARSET opt_equal ident {$$ = new pair("default charset", $4);} + | + CHARSET opt_equal ident {$$ = new pair("default charset", $3);} | DEFAULT IDB_CHAR SET opt_equal ident {$$ = new pair("default charset", $5);} + | + DEFAULT COLLATE opt_equal ident {$$ = new pair("default collate", $4);} + | + COLLATE opt_equal ident {$$ = new pair("default collate", $3);} ; alter_table_statement: @@ -726,13 +732,25 @@ optional_braces: | '(' ')' {} ; +opt_column_charset: + /* empty */ {} + | + IDB_CHAR SET ident {} + ; + +opt_column_collate: + /* empty */ {} + | + COLLATE ident {} + ; + data_type: - character_string_type + character_string_type opt_column_charset opt_column_collate | binary_string_type | numeric_type | datetime_type | blob_type - | text_type + | text_type opt_column_charset opt_column_collate | IDB_BLOB { $$ = new ColumnType(DDL_BLOB); diff --git a/dbcon/mysql/ha_mcs_execplan.cpp b/dbcon/mysql/ha_mcs_execplan.cpp index 227b80a3b..f2234a2ed 100755 --- a/dbcon/mysql/ha_mcs_execplan.cpp +++ b/dbcon/mysql/ha_mcs_execplan.cpp @@ -7562,6 +7562,11 @@ int getSelectPlan(gp_walk_info& gwi, SELECT_LEX& select_lex, { gwi.fatalParseError = true; } + else if ((ord_item->type() == Item::FUNC_ITEM) && (((Item_func*)ord_item)->functype() == Item_func::COLLATE_FUNC)) + { + push_warning(gwi.thd, Sql_condition::WARN_LEVEL_NOTE, WARN_OPTION_IGNORED, "COLLATE is ignored in ColumnStore"); + continue; + } else { rc = buildReturnedColumn(ord_item, gwi, gwi.fatalParseError);