When using index for group by and range access the server isolates
a set of ranges based on the conditions over the key parts of the
index used. Then it uses only the ranges over the GROUP BY fields to
jump from one group to another. Since the GROUP BY fields may form a
prefix over the index, we may use only a prefix of the ranges produced
by the range optimizer.
Each range contains a notion on whether it includes its border values.
The problem is that when using a range prefix, the last range is open
because it assumes that there is a range on the next keypart. Thus when
we use a prefix range as it is, it excludes all border values.
The solution is when ignoring the suffix of the range conditions
(to jump over the GROUP BY prefix only) the server must change the
remaining intervals so they always contain their borders, e.g.
if the whole range was :
(1,-inf) <= (<group_by_col>,<min_max_arg_col>) < (1, 3) we must make
(1) <= (<group_by_col>) <= (1) because (a,b) < (c1,c2) means :
a < c1 OR (a = c1 AND b < c2).
mysql-test/r/group_min_max.result:
Bug #22342: No results returned for query using max and group by
- test case
mysql-test/t/group_min_max.test:
Bug #22342: No results returned for query using max and group by
- test case
sql/opt_range.cc:
Bug #22342: No results returned for query using max and group by
- open the intervals for prefix select when there are more conditions
than used for the prefix search.
sql/opt_range.h:
Bug #22342: No results returned for query using max and group by
- open the intervals for prefix select when there are more conditions
than used for the prefix search.
strings
MySQL is setting the flag HA_END_SPACE_KEYS for all the keys that reference
text or varchar columns with collation different than binary.
This was done to handle correctly the situation where a lookup on such a key
may return more than 1 row because of the presence of many rows that differ
only by the amount of trailing space in the table's string column.
Inserting such values however appears to violate the unique checks on
INSERT/UPDATE. Thus that flag must not be set as it will prevent the optimizer
from choosing a faster access method.
This fix removes the setting of the HA_END_SPACE_KEYS flag.
include/my_base.h:
Bug #22367: Optimizer uses ref join type instead of eq_ref for simple join on
strings
- disabled HA_END_SPACE_KEY as it's no longer needed
mysql-test/r/func_str.result:
Bug #22367: Optimizer uses ref join type instead of eq_ref for simple join on
strings
- fixed explain in an existing case
mysql-test/r/merge.result:
Bug #22367: Optimizer uses ref join type instead of eq_ref for simple join on
strings
- fixed explain in an existing case
mysql-test/r/select.result:
Bug #22367: Optimizer uses ref join type instead of eq_ref for simple join on
strings
- test case
mysql-test/r/subselect.result:
Bug #22367: Optimizer uses ref join type instead of eq_ref for simple join on
strings
- fixed explain in an existing case
mysql-test/t/select.test:
Bug #22367: Optimizer uses ref join type instead of eq_ref for simple join on
strings
- test case
into macbook.gmz:/Users/kgeorge/mysql/work/B14019-5.0-opt
mysql-test/r/func_gconcat.result:
Auto merged
mysql-test/t/func_gconcat.test:
Auto merged
sql/sql_base.cc:
Auto merged
mysql-test/r/group_by.result:
merge 4.1->5.0
mysql-test/t/group_by.test:
merge 4.1->5.0
When resolving unqualified name references MySQL was not
checking what is the item type for the reference. Thus
e.g a string literal item that has by convention a name
equal to its string value will also work as a reference to
a SELECT list item or a table field.
Fixed by allowing only Item_ref or Item_field to referenced by
(unqualified) name.
mysql-test/r/func_gconcat.result:
Bug #14019: group by converts literal string to column name
- removed undeterministic testcase : order by a constant
means no order.
mysql-test/r/group_by.result:
Bug #14019: group by converts literal string to column name
- test case
mysql-test/t/func_gconcat.test:
Bug #14019: group by converts literal string to column name
- removed undeterministic testcase : order by a constant
means no order.
mysql-test/t/group_by.test:
Bug #14019: group by converts literal string to column name
- test case
sql/sql_base.cc:
Bug #14019: group by converts literal string to column name
- resolve unqualified by name refs only for real references
into mysql.com:/windows/Linux_space/MySQL/mysql-5.0
mysql-test/r/ndb_charset.result:
Auto merged
mysql-test/r/ndb_index_unique.result:
Auto merged
mysql-test/r/ndb_update.result:
Auto merged
sql/ha_ndbcluster.cc:
Merg
sql/handler.cc:
Merge
into willster.(none):/home/stewart/Documents/MySQL/5.0/bug19914-mk2-merge
sql/ha_berkeley.cc:
Auto merged
sql/ha_berkeley.h:
Auto merged
BitKeeper/deleted/.del-ha_isam.cc~4dce65904db2675e:
Auto merged
BitKeeper/deleted/.del-ha_isam.h~bf53d533be3d3927:
Auto merged
BitKeeper/deleted/.del-ha_isammrg.cc~dc682e4755d77a2e:
Auto merged
BitKeeper/deleted/.del-ha_isammrg.h~66fd2e5bfe7207dc:
Auto merged
sql/ha_archive.cc:
Auto merged
sql/ha_archive.h:
Auto merged
sql/ha_blackhole.cc:
Auto merged
sql/ha_blackhole.h:
Auto merged
sql/ha_heap.cc:
Auto merged
sql/ha_heap.h:
Auto merged
sql/ha_innodb.cc:
Auto merged
sql/ha_innodb.h:
Auto merged
sql/ha_myisam.cc:
Auto merged
sql/ha_myisam.h:
Auto merged
sql/ha_myisammrg.cc:
Auto merged
sql/ha_myisammrg.h:
Auto merged
sql/item_sum.cc:
Auto merged
sql/opt_sum.cc:
Auto merged
sql/sql_delete.cc:
Auto merged
sql/examples/ha_example.cc:
Auto merged
sql/examples/ha_example.h:
Auto merged
sql/examples/ha_tina.cc:
Auto merged
sql/examples/ha_tina.h:
Auto merged
sql/sql_union.cc:
Auto merged
sql/ha_ndbcluster.cc:
merge
sql/ha_ndbcluster.h:
merge
sql/handler.h:
merge
sql/sql_select.cc:
merge
The mysql_alter_table() was able to rename only a table.
The view/table renaming code is moved from the function rename_tables
to the new function called do_rename().
The mysql_alter_table() function calls it when it needs to rename a view.
mysql-test/t/rename.test:
Added a test case for bug#14959: ALTER TABLE isn't able to rename a view
mysql-test/r/rename.result:
Added a test case for bug#14959: ALTER TABLE isn't able to rename a view
sql/mysql_priv.h:
Bug#14959: ALTER TABLE isn't able to rename a view
Added the prototype of the do_rename() function.
sql/sql_rename.cc:
Bug#14959: ALTER TABLE isn't able to rename a view
The view/table renaming code is moved from the function rename_tables
to the new function called do_rename().
sql/sql_table.cc:
Bug#14959: ALTER TABLE isn't able to rename a view
Added handling of a view rename to the mysql_alter_table() function.
ndb/src/kernel/blocks/dbtux/Dbtux.hpp:
use pool of lock ops (like tupscan) instead of array of 992
ndb/src/kernel/blocks/dbtux/DbtuxDebug.cpp:
use pool of lock ops (like tupscan) instead of array of 992
ndb/src/kernel/blocks/dbtux/DbtuxGen.cpp:
use pool of lock ops (like tupscan) instead of array of 992
ndb/src/kernel/blocks/dbtux/DbtuxScan.cpp:
use pool of lock ops (like tupscan) instead of array of 992
ndb/src/kernel/vm/DLFifoList.hpp:
add Head::isEmpty
into moonlight.intranet:/home/tomash/src/mysql_ab/mysql-4.1-bug9678
BitKeeper/deleted/.del-lib_vio.c~d779731a1e391220:
Use local.
include/violite.h:
Use local.
sql/net_serv.cc:
Use local.
vio/viosocket.c:
Use local.
1) Handle not started nodes in dump 1000 (check for division by 0)
2) Make sure to init variables in constructor
ndb/src/common/debugger/EventLogger.cpp:
Handle not started nodes
ndb/src/kernel/blocks/dbacc/DbaccInit.cpp:
Init variables in constructor
ndb/src/kernel/blocks/dbacc/DbaccMain.cpp:
Handle not started nodes
ndb/src/kernel/blocks/dbtup/DbtupGen.cpp:
Init variables in constructor
Handle not started nodes
into perch.ndb.mysql.com:/home/jonas/src/mysql-5.0-ndb
ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
Auto merged
ndb/src/ndbapi/NdbScanOperation.cpp:
Auto merged
note this does not happen in 5.0, but i'm committing it here to keep code same between 5.0 and 5.1
ndb/src/ndbapi/NdbScanOperation.cpp:
missing if for bug#21941
into perch.ndb.mysql.com:/home/jonas/src/50-work
ndb/src/kernel/blocks/dbdih/Dbdih.hpp:
Auto merged
ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
Auto merged
ndb/src/kernel/blocks/ERROR_codes.txt:
merge
Fix race-condition between COPY_GCIREQ (GCP) and lcpSetActiveStatusEnd
Solution is _not_ to copy sysfileData from COPY_GCIREQ from "self"
ndb/src/kernel/blocks/ERROR_codes.txt:
Add error insert for dealying of copy sysfileData
ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
1) Add error insert for delaying of sysfileData
2) Change to that master is _not_ copying sysfileData from COPY_GCIREQ
as it might be updating it while COPY_GCIREQ is "in the fly"
into mysql.com:/home/hf/mysql-5.0.mrg
include/m_ctype.h:
Auto merged
mysql-test/r/ctype_utf8.result:
Auto merged
mysql-test/r/type_enum.result:
Auto merged
mysql-test/t/ctype_utf8.test:
Auto merged
sql/item_func.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/table.cc:
Auto merged
sql/unireg.cc:
Auto merged
strings/ctype-mb.c:
SCCS merged
strings/ctype-utf8.c:
SCCS merged
The Cached_item_decimal::cmp() method wasn't checking for null pointer
returned from the val_decimal() of the item being cached.
This leads to server crash.
The Cached_item_decimal::cmp() method now check for null values.
sql/item_buff.cc:
Bug#22138: Unhandled NULL caused server crash
The Cached_item_decimal::cmp() method now check for null values.
mysql-test/r/type_decimal.result:
Added the test case for bug#22138: Unhandled NULL caused server crash
mysql-test/t/type_decimal.test:
Added the test case for bug#22138: Unhandled NULL caused server crash
hangs on Linux
If REPAIR TABLE ... USE_FRM is issued for table that is located in different
than default database server crash could happen.
In reopen_name_locked_table take database name from table_list (user specified
or default database) instead of from thd (default database).
Affects 4.1 only.
mysql-test/r/repair.result:
A test case for BUG#22562.
mysql-test/t/repair.test:
A test case for BUG#22562.
sql/sql_base.cc:
In reopen_name_locked_table take database name from table_list (user specified
or default database) instead of from thd (default database).
into perch.ndb.mysql.com:/home/jonas/src/mysql-5.0-ndb
mysql-test/r/ctype_utf8.result:
Auto merged
mysql-test/t/ctype_utf8.test:
Auto merged
ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
Auto merged
sql/ha_ndbcluster.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_view.cc:
Auto merged
sql/table.cc:
Auto merged
Examined rows are counted for every join part. The per-join-part
counter was incremented over all iterations. The result variable
was replaced at the end of every iteration. The final result was
the number of examined rows by the join part that ended its
execution as the last one. The numbers of other join parts was
lost.
Now we reset the per-join-part counter before every iteration and
add it to the result variable at the end of the iteration. That
way we get the sum of all iterations of all join parts.
No test case. Testing this needs a look into the slow query log.
I don't know of a way to do this portably with the test suite.
sql/sql_select.cc:
Bug#12240 - Rows Examined in Slow Log showing incorrect number?
Fixed reseting and accumulation of examined rows counts.
fix bug in handling of inactive timeout for scan, when all is delivered
ndb/src/kernel/blocks/dbtc/DbtcMain.cpp:
1) set timeout if all scans are at api
2) Use c_appl_timeout_value when getting scan timeout
ndb/test/ndbapi/testTimeout.cpp:
test program
into chilla.local:/home/mydev/mysql-5.0-bug8283
include/my_sys.h:
Auto merged
include/myisam.h:
Auto merged
myisam/mi_check.c:
Auto merged
myisam/mi_open.c:
Auto merged
myisam/mi_packrec.c:
Auto merged
myisam/sort.c:
Auto merged
mysql-test/t/myisam.test:
Auto merged
myisam/myisamdef.h:
Bug#8283 - OPTIMIZE TABLE causes data loss
Merge from 4.1
mysql-test/r/myisam.result:
Bug#8283 - OPTIMIZE TABLE causes data loss
Merge from 4.1
mysys/mf_iocache.c:
Bug#8283 - OPTIMIZE TABLE causes data loss
Merge from 4.1
into chilla.local:/home/mydev/mysql-4.1-bug8283-one
myisam/mi_check.c:
Auto merged
myisam/mi_packrec.c:
Auto merged
myisam/sort.c:
Auto merged
mysql-test/r/myisam.result:
Bug#8283 - OPTIMIZE TABLE causes data loss
Manual merge
mysql-test/t/myisam.test:
Bug#8283 - OPTIMIZE TABLE causes data loss
Manual merge
OPTIMIZE TABLE with myisam_repair_threads > 1 performs a non-quick
parallel repair. This means that it does not only rebuild all
indexes, but also the data file.
Non-quick parallel repair works so that there is one thread per
index. The first of the threads rebuilds also the new data file.
The problem was that all threads shared the read io cache on the
old data file. If there were holes (deleted records) in the table,
the first thread skipped them, writing only contiguous, non-deleted
records to the new data file. Then it built the new index so that
its entries pointed to the correct record positions. But the other
threads didn't know the new record positions, but put the positions
from the old data file into the index.
The new design is so that there is a shared io cache which is filled
by the first thread (the data file writer) with the new contiguous
records and read by the other threads. Now they know the new record
positions.
Another problem was that for the parallel repair of compressed
tables a common bit_buff and rec_buff was used. I changed it so
that thread specific buffers are used for parallel repair.
A similar problem existed for checksum calculation. I made this
multi-thread safe too.
include/my_sys.h:
Bug#8283 - OPTIMIZE TABLE causes data loss
Redesign of io_cache_share.
include/myisam.h:
Bug#8283 - OPTIMIZE TABLE causes data loss
Redesign of checksum calculation in mi_check.c.
'calc_checksum' is now in myisamdef.h:st_mi_sort_param.
myisam/mi_check.c:
Bug#8283 - OPTIMIZE TABLE causes data loss
Implemented a new parallel repair design.
Using a synchronized shared read/write cache.
Allowed for thread specific bit_buff, rec_buff, and calc_checksum.
myisam/mi_open.c:
Bug#8283 - OPTIMIZE TABLE causes data loss
Added DBUG output.
myisam/mi_packrec.c:
Bug#8283 - OPTIMIZE TABLE causes data loss
Allowed for thread specific bit_buff and rec_buff.
myisam/myisamdef.h:
Bug#8283 - OPTIMIZE TABLE causes data loss
Commented on checksum calculation variables.
Allowed for thread specific bit_buff.
Added DBUG output for better table crash detection.
myisam/sort.c:
Bug#8283 - OPTIMIZE TABLE causes data loss
Added implications of the new parallel repair design.
Renamed 'info' -> 'sort_param'.
Added DBUG output.
mysql-test/r/myisam.result:
Bug#8283 - OPTIMIZE TABLE causes data loss
Added test results.
mysql-test/t/myisam.test:
Bug#8283 - OPTIMIZE TABLE causes data loss
Added test cases.
mysys/mf_iocache.c:
Bug#8283 - OPTIMIZE TABLE causes data loss
Redesign of io_cache_share.
We do now allow a writer to synchronize himself with the
readers of a shared cache. When all threads join in the lock,
the writer copies the data from his write buffer to the shared
read buffer.
Currently SQL_BIG_RESULT is checked only at compile time.
However, additional optimizations may take place after
this check that change the sort method from 'filesort'
to sorting via index. As a result the actual plan
executed is not the one specified by the SQL_BIG_RESULT
hint. Similarly, there is no such test when executing
EXPLAIN, resulting in incorrect output.
The patch corrects the problem by testing for
SQL_BIG_RESULT both during the explain and execution
phases.
mysql-test/r/bdb.result:
Bug #22781: SQL_BIG_RESULT fails to influence sort plan
- updated sql_big_result testcase
mysql-test/r/group_by.result:
Bug #22781: SQL_BIG_RESULT fails to influence sort plan
- test case with MyISAM
mysql-test/r/innodb.result:
Bug #22781: SQL_BIG_RESULT fails to influence sort plan
- updated sql_big_result testcase
mysql-test/r/innodb_mysql.result:
Bug #22781: SQL_BIG_RESULT fails to influence sort plan
- test case with InnoDB
mysql-test/r/myisam.result:
Bug #22781: SQL_BIG_RESULT fails to influence sort plan
- updated sql_big_result testcase
mysql-test/t/group_by.test:
Bug #22781: SQL_BIG_RESULT fails to influence sort plan
- test case with MyISAM
mysql-test/t/innodb_mysql.test:
Bug #22781: SQL_BIG_RESULT fails to influence sort plan
- test case with InnoDB
sql/sql_select.cc:
Bug #22781: SQL_BIG_RESULT fails to influence sort plan
- When SQL_BIG_RESULT is specified, disable the optimization performed
at execution/explain time that decides to use an index instead
of filesort.