Failure to do so caused a failure in rocksdb.rocksdb test.
When test_if_cheaper_ordering computes is_covering= ...,
- MySQL calls table->file->primary_key_is_clustered()
- MariaDB calls (table->file->index_flags(nr, 0, 1) &
HA_CLUSTERED_INDEX)
The first produces true, the second used to produce false.
... due to different index statistics
Make statistics calculations in MariaRocks produce the same values
that MyRocks produces.
Added a comment in rdb_datadic.cc
- EXPLAIN result differences are due to MariaDB's MDEV-11172
- Don't print the value of rocksdb_supported_compression_types
to .result file
- The rest is trivial Maria-fication
- EXPLAIN is different
- error message is
- the output order is different, because MySQL knows when to use
ha_partition::handle_unordered_scan_next_partition.
Reading the table data without any ordering happens to produce
MariaDB uses ha_partition::handle_ordered_index_scan for this index
scan (this is a deficiency), which causes it to produce the row with
pk=1 first.
MariaDB uses
This cset just re-uses the approach from facebook/mysql-5.6 (Perhaps we
will have something different for MariaDB in the end).
For now this is:
Port this fix
dd7eeae69503cb8ab6ddc8fd9e2fef451cc31a32
Issue#250: MyRocks/Innodb different output from query with order by on table with index and decimal type
Summary:
Make open_binary_frm() set TABLE_SHARE::primary_key before it computes
Also add the patch for
https://github.com/facebook/mysql-5.6/issues/376
Backport the fix for BUG#81810 from facebook/mysql-5.6 tree.
Added the original testcase.
rocksdb.type_text_indexes still fails due to another problem.
- MariaDB produces a warning instead of error when the key
length is too long
- Trivial test results updates
- rocksdb.rocksdb still fails but this commit makes some progress.
The warning
"ORDER BY ignored as there is a user-defined clustered index in the table 't1'
was missing.
The reason is different condition in copy_data_between_tables():
MariaDB has a change, it uses
to->file->ha_table_flags() & HA_TABLE_SCAN_ON_INDEX
while MySQL uses:
to->file->primary_key_is_clustered()).
For some reason, MyRocks didn't have HA_TABLE_SCAN_ON_INDEX flag.
It should have one, will raise that with upstream, too.
rocksdb.lock: LOCK TABLE t1 LOW_PRIORITY WRITE does not produce a
warining in MariaDB
rocksdb.unique_check:
- MariaDB's mtr prints connection actions
- New (but temporary) ER_LOCK_WAIT_TIMEOUT text
rocksdb.allow_pk_no_concurrent_insert:
- Fix path
rocksdb.locking_issues
- Fix path
- The test still fails but for a different reason now
- Introduce @@rocksdb_supported_compression_types read-only variable.
It has a comma-separated list of compiled-in compression algorithms.
- Make rocksdb.compression_zstd test skip itself when ZSTD support
is not compiled in
I've moved it to storage/rocksdb/mysql-test/rocksdb/my.cnf,
but replication tests do not include that file?
Will need to get back to this when getting replication to work
facebook/mysql-5.6 has error messages with extra info, MariaDB doesn't
have extra info:
-ERROR HY000: Lock wait timeout exceeded; try restarting transaction: Timeout on index: test.t1.PRIMARY
+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
This patch updates .result files so that differences do not get in the
way; if we decide to use new error message text in MariaDB, this patch
can be applied in reverse.
- Before this, one had to provide appropriate --mysqld=.... options to
mysql-test-run.
- Also moved one option from rocksdb/suite.opt to rocksdb/my.cnf.
MySQL's log entries start with log entries like
YYYY-MM-DD 08:25:04 ...
while MariaDB
YYYY-MM-DD 8:25:04 ...
note that '08' turns into ' 8'.
Made grep pattern to account for this.
- Make the same changes as in the previous cset and in
a cset changing rocksdb.col_opt_null a few csets before.
- MySQL 5.6.11 has fixes for Bug #68472, Bug #16394472, MariaDB doesn't.
adjust the testcase accordingly.
Make the same changes as with rocksdb.col_opt_null a few csets before:
- MariaDB doesn't provide a default value for non-NULL columns
- Wording in error messages is different
- limits for DECIMAL columns are different
- YEAR(2) is deprecated but still supported
- Also added a --sorted_result for an I_S query.
Based on discussion at maria-developers@:
- Remove 'Support --force-restart "pseudo-argument"'
that was added a few csets before
- Instead, use "source include/restart_mysqld.inc" in the
testcases that need a freshly-started server
The differences are due:
- MariaDB 10.1+ assigns different DEFAULT values
= in some cases, MariaDB's table has no default value, while
MySQL's has '' as default.
= BLOB/TEXT can have a default value.
- MariaDB's MTR runs tests with diffferent timezone (affects result of
FROM_UNIXTIME())
- MySQL has removed YEAR(2). MariaDB produces warning but still creates
the column of this type.
- Different wording in warning/error messages.
testcases can specify it in *.opt files, it causes the server(s)
to be restarted before running the testcase.
MTRv1 supported this, this patch adds support for MTRv2
A number of tests used to fail due to just not being able to
access MyRocks' I_S plugins:
cons_snapshot_repeatable_read
-drop_table3
-index_file_map
-index_key_block_size
-issue100_delete
-truncate_table3
MySQL has each storage engine to increment Handler_XXX counters,
while MariaDB has handler::ha_XXX() methods to do the increments.
MariaDB's solution doesn't work for storage engines that implement
handler::read_range_first(), though.
Make ha_rocksdb::read_range_first increment the counter (when it is
calling handler::ha_XXX() function that will)
filename_to_tablename() in MariaDB produces warnings when its is
called for temporary file names.
Don't call this function for temporary filename (as we don't need
its result anyway)
- MariaDB has different wording for a few error messages
- MySQL changed Extra='' to Extra=NULL for EXPLAIN outputs, MariaDB didnt
- The testsuite in storage/rocksdb/mysql-test needs paths to include
files adjusted
- In SHOW COLUMNS output, Extra column is "NULL" in MariaDB vs '' in MySQL
Running MTR tests produces an error like this after the test run:
... 140562896741120 [ERROR] Invalid (old?) table or database name '.rocksdb'
There seems to be no way to have the MariaRocks to prevent these, so
the current way to fix them is to have --ignore-db-dirs in my.cnf
SHOW STATUS LIKE 'pattern' returned Rocksdb_XXX status variables
that had SHOW_FUNC type but didn't match the pattern (for example
Rocksdb_block_cache_add).
Among other things, this caused MTR to assume that each testcase
has damaged the execution environment.
The issue was a unitialized variable and then a typo in the condition
that checks if variable name matches the pattern.
In MariaDB, Field::make_sort_key stores NULL-indicator byte for
the field.
In MySQL, it doesn't, so MyRocks stores the NULL-indicator itself.
Switch to using Field::sort_string, which is the same as
Field::make_sort_key in MySQL.