Annotation of embedaddon/sqlite3/test/ptrchng.test, revision 1.1.1.1

1.1       misho       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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>