| OLD | NEW | 
 | (Empty) | 
|    1 # 2007 April 27 |  | 
|    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 # The focus of the tests in this file are to verify that the |  | 
|   14 # underlying TEXT or BLOB representation of an sqlite3_value |  | 
|   15 # changes appropriately when APIs from the following set are |  | 
|   16 # called: |  | 
|   17 # |  | 
|   18 #     sqlite3_value_text() |  | 
|   19 #     sqlite3_value_text16() |  | 
|   20 #     sqlite3_value_blob() |  | 
|   21 #     sqlite3_value_bytes() |  | 
|   22 #     sqlite3_value_bytes16() |  | 
|   23 # |  | 
|   24 # $Id: ptrchng.test,v 1.5 2008/07/12 14:52:20 drh Exp $ |  | 
|   25  |  | 
|   26 set testdir [file dirname $argv0] |  | 
|   27 source $testdir/tester.tcl |  | 
|   28  |  | 
|   29 ifcapable !bloblit { |  | 
|   30   finish_test |  | 
|   31   return |  | 
|   32 } |  | 
|   33  |  | 
|   34 # Register the "pointer_change" SQL function. |  | 
|   35 # |  | 
|   36 sqlite3_create_function db |  | 
|   37  |  | 
|   38 do_test ptrchng-1.1 { |  | 
|   39   execsql { |  | 
|   40     CREATE TABLE t1(x INTEGER PRIMARY KEY, y BLOB); |  | 
|   41     INSERT INTO t1 VALUES(1, 'abc'); |  | 
|   42     INSERT INTO t1 VALUES(2,  |  | 
|   43        'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234356789'); |  | 
|   44     INSERT INTO t1 VALUES(3, x'626c6f62'); |  | 
|   45     INSERT INTO t1 VALUES(4, |  | 
|   46  x'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324' |  | 
|   47     ); |  | 
|   48     SELECT count(*) FROM t1; |  | 
|   49   } |  | 
|   50 } {4} |  | 
|   51  |  | 
|   52 # For the short entries that fit in the Mem.zBuf[], the pointer should |  | 
|   53 # never change regardless of what type conversions occur. |  | 
|   54 # |  | 
|   55 # UPDATE: No longer true, as Mem.zBuf[] has been removed. |  | 
|   56 # |  | 
|   57 do_test ptrchng-2.1 { |  | 
|   58   execsql { |  | 
|   59     SELECT pointer_change(y, 'text', 'noop', 'blob') FROM t1 WHERE x=1 |  | 
|   60   } |  | 
|   61 } {0} |  | 
|   62 do_test ptrchng-2.2 { |  | 
|   63   execsql { |  | 
|   64     SELECT pointer_change(y, 'blob', 'noop', 'text') FROM t1 WHERE x=1 |  | 
|   65   } |  | 
|   66 } {0} |  | 
|   67 ifcapable utf16 { |  | 
|   68   do_test ptrchng-2.3 { |  | 
|   69     execsql { |  | 
|   70       SELECT pointer_change(y, 'text', 'noop', 'text16') FROM t1 WHERE x=1 |  | 
|   71     } |  | 
|   72   } {1} |  | 
|   73   do_test ptrchng-2.4 { |  | 
|   74     execsql { |  | 
|   75       SELECT pointer_change(y, 'blob', 'noop', 'text16') FROM t1 WHERE x=1 |  | 
|   76     } |  | 
|   77   } {1} |  | 
|   78   do_test ptrchng-2.5 { |  | 
|   79     execsql { |  | 
|   80       SELECT pointer_change(y, 'text16', 'noop', 'blob') FROM t1 WHERE x=1 |  | 
|   81     } |  | 
|   82   } {0} |  | 
|   83   do_test ptrchng-2.6 { |  | 
|   84     execsql { |  | 
|   85       SELECT pointer_change(y, 'text16', 'noop', 'text') FROM t1 WHERE x=1 |  | 
|   86     } |  | 
|   87   } {1} |  | 
|   88 } |  | 
|   89 do_test ptrchng-2.11 { |  | 
|   90   execsql { |  | 
|   91     SELECT pointer_change(y, 'text', 'noop', 'blob') FROM t1 WHERE x=3 |  | 
|   92   } |  | 
|   93 } {0} |  | 
|   94 do_test ptrchng-2.12 { |  | 
|   95   execsql { |  | 
|   96     SELECT pointer_change(y, 'blob', 'noop', 'text') FROM t1 WHERE x=3 |  | 
|   97   } |  | 
|   98 } {0} |  | 
|   99 ifcapable utf16 { |  | 
|  100   do_test ptrchng-2.13 { |  | 
|  101     execsql { |  | 
|  102       SELECT pointer_change(y, 'text', 'noop', 'text16') FROM t1 WHERE x=3 |  | 
|  103     } |  | 
|  104   } {1} |  | 
|  105   do_test ptrchng-2.14 { |  | 
|  106     execsql { |  | 
|  107       SELECT pointer_change(y, 'blob', 'noop', 'text16') FROM t1 WHERE x=3 |  | 
|  108     } |  | 
|  109   } {1} |  | 
|  110   do_test ptrchng-2.15 { |  | 
|  111     execsql { |  | 
|  112       SELECT pointer_change(y, 'text16', 'noop', 'blob') FROM t1 WHERE x=3 |  | 
|  113     } |  | 
|  114   } {0} |  | 
|  115   do_test ptrchng-2.16 { |  | 
|  116     execsql { |  | 
|  117       SELECT pointer_change(y, 'text16', 'noop', 'text') FROM t1 WHERE x=3 |  | 
|  118     } |  | 
|  119   } {1} |  | 
|  120 } |  | 
|  121  |  | 
|  122 # For the long entries that do not fit in the Mem.zBuf[], the pointer |  | 
|  123 # should change sometimes. |  | 
|  124 # |  | 
|  125 do_test ptrchng-3.1 { |  | 
|  126   execsql { |  | 
|  127     SELECT pointer_change(y, 'text', 'noop', 'blob') FROM t1 WHERE x=2 |  | 
|  128   } |  | 
|  129 } {0} |  | 
|  130 do_test ptrchng-3.2 { |  | 
|  131   execsql { |  | 
|  132     SELECT pointer_change(y, 'blob', 'noop', 'text') FROM t1 WHERE x=2 |  | 
|  133   } |  | 
|  134 } {0} |  | 
|  135 ifcapable utf16 { |  | 
|  136   do_test ptrchng-3.3 { |  | 
|  137     execsql { |  | 
|  138       SELECT pointer_change(y, 'text', 'noop', 'text16') FROM t1 WHERE x=2 |  | 
|  139     } |  | 
|  140   } {1} |  | 
|  141   do_test ptrchng-3.4 { |  | 
|  142     execsql { |  | 
|  143       SELECT pointer_change(y, 'blob', 'noop', 'text16') FROM t1 WHERE x=2 |  | 
|  144     } |  | 
|  145   } {1} |  | 
|  146   do_test ptrchng-3.5 { |  | 
|  147     execsql { |  | 
|  148       SELECT pointer_change(y, 'text16', 'noop', 'blob') FROM t1 WHERE x=2 |  | 
|  149     } |  | 
|  150   } {0} |  | 
|  151   do_test ptrchng-3.6 { |  | 
|  152     execsql { |  | 
|  153       SELECT pointer_change(y, 'text16', 'noop', 'text') FROM t1 WHERE x=2 |  | 
|  154     } |  | 
|  155   } {1} |  | 
|  156 } |  | 
|  157 do_test ptrchng-3.11 { |  | 
|  158   execsql { |  | 
|  159     SELECT pointer_change(y, 'text', 'noop', 'blob') FROM t1 WHERE x=4 |  | 
|  160   } |  | 
|  161 } {0} |  | 
|  162 do_test ptrchng-3.12 { |  | 
|  163   execsql { |  | 
|  164     SELECT pointer_change(y, 'blob', 'noop', 'text') FROM t1 WHERE x=4 |  | 
|  165   } |  | 
|  166 } {0} |  | 
|  167 ifcapable utf16 { |  | 
|  168   do_test ptrchng-3.13 { |  | 
|  169     execsql { |  | 
|  170       SELECT pointer_change(y, 'text', 'noop', 'text16') FROM t1 WHERE x=4 |  | 
|  171     } |  | 
|  172   } {1} |  | 
|  173   do_test ptrchng-3.14 { |  | 
|  174     execsql { |  | 
|  175       SELECT pointer_change(y, 'blob', 'noop', 'text16') FROM t1 WHERE x=4 |  | 
|  176     } |  | 
|  177   } {1} |  | 
|  178   do_test ptrchng-3.15 { |  | 
|  179     execsql { |  | 
|  180       SELECT pointer_change(y, 'text16', 'noop', 'blob') FROM t1 WHERE x=4 |  | 
|  181     } |  | 
|  182   } {0} |  | 
|  183   do_test ptrchng-3.16 { |  | 
|  184     execsql { |  | 
|  185       SELECT pointer_change(y, 'text16', 'noop', 'text') FROM t1 WHERE x=4 |  | 
|  186     } |  | 
|  187   } {1} |  | 
|  188 } |  | 
|  189  |  | 
|  190 # A call to _bytes() should never reformat a _text() or _blob(). |  | 
|  191 # |  | 
|  192 do_test ptrchng-4.1 { |  | 
|  193   execsql { |  | 
|  194     SELECT pointer_change(y, 'text', 'bytes', 'text') FROM t1 |  | 
|  195   } |  | 
|  196 } {0 0 0 0} |  | 
|  197 do_test ptrchng-4.2 { |  | 
|  198   execsql { |  | 
|  199     SELECT pointer_change(y, 'blob', 'bytes', 'blob') FROM t1 |  | 
|  200   } |  | 
|  201 } {0 0 0 0} |  | 
|  202  |  | 
|  203 # A call to _blob() should never trigger a reformat |  | 
|  204 # |  | 
|  205 do_test ptrchng-5.1 { |  | 
|  206   execsql { |  | 
|  207     SELECT pointer_change(y, 'text', 'bytes', 'blob') FROM t1 |  | 
|  208   } |  | 
|  209 } {0 0 0 0} |  | 
|  210 ifcapable utf16 { |  | 
|  211   do_test ptrchng-5.2 { |  | 
|  212     execsql { |  | 
|  213       SELECT pointer_change(y, 'text16', 'noop', 'blob') FROM t1 |  | 
|  214     } |  | 
|  215   } {0 0 0 0} |  | 
|  216   do_test ptrchng-5.3 { |  | 
|  217     execsql { |  | 
|  218       SELECT pointer_change(y, 'text16', 'bytes16', 'blob') FROM t1 |  | 
|  219     } |  | 
|  220   } {0 0 0 0} |  | 
|  221 } |  | 
|  222  |  | 
|  223 finish_test |  | 
| OLD | NEW |