1 # 2007 June 8 2 # 3 # The author disclaims copyright to this source code. In place of 4 # a legal notice, here is a blessing: 5 # 6 # May you do good and not evil. 7 # May you find forgiveness for yourself and forgive others. 8 # May you share freely, never taking more than you give. 9 # 10 #*********************************************************************** 11 # This file implements regression tests for SQLite library. The 12 # focus of this file is testing NULL comparisons in the WHERE clause. 13 # See ticket #2404. 14 # 15 # $Id: where5.test,v 1.2 2007/06/08 08:43:10 drh Exp $ 16 17 set testdir [file dirname $argv0] 18 source $testdir/tester.tcl 19 20 # Build some test data 21 # 22 do_test where5-1.0 { 23 execsql { 24 CREATE TABLE t1(x TEXT); 25 CREATE TABLE t2(x INTEGER); 26 CREATE TABLE t3(x INTEGER PRIMARY KEY); 27 INSERT INTO t1 VALUES(-1); 28 INSERT INTO t1 VALUES(0); 29 INSERT INTO t1 VALUES(1); 30 INSERT INTO t2 SELECT * FROM t1; 31 INSERT INTO t3 SELECT * FROM t2; 32 } 33 execsql { 34 SELECT * FROM t1 WHERE x<0 35 } 36 } {-1} 37 do_test where5-1.1 { 38 execsql { 39 SELECT * FROM t1 WHERE x<=0 40 } 41 } {-1 0} 42 do_test where5-1.2 { 43 execsql { 44 SELECT * FROM t1 WHERE x=0 45 } 46 } {0} 47 do_test where5-1.3 { 48 execsql { 49 SELECT * FROM t1 WHERE x>=0 50 } 51 } {0 1} 52 do_test where5-1.4 { 53 execsql { 54 SELECT * FROM t1 WHERE x>0 55 } 56 } {1} 57 do_test where5-1.5 { 58 execsql { 59 SELECT * FROM t1 WHERE x<>0 60 } 61 } {-1 1} 62 do_test where5-1.6 { 63 execsql { 64 SELECT * FROM t1 WHERE x<NULL 65 } 66 } {} 67 do_test where5-1.7 { 68 execsql { 69 SELECT * FROM t1 WHERE x<=NULL 70 } 71 } {} 72 do_test where5-1.8 { 73 execsql { 74 SELECT * FROM t1 WHERE x=NULL 75 } 76 } {} 77 do_test where5-1.9 { 78 execsql { 79 SELECT * FROM t1 WHERE x>=NULL 80 } 81 } {} 82 do_test where5-1.10 { 83 execsql { 84 SELECT * FROM t1 WHERE x>NULL 85 } 86 } {} 87 do_test where5-1.11 { 88 execsql { 89 SELECT * FROM t1 WHERE x!=NULL 90 } 91 } {} 92 do_test where5-1.12 { 93 execsql { 94 SELECT * FROM t1 WHERE x IS NULL 95 } 96 } {} 97 do_test where5-1.13 { 98 execsql { 99 SELECT * FROM t1 WHERE x IS NOT NULL 100 } 101 } {-1 0 1} 102 103 104 do_test where5-2.0 { 105 execsql { 106 SELECT * FROM t2 WHERE x<0 107 } 108 } {-1} 109 do_test where5-2.1 { 110 execsql { 111 SELECT * FROM t2 WHERE x<=0 112 } 113 } {-1 0} 114 do_test where5-2.2 { 115 execsql { 116 SELECT * FROM t2 WHERE x=0 117 } 118 } {0} 119 do_test where5-2.3 { 120 execsql { 121 SELECT * FROM t2 WHERE x>=0 122 } 123 } {0 1} 124 do_test where5-2.4 { 125 execsql { 126 SELECT * FROM t2 WHERE x>0 127 } 128 } {1} 129 do_test where5-2.5 { 130 execsql { 131 SELECT * FROM t2 WHERE x<>0 132 } 133 } {-1 1} 134 do_test where5-2.6 { 135 execsql { 136 SELECT * FROM t2 WHERE x<NULL 137 } 138 } {} 139 do_test where5-2.7 { 140 execsql { 141 SELECT * FROM t2 WHERE x<=NULL 142 } 143 } {} 144 do_test where5-2.8 { 145 execsql { 146 SELECT * FROM t2 WHERE x=NULL 147 } 148 } {} 149 do_test where5-2.9 { 150 execsql { 151 SELECT * FROM t2 WHERE x>=NULL 152 } 153 } {} 154 do_test where5-2.10 { 155 execsql { 156 SELECT * FROM t2 WHERE x>NULL 157 } 158 } {} 159 do_test where5-2.11 { 160 execsql { 161 SELECT * FROM t2 WHERE x!=NULL 162 } 163 } {} 164 do_test where5-2.12 { 165 execsql { 166 SELECT * FROM t2 WHERE x IS NULL 167 } 168 } {} 169 do_test where5-2.13 { 170 execsql { 171 SELECT * FROM t2 WHERE x IS NOT NULL 172 } 173 } {-1 0 1} 174 175 176 do_test where5-3.0 { 177 execsql { 178 SELECT * FROM t3 WHERE x<0 179 } 180 } {-1} 181 do_test where5-3.1 { 182 execsql { 183 SELECT * FROM t3 WHERE x<=0 184 } 185 } {-1 0} 186 do_test where5-3.2 { 187 execsql { 188 SELECT * FROM t3 WHERE x=0 189 } 190 } {0} 191 do_test where5-3.3 { 192 execsql { 193 SELECT * FROM t3 WHERE x>=0 194 } 195 } {0 1} 196 do_test where5-3.4 { 197 execsql { 198 SELECT * FROM t3 WHERE x>0 199 } 200 } {1} 201 do_test where5-3.5 { 202 execsql { 203 SELECT * FROM t3 WHERE x<>0 204 } 205 } {-1 1} 206 do_test where5-3.6 { 207 execsql { 208 SELECT * FROM t3 WHERE x<NULL 209 } 210 } {} 211 do_test where5-3.7 { 212 execsql { 213 SELECT * FROM t3 WHERE x<=NULL 214 } 215 } {} 216 do_test where5-3.8 { 217 execsql { 218 SELECT * FROM t3 WHERE x=NULL 219 } 220 } {} 221 do_test where5-3.9 { 222 execsql { 223 SELECT * FROM t3 WHERE x>=NULL 224 } 225 } {} 226 do_test where5-3.10 { 227 execsql { 228 SELECT * FROM t3 WHERE x>NULL 229 } 230 } {} 231 do_test where5-3.11 { 232 execsql { 233 SELECT * FROM t3 WHERE x!=NULL 234 } 235 } {} 236 do_test where5-3.12 { 237 execsql { 238 SELECT * FROM t3 WHERE x IS NULL 239 } 240 } {} 241 do_test where5-3.13 { 242 execsql { 243 SELECT * FROM t3 WHERE x IS NOT NULL 244 } 245 } {-1 0 1} 246 247 do_test where5-4.0 { 248 execsql { 249 SELECT x<NULL FROM t3 250 } 251 } {{} {} {}} 252 do_test where5-4.1 { 253 execsql { 254 SELECT x<=NULL FROM t3 255 } 256 } {{} {} {}} 257 do_test where5-4.2 { 258 execsql { 259 SELECT x==NULL FROM t3 260 } 261 } {{} {} {}} 262 do_test where5-4.3 { 263 execsql { 264 SELECT x>NULL FROM t3 265 } 266 } {{} {} {}} 267 do_test where5-4.4 { 268 execsql { 269 SELECT x>=NULL FROM t3 270 } 271 } {{} {} {}} 272 do_test where5-4.5 { 273 execsql { 274 SELECT x!=NULL FROM t3 275 } 276 } {{} {} {}} 277 do_test where5-4.6 { 278 execsql { 279 SELECT x IS NULL FROM t3 280 } 281 } {0 0 0} 282 do_test where5-4.7 { 283 execsql { 284 SELECT x IS NOT NULL FROM t3 285 } 286 } {1 1 1} 287 288 finish_test 289