Home | History | Annotate | Download | only in test
      1 #
      2 # 2006 February 9
      3 #
      4 # The author disclaims copyright to this source code.  In place of
      5 # a legal notice, here is a blessing:
      6 #
      7 #    May you do good and not evil.
      8 #    May you find forgiveness for yourself and forgive others.
      9 #    May you share freely, never taking more than you give.
     10 #
     11 #***********************************************************************
     12 # This file implements regression tests for SQLite library.  The
     13 # focus of this script is the sqlite3_table_column_metadata() API.
     14 #
     15 # $Id: colmeta.test,v 1.4 2008/01/23 12:52:41 drh Exp $
     16 
     17 set testdir [file dirname $argv0]
     18 source $testdir/tester.tcl
     19 
     20 ifcapable !columnmetadata {
     21   finish_test
     22   return
     23 }
     24 
     25 # Set up a schema in the main and temp test databases.
     26 do_test colmeta-0 {
     27   execsql {
     28     CREATE TABLE abc(a, b, c);
     29     CREATE TABLE abc2(a PRIMARY KEY COLLATE NOCASE, b VARCHAR(32), c);
     30     CREATE TABLE abc3(a NOT NULL, b INTEGER PRIMARY KEY, c);
     31   }
     32   ifcapable autoinc {
     33     execsql {
     34       CREATE TABLE abc4(a, b INTEGER PRIMARY KEY AUTOINCREMENT, c);
     35     }
     36   }
     37   ifcapable view {
     38     execsql {
     39       CREATE VIEW v1 AS SELECT * FROM abc2;
     40     }
     41   }
     42 } {}
     43 
     44 
     45 # Return values are of the form:
     46 #
     47 #   {<decl-type> <collation> <not null> <primary key> <auto increment>}
     48 #
     49 set tests {
     50   1  {main abc a}                {0 {{} BINARY 0 0 0}}
     51   2  {{} abc a}                  {0 {{} BINARY 0 0 0}}
     52   3  {{} abc2 b}                 {0 {VARCHAR(32) BINARY 0 0 0}}
     53   4  {main abc2 b}               {0 {VARCHAR(32) BINARY 0 0 0}}
     54   5  {{} abc2 a}                 {0 {{} NOCASE 0 1 0}}
     55   6  {{} abc3 a}                 {0 {{} BINARY 1 0 0}}
     56   7  {{} abc3 b}                 {0 {INTEGER BINARY 0 1 0}}
     57   13 {main abc rowid}            {0 {INTEGER BINARY 0 1 0}}
     58   14 {main abc3 rowid}           {0 {INTEGER BINARY 0 1 0}}
     59   16 {main abc d}                {1 {no such table column: abc.d}}
     60 }
     61 ifcapable view {
     62   set tests [concat $tests {
     63     8  {{} abc4 b}                 {0 {INTEGER BINARY 0 1 1}}
     64     15 {main abc4 rowid}           {0 {INTEGER BINARY 0 1 1}}
     65   }]
     66 }
     67 ifcapable view {
     68   set tests [concat $tests {
     69     9  {{} v1 a}                   {1 {no such table column: v1.a}}
     70     10 {main v1 b}                 {1 {no such table column: v1.b}}
     71     11 {main v1 badname}           {1 {no such table column: v1.badname}}
     72     12 {main v1 rowid}             {1 {no such table column: v1.rowid}}
     73   }]
     74 }
     75 
     76 foreach {tn params results} $tests {
     77   set ::DB [sqlite3_connection_pointer db]
     78 
     79   set tstbody [concat sqlite3_table_column_metadata $::DB $params] 
     80   do_test colmeta-$tn.1 {
     81     list [catch $tstbody msg] [set msg]
     82   } $results
     83 
     84   db close
     85   sqlite3 db test.db
     86 
     87   set ::DB [sqlite3_connection_pointer db]
     88   set tstbody [concat sqlite3_table_column_metadata $::DB $params] 
     89   do_test colmeta-$tn.2 {
     90     list [catch $tstbody msg] [set msg]
     91   } $results
     92 }
     93 
     94 finish_test
     95