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