Home | History | Annotate | Download | only in test
      1 # 2005 September 17
      2 #
      3 # The author disclaims copyright to this source code.  In place of
      4 # a legal notice, here is a blessing:
      5 #
      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.
      9 #
     10 #***********************************************************************
     11 # This file implements regression tests for SQLite library.
     12 #
     13 # This file implements tests to verify that ticket #1435 has been
     14 # fixed.  
     15 #
     16 #
     17 # $Id: tkt1435.test,v 1.2 2006/01/17 09:35:02 danielk1977 Exp $
     18 
     19 set testdir [file dirname $argv0]
     20 source $testdir/tester.tcl
     21 
     22 ifcapable !memorydb {
     23   finish_test
     24   return
     25 }
     26 
     27 # Construct the sample database.
     28 #
     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 } {}
     73 
     74 # Run the query with an index
     75 #
     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}
     89 
     90 # Create a indices, analyze and rerun the query. 
     91 # Verify that the results are the same
     92 #
     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}
    110 
    111 finish_test
    112