persistentstorage/sqlite3api/TEST/TclScript/colmeta.test
changeset 0 08ec8eefde2f
equal deleted inserted replaced
-1:000000000000 0:08ec8eefde2f
       
     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