summaryrefslogtreecommitdiff
path: root/sql/item.cc
Commit message (Collapse)AuthorAgeFilesLines
* Bug#37662 nested if() inside sum() is parsed in exponential timeGeorgi Kodinov2008-07-301-4/+8
| | | | | | | | | | | | | | | | | | | | | | | min() and max() functions are implemented in MySQL as macros. This means that max(a,b) is expanded to: ((a) > (b) ? (a) : (b)) Note how 'a' is quoted two times. Now imagine 'a' is a recursive function call that's several 10s of levels deep. And the recursive function does max() with a function arg as well to dive into recursion. This means that simple function call can take most of the clock time. Identified and fixed several such calls to max()/min() : including the IF() sql function implementation. mysql-test/r/func_if.result: Bug#37662 test case mysql-test/t/func_if.test: Bug#37662 test case sql/item.cc: Bug#37662 don't call expensive functions as arguments to min/max sql/item_cmpfunc.cc: Bug#37662 don't call expensive functions as arguments to min/max sql/item_func.cc: Bug#37662 don't call expensive functions as arguments to min/max
* backport from 6.0Gleb Shchepa2008-06-271-11/+18
| | | | | | | | | | | | | | | | | | | | | Bug#35658 (An empty binary value leads to mysqld crash) Before this fix, the following token b'' caused the parser to crash when reading the binary value from the empty string. The crash was caused by: ptr+= max_length - 1; because max_length is unsigned and was 0, causing an overflow. With this fix, an empty binary literal b'' is parsed as a binary value 0, in Item_bin_string. mysql-test/r/varbinary.result: Bug#35658 (An empty binary value leads to mysqld crash) mysql-test/t/varbinary.test: Bug#35658 (An empty binary value leads to mysqld crash) sql/item.cc: Bug#35658 (An empty binary value leads to mysqld crash)
* BUG#36139 "float, zerofill, crash with subquery"unknown2008-04-221-3/+8
| | | | | | | | | | | | | - Make convert_zerofill_number_to_string() take into account that the constant it is converting may evaluate to NULL. mysql-test/r/subselect.result: BUG#36139 "float, zerofill, crash with subquery" - Testcase mysql-test/t/subselect.test: BUG#36139 "float, zerofill, crash with subquery" - Testcase
* Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-bugteamunknown2008-03-281-4/+24
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | into moonbone.local:/work/27219-5.0-opt-mysql sql/item.cc: Auto merged sql/item_subselect.cc: Auto merged sql/item_sum.cc: Auto merged sql/mysql_priv.h: Auto merged sql/sql_select.cc: Auto merged
| * Bug#27219: Aggregate functions in ORDER BY.unknown2008-03-271-4/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mixing aggregate functions and non-grouping columns is not allowed in the ONLY_FULL_GROUP_BY mode. However in some cases the error wasn't thrown because of insufficient check. In order to check more thoroughly the new algorithm employs a list of outer fields used in a sum function and a SELECT_LEX::full_group_by_flag. Each non-outer field checked to find out whether it's aggregated or not and the current select is marked accordingly. All outer fields that are used under an aggregate function are added to the Item_sum::outer_fields list and later checked by the Item_sum::check_sum_func function. mysql-test/t/group_by.test: Added a test case for the bug#27219: Aggregate functions in ORDER BY. mysql-test/r/group_by.result: Added a test case for the bug#27219: Aggregate functions in ORDER BY. sql/sql_select.cc: Bug#27219: Aggregate functions in ORDER BY. Implementation of new check for mixing non aggregated fields and aggregation function in the ONLY_FULL_GROUP_BY mode. sql/sql_lex.cc: Bug#27219: Aggregate functions in ORDER BY. Initialization of the full_group_by_flag bitmap. SELECT_LEX::test_limit function doesn't reset ORDER BY clause anymore. sql/sql_lex.h: Bug#27219: Aggregate functions in ORDER BY. The full_group_by_flag is added to the SELECT_LEX class. sql/item_sum.h: Bug#27219: Aggregate functions in ORDER BY. The outer_fields list is added to the Item_sum class. sql/mysql_priv.h: Bug#27219: Aggregate functions in ORDER BY. Defined a set of constants used in the new check for mixing non aggregated fields and sum functions in the ONLY_FULL_GROUP_BY_MODE. sql/item_subselect.cc: Bug#27219: Aggregate functions in ORDER BY. The Item_in_subselect::select_in_like_transformer function now drops ORDER BY clause in all selects in a subquery. sql/item_sum.cc: Bug#27219: Aggregate functions in ORDER BY. Now the Item_sum::check_sum_func function now checks whether fields in the outer_fields list are aggregated or not and marks selects accordingly. sql/item.cc: Bug#27219: Aggregate functions in ORDER BY. Now the Item_field::fix_fields function checks whether the field is aggregated or not and marks its select_lex accordingly.
* | Merge host.loc:/home/uchum/work/mysql-5.0unknown2008-03-271-6/+9
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | into host.loc:/home/uchum/work/5.0-opt configure.in: Auto merged sql/item.cc: Auto merged
| * \ Merge host.loc:/home/uchum/work/PA/5.0-opt-34763unknown2008-03-201-6/+9
| |\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | into host.loc:/home/uchum/work/5.0-opt sql/item.cc: Auto merged
| | * | Fixed bug #34763.unknown2008-03-141-6/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Queries like: SELECT ROW(1, 2) IN (SELECT t1.a, 2) FROM t1 GROUP BY t1.a or SELECT ROW(1, 2) IN (SELECT t1.a, 2 FROM t2) FROM t1 GROUP BY t1.a lead to assertion failure in the Item_in_subselect::row_value_transformer method in debugging build, or to unexpected error message in release build: ERROR 1247 (42S22): Reference '<list ref>' not supported (forward reference in item list) Unexpected error message and assertion failure have been eliminated. mysql-test/r/subselect3.result: Added test case for bug #34763. mysql-test/t/subselect3.test: Added test case for bug #34763. sql/item.cc: Fixed bug #34763. The Item_ref::fix_fields method has been modified to silently ignore not fixed outer references: by the definition, those references should be fixed later by the call to the fix_inner_refs function. sql/item_subselect.cc: Fixed bug #34763. The Item_in_subselect::row_value_transformer method has been modified to eliminate assertion failure on not fixed outer references: by the definition those references are allowed in this context and should be fixed later by the call to the fix_inner_refs function.
* | | | Merge stella.local:/home2/mydev/mysql-5.0-amainunknown2008-03-141-13/+112
|\ \ \ \ | |/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | into stella.local:/home2/mydev/mysql-5.0-axmrg mysql-test/r/func_misc.result: Auto merged mysql-test/r/myisam.result: Auto merged mysql-test/t/func_misc.test: Auto merged sql/item.cc: Auto merged sql/item_func.cc: Auto merged
| * | | Merge kaamos.(none):/data/src/mysql-5.0unknown2008-03-121-13/+112
| |\ \ \ | | | |/ | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | into kaamos.(none):/data/src/opt/mysql-5.0-opt client/mysql.cc: Auto merged sql/filesort.cc: Auto merged sql/item.cc: Auto merged sql/item.h: Auto merged sql/item_func.cc: Auto merged sql/mysqld.cc: Auto merged sql/sql_parse.cc: Auto merged sql/sql_yacc.yy: Auto merged tests/mysql_client_test.c: Auto merged mysql-test/r/view.result: Manual merge. mysql-test/t/view.test: Manual merge. scripts/mysql_config.sh: Manual merge.
| | * | Merge tnurnberg@bk-internal.mysql.com:/home/bk/mysql-5.0-optunknown2008-03-101-1/+26
| | |\ \ | | | |/ | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | into mysql.com:/misc/mysql/34749/50-34749 mysql-test/r/func_misc.result: Auto merged mysql-test/t/func_misc.test: Auto merged sql/item.cc: Auto merged sql/item.h: Auto merged
| | | * Bug#34749: Server crash when using NAME_CONST() with an aggregate functionunknown2008-02-281-1/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | NAME_CONST('whatever', -1) * MAX(whatever) bombed since -1 was not seen as constant, but as FUNCTION_UNARY_MINUS(constant) while we are at the same time pretending it was a basic const item. This confused the aggregate handlers in exciting ways. We now make NAME_CONST() behave more consistently. mysql-test/r/func_misc.result: show that a combination of NAME_CONST('x', -y) and an aggregate no longer crashes the server. mysql-test/t/func_misc.test: show that a combination of NAME_CONST('x', -y) and an aggregate no longer crashes the server. sql/ha_ndbcluster_cond.cc: tell cluster about "new" function type NEG_FUNC. (this was previous identified as UNKNOWN_FUNC, so we just handle it the same way, that's all.) sql/ha_ndbcluster_cond.h: tell cluster about "new" function type NEG_FUNC. (this was previous identified as UNKNOWN_FUNC, so we just handle it the same way, that's all.) sql/item.cc: make NAME_CONST() transparent in that type() of -constant is that of constant, not that of unary minus (id est, FUNC_ITEM). sql/item.h: Move constructor to item.cc sql/item_func.h: Revert Bug#30832; we can apply the magic more narrowly (just for NAME_CONST() rather than all Item_func_neg). Introduce new function type "NEG_FUNC."
| | * | Merge ssh://bk-internal.mysql.com//home/bk/mysql-5.0-optunknown2008-02-171-0/+31
| | |\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | into kaamos.(none):/data/src/opt/mysql-5.0-opt sql/item.cc: Auto merged
| | | * \ Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-optunknown2008-02-151-0/+31
| | | |\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | into magare.gmz:/home/kgeorge/mysql/autopush/B31887-5.0-opt sql/item.cc: Auto merged sql/mysql_priv.h: Auto merged
| | | | * | Bug #31887: DML Select statement not returning same results unknown2008-02-151-0/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
| | * | | | Merge kaamos.(none):/data/src/mysql-5.0unknown2008-02-171-12/+55
| | |\ \ \ \ | | | |/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | into kaamos.(none):/data/src/opt/mysql-5.0-opt mysql-test/r/variables.result: Auto merged mysql-test/t/variables.test: Auto merged sql/item.cc: Auto merged sql/item_cmpfunc.cc: Auto merged sql/sql_acl.cc: Auto merged sql/sql_select.cc: Auto merged sql/sql_yacc.yy: Auto merged mysql-test/r/sp.result: Manual merge. mysql-test/t/sp.test: Manual merge.
| | | * | | Merge mbp:src/opt/bug33389/my50-bug25162unknown2008-02-121-12/+12
| | | |\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | into kaamos.(none):/data/src/opt/mysql-5.0-opt sql/item.cc: Auto merged
| | | | * | | Fix for bug #33389: Selecting from a view into a table from within SPunknown2008-02-121-12/+12
| | | | | |/ | | | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | or trigger crashes server Under some circumstances a combination of VIEWs, subselects with outer references and PS/SP/triggers could lead to use of uninitialized memory and server crash as a result. Fixed by changing the code in Item_field::fix_fields() so that in cases when the field is a VIEW reference, we first check whether the field is also an outer reference, and mark it appropriately before returning. mysql-test/r/view.result: Added a test case for bug #33389. mysql-test/t/view.test: Added a test case for bug #33389. sql/item.cc: In cases when in Item_field::fix_fields() from_field is a view reference, do not return too early, i.e. before marking the reference as an outer one when needed.
| | | * | | Fixed bug #33833.unknown2008-01-261-0/+43
| | | |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Two disjuncts containing equalities of the form key=const1 and key=const2 can be merged into one if const1 is equal to const2. To check it the common collation of the constants were used rather than the collation of the field key. For example when the default collation of the constants was cases insensitive while the collation of the field was case sensitive, then two or-ed equality predicates key='b' and key='B' incorrectly were merged into one f='b'. As a result ref access was used instead of range access and wrong result sets were returned in many cases. Fixed the problem by comparing constant in the or-ed predicate with collation of the key field. mysql-test/r/range.result: Added a test case for bug #33833. mysql-test/t/range.test: Added a test case for bug #33833. sql/item.cc: Fixed bug #33833. Added the method eq_by_collation that compares two items almost as the method Item::eq, but it rather enforces a given collation for the comparison. sql/item.h: Fixed bug #33833. Added the method eq_by_collation that compares two items almost as the method Item::eq, but it rather enforces a given collation for the comparison.
* | | | | Merge ↵unknown2008-03-071-0/+1
|\ \ \ \ \ | |/ / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | pcg5ppc.xiphis.org:/Network/Servers/anubis.xiphis.org/home/antony/work/mysql-5.0-engines into pcg5ppc.xiphis.org:/Network/Servers/anubis.xiphis.org/home/antony/work/merge.20080307/mysql-5.0 sql/item.cc: Auto merged sql/item_func.cc: Auto merged
| * | | | BUG#34289 - Incorrect NAME_CONST substitution in stored proceduresunknown2008-02-191-0/+1
| |/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | breaks replication NAME_CONST() didn't replicate constant character set and collation correctly. With this fix NAME_CONST() inherits collation from the value argument. mysql-test/r/func_misc.result: A test case for BUG#34289. mysql-test/t/func_misc.test: A test case for BUG#34289. sql/item.cc: Inherit collation from value argument.
* | | | Post-merge fix for Bug 33851. The initialization order of membersunknown2008-02-281-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | must match the order which they were declared in the class definition. sql/item.cc: Fix initialization order, parameter was the last one declared.
* | | | Bug#33851 Passing UNSIGNED param to EXECUTE returns ERROR 1210unknown2008-02-281-3/+8
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The problem is that passing anything other than a integer to a limit clause in a prepared statement would fail. This limitation was introduced to avoid replication problems (e.g: replicating the statement with a string argument would cause a parse failure in the slave). The solution is to convert arguments to the limit clause to a integer value and use this converted value when persisting the query to the log. mysql-test/r/limit.result: Update test case result. mysql-test/r/ps.result: Add test case result for Bug#33851 mysql-test/r/rpl_user_variables.result: Test case result for replication of prepared statement with limit clause. mysql-test/t/limit.test: Test parameters to limit clause. mysql-test/t/ps.test: Add test case for Bug#33851 mysql-test/t/rpl_user_variables.test: Test replication of a parameter which value is converted. sql/item.cc: Convert value to integer if it's a parameter to a limit clause. sql/item.h: Flag signal that item is a parameter to a limit clause. sql/item_func.cc: Const member functions, object is not mutated. sql/sql_class.h: Const member functions, object is not mutated. sql/sql_yacc.yy: Flag that item is a parameter to a limit clause.
* | | Bug#33798 prepared statements improperly handle large unsigned intsunknown2008-02-081-1/+5
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The unsignedness of large integer user variables was not being properly preserved when feeded to prepared statements. This was happening because the unsigned flags wasn't being updated when converting the user variable is converted to a parameter. The solution is to copy the unsigned flag when converting the user variable to a parameter and take the unsigned flag into account when converting the integer to a string. mysql-test/r/binlog.result: Add test case result for Bug#33798 mysql-test/r/ps.result: Add test case result for Bug#33798 mysql-test/t/binlog.test: Add test case for Bug#33798 mysql-test/t/ps.test: Add test case for Bug#33798 sql/item.cc: Take the unsigned flag into account when converting the user variable.
* | Merge mhansson@bk-internal:/home/bk/mysql-5.0-optunknown2008-01-111-1/+2
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | into linux-st28.site:/home/martin/mysql/src/bug31797/my50-bug31797-pushee sql/item.cc: Auto merged mysql-test/r/group_by.result: Bug#31797: Manual merge mysql-test/t/group_by.test: Bug#31797: Manual merge
| * | Bug#31797: error while parsing subqueries -- WHERE is parsed as HAVINGunknown2008-01-111-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The name resolution for correlated subqueries and HAVING clauses failed to distinguish which of two was being performed when there was a reference to an outer aliased field. Fixed by adding the condition that HAVING clause name resulotion is being performed. mysql-test/r/group_by.result: Bug#31797: Test result mysql-test/t/group_by.test: Bug#31797: Test case sql/item.cc: Bug#31797: Corrected function comment. The fix, raising the error is restricted to HAVING name resolution.
* | | Bug #33256: CREATE ... SELECT creates obsolete table unknown2007-12-211-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | w/ Field_date instead of Field_newdate Field_date was still used in temp table creation. Fixed by using Field_newdate consistently throughout the server except when reading tables defined with older MySQL version. No test suite is possible because both Field_date and Field_newdate return the same values in all the metadata calls. mysql-test/r/type_decimal.result: Bug #33256: removed redundant warnings sql/field.h: Bug #33256: Add a constructor similar to Field_date::Field_date() sql/item.cc: Bug #33256: Use Field_newdate instead of Field_date for all temp tables and CREATE .. SELECT sql/item_sum.cc: Bug #33256: Use Field_newdate instead of Field_date for all temp tables and CREATE .. SELECT sql/item_timefunc.cc: Bug #33256: Use Field_newdate instead of Field_date for all temp tables and CREATE .. SELECT sql/item_timefunc.h: Bug #33256: Use Field_newdate instead of Field_date for all temp tables and CREATE .. SELECT
* | | Merge mhansson@bk-internal:/home/bk/mysql-5.0-optunknown2007-12-191-0/+4
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | into linux-st28.site:/home/martin/mysql/src/bug32848/my50-bug32848 sql/field.cc: Auto merged sql/field.h: Auto merged sql/item.cc: Auto merged sql/sql_select.cc: Auto merged mysql-test/r/union.result: Bug#32848: Manual merge mysql-test/t/union.test: Bug#32848: Manual merge
| * | | Bug#32848: Data type conversion bug in union subselects in MySQL 5.0.38unknown2007-12-111-0/+4
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There were two problems when inferring the correct field types resulting from UNION queries. - If the type is NULL for all corresponding fields in the UNION, the resulting type would be NULL, while the type is BINARY(0) if there is just a single SELECT NULL. - If one SELECT in the UNION uses a subselect, a temporary table is created to represent the subselect, and the result type defaults to a STRING type, hiding the fact that the type was unknown(just a NULL value). Fixed by remembering whenever a field was created from a NULL value and pass type NULL to the type coercion if that is the case, and creating a string field as result of UNION only if the type would otherwise be NULL. mysql-test/r/union.result: Bug#32848: Test result mysql-test/t/union.test: Bug#32848: Test case sql/field.cc: Bug#32848: Initialization of new field sql/field.h: Bug#32848: New member to record when a field was created from a NULL value. sql/item.cc: Bug#32848: A field created from a NULL value will submit NULL as type to the type coercion procedure. If Item_type_holder has not inferred the correct type after processing all SELECTs in a UNION, a string field is created. sql/sql_select.cc: Bug#32848: Recording when a field is created from a NULL value.
* | | Merge mysql.com:/home/gluh/MySQL/Merge/5.0unknown2007-12-131-8/+8
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | into mysql.com:/home/gluh/MySQL/Merge/5.0-opt client/mysql.cc: Auto merged client/mysqltest.c: Auto merged include/mysql_com.h: Auto merged libmysql/CMakeLists.txt: Auto merged myisam/mi_check.c: Auto merged mysql-test/r/delayed.result: Auto merged mysql-test/r/innodb.result: Auto merged mysql-test/r/myisam.result: Auto merged mysql-test/r/ps.result: Auto merged mysql-test/t/merge.test: Auto merged mysql-test/t/myisam.test: Auto merged mysql-test/t/subselect.test: Auto merged mysql-test/t/type_datetime.test: Auto merged mysql-test/t/variables.test: Auto merged sql/field.cc: Auto merged sql/ha_myisam.cc: Auto merged sql/item.cc: Auto merged sql/item.h: Auto merged sql/item_cmpfunc.cc: Auto merged sql/item_func.cc: Auto merged sql/item_func.h: Auto merged sql/mysql_priv.h: Auto merged sql/mysqld.cc: Auto merged sql/opt_range.cc: Auto merged sql/set_var.cc: Auto merged sql/set_var.h: Auto merged sql/sql_class.h: Auto merged sql/sql_select.cc: Auto merged sql/sql_table.cc: Auto merged sql/sql_yacc.yy: Auto merged mysql-test/r/func_misc.result: manual merge mysql-test/r/innodb_mysql.result: manual merge mysql-test/t/func_misc.test: manual merge mysql-test/t/innodb_mysql.test: manual merge sql/sql_insert.cc: manual merge
| * | | Fixed bug #27545.unknown2007-12-071-7/+7
| | |/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Both arguments of the function NAME_CONST must be constant expressions. This constraint is checked in the Item_name_const::fix_fields method. Yet if the argument of the function was not a constant expression no error message was reported. As a result the client hanged waiting for a response. Now the function Item_name_const::fix_fields reports an error message when any of the additional context conditions imposed on the function NAME_CONST is not satisfied. mysql-test/r/func_misc.result: Added a test case for bug #26545. mysql-test/t/func_misc.test: Added a test case for bug #26545.
| * | Bug #32400: Complex SELECT query returns correct result unknown2007-11-201-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | only on some occasions Referencing an element from the SELECT list in a WHERE clause is not permitted. The namespace of the WHERE clause is the table columns only. This was not enforced correctly when resolving outer references in sub-queries. Fixed by not allowing references to aliases in a sub-query in WHERE. mysql-test/include/ps_query.inc: Bug #32400: fixed old test queries mysql-test/r/ps_2myisam.result: Bug #32400: fixed old test queries mysql-test/r/ps_3innodb.result: Bug #32400: fixed old test queries mysql-test/r/ps_4heap.result: Bug #32400: fixed old test queries mysql-test/r/ps_5merge.result: Bug #32400: fixed old test queries mysql-test/r/ps_6bdb.result: Bug #32400: fixed old test queries mysql-test/r/ps_7ndb.result: Bug #32400: fixed old test queries mysql-test/r/subselect.result: Bug #32400: test case mysql-test/t/subselect.test: Bug #32400: test case sql/item.cc: Bug #32400: don't allow references to aliases in WHERE tests/mysql_client_test.c: Bug #32400: fixed old test queries
* | | Fix for bug #32559: connection hangs on query with name_constunknown2007-11-271-1/+11
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: passing a non-constant name to the NAME_CONST function results in a crash. Fix: check the NAME_CONST name argument; return fake item type if we got non-constant argument(s). mysql-test/r/func_misc.result: Fix for bug #32559: connection hangs on query with name_const - test result. mysql-test/t/func_misc.test: Fix for bug #32559: connection hangs on query with name_const - test case. sql/item.cc: Fix for bug #32559: connection hangs on query with name_const - Item_name_const::type() now returns NULL_ITEM if non-constant arguments were used to create the item to avoid wrong type casting. sql/item.h: Fix for bug #32559: connection hangs on query with name_const - NAME_CONST name argument checked for invariability.
* | Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-optunknown2007-11-131-1/+1
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | into magare.gmz:/home/kgeorge/mysql/autopush/B31562-5.0-opt sql/item.cc: Auto merged sql/sql_select.cc: Auto merged
| * | Bug #31562: HAVING and lower caseunknown2007-11-131-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The columns in HAVING can reference the GROUP BY and SELECT columns. There can be "table" prefixes when referencing these columns. And these "table" prefixes in HAVING use the table alias if available. This means that table aliases are subject to the same storage rules as table names and are dependent on lower_case_table_names in the same way as the table names are. Fixed by : 1. Treating table aliases as table names and make them lowercase when printing out the SQL statement for view persistence. 2. Using case insensitive comparison for table aliases when requested by lower_case_table_names mysql-test/r/lowercase_view.result: Bug #31562: test case mysql-test/t/lowercase_view.test: Bug #31562: test case sql/item.cc: Bug #31562: lower_case_table_name contious comparison when searching in GROUP BY sql/sql_base.cc: Bug #31562: lower_case_table_name contious comparison when searching in SELECT sql/sql_select.cc: Bug #31562: treat table aliases as table names and make them lowercase when printing
* | | Fixed bug #28076: inconsistent binary/varbinary comparison.unknown2007-11-101-4/+12
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | After adding an index the <VARBINARY> IN (SELECT <BINARY> ...) clause returned a wrong result: the VARBINARY value was illegally padded with zero bytes to the length of the BINARY column for the index search. (<VARBINARY>, ...) IN (SELECT <BINARY>, ... ) clauses are affected too. sql/item.cc: Fixed bug #28076. The Item_cache_str::save_in_field method has been overloaded to check cached values for an illegal padding before the saving into a field. sql/item.h: Fixed bug #28076. The Item_cache_str::is_varbinary flag has been added and the Item_cache_str::save_in_field method has been overloaded to prevent cached values from an illegal padding when saving in fields. The signature of the Item_cache::get_cache method has been changed to accept pointers to Item instead of Item_result values. sql/item_cmpfunc.cc: Fixed bug #28076. The Item_in_optimizer::fix_left method has been modified to to call Item_cache::get_cache in a new manner. sql/item_subselect.cc: Fixed bug #28076. The subselect_indexsubquery_engine::exec method has been modified to take into account field conversion errors (copy&paste from subselect_uniquesubquery_engine::exec). sql/sp_rcontext.cc: Fixed bug #28076. The sp_rcontext::create_case_expr_holder method has been modified to call Item_cache::get_cache in a new manner. sql/sp_rcontext.h: Fixed bug #28076. The sp_rcontext::create_case_expr_holder method signature has been modified to pass Item pointers to the Item_cache::get_cache method. sql/sql_class.cc: Fixed bug #28076. The select_max_min_finder_subselect::send_data method has been modified to call Item_cache::get_cache in a new manner. mysql-test/t/subselect.test: Added test case for bug #28076. mysql-test/r/subselect.result: Added test case for bug #28076.
* | Merge spetrunia@bk-internal.mysql.com:/home/bk/mysql-5.0-optunknown2007-10-231-1/+1
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | into mysql.com:/home/psergey/mysql-5.0-bug31450 sql/item.cc: Auto merged mysql-test/r/type_decimal.result: Post-merge fixes mysql-test/t/type_decimal.test: Post-merge fixes
| * | BUG#31450: Query causes error 1048unknown2007-10-231-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Let Item::save_in_field() call set_field_to_null_with_conversions() for decimal type, like this is done for the other item result types. mysql-test/r/type_decimal.result: BUG#31450: Query causes error 1048: testcase mysql-test/t/type_decimal.test: BUG#31450: Query causes error 1048: testcase
* | | Merge mysql.com:/home/gluh/MySQL/Merge/5.0unknown2007-10-231-8/+60
|\ \ \ | |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | into mysql.com:/home/gluh/MySQL/Merge/5.0-opt client/mysqldump.c: Auto merged include/config-win.h: Auto merged libmysql/libmysql.c: Auto merged myisam/sort.c: Auto merged mysql-test/r/func_sapdb.result: Auto merged mysql-test/r/variables.result: Auto merged mysql-test/t/variables.test: Auto merged sql/field.cc: Auto merged sql/ha_innodb.cc: Auto merged sql/item_func.cc: Auto merged sql/item_sum.cc: Auto merged sql/item_timefunc.h: Auto merged sql/mysql_priv.h: Auto merged sql/set_var.cc: Auto merged sql/sql_acl.cc: Auto merged sql/sql_base.cc: Auto merged sql/sql_parse.cc: Auto merged sql/sql_select.cc: Auto merged sql/sql_yacc.yy: Auto merged tests/mysql_client_test.c: Auto merged mysql-test/r/type_datetime.result: manual merge mysql-test/r/type_decimal.result: manual merge mysql-test/t/type_datetime.test: manual merge mysql-test/t/type_decimal.test: manual merge sql/item.cc: manual merge
| * | Bug #28687: Search fails on '0000-00-00' date after sql_mode changeunknown2007-10-221-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When doing indexed search the server constructs a key image for faster comparison to the stored keys. While doing that it must not perform (and stop if they fail) the additional date checks that can be turned on by the SQL mode because there already may be values in the table that don't comply with the error checks. Fixed by ignoring these SQL mode bits while making the key image. mysql-test/r/type_date.result: Bug #28687: test case mysql-test/t/type_date.test: Bug #28687: test case sql/item.cc: Bug #28687: no invalid date warnings
| * | Bug #28550 "Potential bugs related to the return type of the CHAR function".unknown2007-10-211-0/+13
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since, as of MySQL 5.0.15, CHAR() arguments larger than 255 are converted into multiple result bytes, a single CHAR() argument can now take up to 4 bytes. This patch fixes Item_func_char::fix_length_and_dec() to take this into account. This patch also fixes a regression introduced by the patch for bug21513. As now we do not always have the 'name' member of Item set for Item_hex_string and Item_bin_string, an own print() method has been added to Item_hex_string so that it could correctly be printed by Item_func::print_args(). mysql-test/r/func_str.result: Import patch bug288550.patch mysql-test/t/func_str.test: Import patch bug288550.patch sql/item.cc: Import patch bug288550.patch sql/item.h: Import patch bug288550.patch sql/item_strfunc.h: Import patch bug288550.patch
| * Merge sgluhov@bk-internal.mysql.com:/home/bk/mysql-5.0-optunknown2007-10-161-3/+9
| |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | into mysql.com:/home/gluh/MySQL/Merge/5.0-opt sql/item.cc: Auto merged sql/item.h: manual merge
| | * Bug#30986 Character set introducer followed by a HEX string can return bad ↵unknown2007-10-151-3/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | result(addon) issue an error if string has illegal characters mysql-test/r/ctype_utf8.result: issue an error if string has illegal characters mysql-test/t/ctype_utf8.test: issue an error if string has illegal characters sql/item.cc: issue an error if string has illegal characters sql/item.h: issue an error if string has illegal characters sql/sql_yacc.yy: issue an error if string has illegal characters
| * | Merge bk@192.168.21.1:mysql-5.0-optunknown2007-10-121-8/+3
| |\ \ | | |/ | |/| | | | | | | | | | | | | | | | into mysql.com:/home/hf/work/31155/my50-31155 sql/item.cc: Auto merged
| | * Bug #31155 gis types in union'd select cause crash.unknown2007-10-041-8/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We use get_geometry_type() call to decide the exact type of a geometry field to be created (POINT, POLYGON etc) Though this function was only implemented for few items. In the bug's case we need to call this function for the Item_sum instance, where it was not implemented, what is the reason of the crash. Fixed by implementing virtual Item::get_geometry_type(), so it can be called for any Item. sql/item.h: Bug #31155 gis types in union'd select cause crash. virtual Item::geometry_type() added instead of various geometry_type() fucntions. sql/item.cc: Bug #31155 gis types in union'd select cause crash. Unified virtual ::get_geometry_type() function used sql/item_geofunc.cc: Bug #31155 gis types in union'd select cause crash. virtual Item::geometry_type() implemented for geo-Items. Mostly previous ::get_geometry_type() implementation changed sql/item_geofunc.h: Bug #31155 gis types in union'd select cause crash. get_geometry_type() declarations unified
| * | Bug#30981 CHAR(0x41 USING ucs2) doesn't add leading zerounknown2007-10-111-0/+35
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Bug#30982 CHAR(..USING..) can return a not-well-formed string Bug#30986 Character set introducer followed by a HEX string can return bad result check_well_formed_result moved to Item from Item_str_func fixed Item_func_char::val_str for proper ucs symbols converting added check for well formed strings for correct conversion of constants with underscore charset mysql-test/r/ctype_ucs.result: test result mysql-test/r/ctype_utf8.result: test result mysql-test/t/ctype_ucs.test: test case mysql-test/t/ctype_utf8.test: test case sql/item.cc: check_well_formed_result() moved from Item_str_func sql/item.h: check_well_formed_result() moved from Item_str_func sql/item_strfunc.cc: check_well_formed_result moved to Item fixed Item_func_char::val_str for proper ucs symbols converting sql/item_strfunc.h: check_well_formed_result moved to Item sql/sql_yacc.yy: added check for well formed string
* | Merge lambda.hsd1.co.comcast.net.:/home/malff/TREE/mysql-5.0-baseunknown2007-10-181-0/+4
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | into lambda.hsd1.co.comcast.net.:/home/malff/TREE/mysql-5.0-rt-merge mysql-test/r/udf.result: Auto merged mysql-test/t/udf.test: Auto merged sql/item.cc: Auto merged sql/item_func.cc: Auto merged sql/mysql_priv.h: Auto merged sql/set_var.cc: Auto merged sql/udf_example.c: Auto merged sql/udf_example.def: Auto merged
| * \ Merge bk-internal.mysql.com:/home/bk/mysql-5.0-runtimeunknown2007-10-081-0/+4
| |\ \ | | |/ | |/| | | | | | | | | | | | | | | | into damien-katzs-computer.local:/Users/dkatz/mysql-5.0-runtime sql/item.cc: Auto merged
| | * Bug #29772 Error compiling with option --without-geometryunknown2007-09-281-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | Added #ifdef HAVE_SPATIAL around geometry related code. sql/item.cc: Added #ifdef HAVE_SPATIAL around geometry related code.
* | | Bug #31253: crash comparing datetime to doubleunknown2007-10-051-0/+1
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | convert(<invalid time>, datetime) in WHERE caused crash as function returned (void*)NULL, but did not flag SQL NULL. It does now. mysql-test/r/type_datetime.result: show that convert() to datetime in a WHERE-clause will no longer crash the server on invalid input. mysql-test/t/type_datetime.test: show that convert() to datetime in a WHERE-clause will no longer crash the server on invalid input. sql/item.cc: When failing to process time values, do not just return (void*)NULL, but flag SQL NULL as well so no caller will try to process the 0x0L. This makes behaviour for Item::Item::val_decimal_from_date() and Item::Item::val_decimal_from_time() identical.