xref: /sqlite-3.40.0/test/affinity3.test (revision ec27077c)
1ce31643fSdrh# 2017-01-16
2ce31643fSdrh#
3ce31643fSdrh# The author disclaims copyright to this source code.  In place of
4ce31643fSdrh# a legal notice, here is a blessing:
5ce31643fSdrh#
6ce31643fSdrh#    May you do good and not evil.
7ce31643fSdrh#    May you find forgiveness for yourself and forgive others.
8ce31643fSdrh#    May you share freely, never taking more than you give.
9ce31643fSdrh#
10ce31643fSdrh#***********************************************************************
11ce31643fSdrh#
12ce31643fSdrh# Test cases for bugs:
13ce31643fSdrh#
14ce31643fSdrh#    https://www.sqlite.org/src/info/91e2e8ba6ff2e2
15ce31643fSdrh#    https://www.sqlite.org/src/info/7ffd1ca1d2ad4ecf
16ce31643fSdrh#
17ce31643fSdrh
18ce31643fSdrhset testdir [file dirname $argv0]
19ce31643fSdrhsource $testdir/tester.tcl
20ce31643fSdrh
21ce31643fSdrh# Ticket https://www.sqlite.org/src/info/91e2e8ba6ff2e2 (2011-09-19)
22ce31643fSdrh# Automatic index causes undesired type conversions
23ce31643fSdrh#
24ce31643fSdrhdo_execsql_test affinity3-100 {
25ce31643fSdrh  CREATE TABLE customer (id INT PRIMARY KEY);
26ce31643fSdrh  CREATE TABLE apr (id INT PRIMARY KEY, apr REAL);
27ce31643fSdrh
28ce31643fSdrh  CREATE VIEW v1 AS
29ce31643fSdrh  SELECT c.id, i.apr
30ce31643fSdrh  FROM customer c
31ce31643fSdrh  LEFT JOIN apr i ON i.id=c.id;
32ce31643fSdrh
33*ec27077cSdrh  CREATE VIEW v1rj AS
34*ec27077cSdrh  SELECT c.id, i.apr
35*ec27077cSdrh  FROM apr i
36*ec27077cSdrh  RIGHT JOIN customer c ON i.id=c.id;
37*ec27077cSdrh
38ce31643fSdrh  CREATE VIEW v2 AS
39ce31643fSdrh  SELECT c.id, v1.apr
40ce31643fSdrh  FROM customer c
41ce31643fSdrh  LEFT JOIN v1 ON v1.id=c.id;
42ce31643fSdrh
43*ec27077cSdrh  CREATE VIEW v2rj AS
44*ec27077cSdrh  SELECT c.id, v1.apr
45*ec27077cSdrh  FROM v1 RIGHT JOIN customer c ON v1.id=c.id;
46*ec27077cSdrh
47*ec27077cSdrh  CREATE VIEW v2rjrj AS
48*ec27077cSdrh  SELECT c.id, v1rj.apr
49*ec27077cSdrh  FROM v1rj RIGHT JOIN customer c ON v1rj.id=c.id;
50*ec27077cSdrh
51ce31643fSdrh  INSERT INTO customer (id) VALUES (1);
52ce31643fSdrh  INSERT INTO apr (id, apr) VALUES (1, 12);
53ce31643fSdrh  INSERT INTO customer (id) VALUES (2);
54ce31643fSdrh  INSERT INTO apr (id, apr) VALUES (2, 12.01);
55ce31643fSdrh}
56ce31643fSdrhdo_execsql_test affinity3-110 {
57ce31643fSdrh  PRAGMA automatic_index=ON;
58ce31643fSdrh  SELECT id, (apr / 100), typeof(apr) apr_type  FROM v1;
59ce31643fSdrh} {1 0.12 real 2 0.1201 real}
60*ec27077cSdrhdo_execsql_test affinity3-111 {
61*ec27077cSdrh  PRAGMA automatic_index=ON;
62*ec27077cSdrh  SELECT id, (apr / 100), typeof(apr) apr_type  FROM v1rj;
63*ec27077cSdrh} {1 0.12 real 2 0.1201 real}
64ce31643fSdrhdo_execsql_test affinity3-120 {
65ce31643fSdrh  SELECT id, (apr / 100), typeof(apr) apr_type  FROM v2;
66ce31643fSdrh} {1 0.12 real 2 0.1201 real}
67*ec27077cSdrhdo_execsql_test affinity3-121 {
68*ec27077cSdrh  SELECT id, (apr / 100), typeof(apr) apr_type  FROM v2rj;
69*ec27077cSdrh} {1 0.12 real 2 0.1201 real}
70*ec27077cSdrhdo_execsql_test affinity3-122 {
71*ec27077cSdrh  SELECT id, (apr / 100), typeof(apr) apr_type  FROM v2rjrj;
72*ec27077cSdrh} {1 0.12 real 2 0.1201 real}
73ce31643fSdrhdo_execsql_test affinity3-130 {
74ce31643fSdrh  PRAGMA automatic_index=OFF;
75ce31643fSdrh  SELECT id, (apr / 100), typeof(apr) apr_type  FROM v1;
76ce31643fSdrh} {1 0.12 real 2 0.1201 real}
77*ec27077cSdrhdo_execsql_test affinity3-131 {
78*ec27077cSdrh  SELECT id, (apr / 100), typeof(apr) apr_type  FROM v1rj;
79*ec27077cSdrh} {1 0.12 real 2 0.1201 real}
80ce31643fSdrhdo_execsql_test affinity3-140 {
81ce31643fSdrh  SELECT id, (apr / 100), typeof(apr) apr_type  FROM v2;
82ce31643fSdrh} {1 0.12 real 2 0.1201 real}
83*ec27077cSdrhdo_execsql_test affinity3-141 {
84*ec27077cSdrh  SELECT id, (apr / 100), typeof(apr) apr_type  FROM v2rj;
85*ec27077cSdrh} {1 0.12 real 2 0.1201 real}
86*ec27077cSdrhdo_execsql_test affinity3-142 {
87*ec27077cSdrh  SELECT id, (apr / 100), typeof(apr) apr_type  FROM v2rjrj;
88*ec27077cSdrh} {1 0.12 real 2 0.1201 real}
89ce31643fSdrh
90ce31643fSdrh# Ticket https://www.sqlite.org/src/info/7ffd1ca1d2ad4ecf  (2017-01-16)
91ce31643fSdrh# Incorrect affinity when using automatic indexes
92ce31643fSdrh#
93ce31643fSdrhdo_execsql_test affinity3-200 {
94ce31643fSdrh  CREATE TABLE map_integer (id INT, name);
95ce31643fSdrh  INSERT INTO map_integer VALUES(1,'a');
96ce31643fSdrh  CREATE TABLE map_text (id TEXT, name);
97ce31643fSdrh  INSERT INTO map_text VALUES('4','e');
98ce31643fSdrh  CREATE TABLE data (id TEXT, name);
99ce31643fSdrh  INSERT INTO data VALUES(1,'abc');
100ce31643fSdrh  INSERT INTO data VALUES('4','xyz');
101ce31643fSdrh  CREATE VIEW idmap as
102ce31643fSdrh      SELECT * FROM map_integer
103ce31643fSdrh      UNION SELECT * FROM map_text;
104ce31643fSdrh  CREATE TABLE mzed AS SELECT * FROM idmap;
105ce31643fSdrh}
106ce31643fSdrh
107a344ad47Sdan#do_execsql_test affinity3-210 {
108a344ad47Sdan  #PRAGMA automatic_index=ON;
109a344ad47Sdan  #SELECT * FROM data JOIN idmap USING(id);
110a344ad47Sdan#} {1 abc a 4 xyz e}
111ce31643fSdrhdo_execsql_test affinity3-220 {
112ce31643fSdrh  SELECT * FROM data JOIN mzed USING(id);
113ce31643fSdrh} {1 abc a 4 xyz e}
114ce31643fSdrh
115ce31643fSdrhdo_execsql_test affinity3-250 {
116ce31643fSdrh  PRAGMA automatic_index=OFF;
117ce31643fSdrh  SELECT * FROM data JOIN idmap USING(id);
118ce31643fSdrh} {1 abc a 4 xyz e}
119ce31643fSdrhdo_execsql_test affinity3-260 {
120ce31643fSdrh  SELECT * FROM data JOIN mzed USING(id);
121ce31643fSdrh} {1 abc a 4 xyz e}
122ce31643fSdrh
123ce31643fSdrhfinish_test
124