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