github.com/jdgcs/sqlite3@v1.12.1-0.20210908114423-bc5f96e4dd51/testdata/tcl/ctime.test (about)

     1  # 2009 February 24
     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 for the compile time diagnostic 
    14  # functions.
    15  #
    16  
    17  set testdir [file dirname $argv0]
    18  source $testdir/tester.tcl
    19  
    20  # Test organization:
    21  #
    22  # ctime-1.*: Test pragma support.
    23  # ctime-2.*: Test function support.
    24  #
    25  
    26  ifcapable !pragma||!compileoption_diags {
    27    finish_test
    28    return
    29  }
    30  
    31  #####################
    32  # ctime-1.*: Test pragma support.
    33  
    34  do_test ctime-1.1.1 {
    35    catchsql {
    36      PRAGMA compile_options();
    37    }
    38  } {1 {near ")": syntax error}}
    39  do_test ctime-1.1.2 {
    40    catchsql {
    41      PRAGMA compile_options(NULL);
    42    }
    43  } {1 {near "NULL": syntax error}}
    44  do_test ctime-1.1.3 {
    45    catchsql {
    46      PRAGMA compile_options *;
    47    }
    48  } {1 {near "*": syntax error}}
    49  
    50  do_test ctime-1.2.1 {
    51    set ans [ catchsql {
    52      PRAGMA compile_options;
    53    } ]
    54    list [ lindex $ans 0 ]
    55  } {0}
    56  # the results should be in sorted order already
    57  do_test ctime-1.2.2 {
    58    set ans [ catchsql {
    59      PRAGMA compile_options;
    60    } ]
    61    list [ lindex $ans 0 ] [ expr { [lsort [lindex $ans 1]]==[lindex $ans 1] } ]
    62  } {0 1}
    63  
    64  # Check the THREADSAFE option for SQLITE_THREADSAFE=2 builds (there are
    65  # a couple of these configurations in releasetest.tcl).
    66  #
    67  ifcapable threadsafe2 {
    68    foreach {tn opt res} {
    69      1 SQLITE_THREADSAFE     1
    70      2 THREADSAFE            1
    71      3 THREADSAFE=0          0
    72      4 THREADSAFE=1          0
    73      5 THREADSAFE=2          1
    74      6 THREADSAFE=           0
    75    } {
    76      do_execsql_test ctime-1.3.$tn {
    77        SELECT sqlite_compileoption_used($opt)
    78      } $res
    79    }
    80  }
    81  
    82  # SQLITE_THREADSAFE should pretty much always be defined
    83  # one way or the other, and it must have a value of 0 or 1.
    84  do_test ctime-1.4.1 {
    85    catchsql {
    86      SELECT sqlite_compileoption_used('SQLITE_THREADSAFE');
    87    }
    88  } {0 1}
    89  do_test ctime-1.4.2 {
    90    catchsql {
    91      SELECT sqlite_compileoption_used('THREADSAFE');
    92    }
    93  } {0 1}
    94  do_test ctime-1.4.3 {
    95    catchsql {
    96      SELECT sqlite_compileoption_used("THREADSAFE");
    97    }
    98  } {0 1}
    99  
   100  do_test ctime-1.5 {
   101    set ans1 [ catchsql {
   102      SELECT sqlite_compileoption_used('THREADSAFE=0');
   103    } ]
   104    set ans2 [ catchsql {
   105      SELECT sqlite_compileoption_used('THREADSAFE=1');
   106    } ]
   107    set ans3 [ catchsql {
   108      SELECT sqlite_compileoption_used('THREADSAFE=2');
   109    } ]
   110    lsort [ list $ans1 $ans2 $ans3 ]
   111  } {{0 0} {0 0} {0 1}}
   112  
   113  do_test ctime-1.6 {
   114    execsql {
   115      SELECT sqlite_compileoption_used('THREADSAFE=');
   116    }
   117  } {0}
   118  
   119  do_test ctime-1.7.1 {
   120    execsql {
   121      SELECT sqlite_compileoption_used('SQLITE_OMIT_COMPILEOPTION_DIAGS');
   122    }
   123  } {0}
   124  do_test ctime-1.7.2 {
   125    execsql {
   126      SELECT sqlite_compileoption_used('OMIT_COMPILEOPTION_DIAGS');
   127    }
   128  } {0}
   129  
   130  #####################
   131  # ctime-2.*: Test function support.
   132  
   133  do_test ctime-2.1.1 {
   134    catchsql {
   135      SELECT sqlite_compileoption_used();
   136    }
   137  } {1 {wrong number of arguments to function sqlite_compileoption_used()}}
   138  do_test ctime-2.1.2 {
   139    catchsql {
   140      SELECT sqlite_compileoption_used(NULL);
   141    }
   142  } {0 {{}}}
   143  do_test ctime-2.1.3 {
   144    catchsql {
   145      SELECT sqlite_compileoption_used("");
   146    }
   147  } {0 0}
   148  do_test ctime-2.1.4 {
   149    catchsql {
   150      SELECT sqlite_compileoption_used('');
   151    }
   152  } {0 0}
   153  do_test ctime-2.1.5 {
   154    catchsql {
   155      SELECT sqlite_compileoption_used(foo);
   156    }
   157  } {1 {no such column: foo}}
   158  do_test ctime-2.1.6 {
   159    catchsql {
   160      SELECT sqlite_compileoption_used('THREADSAFE', 0);
   161    }
   162  } {1 {wrong number of arguments to function sqlite_compileoption_used()}}
   163  do_test ctime-2.1.7 {
   164    catchsql {
   165      SELECT sqlite_compileoption_used(0);
   166    }
   167  } {0 0}
   168  do_test ctime-2.1.8 {
   169    catchsql {
   170      SELECT sqlite_compileoption_used('0');
   171    }
   172  } {0 0}
   173  do_test ctime-2.1.9 {
   174    catchsql {
   175      SELECT sqlite_compileoption_used(1.0);
   176    }
   177  } {0 0}
   178  
   179  do_test ctime-2.2.1 {
   180    catchsql {
   181      SELECT sqlite_compileoption_get();
   182    }
   183  } {1 {wrong number of arguments to function sqlite_compileoption_get()}}
   184  do_test ctime-2.2.2 {
   185    catchsql {
   186      SELECT sqlite_compileoption_get(0, 0);
   187    }
   188  } {1 {wrong number of arguments to function sqlite_compileoption_get()}}
   189  
   190  # This assumes there is at least 1 compile time option
   191  # (see SQLITE_THREADSAFE above).
   192  do_test ctime-2.3 {
   193    catchsql {
   194      SELECT sqlite_compileoption_used(sqlite_compileoption_get(0));
   195    }
   196  } {0 1}
   197  
   198  # This assumes there is at least 1 compile time option
   199  # (see SQLITE_THREADSAFE above).
   200  do_test ctime-2.4 {
   201    set ans [ catchsql {
   202      SELECT sqlite_compileoption_get(0);
   203    } ]
   204    list [lindex $ans 0]
   205  } {0}
   206  
   207  # Get the list of defines using the pragma,
   208  # then try querying each one with the functions.
   209  set ans [ catchsql {
   210    PRAGMA compile_options;
   211  } ]
   212  set opts [ lindex $ans 1 ]
   213  set tc 1
   214  foreach opt $opts {
   215    do_test ctime-2.5.$tc {
   216      set N [ expr {$tc-1} ]
   217      set ans1 [catch {db one {
   218        SELECT sqlite_compileoption_get($N);
   219      }} msg]
   220      lappend ans1 $msg
   221      set ans2 [ catchsql {
   222        SELECT sqlite_compileoption_used($opt);
   223      } ]
   224      list [ lindex $ans1 0 ] [ expr { [lindex $ans1 1]==$opt } ] \
   225           [ expr { $ans2 } ]
   226    } {0 1 {0 1}}
   227    incr tc 1
   228  }
   229  # test 1 past array bounds
   230  do_test ctime-2.5.$tc {
   231    set N [ expr {$tc-1} ]
   232    set ans [ catchsql {
   233      SELECT sqlite_compileoption_get($N);
   234    } ]
   235  } {0 {{}}}
   236  incr tc 1
   237  # test 1 before array bounds (N=-1)
   238  do_test ctime-2.5.$tc {
   239    set N -1
   240    set ans [ catchsql {
   241      SELECT sqlite_compileoption_get($N);
   242    } ]
   243  } {0 {{}}}
   244  
   245  #--------------------------------------------------------------------------
   246  # Test that SQLITE_DIRECT_OVERFLOW_READ is reflected in the output of
   247  # "PRAGMA compile_options".
   248  #
   249  ifcapable direct_read {
   250    set res 1
   251  } else {
   252    set res 0
   253  }
   254  do_test ctime-3.0.1 {
   255    expr [lsearch [db eval {PRAGMA compile_options}] DIRECT_OVERFLOW_READ]>=0
   256  } $res
   257  
   258  finish_test