The problem is that not all column names retrieved from a SELECT
statement can be used as view column names due to length and format
restrictions. The server failed to properly check the conformity
of those automatically generated column names before storing the
final view definition on disk.
Since columns retrieved from a SELECT statement can be anything
ranging from functions to constants values of any format and length,
the solution is to rewrite to a pre-defined format any names that
are not acceptable as a view column name.
The name is rewritten to "Name_exp_%u" where %u translates to the
position of the column. To avoid this conversion scheme, define
explict names for the view columns via the column_list clause.
Also, aliases are now only generated for top level statements.
mysql-test/include/view_alias.inc:
Add test case for Bug#40277
mysql-test/r/compare.result:
Bug#40277: SHOW CREATE VIEW returns invalid SQL
mysql-test/r/group_by.result:
Bug#40277: SHOW CREATE VIEW returns invalid SQL
mysql-test/r/ps.result:
Bug#40277: SHOW CREATE VIEW returns invalid SQL
mysql-test/r/subselect.result:
Bug#40277: SHOW CREATE VIEW returns invalid SQL
mysql-test/r/subselect3.result:
Bug#40277: SHOW CREATE VIEW returns invalid SQL
mysql-test/r/type_datetime.result:
Bug#40277: SHOW CREATE VIEW returns invalid SQL
mysql-test/r/union.result:
Bug#40277: SHOW CREATE VIEW returns invalid SQL
mysql-test/r/view.result:
Add test case result for Bug#40277
mysql-test/r/view_alias.result:
Add test case result for Bug#40277
mysql-test/t/view_alias.test:
Add test case for Bug#40277
sql/sql_view.cc:
Check if auto generated column names are conforming. Also, the
make_unique_view_field_name function is not used as it uses the
original name to construct a new one, which does not work if the
name is invalid.
The fix for bug 31887 was incomplete : it assumes that all the
field types returned by the IS_NUM macro are descendants of
Item_num and tries to zero-fill the values before doing constant
substitution with such fields when they are compared to constant string
values.
The only exception to this is Field_timestamp : it's in the IS_NUM
macro, but is not a descendant of Field_num.
Fixed by excluding timestamp fields (Field_timestamp) when zero-filling
when converting the constant to compare with to a string.
Note that this will not exclude the timestamp columns from const
propagation.
mysql-test/r/compare.result:
Bug #39353: test case
mysql-test/t/compare.test:
Bug #39353: test case
sql/item.cc:
Bug #39353: don't zero-fill timestamp fields when const propagating
to a string : they'll be converted to a string in a date/time format
and not as an integer.
when executed in version 5
Zero fill is a field attribute only. So we can't always
propagate constants for zerofill fields : the values and
expression results don't have that flag.
Fixed by converting the const value to a string and
using that in const propagation when the context allows it.
Disable const propagation for fields with ZEROFILL flag in
all the other cases.
mysql-test/r/compare.result:
Bug #31887: test case
mysql-test/t/compare.test:
Bug #31887: test case
sql/item.cc:
Bug #31887: If the context allows conversion
of an int constant to a zero-filled string constant
put the string constant instead of the int constant
when doing const propagation
sql/mysql_priv.h:
Bug #31887: a macro to get all the Field_num
descendant fields.
When implicitly converting string fields to numbers the
string-to-number conversion error was not sent to the client.
Added code to send the conversion error as warning.
We also need to prevent generation of warnings from the places
where val_xxx() methods are called for the sole purpose of updating
the Item::null_value flag.
To achieve that a special function is added (and called) :
update_null_value(). This function will set the no_errors flag and
will call val_xxx(). The warning generation in Field_string::val_xxx()
will use the flag when generating the conversion warnings.
mysql-test/r/compare.result:
BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
- non-convertible strings in arithmetic operations
mysql-test/r/func_gconcat.result:
BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
- non-convertible strings in arithmetic operations
mysql-test/r/func_group.result:
BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
- non-convertible strings in arithmetic operations
mysql-test/r/type_varchar.result:
BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
- test case
mysql-test/t/type_varchar.test:
BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
- test case
sql/field.cc:
BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
- send conversion warning to the client
sql/item.cc:
BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
- send conversion warning to the client
sql/item.h:
BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
- added a special function to explicitly update the null_value
sql/item_func.h:
BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
- added a special function to explicitly update the null_value
sql/item_subselect.h:
BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
- added a special function to explicitly update the null_value
sql/item_sum.cc:
BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
- added a special function to explicitly update the null_value
sql/item_sum.h:
BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
- added a special function to explicitly update the null_value
sql/sql_string.h:
BUG#11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
- send conversion warning to the client
Disable const propagation for Item_hex_string.
This must be done because Item_hex_string->val_int() is not
the same as (Item_hex_string->val_str() in BINARY column)->val_int().
We cannot simply disable the replacement in a particular context (
e.g. <bin_col> = <int_col> AND <bin_col> = <hex_string>) since
Items don't know the context they are in and there are functions like
IF (<hex_string>, 'yes', 'no').
Note that this will disable some valid cases as well
(e.g. : <bin_col> = <hex_string> AND <bin_col2> = <bin_col>) but
there's no way to distinguish the valid cases without having the
Item's parent say something like : Item->set_context(Item::STRING_RESULT)
and have all the Items that contain other Items do that consistently.
mysql-test/r/compare.result:
Bug #21159: Optimizer: wrong result after AND with different data types
- test case
mysql-test/t/compare.test:
Bug #21159: Optimizer: wrong result after AND with different data types
- test case
sql/sql_select.cc:
Bug #21159: Optimizer: wrong result after AND with different data types
- disable const propagation for Item_hex_string.
(Bug #7788 "Table is full" occurs during a multitable update")
client/mysqldump.c:
Style fixes
innobase/include/univ.i:
UNIV_DEBUG should not depend on configure --debug but on --debug=full
mysql-test/r/compare.result:
Added test to find bug in previous bugfix
mysql-test/t/compare.test:
Added test to find bug in previous bugfix
mysys/my_handler.c:
Proper fix for comparision with ' '
strings/ctype-big5.c:
Proper fix for comparision with ' '
strings/ctype-bin.c:
Proper fix for comparision with ' '
strings/ctype-gbk.c:
Proper fix for comparision with ' '
strings/ctype-latin1.c:
Proper fix for comparision with ' '
strings/ctype-mb.c:
Proper fix for comparision with ' '
strings/ctype-simple.c:
Proper fix for comparision with ' '
strings/ctype-sjis.c:
Proper fix for comparision with ' '
strings/ctype-tis620.c:
Proper fix for comparision with ' '
strings/ctype-ucs2.c:
Proper fix for comparision with ' '
strings/ctype-utf8.c:
Proper fix for comparision with ' '
of strings of unequal length. (Bug #8134)
mysql-test/t/compare.test:
Add new regression test
strings/ctype-simple.c:
Fix value used for swapping negative/positive values using XOR
mysql-test/r/compare.result:
Add new test result
BitKeeper/etc/gone:
auto-union
BitKeeper/etc/ignore:
auto-union
BitKeeper/etc/logging_ok:
auto-union
BitKeeper/deleted/.del-.my_sys.h.swp~f6a4a7f8dae03f18:
Auto merged
BitKeeper/etc/config:
Auto merged
acconfig.h:
Auto merged
acinclude.m4:
Auto merged
Docs/manual.texi:
Auto merged
client/mysqlcheck.c:
Auto merged
client/mysqlshow.c:
Auto merged
include/myisam.h:
Auto merged
include/violite.h:
Auto merged
isam/pack_isam.c:
Auto merged
libmysql/libmysql.c:
Auto merged
libmysqld/lib_sql.cc:
Auto merged
myisam/Makefile.am:
Auto merged
myisam/ft_nlq_search.c:
Auto merged
myisam/mi_open.c:
Auto merged
myisam/mi_write.c:
Auto merged
myisam/sort.c:
Auto merged
mysql-test/mysql-test-run.sh:
Auto merged
mysql-test/r/fulltext.result:
Auto merged
mysql-test/r/func_test.result:
Auto merged
mysql-test/r/isam.result:
Auto merged
mysql-test/r/rpl_replicate_do.result:
Auto merged
mysql-test/r/variables.result:
Auto merged
mysql-test/t/func_test.test:
Auto merged
mysql-test/t/myisam.test:
Auto merged
mysql-test/t/rpl_rotate_logs.test:
Auto merged
mysql-test/t/variables.test:
Auto merged
mysys/hash.c:
Auto merged
mysys/tree.c:
Auto merged
scripts/Makefile.am:
Auto merged
sql/Makefile.am:
Auto merged
sql/filesort.cc:
Auto merged
sql/gen_lex_hash.cc:
Auto merged
sql/ha_berkeley.cc:
Auto merged
sql/ha_innodb.cc:
Auto merged
sql/handler.cc:
Auto merged
sql/handler.h:
Auto merged
sql/hash_filo.h:
Auto merged
sql/hostname.cc:
Auto merged
sql/item_func.cc:
Auto merged
sql/item_func.h:
Auto merged
sql/item_timefunc.cc:
Auto merged
sql/lex.h:
Auto merged
sql/lock.cc:
Auto merged
sql/log.cc:
Auto merged
sql/log_event.h:
Auto merged
sql/mini_client.cc:
Auto merged
sql/opt_range.cc:
Auto merged
sql/opt_sum.cc:
Auto merged
sql/repl_failsafe.cc:
Auto merged
sql/set_var.h:
Auto merged
sql/slave.h:
Auto merged
sql/sql_acl.cc:
Auto merged
sql/sql_analyse.cc:
Auto merged
sql/sql_cache.cc:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_load.cc:
Auto merged
sql/sql_rename.cc:
Auto merged
sql/sql_repl.cc:
Auto merged
sql/sql_show.cc:
Auto merged
sql/sql_table.cc:
Auto merged
sql/sql_udf.cc:
Auto merged
sql/share/czech/errmsg.txt:
Auto merged
sql/share/danish/errmsg.txt:
Auto merged
sql/share/dutch/errmsg.txt:
Auto merged
sql/share/english/errmsg.txt:
Auto merged
sql/share/estonian/errmsg.txt:
Auto merged
sql/share/french/errmsg.txt:
Auto merged
sql/share/german/errmsg.txt:
Auto merged
sql/share/greek/errmsg.txt:
Auto merged
sql/share/hungarian/errmsg.txt:
Auto merged
sql/share/italian/errmsg.txt:
Auto merged
sql/share/japanese/errmsg.txt:
Auto merged
sql/share/korean/errmsg.txt:
Auto merged
sql/share/norwegian/errmsg.txt:
Auto merged
sql/table.h:
Auto merged
sql/unireg.cc:
Auto merged
sql-bench/server-cfg.sh:
Auto merged
sql/share/norwegian-ny/errmsg.txt:
Auto merged
sql/share/polish/errmsg.txt:
Auto merged
sql/share/portuguese/errmsg.txt:
Auto merged
sql/share/romanian/errmsg.txt:
Auto merged
sql/share/russian/errmsg.txt:
Auto merged
sql/share/slovak/errmsg.txt:
Auto merged
sql/share/spanish/errmsg.txt:
Auto merged
sql/share/swedish/errmsg.txt:
Auto merged
sql/share/ukrainian/errmsg.txt:
Auto merged
sql/ha_myisam.cc:
Merge with 4.0
Removed some commented code
sql/sql_db.cc:
Merge with 4.0
Optimized the logging of the drop db call a bit
sql/sql_update.cc:
Added comment
Added bug fix from 3.23 for AIX 4.3.3 and gcc 3.x
Small change in EXCHANGE output
Propagate open-files-limit from mysqld_safe -> mysqld
Fixed speed bug in GROUP BY
Added quotes around database name in CREATE DATABASE db_name (for binary log)
BitKeeper/etc/ignore:
added stamp-h1
Docs/manual.texi:
Added 4.1 manual section
Updated changelog
client/mysqltest.c:
Added --skip-safemalloc
include/my_global.h:
Added bug fix from 3.23 for AIX 4.3.3 and gcc 3.x
mysql-test/mysql-test-run.sh:
Start mysqltest with --skip-safemalloc (To get it faster)
mysql-test/r/bdb.result:
Update for new EXPLAIN output
mysql-test/r/compare.result:
Update for new EXPLAIN output
mysql-test/r/create.result:
Update for new EXPLAIN output
mysql-test/r/distinct.result:
Update for new EXPLAIN output
mysql-test/r/explain.result:
Update for new EXPLAIN output
mysql-test/r/group_by.result:
Update for new EXPLAIN output
mysql-test/r/heap.result:
Update for new EXPLAIN output
mysql-test/r/innodb.result:
Update for new EXPLAIN output
mysql-test/r/join_outer.result:
Update for new EXPLAIN output
mysql-test/r/key_diff.result:
Update for new EXPLAIN output
mysql-test/r/merge.result:
Update for new EXPLAIN output
mysql-test/r/null_key.result:
Update for new EXPLAIN output
mysql-test/r/order_by.result:
Update for new EXPLAIN output
mysql-test/r/select.result:
Update for new EXPLAIN output
mysql-test/r/temp_table.result:
Fixed speed bug in GROUP BY
mysql-test/r/type_datetime.result:
Update for new EXPLAIN output
mysql-test/r/user_var.result:
Update for new EXPLAIN output
mysql-test/r/variables.result:
Removed variable safe_show_database
mysql-test/t/temp_table.test:
Fixed speed bug in GROUP BY
mysql-test/t/variables.test:
Removed not used variable safe_show_databases
scripts/mysqld_safe.sh:
Propagate open-files-limit from mysqld_safe -> mysqld
sql/mysqld.cc:
Removed variable safe_show_database
sql/set_var.cc:
Removed variable safe_show_database
sql/slave.cc:
Updated error message
sql/sql_db.cc:
Added quotes around database name in CREATE DATABASE db_name
sql/sql_select.cc:
Fixed speed bug in GROUP BY
fixed bug in mysql-test/create-test-result
fixed bug in union-subselect engine
mysql-test/create-test-result:
fixed bug in reject file name assembling
mysql-test/r/compare.result:
new EXPLAIN
mysql-test/r/create.result:
new EXPLAIN
mysql-test/r/distinct.result:
new EXPLAIN
mysql-test/r/explain.result:
new EXPLAIN
mysql-test/r/group_by.result:
new EXPLAIN
mysql-test/r/heap.result:
new EXPLAIN
mysql-test/r/heap_btree.result:
new EXPLAIN
mysql-test/r/heap_hash.result:
new EXPLAIN
mysql-test/r/innodb.result:
new EXPLAIN
mysql-test/r/join_outer.result:
new EXPLAIN
mysql-test/r/key_diff.result:
new EXPLAIN
mysql-test/r/key_primary.result:
new EXPLAIN
mysql-test/r/merge.result:
new EXPLAIN
mysql-test/r/myisam.result:
new EXPLAIN
mysql-test/r/null_key.result:
new EXPLAIN
mysql-test/r/odbc.result:
new EXPLAIN
mysql-test/r/order_by.result:
new EXPLAIN
mysql-test/r/range.result:
new EXPLAIN
mysql-test/r/select.result:
new EXPLAIN
mysql-test/r/subselect.result:
new EXPLAIN
mysql-test/r/type_datetime.result:
new EXPLAIN
mysql-test/r/union.result:
new EXPLAIN
mysql-test/r/user_var.result:
new EXPLAIN
mysql-test/r/varbinary.result:
new EXPLAIN
mysql-test/t/subselect.test:
new EXPLAIN
mysql-test/t/union.test:
new EXPLAIN
sql/mysql_priv.h:
new EXPLAIN
sql/sql_class.cc:
new EXPLAIN
sql/sql_class.h:
new EXPLAIN
sql/sql_derived.cc:
new EXPLAIN
sql/sql_lex.h:
new EXPLAIN
sql/sql_parse.cc:
new EXPLAIN
sql/sql_select.cc:
new EXPLAIN
sql/sql_union.cc:
fixed bug in subselect-UNION engine
sql/table.h:
new EXPLAIN