1d1ce65fcSdan# 2015 November 18 2d1ce65fcSdan# 3d1ce65fcSdan# The author disclaims copyright to this source code. In place of 4d1ce65fcSdan# a legal notice, here is a blessing: 5d1ce65fcSdan# 6d1ce65fcSdan# May you do good and not evil. 7d1ce65fcSdan# May you find forgiveness for yourself and forgive others. 8d1ce65fcSdan# May you share freely, never taking more than you give. 9d1ce65fcSdan# 10d1ce65fcSdan#*********************************************************************** 11d1ce65fcSdan# 12d1ce65fcSdan# Test the __hidden__ hack. 13d1ce65fcSdan# 14d1ce65fcSdan 15d1ce65fcSdanset testdir [file dirname $argv0] 16d1ce65fcSdansource $testdir/tester.tcl 17d1ce65fcSdanset testprefix hidden 18d1ce65fcSdan 1903d69a68Sdrhifcapable !hiddencolumns { 2003d69a68Sdrh finish_test 2103d69a68Sdrh return 2203d69a68Sdrh} 2303d69a68Sdrh 24d1ce65fcSdando_execsql_test 1.1 { 25d1ce65fcSdan CREATE TABLE t1(__hidden__a, b); 26d1ce65fcSdan INSERT INTO t1 VALUES('1'); 27d1ce65fcSdan INSERT INTO t1(__hidden__a, b) VALUES('x', 'y'); 28d1ce65fcSdan} {} 29d1ce65fcSdan 30d1ce65fcSdando_execsql_test 1.2 { 31d1ce65fcSdan SELECT * FROM t1; 32d1ce65fcSdan} {1 y} 33d1ce65fcSdan 34d1ce65fcSdando_execsql_test 1.3 { 35d1ce65fcSdan SELECT __hidden__a, * FROM t1; 36d1ce65fcSdan} {{} 1 x y} 37d1ce65fcSdan 38ab5a8ee3Sdanforeach {tn view} { 39ab5a8ee3Sdan 1 { CREATE VIEW v1(a, b, __hidden__c) AS SELECT a, b, c FROM x1 } 40ab5a8ee3Sdan 2 { CREATE VIEW v1 AS SELECT a, b, c AS __hidden__c FROM x1 } 41d1ce65fcSdan} { 42ab5a8ee3Sdan do_execsql_test 2.$tn.1 { 43ab5a8ee3Sdan DROP TABLE IF EXISTS x1; 44ab5a8ee3Sdan CREATE TABLE x1(a, b, c); 45ab5a8ee3Sdan INSERT INTO x1 VALUES(1, 2, 3); 46d1ce65fcSdan } 47d1ce65fcSdan 48ab5a8ee3Sdan catchsql { DROP VIEW v1 } 49ab5a8ee3Sdan execsql $view 50ab5a8ee3Sdan 51ab5a8ee3Sdan do_execsql_test 2.$tn.2 { 52ab5a8ee3Sdan SELECT a, b, __hidden__c FROM v1; 53ab5a8ee3Sdan } {1 2 3} 54ab5a8ee3Sdan 55ab5a8ee3Sdan do_execsql_test 2.$tn.3 { 56ab5a8ee3Sdan SELECT * FROM v1; 57ab5a8ee3Sdan } {1 2} 58ab5a8ee3Sdan 59ab5a8ee3Sdan do_execsql_test 2.$tn.4 { 60ab5a8ee3Sdan CREATE TRIGGER tr1 INSTEAD OF INSERT ON v1 BEGIN 61ab5a8ee3Sdan INSERT INTO x1 VALUES(new.a, new.b, new.__hidden__c); 62ab5a8ee3Sdan END; 63ab5a8ee3Sdan 64ab5a8ee3Sdan INSERT INTO v1 VALUES(4, 5); 65ab5a8ee3Sdan SELECT * FROM x1; 66ab5a8ee3Sdan } {1 2 3 4 5 {}} 67ab5a8ee3Sdan 68ab5a8ee3Sdan do_execsql_test 2.$tn.5 { 69ab5a8ee3Sdan INSERT INTO v1(a, b, __hidden__c) VALUES(7, 8, 9); 70ab5a8ee3Sdan SELECT * FROM x1; 71ab5a8ee3Sdan } {1 2 3 4 5 {} 7 8 9} 72ab5a8ee3Sdan} 73ab5a8ee3Sdan 74ba68f8f3Sdan#------------------------------------------------------------------------- 75ba68f8f3Sdan# Test INSERT INTO ... SELECT ... statements that write to tables with 76ba68f8f3Sdan# hidden columns. 77ba68f8f3Sdan# 78ba68f8f3Sdando_execsql_test 3.1 { 79ba68f8f3Sdan CREATE TABLE t4(a, __hidden__b, c); 80ba68f8f3Sdan INSERT INTO t4 SELECT 1, 2; 81ba68f8f3Sdan SELECT a, __hidden__b, c FROM t4; 82ba68f8f3Sdan} {1 {} 2} 83ba68f8f3Sdan 84ba68f8f3Sdando_execsql_test 3.2.1 { 85ba68f8f3Sdan CREATE TABLE t5(__hidden__a, b, c); 86ba68f8f3Sdan CREATE TABLE t6(__hidden__a, b, c); 87ba68f8f3Sdan INSERT INTO t6(__hidden__a, b, c) VALUES(1, 2, 3); 88ba68f8f3Sdan INSERT INTO t6(__hidden__a, b, c) VALUES(4, 5, 6); 89ba68f8f3Sdan INSERT INTO t6(__hidden__a, b, c) VALUES(7, 8, 9); 90ba68f8f3Sdan} 91ba68f8f3Sdan 92ba68f8f3Sdando_execsql_test 3.2.2 { 93ba68f8f3Sdan INSERT INTO t5 SELECT * FROM t6; 94ba68f8f3Sdan SELECT * FROM t5; 95ba68f8f3Sdan} {2 3 5 6 8 9} 96ba68f8f3Sdan 97ba68f8f3Sdando_execsql_test 3.2.3 { 98ba68f8f3Sdan SELECT __hidden__a FROM t5; 99ba68f8f3Sdan} {{} {} {}} 100ba68f8f3Sdan 101*aaea3143Sdan 102*aaea3143Sdando_execsql_test 3.3.1 { 103*aaea3143Sdan CREATE TABLE t5a(a, b, __hidden__c); 104*aaea3143Sdan CREATE TABLE t6a(a, b, __hidden__c); 105*aaea3143Sdan INSERT INTO t6a(a, b, __hidden__c) VALUES(1, 2, 3); 106*aaea3143Sdan INSERT INTO t6a(a, b, __hidden__c) VALUES(4, 5, 6); 107*aaea3143Sdan INSERT INTO t6a(a, b, __hidden__c) VALUES(7, 8, 9); 108*aaea3143Sdan} 109*aaea3143Sdan 110*aaea3143Sdando_execsql_test 3.3.2 { 111*aaea3143Sdan INSERT INTO t5a SELECT * FROM t6a; 112*aaea3143Sdan SELECT * FROM t5a; 113*aaea3143Sdan} {1 2 4 5 7 8} 114*aaea3143Sdan 115*aaea3143Sdando_execsql_test 3.3.3 { 116*aaea3143Sdan SELECT __hidden__c FROM t5a; 117*aaea3143Sdan} {{} {} {}} 118*aaea3143Sdan 119*aaea3143Sdando_execsql_test 3.4.1 { 120*aaea3143Sdan CREATE TABLE t5b(a, __hidden__b, c); 121*aaea3143Sdan CREATE TABLE t6b(a, b, __hidden__c); 122*aaea3143Sdan INSERT INTO t6b(a, b, __hidden__c) VALUES(1, 2, 3); 123*aaea3143Sdan INSERT INTO t6b(a, b, __hidden__c) VALUES(4, 5, 6); 124*aaea3143Sdan INSERT INTO t6b(a, b, __hidden__c) VALUES(7, 8, 9); 125*aaea3143Sdan} 126*aaea3143Sdan 127*aaea3143Sdando_execsql_test 3.4.2 { 128*aaea3143Sdan INSERT INTO t5b SELECT * FROM t6b; 129*aaea3143Sdan SELECT * FROM t5b; 130*aaea3143Sdan} {1 2 4 5 7 8} 131*aaea3143Sdan 132*aaea3143Sdando_execsql_test 3.4.3 { 133*aaea3143Sdan SELECT __hidden__b FROM t5b; 134*aaea3143Sdan} {{} {} {}} 135*aaea3143Sdan 136*aaea3143Sdan#------------------------------------------------------------------------- 137*aaea3143Sdan# Test VACUUM 138*aaea3143Sdan# 139*aaea3143Sdanreset_db 140*aaea3143Sdando_execsql_test 4.1 { 141*aaea3143Sdan CREATE TABLE t1(a, __hidden__b, c UNIQUE); 142*aaea3143Sdan INSERT INTO t1(a, __hidden__b, c) VALUES(1, 2, 3); 143*aaea3143Sdan INSERT INTO t1(a, __hidden__b, c) VALUES(4, 5, 6); 144*aaea3143Sdan INSERT INTO t1(a, __hidden__b, c) VALUES(7, 8, 9); 145*aaea3143Sdan DELETE FROM t1 WHERE __hidden__b = 5; 146*aaea3143Sdan SELECT rowid, a, __hidden__b, c FROM t1; 147*aaea3143Sdan} {1 1 2 3 3 7 8 9} 148*aaea3143Sdando_execsql_test 4.2 { 149*aaea3143Sdan VACUUM; 150*aaea3143Sdan SELECT rowid, a, __hidden__b, c FROM t1; 151*aaea3143Sdan} {1 1 2 3 3 7 8 9} 152*aaea3143Sdan 153d1ce65fcSdanfinish_test 154