- Add funtion "query_get_value to allow reading a fields value
into a $variable
client/mysqltest.c:
- Add function "let $var= query_get_value(<query>,<colname>,<row>)"
making it possible to read a value from a specific field in a query
into a $variable.
mysql-test/r/mysqltest.result:
Add test cases for "query_get_value"
mysql-test/t/mysqltest.test:
Add test cases for "query_get_value"
- Check that filemode was set to 0000
mysql-test/mysql-test-run.pl:
Checking for "running as root" should also read the filemode to see it
was properly set to 0000
- Final touchups
client/mysqltest.c:
Final touch ups, rename sorted_results to sorted_result
mysql-test/r/mysqltest.result:
Update test result
mysql-test/t/mysqltest.test:
Update results with additional subtests for empty result set,
NULL values and 1024 rows
- Change from "query_sorted <query>" to "sorted_results"
client/mysqltest.c:
Replace "query_sorted <query>" with the ability to turn
on "one shot result sorting" with the command "sorted_results"
mysql-test/r/mysqltest.result:
Update test and result
mysql-test/t/mysqltest.test:
Update test and result
for a query over an empty table right after its creation.
The crash is the result of an attempt made by JOIN::optimize to evaluate
the WHERE condition when no records have been actually read.
The added test case can reproduce the crash only with InnoDB tables and
only with 5.0.x.
mysql-test/r/innodb_mysql.result:
Added a test case for bug #28272.
mysql-test/t/innodb_mysql.test:
Added a test case for bug #28272.
sql/sql_select.cc:
Fixed bug #28272: crash that occurs when running an EXPLAIN command
for a query over an empty table right after its creation.
The crash is the result of an attempt made by JOIN::optimize to evaluate
the WHERE condition when no records have been actually read.
Such attempts could be observed only with EXPLAIN commands.
Now at the optimization phase the WHERE condition is never evaluated if
there is no record previously read from the table.
statement from a UNION query with ORDER BY an expression containing
RAND().
The crash happened because the global order by list in the union query
was not re-initialized for execution.
(Local order by lists were re-initialized though).
mysql-test/r/ps.result:
Added a test case for bug #27937.
mysql-test/t/ps.test:
Added a test case for bug #27937.
sql/sql_union.cc:
Fixed bug #27937: crash for the the second execution of a prepared
statement from a UNION query with ORDER BY an expression containing
RAND().
The crash happened because the global order by list in the union query
was not re-initialized for execution.
(Local order by lists were re-initialized though).
Added re-initialization of the global order by list in the function
st_select_lex_unit::init_prepare_fake_select_lex.
- Give some more protection against "too long socket name by setting the max
length when to use a tmpdir for sockets to 70
mysql-test/mysql-test-run.pl:
Give some more protection against "too long socket name by setting the max
length when to use a tmpdir for sockets to 70
- Queries in the query cache are identified by the individual
characters in the query statement, the current database and
the current environment expressed as a set of system variable
flags.
- Since the set of environment flags didn't properly describe the
current environment unexpected results were returned from the
query cache.
- Query cache is now cleared when the variable ft_boolean_syntax is
updated.
- An identification flag for the variable default_week_format is
added to the query cache record.
Thanks to Martin Friebe who has supplied significant parts of this patch.
mysql-test/r/query_cache.result:
Added test case
mysql-test/t/query_cache.test:
Added test case
sql/mysql_priv.h:
- Added missing flags to reflect the significant local environment
settings of the cached query.
sql/set_var.cc:
- Added query cache flush when system variable ft_boolean_syntax is
updated since this also invalidates all cached result sets using this
variable.
sql/sql_cache.cc:
- Added another local system variable as an identification flag
for cached queries.
The message is gramatically wrong, and factually wrong.
Change it to refer to the myisam_sort_buffer_size variable and change
"to" to "too".
myisam/sort.c:
Change error messages to be gramatically correct and to refer to the
correct variable.
mysql-test/r/repair.result:
Refer to the correct variable. Message changed.
Warnings may show up in the error log that complain about a table, yet
don't tell us which table.
Add the database and table names to the message.
sql/ha_myisam.cc:
Add the database and table names to the warning message.
When checking for applicability of join cache
we must disable its usage only if there is no
temp table in use.
When a temp table is used we can use join
cache (and it will not make the result-set
unordered) to fill the temp table. The filesort()
operation is then applied to the data in the temp
table and hence is not affected by join cache
usage.
Fixed by narrowing the condition for disabling
join cache to exclude the case where temp table
is used.
mysql-test/r/join.result:
Bug #27531: test case
mysql-test/t/join.test:
Bug #27531: test case
sql/sql_select.cc:
Bug #27531:
Disable join cache only if not using temp table
The generic string to int conversion was used by the Item_func_signed and
the Item_func_unsigned classes to convert DATE/DATETIME values to the
SIGNED/UNSIGNED type. But this conversion produces wrong results for such
values.
Now if the item which result has to be converted can return its result as
longlong then the item->val_int() method is used to allow the item to carry
out the conversion itself and return the correct result.
This condition is checked in the Item_func_signed::val_int() and the
Item_func_unsigned::val_int() functions.
mysql-test/t/cast.test:
Added a test case for the bug#23656: Wrong conversion result of a DATETIME to integer using CAST function.
mysql-test/r/cast.result:
Added a test case for the bug#23656: Wrong conversion result of a DATETIME to integer using CAST function.
sql/item_func.cc:
Bug#23656: Wrong conversion result of a DATETIME to integer using CAST function.
Now if the item which result has to be converted can return its result as
longlong then the item->val_int() method is used to allow the item to carry
out the conversion itself and return the correct result.
This condition is checked in the Item_func_signed::val_int() and the
Item_func_unsigned::val_int() functions.
some rollup rows (rows with NULLs for grouping attributes) if GROUP BY
list contained constant expressions.
This happened because the results of constant expressions were not put
in the temporary table used for duplicate elimination. In fact a constant
item from the GROUP BY list of a ROLLUP query can be replaced for an
Item_null_result object when a rollup row is produced .
Now the JOIN::rollup_init function wraps any constant item referenced in
the GROYP BY list of a ROLLUP query into an Item_func object of a special
class that is never detected as constant item. This ensures creation of
fields for such constant items in temporary tables and guarantees right
results when the result of the rollup operation first has to be written
into a temporary table, e.g. in the cases when duplicate elimination is
required.
mysql-test/r/olap.result:
Added a test case for bug #24856.
mysql-test/t/olap.test:
Added a test case for bug #24856.
sql/item_func.h:
Fixed bug #24856: the result set of a ROLLUP query with DISTINCT could lack
some rollup rows (rows with NULLs for grouping attributes) if GROUP BY
list contained constant expressions.
Itroduced class Item_func_rollup_const derived from Item_func. The object of
this class are never detected as constant items.
We use them for wrapping constant items from the GROUP BY list of any ROLLUP
query. This wrapping allows us to ensure writing constant items into temporary
tables whenever the result of the ROLLUP operation has to be written into a
temporary table, e.g. when ROLLUP is used together with DISTINCT in the SELECT
list.
sql/sql_select.cc:
Fixed bug #24856: the result set of a ROLLUP query with DISTINCT could lack
some rollup rows (rows with NULLs for grouping attributes) if GROUP BY
list contained constant expressions.
Now the JOIN::rollup_init function wraps any constant item referenced in
the GROYP BY list of a ROLLUP query into an Item_func object of a special
class that is never detected as constant item. This ensures creation of
fields for such constant items in temporary tables and guarantees right
results when the result of the rollup operation first has to be written
into a temporary table, e.g. in the cases when duplicate elimination is
required.
INSERT...ON DUPLICATE KEY UPDATE may cause error 1032:
"Can't find record in ..." if we are inserting into
InnoDB table unique index of partial key with
underlying UTF-8 string field.
This error occurs because INSERT...ON DUPLICATE uses a wrong
procedure to copy string fields of multi-byte character sets
for index search.
mysql-test/t/innodb_mysql.test:
Added test case for bug #13191.
mysql-test/r/innodb_mysql.result:
Added test case for bug #13191.
sql/field.h:
Fixed bug #13191.
Field_string::get_key_image() virtual function was overloaded
to implement copying of variable length character (UTF-8) fields.
Field::get_key_image() function prototype has been changed to
return byte size of copied data.
sql/field.cc:
Fixed bug #13191.
Field_string::get_key_image() virtual function was overloaded
to implement copying of variable length character (UTF-8) fields.
Field::get_key_image() function prototype has been changed to
return byte size of copied data.
sql/key.cc:
Fixed bug #13191.
INSERT...ON DUPLICATE KEY UPDATE may cause error 1032:
"Can't find record in ...".
This error occurs because INSERT...ON DUPLICATE uses
a wrong procedure to copy field parts for index search.
key_copy() function has been fixed.
This bug occurs when error message length exceeds allowed limit: my_error()
function outputs "%s" sequences instead of long string arguments.
Formats like %-.64s are very common in errmsg.txt files, however my_error()
function simply ignores precision of those formats.
mysys/my_error.c:
Fixed bug #20710.
This bug occurs when error message length exceeds allowed limit: my_error()
function output "%s" sequences instead of long string arguments.
my_error() function has been fixed to accept formats like %-.64s.
mysql-test/t/alter_table.test:
Added test case for bug #20710.
mysql-test/r/alter_table.result:
Added test case for bug #20710.