1 ################################################################################ 
    2 # inc/partition_value.inc                                                      # 
    5 #   Tests around "exotic" values calculated by the partitioning function       # 
    7 #------------------------------------------------------------------------------# 
    8 # Original Author: mleich                                                      # 
    9 # Original Date: 2006-04-11                                                    # 
   13 ################################################################################ 
   17 --echo This 
test relies on the CAST() function for partitioning, which
 
   18 --echo is not allowed.  Not deleting it yet, as it may have some useful
 
   19 --echo bits in it.  See Bug 
#30581, "partition_value tests use disallowed 
   20 --echo CAST() function"
 
   26 --echo 
#======================================================================== 
   27 --echo #  Calculation of 
"exotic" results within the partition 
function 
   28 --echo #        outside of SIGNED BIGINT value range, 0, NULL
 
   29 --echo #     column used in partitioning 
function has 
type CHAR
 
   30 --echo #========================================================================
 
   31 --echo #  1.   
HASH(<check value>)
 
   33 DROP 
TABLE IF EXISTS t1;
 
   36 eval CREATE 
TABLE t1 (
 
   39 PARTITION BY 
HASH(CAST(f_char1 AS SIGNED INTEGER) * CAST(5.0
E+18 AS SIGNED INTEGER)) PARTITIONS 8;
 
   40 let $my_val= 2147483646;
 
   41 eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
   42 VALUES($my_val,$my_val,'$my_val','$my_val','
#$my_val#'); 
   43 eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = 
'$my_val';
 
   44 let $my_val= -2147483646;
 
   45 eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
   46 VALUES($my_val,$my_val,'$my_val','$my_val','
#$my_val#'); 
   47 eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = 
'$my_val';
 
   49 eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
   50 VALUES($my_val,$my_val,'$my_val','$my_val','
#$my_val#'); 
   51 eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = 
'$my_val';
 
   53 eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
   54 VALUES(NULL,NULL,NULL,NULL,NULL);
 
   55 eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 IS NULL;
 
   58 --echo #  2.   RANGE(<check value>)
 
   59 eval CREATE 
TABLE t1 (
 
   62 PARTITION BY RANGE(CAST(f_char1 AS SIGNED INTEGER) * CAST(5.0
E+18 AS SIGNED INTEGER))
 
   63 (PARTITION p0 VALUES LESS THAN (0),
 
   64  PARTITION p1 VALUES LESS THAN (1000000),
 
   65  PARTITION p2 VALUES LESS THAN MAXVALUE);
 
   66 let $my_val= 2147483646;
 
   67 eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
   68 VALUES($my_val,$my_val,'$my_val','$my_val','
#$my_val#'); 
   69 eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = 
'$my_val';
 
   70 let $my_val= -2147483646;
 
   71 eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
   72 VALUES($my_val,$my_val,'$my_val','$my_val','
#$my_val#'); 
   73 eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = 
'$my_val';
 
   75 eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
   76 VALUES($my_val,$my_val,'$my_val','$my_val','
#$my_val#'); 
   77 eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = 
'$my_val';
 
   79 eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
   80 VALUES(NULL,NULL,NULL,NULL,NULL);
 
   81 eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 IS NULL;
 
   84 # The NDB handler only supports 32 bit integers in VALUES 
   85 # therefor we have to skip the next test for NDB. 
   86 if (`SELECT @@session.default_storage_engine NOT IN(
'ndbcluster')`)
 
   88 --echo #  3.   
LIST(<check value>)
 
   89 eval CREATE 
TABLE t1 (
 
   92 PARTITION BY 
LIST(CAST(f_char1 AS SIGNED INTEGER) * CAST(5.0
E+18 AS SIGNED INTEGER))
 
   93 (PARTITION p0 VALUES IN (0),
 
   94  PARTITION p1 VALUES IN (NULL),
 
   95  PARTITION p2 VALUES IN (CAST( 2147483646 AS SIGNED INTEGER) * CAST(5.0
E+18 AS SIGNED INTEGER)),
 
   96  PARTITION p3 VALUES IN (CAST(-2147483646 AS SIGNED INTEGER) * CAST(5.0
E+18 AS SIGNED INTEGER)));
 
   97 let $my_val= 2147483646;
 
   98 eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
   99 VALUES($my_val,$my_val,'$my_val','$my_val','
#$my_val#'); 
  100 eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = 
'$my_val';
 
  101 let $my_val= -2147483646;
 
  102 eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
  103 VALUES($my_val,$my_val,'$my_val','$my_val','
#$my_val#'); 
  104 eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = 
'$my_val';
 
  106 eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
  107 VALUES($my_val,$my_val,'$my_val','$my_val','
#$my_val#'); 
  108 eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = 
'$my_val';
 
  110 eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
  111 VALUES(NULL,NULL,NULL,NULL,NULL);
 
  112 eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 IS NULL;
 
  116 --echo #  4.   Partition by RANGE(...) subpartition by 
HASH(<check value>)
 
  117 eval CREATE 
TABLE t1 (
 
  120 PARTITION BY RANGE(CAST(f_char1 AS SIGNED INTEGER))
 
  121 SUBPARTITION BY 
HASH(CAST(f_char2 AS SIGNED INTEGER) * CAST(5.0
E+18 AS SIGNED INTEGER)) SUBPARTITIONS 4
 
  122 (PARTITION p0 VALUES LESS THAN (0),
 
  123  PARTITION p1 VALUES LESS THAN MAXVALUE);
 
  124 let $my_val= 2147483646;
 
  125 eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
  126 VALUES($my_val,$my_val,'1','$my_val','
#$my_val#'); 
  127 eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 = 
'$my_val';
 
  128 let $my_val= -2147483646;
 
  129 eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
  130 VALUES($my_val,$my_val,'-1','$my_val','
#$my_val#'); 
  131 eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 = 
'$my_val';
 
  133 eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
  134 VALUES($my_val,$my_val,'$my_val','$my_val','
#$my_val#'); 
  135 eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 = 
'$my_val';
 
  137 eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
  138 VALUES(NULL,NULL,NULL,NULL,NULL);
 
  139 eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 IS NULL;
 
  142 --echo #  5.   Partition by 
LIST(...) subpartition by 
HASH(<check value>)
 
  143 eval CREATE 
TABLE t1 (
 
  146 PARTITION BY 
LIST(CAST(f_char1 AS SIGNED INTEGER))
 
  147 SUBPARTITION BY 
HASH(CAST(f_char2 AS SIGNED INTEGER) * CAST(5.0
E+18 AS SIGNED INTEGER)) SUBPARTITIONS 4
 
  148 (PARTITION p0 VALUES IN (NULL),
 
  149  PARTITION p1 VALUES IN (1));
 
  150 let $my_val= 2147483646;
 
  151 eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
  152 VALUES($my_val,$my_val,'1','$my_val','
#$my_val#'); 
  153 eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 = 
'$my_val';
 
  154 let $my_val= -2147483646;
 
  155 eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
  156 VALUES($my_val,$my_val,'1','$my_val','
#$my_val#'); 
  157 eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 = 
'$my_val';
 
  159 eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
  160 VALUES($my_val,$my_val,'1','$my_val','
#$my_val#'); 
  161 eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 = 
'$my_val';
 
  163 eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
  164 VALUES(NULL,NULL,NULL,NULL,NULL);
 
  165 eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 IS NULL;