xref: /sqlite-3.40.0/test/whereB.test (revision c4fa5315)
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