################################################################################ # inc/partition_value.inc # # # # Purpose: # # Tests around "exotic" values calculated by the partitioning function # # # #------------------------------------------------------------------------------# # Original Author: mleich # # Original Date: 2006-04-11 # # Change Author: # # Change Date: # # Change: # ################################################################################ --echo --echo This test relies on the CAST() function for partitioning, which --echo is not allowed. Not deleting it yet, as it may have some useful --echo bits in it. See Bug #30581, "partition_value tests use disallowed --echo CAST() function" --echo --disable_parsing --echo --echo #======================================================================== --echo # Calculation of "exotic" results within the partition function --echo # outside of SIGNED BIGINT value range, 0, NULL --echo # column used in partitioning function has type CHAR --echo #======================================================================== --echo # 1. HASH() --disable_warnings DROP TABLE IF EXISTS t1; --enable_warnings # eval CREATE TABLE t1 ( $column_list ) PARTITION BY HASH(CAST(f_char1 AS SIGNED INTEGER) * CAST(5.0E+18 AS SIGNED INTEGER)) PARTITIONS 8; let $my_val= 2147483646; eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) VALUES($my_val,$my_val,'$my_val','$my_val','#$my_val#'); eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '$my_val'; let $my_val= -2147483646; eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) VALUES($my_val,$my_val,'$my_val','$my_val','#$my_val#'); eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '$my_val'; let $my_val= 0; eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) VALUES($my_val,$my_val,'$my_val','$my_val','#$my_val#'); eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '$my_val'; # let $my_val= NULL; eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) VALUES(NULL,NULL,NULL,NULL,NULL); eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 IS NULL; DROP TABLE t1; # --echo # 2. RANGE() eval CREATE TABLE t1 ( $column_list ) PARTITION BY RANGE(CAST(f_char1 AS SIGNED INTEGER) * CAST(5.0E+18 AS SIGNED INTEGER)) (PARTITION p0 VALUES LESS THAN (0), PARTITION p1 VALUES LESS THAN (1000000), PARTITION p2 VALUES LESS THAN MAXVALUE); let $my_val= 2147483646; eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) VALUES($my_val,$my_val,'$my_val','$my_val','#$my_val#'); eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '$my_val'; let $my_val= -2147483646; eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) VALUES($my_val,$my_val,'$my_val','$my_val','#$my_val#'); eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '$my_val'; let $my_val= 0; eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) VALUES($my_val,$my_val,'$my_val','$my_val','#$my_val#'); eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '$my_val'; # let $my_val= NULL; eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) VALUES(NULL,NULL,NULL,NULL,NULL); eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 IS NULL; DROP TABLE t1; # # The NDB handler only supports 32 bit integers in VALUES # therefor we have to skip the next test for NDB. if (`SELECT @@session.storage_engine NOT IN('ndbcluster')`) { --echo # 3. LIST() eval CREATE TABLE t1 ( $column_list ) PARTITION BY LIST(CAST(f_char1 AS SIGNED INTEGER) * CAST(5.0E+18 AS SIGNED INTEGER)) (PARTITION p0 VALUES IN (0), PARTITION p1 VALUES IN (NULL), PARTITION p2 VALUES IN (CAST( 2147483646 AS SIGNED INTEGER) * CAST(5.0E+18 AS SIGNED INTEGER)), PARTITION p3 VALUES IN (CAST(-2147483646 AS SIGNED INTEGER) * CAST(5.0E+18 AS SIGNED INTEGER))); let $my_val= 2147483646; eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) VALUES($my_val,$my_val,'$my_val','$my_val','#$my_val#'); eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '$my_val'; let $my_val= -2147483646; eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) VALUES($my_val,$my_val,'$my_val','$my_val','#$my_val#'); eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '$my_val'; let $my_val= 0; eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) VALUES($my_val,$my_val,'$my_val','$my_val','#$my_val#'); eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '$my_val'; # let $my_val= NULL; eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) VALUES(NULL,NULL,NULL,NULL,NULL); eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 IS NULL; DROP TABLE t1; } # --echo # 4. Partition by RANGE(...) subpartition by HASH() eval CREATE TABLE t1 ( $column_list ) PARTITION BY RANGE(CAST(f_char1 AS SIGNED INTEGER)) SUBPARTITION BY HASH(CAST(f_char2 AS SIGNED INTEGER) * CAST(5.0E+18 AS SIGNED INTEGER)) SUBPARTITIONS 4 (PARTITION p0 VALUES LESS THAN (0), PARTITION p1 VALUES LESS THAN MAXVALUE); let $my_val= 2147483646; eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) VALUES($my_val,$my_val,'1','$my_val','#$my_val#'); eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 = '$my_val'; let $my_val= -2147483646; eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) VALUES($my_val,$my_val,'-1','$my_val','#$my_val#'); eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 = '$my_val'; let $my_val= 0; eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) VALUES($my_val,$my_val,'$my_val','$my_val','#$my_val#'); eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 = '$my_val'; # let $my_val= NULL; eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) VALUES(NULL,NULL,NULL,NULL,NULL); eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 IS NULL; DROP TABLE t1; # --echo # 5. Partition by LIST(...) subpartition by HASH() eval CREATE TABLE t1 ( $column_list ) PARTITION BY LIST(CAST(f_char1 AS SIGNED INTEGER)) SUBPARTITION BY HASH(CAST(f_char2 AS SIGNED INTEGER) * CAST(5.0E+18 AS SIGNED INTEGER)) SUBPARTITIONS 4 (PARTITION p0 VALUES IN (NULL), PARTITION p1 VALUES IN (1)); let $my_val= 2147483646; eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) VALUES($my_val,$my_val,'1','$my_val','#$my_val#'); eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 = '$my_val'; let $my_val= -2147483646; eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) VALUES($my_val,$my_val,'1','$my_val','#$my_val#'); eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 = '$my_val'; let $my_val= 0; eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) VALUES($my_val,$my_val,'1','$my_val','#$my_val#'); eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 = '$my_val'; # let $my_val= NULL; eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) VALUES(NULL,NULL,NULL,NULL,NULL); eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 IS NULL; DROP TABLE t1; # --enable_parsing