19fa7207bSdrh# 2009 August 13 29fa7207bSdrh# 39fa7207bSdrh# The author disclaims copyright to this source code. In place of 49fa7207bSdrh# a legal notice, here is a blessing: 59fa7207bSdrh# 69fa7207bSdrh# May you do good and not evil. 79fa7207bSdrh# May you find forgiveness for yourself and forgive others. 89fa7207bSdrh# May you share freely, never taking more than you give. 99fa7207bSdrh# 109fa7207bSdrh#*********************************************************************** 119fa7207bSdrh# This file implements regression tests for SQLite library. The 129fa7207bSdrh# focus of this file is testing WHERE clause conditions with 139fa7207bSdrh# subtle affinity issues. 149fa7207bSdrh# 159fa7207bSdrh 169fa7207bSdrhset testdir [file dirname $argv0] 179fa7207bSdrhsource $testdir/tester.tcl 189fa7207bSdrh 19320b3a7aSdrh# For this set of tests: 20320b3a7aSdrh# 21320b3a7aSdrh# * t1.y holds an integer value with affinity NONE 22320b3a7aSdrh# * t2.b holds a text value with affinity TEXT 23320b3a7aSdrh# 24320b3a7aSdrh# These values are not equal and because neither affinity is NUMERIC 25320b3a7aSdrh# no type conversion occurs. 26320b3a7aSdrh# 279fa7207bSdrhdo_test whereB-1.1 { 289fa7207bSdrh db eval { 299fa7207bSdrh CREATE TABLE t1(x,y); -- affinity of t1.y is NONE 30320b3a7aSdrh INSERT INTO t1 VALUES(1,99); 319fa7207bSdrh 329fa7207bSdrh CREATE TABLE t2(a, b TEXT); -- affinity of t2.b is TEXT 339fa7207bSdrh CREATE INDEX t2b ON t2(b); 34320b3a7aSdrh INSERT INTO t2 VALUES(2,99); 359fa7207bSdrh 369fa7207bSdrh SELECT x, a, y=b FROM t1, t2 ORDER BY +x, +a; 379fa7207bSdrh } 38320b3a7aSdrh} {1 2 0} 399fa7207bSdrhdo_test whereB-1.2 { 409fa7207bSdrh db eval { 41320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE y=b; 429fa7207bSdrh } 439fa7207bSdrh} {} 449fa7207bSdrhdo_test whereB-1.3 { 459fa7207bSdrh db eval { 46320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE b=y; 479fa7207bSdrh } 489fa7207bSdrh} {} 499fa7207bSdrhdo_test whereB-1.4 { 509fa7207bSdrh db eval { 51320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE +y=+b; 529fa7207bSdrh } 539fa7207bSdrh} {} 549fa7207bSdrhdo_test whereB-1.100 { 559fa7207bSdrh db eval { 569fa7207bSdrh DROP INDEX t2b; 57320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE y=b; 589fa7207bSdrh } 599fa7207bSdrh} {} 609fa7207bSdrhdo_test whereB-1.101 { 619fa7207bSdrh db eval { 62320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE b=y; 639fa7207bSdrh } 649fa7207bSdrh} {} 659fa7207bSdrhdo_test whereB-1.102 { 669fa7207bSdrh db eval { 67320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE +y=+b; 689fa7207bSdrh } 699fa7207bSdrh} {} 709fa7207bSdrh 71320b3a7aSdrh# For this set of tests: 72320b3a7aSdrh# 73320b3a7aSdrh# * t1.y holds a text value with affinity TEXT 74320b3a7aSdrh# * t2.b holds an integer value with affinity NONE 75320b3a7aSdrh# 76320b3a7aSdrh# These values are not equal and because neither affinity is NUMERIC 77320b3a7aSdrh# no type conversion occurs. 78320b3a7aSdrh# 799fa7207bSdrhdo_test whereB-2.1 { 809fa7207bSdrh db eval { 819fa7207bSdrh DROP TABLE t1; 829fa7207bSdrh DROP TABLE t2; 839fa7207bSdrh 84320b3a7aSdrh CREATE TABLE t1(x, y TEXT); -- affinity of t1.y is TEXT 85320b3a7aSdrh INSERT INTO t1 VALUES(1,99); 869fa7207bSdrh 87320b3a7aSdrh CREATE TABLE t2(a, b BLOB); -- affinity of t2.b is NONE 889fa7207bSdrh CREATE INDEX t2b ON t2(b); 89320b3a7aSdrh INSERT INTO t2 VALUES(2,99); 909fa7207bSdrh 919fa7207bSdrh SELECT x, a, y=b FROM t1, t2 ORDER BY +x, +a; 929fa7207bSdrh } 93320b3a7aSdrh} {1 2 0} 949fa7207bSdrhdo_test whereB-2.2 { 959fa7207bSdrh db eval { 96320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE y=b; 979fa7207bSdrh } 98320b3a7aSdrh} {} 999fa7207bSdrhdo_test whereB-2.3 { 1009fa7207bSdrh db eval { 101320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE b=y; 1029fa7207bSdrh } 103320b3a7aSdrh} {} 1049fa7207bSdrhdo_test whereB-2.4 { 1059fa7207bSdrh db eval { 106320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE +y=+b; 1079fa7207bSdrh } 108320b3a7aSdrh} {} 1099fa7207bSdrhdo_test whereB-2.100 { 1109fa7207bSdrh db eval { 1119fa7207bSdrh DROP INDEX t2b; 112320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE y=b; 1139fa7207bSdrh } 114320b3a7aSdrh} {} 1159fa7207bSdrhdo_test whereB-2.101 { 1169fa7207bSdrh db eval { 117320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE b=y; 1189fa7207bSdrh } 119320b3a7aSdrh} {} 1209fa7207bSdrhdo_test whereB-2.102 { 1219fa7207bSdrh db eval { 122320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE +y=+b; 1239fa7207bSdrh } 124320b3a7aSdrh} {} 125320b3a7aSdrh 126320b3a7aSdrh# For this set of tests: 127320b3a7aSdrh# 128320b3a7aSdrh# * t1.y holds a text value with affinity NONE 129320b3a7aSdrh# * t2.b holds an integer value with affinity NONE 130320b3a7aSdrh# 131320b3a7aSdrh# These values are not equal and because neither affinity is NUMERIC 132320b3a7aSdrh# no type conversion occurs. 133320b3a7aSdrh# 134320b3a7aSdrhdo_test whereB-3.1 { 135320b3a7aSdrh db eval { 136320b3a7aSdrh DROP TABLE t1; 137320b3a7aSdrh DROP TABLE t2; 138320b3a7aSdrh 139320b3a7aSdrh CREATE TABLE t1(x, y BLOB); -- affinity of t1.y is NONE 140*c4fa5315Sdrh INSERT INTO t1 VALUES(1,99); 141320b3a7aSdrh 142320b3a7aSdrh CREATE TABLE t2(a, b BLOB); -- affinity of t2.b is NONE 143320b3a7aSdrh CREATE INDEX t2b ON t2(b); 144*c4fa5315Sdrh INSERT INTO t2 VALUES(2,'99'); 145320b3a7aSdrh 146320b3a7aSdrh SELECT x, a, y=b FROM t1, t2; 147320b3a7aSdrh } 148*c4fa5315Sdrh} {1 2 0} 149320b3a7aSdrhdo_test whereB-3.2 { 150320b3a7aSdrh db eval { 151320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE y=b; 152320b3a7aSdrh } 153320b3a7aSdrh} {} 154320b3a7aSdrhdo_test whereB-3.3 { 155320b3a7aSdrh db eval { 156320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE b=y; 157320b3a7aSdrh } 158320b3a7aSdrh} {} 159320b3a7aSdrhdo_test whereB-3.4 { 160320b3a7aSdrh db eval { 161320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE +y=+b; 162320b3a7aSdrh } 163320b3a7aSdrh} {} 164320b3a7aSdrhdo_test whereB-3.100 { 165320b3a7aSdrh db eval { 166320b3a7aSdrh DROP INDEX t2b; 167320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE y=b; 168320b3a7aSdrh } 169320b3a7aSdrh} {} 170320b3a7aSdrhdo_test whereB-3.101 { 171320b3a7aSdrh db eval { 172320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE b=y; 173320b3a7aSdrh } 174320b3a7aSdrh} {} 175320b3a7aSdrhdo_test whereB-3.102 { 176320b3a7aSdrh db eval { 177320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE +y=+b; 178320b3a7aSdrh } 179320b3a7aSdrh} {} 180320b3a7aSdrh 181320b3a7aSdrh 182320b3a7aSdrh# For this set of tests: 183320b3a7aSdrh# 184320b3a7aSdrh# * t1.y holds a text value with affinity NONE 185320b3a7aSdrh# * t2.b holds an integer value with affinity NUMERIC 186320b3a7aSdrh# 187320b3a7aSdrh# Because t2.b has a numeric affinity, type conversion should occur 188320b3a7aSdrh# and the two fields should be equal. 189320b3a7aSdrh# 190320b3a7aSdrhdo_test whereB-4.1 { 191320b3a7aSdrh db eval { 192320b3a7aSdrh DROP TABLE t1; 193320b3a7aSdrh DROP TABLE t2; 194320b3a7aSdrh 195320b3a7aSdrh CREATE TABLE t1(x, y BLOB); -- affinity of t1.y is NONE 196320b3a7aSdrh INSERT INTO t1 VALUES(1,'99'); 197320b3a7aSdrh 198320b3a7aSdrh CREATE TABLE t2(a, b NUMERIC); -- affinity of t2.b is NUMERIC 199320b3a7aSdrh CREATE INDEX t2b ON t2(b); 200320b3a7aSdrh INSERT INTO t2 VALUES(2,99); 201320b3a7aSdrh 202320b3a7aSdrh SELECT x, a, y=b FROM t1, t2; 203320b3a7aSdrh } 204320b3a7aSdrh} {1 2 1} 205320b3a7aSdrhdo_test whereB-4.2 { 206320b3a7aSdrh db eval { 207320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE y=b; 208320b3a7aSdrh } 209320b3a7aSdrh} {1 2 1} 210320b3a7aSdrhdo_test whereB-4.3 { 211320b3a7aSdrh db eval { 212320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE b=y; 213320b3a7aSdrh } 214320b3a7aSdrh} {1 2 1} 215320b3a7aSdrhdo_test whereB-4.4 { 216320b3a7aSdrh # In this case the unary "+" operator removes the column affinity so 217320b3a7aSdrh # the columns compare false 218320b3a7aSdrh db eval { 219320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE +y=+b; 220320b3a7aSdrh } 221320b3a7aSdrh} {} 222320b3a7aSdrhdo_test whereB-4.100 { 223320b3a7aSdrh db eval { 224320b3a7aSdrh DROP INDEX t2b; 225320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE y=b; 226320b3a7aSdrh } 227320b3a7aSdrh} {1 2 1} 228320b3a7aSdrhdo_test whereB-4.101 { 229320b3a7aSdrh db eval { 230320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE b=y; 231320b3a7aSdrh } 232320b3a7aSdrh} {1 2 1} 233320b3a7aSdrhdo_test whereB-4.102 { 234320b3a7aSdrh # In this case the unary "+" operator removes the column affinity so 235320b3a7aSdrh # the columns compare false 236320b3a7aSdrh db eval { 237320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE +y=+b; 238320b3a7aSdrh } 239320b3a7aSdrh} {} 240320b3a7aSdrh 241320b3a7aSdrh 242320b3a7aSdrh 243320b3a7aSdrh# For this set of tests: 244320b3a7aSdrh# 245320b3a7aSdrh# * t1.y holds a text value with affinity NONE 246320b3a7aSdrh# * t2.b holds an integer value with affinity INTEGER 247320b3a7aSdrh# 248320b3a7aSdrh# Because t2.b has a numeric affinity, type conversion should occur 249320b3a7aSdrh# and the two fields should be equal. 250320b3a7aSdrh# 251320b3a7aSdrhdo_test whereB-5.1 { 252320b3a7aSdrh db eval { 253320b3a7aSdrh DROP TABLE t1; 254320b3a7aSdrh DROP TABLE t2; 255320b3a7aSdrh 256320b3a7aSdrh CREATE TABLE t1(x, y BLOB); -- affinity of t1.y is NONE 257320b3a7aSdrh INSERT INTO t1 VALUES(1,'99'); 258320b3a7aSdrh 259320b3a7aSdrh CREATE TABLE t2(a, b INT); -- affinity of t2.b is INTEGER 260320b3a7aSdrh CREATE INDEX t2b ON t2(b); 261320b3a7aSdrh INSERT INTO t2 VALUES(2,99); 262320b3a7aSdrh 263320b3a7aSdrh SELECT x, a, y=b FROM t1, t2; 264320b3a7aSdrh } 265320b3a7aSdrh} {1 2 1} 266320b3a7aSdrhdo_test whereB-5.2 { 267320b3a7aSdrh db eval { 268320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE y=b; 269320b3a7aSdrh } 270320b3a7aSdrh} {1 2 1} 271320b3a7aSdrhdo_test whereB-5.3 { 272320b3a7aSdrh db eval { 273320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE b=y; 274320b3a7aSdrh } 275320b3a7aSdrh} {1 2 1} 276320b3a7aSdrhdo_test whereB-5.4 { 277320b3a7aSdrh # In this case the unary "+" operator removes the column affinity so 278320b3a7aSdrh # the columns compare false 279320b3a7aSdrh db eval { 280320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE +y=+b; 281320b3a7aSdrh } 282320b3a7aSdrh} {} 283320b3a7aSdrhdo_test whereB-5.100 { 284320b3a7aSdrh db eval { 285320b3a7aSdrh DROP INDEX t2b; 286320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE y=b; 287320b3a7aSdrh } 288320b3a7aSdrh} {1 2 1} 289320b3a7aSdrhdo_test whereB-5.101 { 290320b3a7aSdrh db eval { 291320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE b=y; 292320b3a7aSdrh } 293320b3a7aSdrh} {1 2 1} 294320b3a7aSdrhdo_test whereB-5.102 { 295320b3a7aSdrh # In this case the unary "+" operator removes the column affinity so 296320b3a7aSdrh # the columns compare false 297320b3a7aSdrh db eval { 298320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE +y=+b; 299320b3a7aSdrh } 300320b3a7aSdrh} {} 301320b3a7aSdrh 302320b3a7aSdrh 303320b3a7aSdrh# For this set of tests: 304320b3a7aSdrh# 305320b3a7aSdrh# * t1.y holds a text value with affinity NONE 306320b3a7aSdrh# * t2.b holds an integer value with affinity REAL 307320b3a7aSdrh# 308320b3a7aSdrh# Because t2.b has a numeric affinity, type conversion should occur 309320b3a7aSdrh# and the two fields should be equal. 310320b3a7aSdrh# 311320b3a7aSdrhdo_test whereB-6.1 { 312320b3a7aSdrh db eval { 313320b3a7aSdrh DROP TABLE t1; 314320b3a7aSdrh DROP TABLE t2; 315320b3a7aSdrh 316320b3a7aSdrh CREATE TABLE t1(x, y BLOB); -- affinity of t1.y is NONE 317320b3a7aSdrh INSERT INTO t1 VALUES(1,'99'); 318320b3a7aSdrh 319320b3a7aSdrh CREATE TABLE t2(a, b REAL); -- affinity of t2.b is REAL 320320b3a7aSdrh CREATE INDEX t2b ON t2(b); 321320b3a7aSdrh INSERT INTO t2 VALUES(2,99.0); 322320b3a7aSdrh 323320b3a7aSdrh SELECT x, a, y=b FROM t1, t2; 324320b3a7aSdrh } 325320b3a7aSdrh} {1 2 1} 326320b3a7aSdrhdo_test whereB-6.2 { 327320b3a7aSdrh db eval { 328320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE y=b; 329320b3a7aSdrh } 330320b3a7aSdrh} {1 2 1} 331320b3a7aSdrhdo_test whereB-6.3 { 332320b3a7aSdrh db eval { 333320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE b=y; 334320b3a7aSdrh } 335320b3a7aSdrh} {1 2 1} 336320b3a7aSdrhdo_test whereB-6.4 { 337320b3a7aSdrh # In this case the unary "+" operator removes the column affinity so 338320b3a7aSdrh # the columns compare false 339320b3a7aSdrh db eval { 340320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE +y=+b; 341320b3a7aSdrh } 342320b3a7aSdrh} {} 343320b3a7aSdrhdo_test whereB-6.100 { 344320b3a7aSdrh db eval { 345320b3a7aSdrh DROP INDEX t2b; 346320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE y=b; 347320b3a7aSdrh } 348320b3a7aSdrh} {1 2 1} 349320b3a7aSdrhdo_test whereB-6.101 { 350320b3a7aSdrh db eval { 351320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE b=y; 352320b3a7aSdrh } 353320b3a7aSdrh} {1 2 1} 354320b3a7aSdrhdo_test whereB-6.102 { 355320b3a7aSdrh # In this case the unary "+" operator removes the column affinity so 356320b3a7aSdrh # the columns compare false 357320b3a7aSdrh db eval { 358320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE +y=+b; 359320b3a7aSdrh } 360320b3a7aSdrh} {} 361320b3a7aSdrh 362320b3a7aSdrh 363320b3a7aSdrh# For this set of tests: 364320b3a7aSdrh# 365320b3a7aSdrh# * t1.y holds an integer value with affinity NUMERIC 366320b3a7aSdrh# * t2.b holds a text value with affinity NONE 367320b3a7aSdrh# 368320b3a7aSdrh# Because t1.y has a numeric affinity, type conversion should occur 369320b3a7aSdrh# and the two fields should be equal. 370320b3a7aSdrh# 371320b3a7aSdrhdo_test whereB-7.1 { 372320b3a7aSdrh db eval { 373320b3a7aSdrh DROP TABLE t1; 374320b3a7aSdrh DROP TABLE t2; 375320b3a7aSdrh 376320b3a7aSdrh CREATE TABLE t1(x, y NUMERIC); -- affinity of t1.y is NUMERIC 377320b3a7aSdrh INSERT INTO t1 VALUES(1,99); 378320b3a7aSdrh 379320b3a7aSdrh CREATE TABLE t2(a, b BLOB); -- affinity of t2.b is NONE 380320b3a7aSdrh CREATE INDEX t2b ON t2(b); 381320b3a7aSdrh INSERT INTO t2 VALUES(2,'99'); 382320b3a7aSdrh 383320b3a7aSdrh SELECT x, a, y=b FROM t1, t2; 384320b3a7aSdrh } 385320b3a7aSdrh} {1 2 1} 386320b3a7aSdrhdo_test whereB-7.2 { 387320b3a7aSdrh db eval { 388320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE y=b; 389320b3a7aSdrh } 390320b3a7aSdrh} {1 2 1} 391320b3a7aSdrhdo_test whereB-7.3 { 392320b3a7aSdrh db eval { 393320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE b=y; 394320b3a7aSdrh } 395320b3a7aSdrh} {1 2 1} 396320b3a7aSdrhdo_test whereB-7.4 { 397320b3a7aSdrh # In this case the unary "+" operator removes the column affinity so 398320b3a7aSdrh # the columns compare false 399320b3a7aSdrh db eval { 400320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE +y=+b; 401320b3a7aSdrh } 402320b3a7aSdrh} {} 403320b3a7aSdrhdo_test whereB-7.100 { 404320b3a7aSdrh db eval { 405320b3a7aSdrh DROP INDEX t2b; 406320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE y=b; 407320b3a7aSdrh } 408320b3a7aSdrh} {1 2 1} 409320b3a7aSdrhdo_test whereB-7.101 { 410320b3a7aSdrh db eval { 411320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE b=y; 412320b3a7aSdrh } 413320b3a7aSdrh} {1 2 1} 414320b3a7aSdrhdo_test whereB-7.102 { 415320b3a7aSdrh # In this case the unary "+" operator removes the column affinity so 416320b3a7aSdrh # the columns compare false 417320b3a7aSdrh db eval { 418320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE +y=+b; 419320b3a7aSdrh } 420320b3a7aSdrh} {} 421320b3a7aSdrh 422320b3a7aSdrh# For this set of tests: 423320b3a7aSdrh# 424320b3a7aSdrh# * t1.y holds an integer value with affinity INTEGER 425320b3a7aSdrh# * t2.b holds a text value with affinity NONE 426320b3a7aSdrh# 427320b3a7aSdrh# Because t1.y has a numeric affinity, type conversion should occur 428320b3a7aSdrh# and the two fields should be equal. 429320b3a7aSdrh# 430320b3a7aSdrhdo_test whereB-8.1 { 431320b3a7aSdrh db eval { 432320b3a7aSdrh DROP TABLE t1; 433320b3a7aSdrh DROP TABLE t2; 434320b3a7aSdrh 435320b3a7aSdrh CREATE TABLE t1(x, y INT); -- affinity of t1.y is INTEGER 436320b3a7aSdrh INSERT INTO t1 VALUES(1,99); 437320b3a7aSdrh 438320b3a7aSdrh CREATE TABLE t2(a, b BLOB); -- affinity of t2.b is NONE 439320b3a7aSdrh CREATE INDEX t2b ON t2(b); 440320b3a7aSdrh INSERT INTO t2 VALUES(2,'99'); 441320b3a7aSdrh 442320b3a7aSdrh SELECT x, a, y=b FROM t1, t2; 443320b3a7aSdrh } 444320b3a7aSdrh} {1 2 1} 445320b3a7aSdrhdo_test whereB-8.2 { 446320b3a7aSdrh db eval { 447320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE y=b; 448320b3a7aSdrh } 449320b3a7aSdrh} {1 2 1} 450320b3a7aSdrhdo_test whereB-8.3 { 451320b3a7aSdrh db eval { 452320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE b=y; 453320b3a7aSdrh } 454320b3a7aSdrh} {1 2 1} 455320b3a7aSdrhdo_test whereB-8.4 { 456320b3a7aSdrh # In this case the unary "+" operator removes the column affinity so 457320b3a7aSdrh # the columns compare false 458320b3a7aSdrh db eval { 459320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE +y=+b; 460320b3a7aSdrh } 461320b3a7aSdrh} {} 462320b3a7aSdrhdo_test whereB-8.100 { 463320b3a7aSdrh db eval { 464320b3a7aSdrh DROP INDEX t2b; 465320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE y=b; 466320b3a7aSdrh } 467320b3a7aSdrh} {1 2 1} 468320b3a7aSdrhdo_test whereB-8.101 { 469320b3a7aSdrh db eval { 470320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE b=y; 471320b3a7aSdrh } 472320b3a7aSdrh} {1 2 1} 473320b3a7aSdrhdo_test whereB-8.102 { 474320b3a7aSdrh # In this case the unary "+" operator removes the column affinity so 475320b3a7aSdrh # the columns compare false 476320b3a7aSdrh db eval { 477320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE +y=+b; 478320b3a7aSdrh } 479320b3a7aSdrh} {} 480320b3a7aSdrh 481320b3a7aSdrh# For this set of tests: 482320b3a7aSdrh# 483320b3a7aSdrh# * t1.y holds an integer value with affinity REAL 484320b3a7aSdrh# * t2.b holds a text value with affinity NONE 485320b3a7aSdrh# 486320b3a7aSdrh# Because t1.y has a numeric affinity, type conversion should occur 487320b3a7aSdrh# and the two fields should be equal. 488320b3a7aSdrh# 489320b3a7aSdrhdo_test whereB-9.1 { 490320b3a7aSdrh db eval { 491320b3a7aSdrh DROP TABLE t1; 492320b3a7aSdrh DROP TABLE t2; 493320b3a7aSdrh 494320b3a7aSdrh CREATE TABLE t1(x, y REAL); -- affinity of t1.y is REAL 495320b3a7aSdrh INSERT INTO t1 VALUES(1,99.0); 496320b3a7aSdrh 497320b3a7aSdrh CREATE TABLE t2(a, b BLOB); -- affinity of t2.b is NONE 498320b3a7aSdrh CREATE INDEX t2b ON t2(b); 499320b3a7aSdrh INSERT INTO t2 VALUES(2,'99'); 500320b3a7aSdrh 501320b3a7aSdrh SELECT x, a, y=b FROM t1, t2; 502320b3a7aSdrh } 503320b3a7aSdrh} {1 2 1} 504320b3a7aSdrhdo_test whereB-9.2 { 505320b3a7aSdrh db eval { 506320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE y=b; 507320b3a7aSdrh } 508320b3a7aSdrh} {1 2 1} 509320b3a7aSdrhdo_test whereB-9.3 { 510320b3a7aSdrh db eval { 511320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE b=y; 512320b3a7aSdrh } 513320b3a7aSdrh} {1 2 1} 514320b3a7aSdrhdo_test whereB-9.4 { 515320b3a7aSdrh # In this case the unary "+" operator removes the column affinity so 516320b3a7aSdrh # the columns compare false 517320b3a7aSdrh db eval { 518320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE +y=+b; 519320b3a7aSdrh } 520320b3a7aSdrh} {} 521320b3a7aSdrhdo_test whereB-9.100 { 522320b3a7aSdrh db eval { 523320b3a7aSdrh DROP INDEX t2b; 524320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE y=b; 525320b3a7aSdrh } 526320b3a7aSdrh} {1 2 1} 527320b3a7aSdrhdo_test whereB-9.101 { 528320b3a7aSdrh db eval { 529320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE b=y; 530320b3a7aSdrh } 531320b3a7aSdrh} {1 2 1} 532320b3a7aSdrhdo_test whereB-9.102 { 533320b3a7aSdrh # In this case the unary "+" operator removes the column affinity so 534320b3a7aSdrh # the columns compare false 535320b3a7aSdrh db eval { 536320b3a7aSdrh SELECT x, a, y=b FROM t1, t2 WHERE +y=+b; 537320b3a7aSdrh } 538320b3a7aSdrh} {} 539320b3a7aSdrh 5409fa7207bSdrh 5419fa7207bSdrh 5429fa7207bSdrh 5439fa7207bSdrhfinish_test 544