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