summaryrefslogtreecommitdiff
path: root/mysql-test/CMakeLists.txt
diff options
context:
space:
mode:
authorNirbhay Choubey <nirbhay@mariadb.com>2015-11-06 14:38:03 -0500
committerNirbhay Choubey <nirbhay@mariadb.com>2015-11-09 09:28:00 -0500
commit7ec655850397a0edfcea8c1fd82650824297e564 (patch)
treeee9eee5fa9fe5205a7e3950327c17afe93d2cd2a /mysql-test/CMakeLists.txt
parentd6b430c91b6ef6acd0b5adab6106915599c1abcc (diff)
downloadmariadb-git-7ec655850397a0edfcea8c1fd82650824297e564.tar.gz
MDEV-9021: MYSQLD SEGFAULTS WHEN BUILT USING --WITH-MAX-INDEXES=128
The bitmap implementation defines two template Bitmap classes. One optimized for 64-bit (default) wide bitmaps while the other is used for all other widths. In order to optimize the computations, Bitmap<64> class has defined its own member functions for bitmap operations, the other one, however, relies on mysys' bitmap implementation (mysys/my_bitmap.c). Issue 1: In case of non 64-bit Bitmap class, intersect() wrongly reset the received bitmap while initialising a new local bitmap structure (bitmap_init() clears the bitmap buffer) thus, the received bitmap was getting cleared. Fixed by initializing the local bitmap structure by using a temporary buffer and later copying the received bitmap to the initialised bitmap structure. Issue 2: The non 64-bit Bitmap class had the Iterator missing which caused compilation failure. Also added a cmake variable to hold the MAX_INDEXES value when supplied from the command prompt. (eg. cmake .. -DMAX_INDEXES=128U). Checks have been put in place to trigger build failure if MAX_INDEXES value is greater than 128. Test modifications: * Introduced include/have_max_indexes_[64|128].inc to facilitate skipping of tests for which the output differs with different MAX_INDEXES. * Introduced include/max_indexes.inc which would get modified by cmake to reflect the MAX_INDEXES value used to build the server. This file simply sets an mtr variable '$max_indexes' to show the MAX_INDEXES value, which will then be consumed by the above introduced include file. * Some tests (portions), dependent on MAX_INDEXES value, have been moved to separate test files.
Diffstat (limited to 'mysql-test/CMakeLists.txt')
-rw-r--r--mysql-test/CMakeLists.txt16
1 files changed, 16 insertions, 0 deletions
diff --git a/mysql-test/CMakeLists.txt b/mysql-test/CMakeLists.txt
index fe681758bd0..1c7cfaf81da 100644
--- a/mysql-test/CMakeLists.txt
+++ b/mysql-test/CMakeLists.txt
@@ -139,3 +139,19 @@ ENDMACRO()
# FILE(APPEND ${colldone} "${collin}\n")
# ENDIF()
#ENDFOREACH()
+
+# With different MAX_INDEXES values, server might behave differently in
+# certain cases. 'max_indexes.inc' file should be updated accordingly to
+# reflect the current MAX_INDEXES value. This file helps MTR to decide on
+# which tests should be skipped.
+# NOTE: While committing a patch please make sure that the file is unmodified
+# and should show the default MAX_INDEXES (i.e. 64U).
+IF (MAX_INDEXES)
+ IF(NOT (${MAX_INDEXES} EQUAL 64U))
+ FILE(WRITE include/max_indexes.inc
+ "# Warning: This is an auto-generated file. Please do not modify it.
+--let $max_indexes = ${MAX_INDEXES}\n")
+ MESSAGE(STATUS "mysql-test/include/max_indexes.inc adjusted")
+ ENDIF()
+ENDIF()
+