xref: /sqlite-3.40.0/test/func2.test (revision 779b8f12)
1*779b8f12Sshaneh# 2009 November 11
2*779b8f12Sshaneh#
3*779b8f12Sshaneh# The author disclaims copyright to this source code.  In place of
4*779b8f12Sshaneh# a legal notice, here is a blessing:
5*779b8f12Sshaneh#
6*779b8f12Sshaneh#    May you do good and not evil.
7*779b8f12Sshaneh#    May you find forgiveness for yourself and forgive others.
8*779b8f12Sshaneh#    May you share freely, never taking more than you give.
9*779b8f12Sshaneh#
10*779b8f12Sshaneh#***********************************************************************
11*779b8f12Sshaneh# This file implements regression tests for SQLite library.  The
12*779b8f12Sshaneh# focus of this file is testing built-in functions.
13*779b8f12Sshaneh#
14*779b8f12Sshaneh
15*779b8f12Sshanehset testdir [file dirname $argv0]
16*779b8f12Sshanehsource $testdir/tester.tcl
17*779b8f12Sshaneh
18*779b8f12Sshaneh# Test plan:
19*779b8f12Sshaneh#
20*779b8f12Sshaneh#   func2-1.*: substr implementation (ascii)
21*779b8f12Sshaneh#   func2-2.*: substr implementation (utf8)
22*779b8f12Sshaneh#   func2-3.*: substr implementation (blob)
23*779b8f12Sshaneh#
24*779b8f12Sshaneh
25*779b8f12Sshanehproc bin_to_hex {blob} {
26*779b8f12Sshaneh  set bytes {}
27*779b8f12Sshaneh  binary scan $blob \c* bytes
28*779b8f12Sshaneh  set bytes2 [list]
29*779b8f12Sshaneh  foreach b $bytes {lappend bytes2 [format %02X [expr $b & 0xFF]]}
30*779b8f12Sshaneh  join $bytes2 {}
31*779b8f12Sshaneh}
32*779b8f12Sshaneh
33*779b8f12Sshaneh#----------------------------------------------------------------------------
34*779b8f12Sshaneh# Test cases func2-1.*: substr implementation (ascii)
35*779b8f12Sshaneh#
36*779b8f12Sshaneh
37*779b8f12Sshanehdo_test func2-1.1 {
38*779b8f12Sshaneh  execsql {SELECT 'Supercalifragilisticexpialidocious'}
39*779b8f12Sshaneh} {Supercalifragilisticexpialidocious}
40*779b8f12Sshaneh
41*779b8f12Sshaneh# substr(x,y), substr(x,y,z)
42*779b8f12Sshanehdo_test func2-1.2.1 {
43*779b8f12Sshaneh  catchsql {SELECT SUBSTR()}
44*779b8f12Sshaneh} {1 {wrong number of arguments to function SUBSTR()}}
45*779b8f12Sshanehdo_test func2-1.2.2 {
46*779b8f12Sshaneh  catchsql {SELECT SUBSTR('Supercalifragilisticexpialidocious')}
47*779b8f12Sshaneh} {1 {wrong number of arguments to function SUBSTR()}}
48*779b8f12Sshanehdo_test func2-1.2.3 {
49*779b8f12Sshaneh  catchsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 1,1,1)}
50*779b8f12Sshaneh} {1 {wrong number of arguments to function SUBSTR()}}
51*779b8f12Sshaneh
52*779b8f12Sshaneh# p1 is 1-indexed
53*779b8f12Sshanehdo_test func2-1.3 {
54*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0)}
55*779b8f12Sshaneh} {Supercalifragilisticexpialidocious}
56*779b8f12Sshanehdo_test func2-1.4 {
57*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 1)}
58*779b8f12Sshaneh} {Supercalifragilisticexpialidocious}
59*779b8f12Sshanehdo_test func2-1.5 {
60*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2)}
61*779b8f12Sshaneh} {upercalifragilisticexpialidocious}
62*779b8f12Sshanehdo_test func2-1.6 {
63*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 30)}
64*779b8f12Sshaneh} {cious}
65*779b8f12Sshanehdo_test func2-1.7 {
66*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 34)}
67*779b8f12Sshaneh} {s}
68*779b8f12Sshanehdo_test func2-1.8 {
69*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 35)}
70*779b8f12Sshaneh} {{}}
71*779b8f12Sshanehdo_test func2-1.9 {
72*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 36)}
73*779b8f12Sshaneh} {{}}
74*779b8f12Sshaneh
75*779b8f12Sshaneh# if p1<0, start from right
76*779b8f12Sshanehdo_test func2-1.10 {
77*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -0)}
78*779b8f12Sshaneh} {Supercalifragilisticexpialidocious}
79*779b8f12Sshanehdo_test func2-1.11 {
80*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -1)}
81*779b8f12Sshaneh} {s}
82*779b8f12Sshanehdo_test func2-1.12 {
83*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -2)}
84*779b8f12Sshaneh} {us}
85*779b8f12Sshanehdo_test func2-1.13 {
86*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -30)}
87*779b8f12Sshaneh} {rcalifragilisticexpialidocious}
88*779b8f12Sshanehdo_test func2-1.14 {
89*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -34)}
90*779b8f12Sshaneh} {Supercalifragilisticexpialidocious}
91*779b8f12Sshanehdo_test func2-1.15 {
92*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -35)}
93*779b8f12Sshaneh} {Supercalifragilisticexpialidocious}
94*779b8f12Sshanehdo_test func2-1.16 {
95*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -36)}
96*779b8f12Sshaneh} {Supercalifragilisticexpialidocious}
97*779b8f12Sshaneh
98*779b8f12Sshaneh# p1 is 1-indexed, p2 length to return
99*779b8f12Sshanehdo_test func2-1.17.1 {
100*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, 1)}
101*779b8f12Sshaneh} {{}}
102*779b8f12Sshanehdo_test func2-1.17.2 {
103*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, 2)}
104*779b8f12Sshaneh} {S}
105*779b8f12Sshanehdo_test func2-1.18 {
106*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 1, 1)}
107*779b8f12Sshaneh} {S}
108*779b8f12Sshanehdo_test func2-1.19.0 {
109*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, 0)}
110*779b8f12Sshaneh} {{}}
111*779b8f12Sshanehdo_test func2-1.19.1 {
112*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, 1)}
113*779b8f12Sshaneh} {u}
114*779b8f12Sshanehdo_test func2-1.19.2 {
115*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, 2)}
116*779b8f12Sshaneh} {up}
117*779b8f12Sshanehdo_test func2-1.20 {
118*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 30, 1)}
119*779b8f12Sshaneh} {c}
120*779b8f12Sshanehdo_test func2-1.21 {
121*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 34, 1)}
122*779b8f12Sshaneh} {s}
123*779b8f12Sshanehdo_test func2-1.22 {
124*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 35, 1)}
125*779b8f12Sshaneh} {{}}
126*779b8f12Sshanehdo_test func2-1.23 {
127*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 36, 1)}
128*779b8f12Sshaneh} {{}}
129*779b8f12Sshaneh
130*779b8f12Sshaneh# if p1<0, start from right, p2 length to return
131*779b8f12Sshanehdo_test func2-1.24 {
132*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -0, 1)}
133*779b8f12Sshaneh} {{}}
134*779b8f12Sshanehdo_test func2-1.25.0 {
135*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -1, 0)}
136*779b8f12Sshaneh} {{}}
137*779b8f12Sshanehdo_test func2-1.25.1 {
138*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -1, 1)}
139*779b8f12Sshaneh} {s}
140*779b8f12Sshanehdo_test func2-1.25.2 {
141*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -1, 2)}
142*779b8f12Sshaneh} {s}
143*779b8f12Sshanehdo_test func2-1.26 {
144*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -2, 1)}
145*779b8f12Sshaneh} {u}
146*779b8f12Sshanehdo_test func2-1.27 {
147*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -30, 1)}
148*779b8f12Sshaneh} {r}
149*779b8f12Sshanehdo_test func2-1.28.0 {
150*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -34, 0)}
151*779b8f12Sshaneh} {{}}
152*779b8f12Sshanehdo_test func2-1.28.1 {
153*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -34, 1)}
154*779b8f12Sshaneh} {S}
155*779b8f12Sshanehdo_test func2-1.28.2 {
156*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -34, 2)}
157*779b8f12Sshaneh} {Su}
158*779b8f12Sshanehdo_test func2-1.29.1 {
159*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -35, 1)}
160*779b8f12Sshaneh} {{}}
161*779b8f12Sshanehdo_test func2-1.29.2 {
162*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -35, 2)}
163*779b8f12Sshaneh} {S}
164*779b8f12Sshanehdo_test func2-1.30.0 {
165*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -36, 0)}
166*779b8f12Sshaneh} {{}}
167*779b8f12Sshanehdo_test func2-1.30.1 {
168*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -36, 1)}
169*779b8f12Sshaneh} {{}}
170*779b8f12Sshanehdo_test func2-1.30.2 {
171*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -36, 2)}
172*779b8f12Sshaneh} {{}}
173*779b8f12Sshanehdo_test func2-1.30.3 {
174*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -36, 3)}
175*779b8f12Sshaneh} {S}
176*779b8f12Sshaneh
177*779b8f12Sshaneh# p1 is 1-indexed, p2 length to return, p2<0 return p2 chars before p1
178*779b8f12Sshanehdo_test func2-1.31.0 {
179*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, 0)}
180*779b8f12Sshaneh} {{}}
181*779b8f12Sshanehdo_test func2-1.31.1 {
182*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, -1)}
183*779b8f12Sshaneh} {{}}
184*779b8f12Sshanehdo_test func2-1.31.2 {
185*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, -2)}
186*779b8f12Sshaneh} {{}}
187*779b8f12Sshanehdo_test func2-1.32.0 {
188*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 1, 0)}
189*779b8f12Sshaneh} {{}}
190*779b8f12Sshanehdo_test func2-1.32.1 {
191*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 1, -1)}
192*779b8f12Sshaneh} {{}}
193*779b8f12Sshanehdo_test func2-1.33.0 {
194*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, 0)}
195*779b8f12Sshaneh} {{}}
196*779b8f12Sshanehdo_test func2-1.33.1 {
197*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, -1)}
198*779b8f12Sshaneh} {S}
199*779b8f12Sshanehdo_test func2-1.33.2 {
200*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, -2)}
201*779b8f12Sshaneh} {S}
202*779b8f12Sshanehdo_test func2-1.34.0 {
203*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 3, 0)}
204*779b8f12Sshaneh} {{}}
205*779b8f12Sshanehdo_test func2-1.34.1 {
206*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 3, -1)}
207*779b8f12Sshaneh} {u}
208*779b8f12Sshanehdo_test func2-1.34.2 {
209*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 3, -2)}
210*779b8f12Sshaneh} {Su}
211*779b8f12Sshanehdo_test func2-1.35.1 {
212*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 30, -1)}
213*779b8f12Sshaneh} {o}
214*779b8f12Sshanehdo_test func2-1.35.2 {
215*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 30, -2)}
216*779b8f12Sshaneh} {do}
217*779b8f12Sshanehdo_test func2-1.36 {
218*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 34, -1)}
219*779b8f12Sshaneh} {u}
220*779b8f12Sshanehdo_test func2-1.37 {
221*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 35, -1)}
222*779b8f12Sshaneh} {s}
223*779b8f12Sshanehdo_test func2-1.38.0 {
224*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 36, 0)}
225*779b8f12Sshaneh} {{}}
226*779b8f12Sshanehdo_test func2-1.38.1 {
227*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 36, -1)}
228*779b8f12Sshaneh} {{}}
229*779b8f12Sshanehdo_test func2-1.38.2 {
230*779b8f12Sshaneh  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 36, -2)}
231*779b8f12Sshaneh} {s}
232*779b8f12Sshaneh
233*779b8f12Sshaneh
234*779b8f12Sshaneh#----------------------------------------------------------------------------
235*779b8f12Sshaneh# Test cases func2-2.*: substr implementation (utf8)
236*779b8f12Sshaneh#
237*779b8f12Sshaneh
238*779b8f12Sshaneh# Only do the following tests if TCL has UTF-8 capabilities
239*779b8f12Sshaneh#
240*779b8f12Sshanehif {"\u1234"!="u1234"} {
241*779b8f12Sshaneh
242*779b8f12Sshanehdo_test func2-2.1.1 {
243*779b8f12Sshaneh  execsql "SELECT 'hi\u1234ho'"
244*779b8f12Sshaneh} "hi\u1234ho"
245*779b8f12Sshaneh
246*779b8f12Sshaneh# substr(x,y), substr(x,y,z)
247*779b8f12Sshanehdo_test func2-2.1.2 {
248*779b8f12Sshaneh  catchsql "SELECT SUBSTR()"
249*779b8f12Sshaneh} {1 {wrong number of arguments to function SUBSTR()}}
250*779b8f12Sshanehdo_test func2-2.1.3 {
251*779b8f12Sshaneh  catchsql "SELECT SUBSTR('hi\u1234ho')"
252*779b8f12Sshaneh} {1 {wrong number of arguments to function SUBSTR()}}
253*779b8f12Sshanehdo_test func2-2.1.4 {
254*779b8f12Sshaneh  catchsql "SELECT SUBSTR('hi\u1234ho', 1,1,1)"
255*779b8f12Sshaneh} {1 {wrong number of arguments to function SUBSTR()}}
256*779b8f12Sshaneh
257*779b8f12Sshanehdo_test func2-2.2.0 {
258*779b8f12Sshaneh  execsql "SELECT SUBSTR('hi\u1234ho', 0, 0)"
259*779b8f12Sshaneh} {{}}
260*779b8f12Sshanehdo_test func2-2.2.1 {
261*779b8f12Sshaneh  execsql "SELECT SUBSTR('hi\u1234ho', 0, 1)"
262*779b8f12Sshaneh} {{}}
263*779b8f12Sshanehdo_test func2-2.2.2 {
264*779b8f12Sshaneh  execsql "SELECT SUBSTR('hi\u1234ho', 0, 2)"
265*779b8f12Sshaneh} "h"
266*779b8f12Sshanehdo_test func2-2.2.3 {
267*779b8f12Sshaneh  execsql "SELECT SUBSTR('hi\u1234ho', 0, 3)"
268*779b8f12Sshaneh} "hi"
269*779b8f12Sshanehdo_test func2-2.2.4 {
270*779b8f12Sshaneh  execsql "SELECT SUBSTR('hi\u1234ho', 0, 4)"
271*779b8f12Sshaneh} "hi\u1234"
272*779b8f12Sshanehdo_test func2-2.2.5 {
273*779b8f12Sshaneh  execsql "SELECT SUBSTR('hi\u1234ho', 0, 5)"
274*779b8f12Sshaneh} "hi\u1234h"
275*779b8f12Sshanehdo_test func2-2.2.6 {
276*779b8f12Sshaneh  execsql "SELECT SUBSTR('hi\u1234ho', 0, 6)"
277*779b8f12Sshaneh} "hi\u1234ho"
278*779b8f12Sshaneh
279*779b8f12Sshanehdo_test func2-2.3.0 {
280*779b8f12Sshaneh  execsql "SELECT SUBSTR('hi\u1234ho', 1, 0)"
281*779b8f12Sshaneh} {{}}
282*779b8f12Sshanehdo_test func2-2.3.1 {
283*779b8f12Sshaneh  execsql "SELECT SUBSTR('hi\u1234ho', 1, 1)"
284*779b8f12Sshaneh} "h"
285*779b8f12Sshanehdo_test func2-2.3.2 {
286*779b8f12Sshaneh  execsql "SELECT SUBSTR('hi\u1234ho', 1, 2)"
287*779b8f12Sshaneh} "hi"
288*779b8f12Sshanehdo_test func2-2.3.3 {
289*779b8f12Sshaneh  execsql "SELECT SUBSTR('hi\u1234ho', 1, 3)"
290*779b8f12Sshaneh} "hi\u1234"
291*779b8f12Sshanehdo_test func2-2.3.4 {
292*779b8f12Sshaneh  execsql "SELECT SUBSTR('hi\u1234ho', 1, 4)"
293*779b8f12Sshaneh} "hi\u1234h"
294*779b8f12Sshanehdo_test func2-2.3.5 {
295*779b8f12Sshaneh  execsql "SELECT SUBSTR('hi\u1234ho', 1, 5)"
296*779b8f12Sshaneh} "hi\u1234ho"
297*779b8f12Sshanehdo_test func2-2.3.6 {
298*779b8f12Sshaneh  execsql "SELECT SUBSTR('hi\u1234ho', 1, 6)"
299*779b8f12Sshaneh} "hi\u1234ho"
300*779b8f12Sshaneh
301*779b8f12Sshanehdo_test func2-2.4.0 {
302*779b8f12Sshaneh  execsql "SELECT SUBSTR('hi\u1234ho', 3, 0)"
303*779b8f12Sshaneh} {{}}
304*779b8f12Sshanehdo_test func2-2.4.1 {
305*779b8f12Sshaneh  execsql "SELECT SUBSTR('hi\u1234ho', 3, 1)"
306*779b8f12Sshaneh} "\u1234"
307*779b8f12Sshanehdo_test func2-2.4.2 {
308*779b8f12Sshaneh  execsql "SELECT SUBSTR('hi\u1234ho', 3, 2)"
309*779b8f12Sshaneh} "\u1234h"
310*779b8f12Sshaneh
311*779b8f12Sshanehdo_test func2-2.5.0 {
312*779b8f12Sshaneh  execsql "SELECT SUBSTR('\u1234', 0, 0)"
313*779b8f12Sshaneh} {{}}
314*779b8f12Sshanehdo_test func2-2.5.1 {
315*779b8f12Sshaneh  execsql "SELECT SUBSTR('\u1234', 0, 1)"
316*779b8f12Sshaneh} {{}}
317*779b8f12Sshanehdo_test func2-2.5.2 {
318*779b8f12Sshaneh  execsql "SELECT SUBSTR('\u1234', 0, 2)"
319*779b8f12Sshaneh} "\u1234"
320*779b8f12Sshanehdo_test func2-2.5.3 {
321*779b8f12Sshaneh  execsql "SELECT SUBSTR('\u1234', 0, 3)"
322*779b8f12Sshaneh} "\u1234"
323*779b8f12Sshaneh
324*779b8f12Sshanehdo_test func2-2.6.0 {
325*779b8f12Sshaneh  execsql "SELECT SUBSTR('\u1234', 1, 0)"
326*779b8f12Sshaneh} {{}}
327*779b8f12Sshanehdo_test func2-2.6.1 {
328*779b8f12Sshaneh  execsql "SELECT SUBSTR('\u1234', 1, 1)"
329*779b8f12Sshaneh} "\u1234"
330*779b8f12Sshanehdo_test func2-2.6.2 {
331*779b8f12Sshaneh  execsql "SELECT SUBSTR('\u1234', 1, 2)"
332*779b8f12Sshaneh} "\u1234"
333*779b8f12Sshanehdo_test func2-2.6.3 {
334*779b8f12Sshaneh  execsql "SELECT SUBSTR('\u1234', 1, 3)"
335*779b8f12Sshaneh} "\u1234"
336*779b8f12Sshaneh
337*779b8f12Sshanehdo_test func2-2.7.0 {
338*779b8f12Sshaneh  execsql "SELECT SUBSTR('\u1234', 2, 0)"
339*779b8f12Sshaneh} {{}}
340*779b8f12Sshanehdo_test func2-2.7.1 {
341*779b8f12Sshaneh  execsql "SELECT SUBSTR('\u1234', 2, 1)"
342*779b8f12Sshaneh} {{}}
343*779b8f12Sshanehdo_test func2-2.7.2 {
344*779b8f12Sshaneh  execsql "SELECT SUBSTR('\u1234', 2, 2)"
345*779b8f12Sshaneh} {{}}
346*779b8f12Sshaneh
347*779b8f12Sshanehdo_test func2-2.8.0 {
348*779b8f12Sshaneh  execsql "SELECT SUBSTR('\u1234', -1, 0)"
349*779b8f12Sshaneh} {{}}
350*779b8f12Sshanehdo_test func2-2.8.1 {
351*779b8f12Sshaneh  execsql "SELECT SUBSTR('\u1234', -1, 1)"
352*779b8f12Sshaneh} "\u1234"
353*779b8f12Sshanehdo_test func2-2.8.2 {
354*779b8f12Sshaneh  execsql "SELECT SUBSTR('\u1234', -1, 2)"
355*779b8f12Sshaneh} "\u1234"
356*779b8f12Sshanehdo_test func2-2.8.3 {
357*779b8f12Sshaneh  execsql "SELECT SUBSTR('\u1234', -1, 3)"
358*779b8f12Sshaneh} "\u1234"
359*779b8f12Sshaneh
360*779b8f12Sshaneh} ;# End \u1234!=u1234
361*779b8f12Sshaneh
362*779b8f12Sshaneh#----------------------------------------------------------------------------
363*779b8f12Sshaneh# Test cases func2-3.*: substr implementation (blob)
364*779b8f12Sshaneh#
365*779b8f12Sshaneh
366*779b8f12Sshanehifcapable {!bloblit} {
367*779b8f12Sshaneh  finish_test
368*779b8f12Sshaneh  return
369*779b8f12Sshaneh}
370*779b8f12Sshaneh
371*779b8f12Sshanehdo_test func2-3.1.1 {
372*779b8f12Sshaneh  set blob [execsql "SELECT x'1234'"]
373*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
374*779b8f12Sshaneh} "1234"
375*779b8f12Sshaneh
376*779b8f12Sshaneh# substr(x,y), substr(x,y,z)
377*779b8f12Sshanehdo_test func2-3.1.2 {
378*779b8f12Sshaneh  catchsql {SELECT SUBSTR()}
379*779b8f12Sshaneh} {1 {wrong number of arguments to function SUBSTR()}}
380*779b8f12Sshanehdo_test func2-3.1.3 {
381*779b8f12Sshaneh  catchsql {SELECT SUBSTR(x'1234')}
382*779b8f12Sshaneh} {1 {wrong number of arguments to function SUBSTR()}}
383*779b8f12Sshanehdo_test func2-3.1.4 {
384*779b8f12Sshaneh  catchsql {SELECT SUBSTR(x'1234', 1,1,1)}
385*779b8f12Sshaneh} {1 {wrong number of arguments to function SUBSTR()}}
386*779b8f12Sshaneh
387*779b8f12Sshanehdo_test func2-3.2.0 {
388*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', 0, 0)"]
389*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
390*779b8f12Sshaneh} {}
391*779b8f12Sshanehdo_test func2-3.2.1 {
392*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', 0, 1)"]
393*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
394*779b8f12Sshaneh} {}
395*779b8f12Sshanehdo_test func2-3.2.2 {
396*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', 0, 2)"]
397*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
398*779b8f12Sshaneh} "12"
399*779b8f12Sshanehdo_test func2-3.2.3 {
400*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', 0, 3)"]
401*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
402*779b8f12Sshaneh} "1234"
403*779b8f12Sshaneh
404*779b8f12Sshanehdo_test func2-3.3.0 {
405*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', 1, 0)"]
406*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
407*779b8f12Sshaneh} {}
408*779b8f12Sshanehdo_test func2-3.3.1 {
409*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', 1, 1)"]
410*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
411*779b8f12Sshaneh} "12"
412*779b8f12Sshanehdo_test func2-3.3.2 {
413*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', 1, 2)"]
414*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
415*779b8f12Sshaneh} "1234"
416*779b8f12Sshanehdo_test func2-3.3.3 {
417*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', 1, 3)"]
418*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
419*779b8f12Sshaneh} "1234"
420*779b8f12Sshaneh
421*779b8f12Sshanehdo_test func2-3.4.0 {
422*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', -1, 0)"]
423*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
424*779b8f12Sshaneh} {}
425*779b8f12Sshanehdo_test func2-3.4.1 {
426*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', -1, 1)"]
427*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
428*779b8f12Sshaneh} "34"
429*779b8f12Sshanehdo_test func2-3.4.2 {
430*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', -1, 2)"]
431*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
432*779b8f12Sshaneh} "34"
433*779b8f12Sshanehdo_test func2-3.4.3 {
434*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', -1, 3)"]
435*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
436*779b8f12Sshaneh} "34"
437*779b8f12Sshaneh
438*779b8f12Sshanehdo_test func2-3.5.0 {
439*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', -2, 0)"]
440*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
441*779b8f12Sshaneh} {}
442*779b8f12Sshanehdo_test func2-3.5.1 {
443*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', -2, 1)"]
444*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
445*779b8f12Sshaneh} "12"
446*779b8f12Sshanehdo_test func2-3.5.2 {
447*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', -2, 2)"]
448*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
449*779b8f12Sshaneh} "1234"
450*779b8f12Sshanehdo_test func2-3.5.3 {
451*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', -2, 3)"]
452*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
453*779b8f12Sshaneh} "1234"
454*779b8f12Sshaneh
455*779b8f12Sshanehdo_test func2-3.6.0 {
456*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', -1, 0)"]
457*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
458*779b8f12Sshaneh} {}
459*779b8f12Sshanehdo_test func2-3.6.1 {
460*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', -1, -1)"]
461*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
462*779b8f12Sshaneh} "12"
463*779b8f12Sshanehdo_test func2-3.6.2 {
464*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', -1, -2)"]
465*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
466*779b8f12Sshaneh} "12"
467*779b8f12Sshanehdo_test func2-3.6.3 {
468*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', -1, -3)"]
469*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
470*779b8f12Sshaneh} "12"
471*779b8f12Sshaneh
472*779b8f12Sshanehdo_test func2-3.7.0 {
473*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', -2, 0)"]
474*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
475*779b8f12Sshaneh} {}
476*779b8f12Sshanehdo_test func2-3.7.1 {
477*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', -2, -1)"]
478*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
479*779b8f12Sshaneh} {}
480*779b8f12Sshanehdo_test func2-3.7.2 {
481*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', -2, -2)"]
482*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
483*779b8f12Sshaneh} {}
484*779b8f12Sshaneh
485*779b8f12Sshanehdo_test func2-3.8.0 {
486*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', 1, 0)"]
487*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
488*779b8f12Sshaneh} {}
489*779b8f12Sshanehdo_test func2-3.8.1 {
490*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', 1, -1)"]
491*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
492*779b8f12Sshaneh} {}
493*779b8f12Sshanehdo_test func2-3.8.2 {
494*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', 1, -2)"]
495*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
496*779b8f12Sshaneh} {}
497*779b8f12Sshaneh
498*779b8f12Sshanehdo_test func2-3.9.0 {
499*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', 2, 0)"]
500*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
501*779b8f12Sshaneh} {}
502*779b8f12Sshanehdo_test func2-3.9.1 {
503*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', 2, -1)"]
504*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
505*779b8f12Sshaneh} "12"
506*779b8f12Sshanehdo_test func2-3.9.2 {
507*779b8f12Sshaneh  set blob [execsql "SELECT SUBSTR(x'1234', 2, -2)"]
508*779b8f12Sshaneh  bin_to_hex [lindex $blob 0]
509*779b8f12Sshaneh} "12"
510*779b8f12Sshaneh
511*779b8f12Sshanehfinish_test
512