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>