add pragma page_size compatibility so it will operate on encrypted databases
[sqlcipher.git] / test / tkt1435.test
blob1f62147b4465181095dd521faf0567defef18b44
1 # 2005 September 17
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
6 #    May you do good and not evil.
7 #    May you find forgiveness for yourself and forgive others.
8 #    May you share freely, never taking more than you give.
10 #***********************************************************************
11 # This file implements regression tests for SQLite library.
13 # This file implements tests to verify that ticket #1435 has been
14 # fixed.  
17 # $Id: tkt1435.test,v 1.2 2006/01/17 09:35:02 danielk1977 Exp $
19 set testdir [file dirname $argv0]
20 source $testdir/tester.tcl
22 ifcapable !memorydb {
23   finish_test
24   return
27 # Construct the sample database.
29 do_test tkt1435-1.0 {
30   sqlite3 db :memory:
31   execsql {
32     CREATE TABLE Instances(
33         instanceId INTEGER PRIMARY KEY,
34         troveName STR,
35         versionId INT,
36         flavorId INT,
37         timeStamps STR,
38         isPresent INT,
39         pinned BOOLEAN
40     );
41     INSERT INTO "Instances"
42        VALUES(1, 'libhello:runtime', 1, 1, 1126929880.094, 1, 1);
43     INSERT INTO "Instances"
44        VALUES(2, 'libhello:user', 1, 1, 1126929880.094, 1, 0);
45     INSERT INTO "Instances"
46        VALUES(3, 'libhello:script', 1, 1, 1126929880.094, 1, 0);
47     INSERT INTO "Instances"
48        VALUES(4, 'libhello', 1, 1, 1126929880.094, 1, 0);
49     
50     CREATE TABLE Versions(versionId INTEGER PRIMARY KEY,version STR UNIQUE);
51     INSERT INTO "Versions" VALUES(0, NULL);
52     INSERT INTO "Versions" VALUES(1, '/localhost@rpl:linux/0-1-1');
53     
54     CREATE TABLE Flavors(flavorId integer primary key, flavor str unique);
55     INSERT INTO "Flavors" VALUES(0, NULL);
56     INSERT INTO "Flavors" VALUES(1, '1#x86');
57     
58     CREATE TEMPORARY TABLE tlList (
59        row INTEGER PRIMARY KEY,
60        name STRING,
61        version STRING,
62        flavor STRING
63     );
64     
65     INSERT INTO tlList 
66       values(NULL, 'libhello:script', '/localhost@rpl:linux/0-1-1', '1#x86');
67     INSERT INTO tlList 
68       values(NULL, 'libhello:user', '/localhost@rpl:linux/0-1-1', '1#x86');
69     INSERT INTO tlList 
70       values(NULL, 'libhello:runtime', '/localhost@rpl:linux/0-1-1', '1#x86');
71   }
72 } {}
74 # Run the query with an index
76 do_test tkt1435-1.1 {
77   execsql {
78     select row, pinned from tlList, Instances, Versions, Flavors
79         where
80             Instances.troveName = tlList.name
81         and Versions.version = tlList.version
82         and Instances.versionId = Versions.versionId
83         and (    Flavors.flavor = tlList.flavor or Flavors.flavor is NULL
84              and tlList.flavor = '')
85         and Instances.flavorId = Flavors.flavorId
86     order by row asc;
87   }
88 } {1 0 2 0 3 1}
90 # Create a indices, analyze and rerun the query. 
91 # Verify that the results are the same
93 do_test tkt1435-1.2 {
94   execsql {
95     CREATE INDEX InstancesNameIdx ON Instances(troveName);
96     CREATE UNIQUE INDEX InstancesIdx 
97       ON Instances(troveName, versionId, flavorId);
98     ANALYZE;
99     select row, pinned from tlList, Instances, Versions, Flavors
100         where
101             Instances.troveName = tlList.name
102         and Versions.version = tlList.version
103         and Instances.versionId = Versions.versionId
104         and (    Flavors.flavor = tlList.flavor or Flavors.flavor is NULL
105              and tlList.flavor = '')
106         and Instances.flavorId = Flavors.flavorId
107     order by row asc;
108   }
109 } {1 0 2 0 3 1}
111 finish_test