Loading mysql-test/r/create.result +11 −0 Original line number Diff line number Diff line Loading @@ -1559,6 +1559,17 @@ SHOW INDEX FROM t1; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment t1 1 c1 1 c1 A NULL NULL NULL YES BTREE DROP TABLE t1; CREATE TABLE t1 (a INTEGER AUTO_INCREMENT PRIMARY KEY, b INTEGER NOT NULL); INSERT IGNORE INTO t1 (b) VALUES (5); CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY) SELECT a FROM t1; CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY) SELECT a FROM t1; ERROR 23000: Duplicate entry '1' for key 1 CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY) SELECT a FROM t1; ERROR 23000: Duplicate entry '1' for key 1 DROP TABLE t1, t2; End of 5.0 tests CREATE TABLE t1 (a int, b int); insert into t1 values (1,1),(1,2); Loading mysql-test/r/func_regexp.result +12 −0 Original line number Diff line number Diff line Loading @@ -114,6 +114,18 @@ End of 4.1 tests SELECT 1 REGEXP NULL; 1 REGEXP NULL NULL SELECT '' REGEXP BINARY NULL; '' REGEXP BINARY NULL NULL SELECT NULL REGEXP BINARY NULL; NULL REGEXP BINARY NULL NULL SELECT 'A' REGEXP BINARY NULL; 'A' REGEXP BINARY NULL NULL SELECT "ABC" REGEXP BINARY NULL; "ABC" REGEXP BINARY NULL NULL End of 5.0 tests CREATE TABLE t1(a INT, b CHAR(4)); INSERT INTO t1 VALUES (1, '6.1'), (1, '7.0'), (1, '8.0'); Loading mysql-test/t/create.test +18 −0 Original line number Diff line number Diff line Loading @@ -1176,6 +1176,24 @@ SHOW INDEX FROM t1; DROP TABLE t1; # # Bug#38821: Assert table->auto_increment_field_not_null failed in open_table() # CREATE TABLE t1 (a INTEGER AUTO_INCREMENT PRIMARY KEY, b INTEGER NOT NULL); INSERT IGNORE INTO t1 (b) VALUES (5); CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY) SELECT a FROM t1; --error 1062 CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY) SELECT a FROM t1; --error 1062 CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY) SELECT a FROM t1; DROP TABLE t1, t2; --echo End of 5.0 tests # Loading mysql-test/t/func_regexp.test +10 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,16 @@ drop table t1; SELECT 1 REGEXP NULL; # # Bug #39021: SELECT REGEXP BINARY NULL never returns # SELECT '' REGEXP BINARY NULL; SELECT NULL REGEXP BINARY NULL; SELECT 'A' REGEXP BINARY NULL; SELECT "ABC" REGEXP BINARY NULL; --echo End of 5.0 tests Loading sql/item_cmpfunc.cc +22 −9 Original line number Diff line number Diff line Loading @@ -4460,8 +4460,20 @@ void Item_func_like::cleanup() #ifdef USE_REGEX bool Item_func_regex::regcomp(bool send_error) /** @brief Compile regular expression. @param[in] send_error send error message if any. @details Make necessary character set conversion then compile regular expression passed in the args[1]. @retval 0 success. @retval 1 error occurred. @retval -1 given null regular expression. */ int Item_func_regex::regcomp(bool send_error) { char buff[MAX_FIELD_WIDTH]; String tmp(buff,sizeof(buff),&my_charset_bin); Loading @@ -4469,12 +4481,12 @@ Item_func_regex::regcomp(bool send_error) int error; if (args[1]->null_value) return TRUE; return -1; if (regex_compiled) { if (!stringcmp(res, &prev_regexp)) return FALSE; return 0; prev_regexp.copy(*res); my_regfree(&preg); regex_compiled= 0; Loading @@ -4486,7 +4498,7 @@ Item_func_regex::regcomp(bool send_error) uint dummy_errors; if (conv.copy(res->ptr(), res->length(), res->charset(), regex_lib_charset, &dummy_errors)) return TRUE; return 1; res= &conv; } Loading @@ -4498,10 +4510,10 @@ Item_func_regex::regcomp(bool send_error) (void) my_regerror(error, &preg, buff, sizeof(buff)); my_error(ER_REGEXP_ERROR, MYF(0), buff); } return TRUE; return 1; } regex_compiled= 1; return FALSE; return 0; } Loading Loading @@ -4539,13 +4551,14 @@ Item_func_regex::fix_fields(THD *thd, Item **ref) const_item_cache=args[0]->const_item() && args[1]->const_item(); if (!regex_compiled && args[1]->const_item()) { if (args[1]->null_value) int comp_res= regcomp(TRUE); if (comp_res == -1) { // Will always return NULL maybe_null=1; fixed= 1; return FALSE; } if (regcomp(TRUE)) else if (comp_res) return TRUE; regex_is_const= 1; maybe_null= args[0]->maybe_null; Loading Loading
mysql-test/r/create.result +11 −0 Original line number Diff line number Diff line Loading @@ -1559,6 +1559,17 @@ SHOW INDEX FROM t1; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment t1 1 c1 1 c1 A NULL NULL NULL YES BTREE DROP TABLE t1; CREATE TABLE t1 (a INTEGER AUTO_INCREMENT PRIMARY KEY, b INTEGER NOT NULL); INSERT IGNORE INTO t1 (b) VALUES (5); CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY) SELECT a FROM t1; CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY) SELECT a FROM t1; ERROR 23000: Duplicate entry '1' for key 1 CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY) SELECT a FROM t1; ERROR 23000: Duplicate entry '1' for key 1 DROP TABLE t1, t2; End of 5.0 tests CREATE TABLE t1 (a int, b int); insert into t1 values (1,1),(1,2); Loading
mysql-test/r/func_regexp.result +12 −0 Original line number Diff line number Diff line Loading @@ -114,6 +114,18 @@ End of 4.1 tests SELECT 1 REGEXP NULL; 1 REGEXP NULL NULL SELECT '' REGEXP BINARY NULL; '' REGEXP BINARY NULL NULL SELECT NULL REGEXP BINARY NULL; NULL REGEXP BINARY NULL NULL SELECT 'A' REGEXP BINARY NULL; 'A' REGEXP BINARY NULL NULL SELECT "ABC" REGEXP BINARY NULL; "ABC" REGEXP BINARY NULL NULL End of 5.0 tests CREATE TABLE t1(a INT, b CHAR(4)); INSERT INTO t1 VALUES (1, '6.1'), (1, '7.0'), (1, '8.0'); Loading
mysql-test/t/create.test +18 −0 Original line number Diff line number Diff line Loading @@ -1176,6 +1176,24 @@ SHOW INDEX FROM t1; DROP TABLE t1; # # Bug#38821: Assert table->auto_increment_field_not_null failed in open_table() # CREATE TABLE t1 (a INTEGER AUTO_INCREMENT PRIMARY KEY, b INTEGER NOT NULL); INSERT IGNORE INTO t1 (b) VALUES (5); CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY) SELECT a FROM t1; --error 1062 CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY) SELECT a FROM t1; --error 1062 CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY) SELECT a FROM t1; DROP TABLE t1, t2; --echo End of 5.0 tests # Loading
mysql-test/t/func_regexp.test +10 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,16 @@ drop table t1; SELECT 1 REGEXP NULL; # # Bug #39021: SELECT REGEXP BINARY NULL never returns # SELECT '' REGEXP BINARY NULL; SELECT NULL REGEXP BINARY NULL; SELECT 'A' REGEXP BINARY NULL; SELECT "ABC" REGEXP BINARY NULL; --echo End of 5.0 tests Loading
sql/item_cmpfunc.cc +22 −9 Original line number Diff line number Diff line Loading @@ -4460,8 +4460,20 @@ void Item_func_like::cleanup() #ifdef USE_REGEX bool Item_func_regex::regcomp(bool send_error) /** @brief Compile regular expression. @param[in] send_error send error message if any. @details Make necessary character set conversion then compile regular expression passed in the args[1]. @retval 0 success. @retval 1 error occurred. @retval -1 given null regular expression. */ int Item_func_regex::regcomp(bool send_error) { char buff[MAX_FIELD_WIDTH]; String tmp(buff,sizeof(buff),&my_charset_bin); Loading @@ -4469,12 +4481,12 @@ Item_func_regex::regcomp(bool send_error) int error; if (args[1]->null_value) return TRUE; return -1; if (regex_compiled) { if (!stringcmp(res, &prev_regexp)) return FALSE; return 0; prev_regexp.copy(*res); my_regfree(&preg); regex_compiled= 0; Loading @@ -4486,7 +4498,7 @@ Item_func_regex::regcomp(bool send_error) uint dummy_errors; if (conv.copy(res->ptr(), res->length(), res->charset(), regex_lib_charset, &dummy_errors)) return TRUE; return 1; res= &conv; } Loading @@ -4498,10 +4510,10 @@ Item_func_regex::regcomp(bool send_error) (void) my_regerror(error, &preg, buff, sizeof(buff)); my_error(ER_REGEXP_ERROR, MYF(0), buff); } return TRUE; return 1; } regex_compiled= 1; return FALSE; return 0; } Loading Loading @@ -4539,13 +4551,14 @@ Item_func_regex::fix_fields(THD *thd, Item **ref) const_item_cache=args[0]->const_item() && args[1]->const_item(); if (!regex_compiled && args[1]->const_item()) { if (args[1]->null_value) int comp_res= regcomp(TRUE); if (comp_res == -1) { // Will always return NULL maybe_null=1; fixed= 1; return FALSE; } if (regcomp(TRUE)) else if (comp_res) return TRUE; regex_is_const= 1; maybe_null= args[0]->maybe_null; Loading