/ Hex Artifact Content
Login

Artifact 000515779001ac6899eec4b54e65c6e2501279d4:


0000: 23 20 32 30 30 31 20 53 65 70 74 65 6d 62 65 72  # 2001 September
0010: 20 31 35 0a 23 0a 23 20 54 68 65 20 61 75 74 68   15.#.# The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67  place of.# a leg
0060: 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20  al notice, here 
0070: 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23  is a blessing:.#
0080: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f  .#    May you do
0090: 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76   good and not ev
00a0: 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75  il..#    May you
00b0: 20 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73   find forgivenes
00c0: 73 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61  s for yourself a
00d0: 6e 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72  nd forgive other
00e0: 73 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  s..#    May you 
00f0: 73 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65  share freely, ne
0100: 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20  ver taking more 
0110: 74 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23  than you give..#
0120: 0a 23 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .#**************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 23 20 54 68 69 73  *********.# This
0170: 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73   file implements
0180: 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
0190: 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62  s for SQLite lib
01a0: 72 61 72 79 2e 20 20 54 68 65 0a 23 20 66 6f 63  rary.  The.# foc
01b0: 75 73 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20  us of this file 
01c0: 69 73 20 74 65 73 74 69 6e 67 20 62 75 69 6c 74  is testing built
01d0: 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 23  -in functions..#
01e0: 0a 23 20 24 49 64 3a 20 66 75 6e 63 2e 74 65 73  .# $Id: func.tes
01f0: 74 2c 76 20 31 2e 31 36 20 32 30 30 32 2f 31 31  t,v 1.16 2002/11
0200: 2f 30 34 20 31 39 3a 33 32 3a 32 36 20 64 72 68  /04 19:32:26 drh
0210: 20 45 78 70 20 24 0a 0a 73 65 74 20 74 65 73 74   Exp $..set test
0220: 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  dir [file dirnam
0230: 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65  e $argv0].source
0240: 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72   $testdir/tester
0250: 2e 74 63 6c 0a 0a 23 20 43 72 65 61 74 65 20 61  .tcl..# Create a
0260: 20 74 61 62 6c 65 20 74 6f 20 77 6f 72 6b 20 77   table to work w
0270: 69 74 68 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 66  ith..#.do_test f
0280: 75 6e 63 2d 30 2e 30 20 7b 0a 20 20 65 78 65 63  unc-0.0 {.  exec
0290: 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c  sql {CREATE TABL
02a0: 45 20 74 62 6c 31 28 74 31 20 74 65 78 74 29 7d  E tbl1(t1 text)}
02b0: 0a 20 20 66 6f 72 65 61 63 68 20 77 6f 72 64 20  .  foreach word 
02c0: 7b 74 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73  {this program is
02d0: 20 66 72 65 65 20 73 6f 66 74 77 61 72 65 7d 20   free software} 
02e0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22 49  {.    execsql "I
02f0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 62 6c 31 20  NSERT INTO tbl1 
0300: 56 41 4c 55 45 53 28 27 24 77 6f 72 64 27 29 22  VALUES('$word')"
0310: 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b  .  }.  execsql {
0320: 53 45 4c 45 43 54 20 74 31 20 46 52 4f 4d 20 74  SELECT t1 FROM t
0330: 62 6c 31 20 4f 52 44 45 52 20 42 59 20 74 31 7d  bl1 ORDER BY t1}
0340: 0a 7d 20 7b 66 72 65 65 20 69 73 20 70 72 6f 67  .} {free is prog
0350: 72 61 6d 20 73 6f 66 74 77 61 72 65 20 74 68 69  ram software thi
0360: 73 7d 0a 64 6f 5f 74 65 73 74 20 66 75 6e 63 2d  s}.do_test func-
0370: 30 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  0.1 {.  execsql 
0380: 7b 0a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  {.     CREATE TA
0390: 42 4c 45 20 74 32 28 61 29 3b 0a 20 20 20 20 20  BLE t2(a);.     
03a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
03b0: 41 4c 55 45 53 28 31 29 3b 0a 20 20 20 20 20 49  ALUES(1);.     I
03c0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
03d0: 4c 55 45 53 28 4e 55 4c 4c 29 3b 0a 20 20 20 20  LUES(NULL);.    
03e0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
03f0: 56 41 4c 55 45 53 28 33 34 35 29 3b 0a 20 20 20  VALUES(345);.   
0400: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
0410: 20 56 41 4c 55 45 53 28 4e 55 4c 4c 29 3b 0a 20   VALUES(NULL);. 
0420: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0430: 74 32 20 56 41 4c 55 45 53 28 36 37 38 39 30 29  t2 VALUES(67890)
0440: 3b 0a 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20  ;.     SELECT * 
0450: 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b  FROM t2;.  }.} {
0460: 31 20 7b 7d 20 33 34 35 20 7b 7d 20 36 37 38 39  1 {} 345 {} 6789
0470: 30 7d 0a 0a 23 20 43 68 65 63 6b 20 6f 75 74 20  0}..# Check out 
0480: 74 68 65 20 6c 65 6e 67 74 68 28 29 20 66 75 6e  the length() fun
0490: 63 74 69 6f 6e 0a 23 0a 64 6f 5f 74 65 73 74 20  ction.#.do_test 
04a0: 66 75 6e 63 2d 31 2e 30 20 7b 0a 20 20 65 78 65  func-1.0 {.  exe
04b0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6c 65 6e  csql {SELECT len
04c0: 67 74 68 28 74 31 29 20 46 52 4f 4d 20 74 62 6c  gth(t1) FROM tbl
04d0: 31 20 4f 52 44 45 52 20 42 59 20 74 31 7d 0a 7d  1 ORDER BY t1}.}
04e0: 20 7b 34 20 32 20 37 20 38 20 34 7d 0a 64 6f 5f   {4 2 7 8 4}.do_
04f0: 74 65 73 74 20 66 75 6e 63 2d 31 2e 31 20 7b 0a  test func-1.1 {.
0500: 20 20 73 65 74 20 72 20 5b 63 61 74 63 68 20 7b    set r [catch {
0510: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0520: 6c 65 6e 67 74 68 28 2a 29 20 46 52 4f 4d 20 74  length(*) FROM t
0530: 62 6c 31 20 4f 52 44 45 52 20 42 59 20 74 31 7d  bl1 ORDER BY t1}
0540: 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  } msg].  lappend
0550: 20 72 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 77 72   r $msg.} {1 {wr
0560: 6f 6e 67 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  ong number of ar
0570: 67 75 6d 65 6e 74 73 20 74 6f 20 66 75 6e 63 74  guments to funct
0580: 69 6f 6e 20 6c 65 6e 67 74 68 28 29 7d 7d 0a 64  ion length()}}.d
0590: 6f 5f 74 65 73 74 20 66 75 6e 63 2d 31 2e 32 20  o_test func-1.2 
05a0: 7b 0a 20 20 73 65 74 20 72 20 5b 63 61 74 63 68  {.  set r [catch
05b0: 20 7b 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43   {execsql {SELEC
05c0: 54 20 6c 65 6e 67 74 68 28 74 31 2c 35 29 20 46  T length(t1,5) F
05d0: 52 4f 4d 20 74 62 6c 31 20 4f 52 44 45 52 20 42  ROM tbl1 ORDER B
05e0: 59 20 74 31 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61  Y t1}} msg].  la
05f0: 70 70 65 6e 64 20 72 20 24 6d 73 67 0a 7d 20 7b  ppend r $msg.} {
0600: 31 20 7b 77 72 6f 6e 67 20 6e 75 6d 62 65 72 20  1 {wrong number 
0610: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  of arguments to 
0620: 66 75 6e 63 74 69 6f 6e 20 6c 65 6e 67 74 68 28  function length(
0630: 29 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 75 6e 63  )}}.do_test func
0640: 2d 31 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.3 {.  execsql
0650: 20 7b 53 45 4c 45 43 54 20 6c 65 6e 67 74 68 28   {SELECT length(
0660: 74 31 29 2c 20 63 6f 75 6e 74 28 2a 29 20 46 52  t1), count(*) FR
0670: 4f 4d 20 74 62 6c 31 20 47 52 4f 55 50 20 42 59  OM tbl1 GROUP BY
0680: 20 6c 65 6e 67 74 68 28 74 31 29 0a 20 20 20 20   length(t1).    
0690: 20 20 20 20 20 20 20 4f 52 44 45 52 20 42 59 20         ORDER BY 
06a0: 6c 65 6e 67 74 68 28 74 31 29 7d 0a 7d 20 7b 32  length(t1)}.} {2
06b0: 20 31 20 34 20 32 20 37 20 31 20 38 20 31 7d 0a   1 4 2 7 1 8 1}.
06c0: 64 6f 5f 74 65 73 74 20 66 75 6e 63 2d 31 2e 34  do_test func-1.4
06d0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
06e0: 4c 45 43 54 20 63 6f 61 6c 65 73 63 65 28 6c 65  LECT coalesce(le
06f0: 6e 67 74 68 28 61 29 2c 2d 31 29 20 46 52 4f 4d  ngth(a),-1) FROM
0700: 20 74 32 7d 0a 7d 20 7b 31 20 2d 31 20 33 20 2d   t2}.} {1 -1 3 -
0710: 31 20 35 7d 0a 0a 23 20 43 68 65 63 6b 20 6f 75  1 5}..# Check ou
0720: 74 20 74 68 65 20 73 75 62 73 74 72 28 29 20 66  t the substr() f
0730: 75 6e 63 74 69 6f 6e 0a 23 0a 64 6f 5f 74 65 73  unction.#.do_tes
0740: 74 20 66 75 6e 63 2d 32 2e 30 20 7b 0a 20 20 65  t func-2.0 {.  e
0750: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 73  xecsql {SELECT s
0760: 75 62 73 74 72 28 74 31 2c 31 2c 32 29 20 46 52  ubstr(t1,1,2) FR
0770: 4f 4d 20 74 62 6c 31 20 4f 52 44 45 52 20 42 59  OM tbl1 ORDER BY
0780: 20 74 31 7d 0a 7d 20 7b 66 72 20 69 73 20 70 72   t1}.} {fr is pr
0790: 20 73 6f 20 74 68 7d 0a 64 6f 5f 74 65 73 74 20   so th}.do_test 
07a0: 66 75 6e 63 2d 32 2e 31 20 7b 0a 20 20 65 78 65  func-2.1 {.  exe
07b0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 73 75 62  csql {SELECT sub
07c0: 73 74 72 28 74 31 2c 32 2c 31 29 20 46 52 4f 4d  str(t1,2,1) FROM
07d0: 20 74 62 6c 31 20 4f 52 44 45 52 20 42 59 20 74   tbl1 ORDER BY t
07e0: 31 7d 0a 7d 20 7b 72 20 73 20 72 20 6f 20 68 7d  1}.} {r s r o h}
07f0: 0a 64 6f 5f 74 65 73 74 20 66 75 6e 63 2d 32 2e  .do_test func-2.
0800: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  2 {.  execsql {S
0810: 45 4c 45 43 54 20 73 75 62 73 74 72 28 74 31 2c  ELECT substr(t1,
0820: 33 2c 33 29 20 46 52 4f 4d 20 74 62 6c 31 20 4f  3,3) FROM tbl1 O
0830: 52 44 45 52 20 42 59 20 74 31 7d 0a 7d 20 7b 65  RDER BY t1}.} {e
0840: 65 20 7b 7d 20 6f 67 72 20 66 74 77 20 69 73 7d  e {} ogr ftw is}
0850: 0a 64 6f 5f 74 65 73 74 20 66 75 6e 63 2d 32 2e  .do_test func-2.
0860: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  3 {.  execsql {S
0870: 45 4c 45 43 54 20 73 75 62 73 74 72 28 74 31 2c  ELECT substr(t1,
0880: 2d 31 2c 31 29 20 46 52 4f 4d 20 74 62 6c 31 20  -1,1) FROM tbl1 
0890: 4f 52 44 45 52 20 42 59 20 74 31 7d 0a 7d 20 7b  ORDER BY t1}.} {
08a0: 65 20 73 20 6d 20 65 20 73 7d 0a 64 6f 5f 74 65  e s m e s}.do_te
08b0: 73 74 20 66 75 6e 63 2d 32 2e 34 20 7b 0a 20 20  st func-2.4 {.  
08c0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
08d0: 73 75 62 73 74 72 28 74 31 2c 2d 31 2c 32 29 20  substr(t1,-1,2) 
08e0: 46 52 4f 4d 20 74 62 6c 31 20 4f 52 44 45 52 20  FROM tbl1 ORDER 
08f0: 42 59 20 74 31 7d 0a 7d 20 7b 65 20 73 20 6d 20  BY t1}.} {e s m 
0900: 65 20 73 7d 0a 64 6f 5f 74 65 73 74 20 66 75 6e  e s}.do_test fun
0910: 63 2d 32 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  c-2.5 {.  execsq
0920: 6c 20 7b 53 45 4c 45 43 54 20 73 75 62 73 74 72  l {SELECT substr
0930: 28 74 31 2c 2d 32 2c 31 29 20 46 52 4f 4d 20 74  (t1,-2,1) FROM t
0940: 62 6c 31 20 4f 52 44 45 52 20 42 59 20 74 31 7d  bl1 ORDER BY t1}
0950: 0a 7d 20 7b 65 20 69 20 61 20 72 20 69 7d 0a 64  .} {e i a r i}.d
0960: 6f 5f 74 65 73 74 20 66 75 6e 63 2d 32 2e 36 20  o_test func-2.6 
0970: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
0980: 45 43 54 20 73 75 62 73 74 72 28 74 31 2c 2d 32  ECT substr(t1,-2
0990: 2c 32 29 20 46 52 4f 4d 20 74 62 6c 31 20 4f 52  ,2) FROM tbl1 OR
09a0: 44 45 52 20 42 59 20 74 31 7d 0a 7d 20 7b 65 65  DER BY t1}.} {ee
09b0: 20 69 73 20 61 6d 20 72 65 20 69 73 7d 0a 64 6f   is am re is}.do
09c0: 5f 74 65 73 74 20 66 75 6e 63 2d 32 2e 37 20 7b  _test func-2.7 {
09d0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
09e0: 43 54 20 73 75 62 73 74 72 28 74 31 2c 2d 34 2c  CT substr(t1,-4,
09f0: 32 29 20 46 52 4f 4d 20 74 62 6c 31 20 4f 52 44  2) FROM tbl1 ORD
0a00: 45 52 20 42 59 20 74 31 7d 0a 7d 20 7b 66 72 20  ER BY t1}.} {fr 
0a10: 7b 7d 20 67 72 20 77 61 20 74 68 7d 0a 64 6f 5f  {} gr wa th}.do_
0a20: 74 65 73 74 20 66 75 6e 63 2d 32 2e 38 20 7b 0a  test func-2.8 {.
0a30: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0a40: 54 20 74 31 20 46 52 4f 4d 20 74 62 6c 31 20 4f  T t1 FROM tbl1 O
0a50: 52 44 45 52 20 42 59 20 73 75 62 73 74 72 28 74  RDER BY substr(t
0a60: 31 2c 32 2c 32 30 29 7d 0a 7d 20 7b 74 68 69 73  1,2,20)}.} {this
0a70: 20 73 6f 66 74 77 61 72 65 20 66 72 65 65 20 70   software free p
0a80: 72 6f 67 72 61 6d 20 69 73 7d 0a 64 6f 5f 74 65  rogram is}.do_te
0a90: 73 74 20 66 75 6e 63 2d 32 2e 39 20 7b 0a 20 20  st func-2.9 {.  
0aa0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0ab0: 73 75 62 73 74 72 28 61 2c 31 2c 31 29 20 46 52  substr(a,1,1) FR
0ac0: 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b 7d 20 33  OM t2}.} {1 {} 3
0ad0: 20 7b 7d 20 36 7d 0a 64 6f 5f 74 65 73 74 20 66   {} 6}.do_test f
0ae0: 75 6e 63 2d 32 2e 31 30 20 7b 0a 20 20 65 78 65  unc-2.10 {.  exe
0af0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 73 75 62  csql {SELECT sub
0b00: 73 74 72 28 61 2c 32 2c 32 29 20 46 52 4f 4d 20  str(a,2,2) FROM 
0b10: 74 32 7d 0a 7d 20 7b 7b 7d 20 7b 7d 20 34 35 20  t2}.} {{} {} 45 
0b20: 7b 7d 20 37 38 7d 0a 0a 23 20 4f 6e 6c 79 20 64  {} 78}..# Only d
0b30: 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
0b40: 74 65 73 74 73 20 69 66 20 54 43 4c 20 68 61 73  tests if TCL has
0b50: 20 55 54 46 2d 38 20 63 61 70 61 62 69 6c 69 74   UTF-8 capabilit
0b60: 69 65 73 20 61 6e 64 0a 23 20 74 68 65 20 55 54  ies and.# the UT
0b70: 46 2d 38 20 65 6e 63 6f 64 69 6e 67 20 69 73 20  F-8 encoding is 
0b80: 74 75 72 6e 65 64 20 6f 6e 20 69 6e 20 74 68 65  turned on in the
0b90: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
0ba0: 0a 23 0a 69 66 20 7b 5b 73 71 6c 69 74 65 20 2d  .#.if {[sqlite -
0bb0: 65 6e 63 6f 64 69 6e 67 5d 3d 3d 22 55 54 46 2d  encoding]=="UTF-
0bc0: 38 22 20 26 26 20 22 5c 75 31 32 33 34 22 21 3d  8" && "\u1234"!=
0bd0: 22 75 31 32 33 34 22 7d 20 7b 0a 0a 23 20 50 75  "u1234"} {..# Pu
0be0: 74 20 73 6f 6d 65 20 55 54 46 2d 38 20 63 68 61  t some UTF-8 cha
0bf0: 72 61 63 74 65 72 73 20 69 6e 20 74 68 65 20 64  racters in the d
0c00: 61 74 61 62 61 73 65 0a 23 0a 64 6f 5f 74 65 73  atabase.#.do_tes
0c10: 74 20 66 75 6e 63 2d 33 2e 30 20 7b 0a 20 20 65  t func-3.0 {.  e
0c20: 78 65 63 73 71 6c 20 7b 44 45 4c 45 54 45 20 46  xecsql {DELETE F
0c30: 52 4f 4d 20 74 62 6c 31 7d 0a 20 20 66 6f 72 65  ROM tbl1}.  fore
0c40: 61 63 68 20 77 6f 72 64 20 22 63 6f 6e 74 61 69  ach word "contai
0c50: 6e 73 20 55 54 46 2d 38 20 63 68 61 72 61 63 74  ns UTF-8 charact
0c60: 65 72 73 20 68 69 5c 75 31 32 33 34 68 6f 22 20  ers hi\u1234ho" 
0c70: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22 49  {.    execsql "I
0c80: 4e 53 45 52 54 20 49 4e 54 4f 20 74 62 6c 31 20  NSERT INTO tbl1 
0c90: 56 41 4c 55 45 53 28 27 24 77 6f 72 64 27 29 22  VALUES('$word')"
0ca0: 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b  .  }.  execsql {
0cb0: 53 45 4c 45 43 54 20 74 31 20 46 52 4f 4d 20 74  SELECT t1 FROM t
0cc0: 62 6c 31 20 4f 52 44 45 52 20 42 59 20 74 31 7d  bl1 ORDER BY t1}
0cd0: 0a 7d 20 22 55 54 46 2d 38 20 63 68 61 72 61 63  .} "UTF-8 charac
0ce0: 74 65 72 73 20 63 6f 6e 74 61 69 6e 73 20 68 69  ters contains hi
0cf0: 5c 75 31 32 33 34 68 6f 22 0a 64 6f 5f 74 65 73  \u1234ho".do_tes
0d00: 74 20 66 75 6e 63 2d 33 2e 31 20 7b 0a 20 20 65  t func-3.1 {.  e
0d10: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6c  xecsql {SELECT l
0d20: 65 6e 67 74 68 28 74 31 29 20 46 52 4f 4d 20 74  ength(t1) FROM t
0d30: 62 6c 31 20 4f 52 44 45 52 20 42 59 20 74 31 7d  bl1 ORDER BY t1}
0d40: 0a 7d 20 7b 35 20 31 30 20 38 20 35 7d 0a 64 6f  .} {5 10 8 5}.do
0d50: 5f 74 65 73 74 20 66 75 6e 63 2d 33 2e 32 20 7b  _test func-3.2 {
0d60: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
0d70: 43 54 20 73 75 62 73 74 72 28 74 31 2c 31 2c 32  CT substr(t1,1,2
0d80: 29 20 46 52 4f 4d 20 74 62 6c 31 20 4f 52 44 45  ) FROM tbl1 ORDE
0d90: 52 20 42 59 20 74 31 7d 0a 7d 20 7b 55 54 20 63  R BY t1}.} {UT c
0da0: 68 20 63 6f 20 68 69 7d 0a 64 6f 5f 74 65 73 74  h co hi}.do_test
0db0: 20 66 75 6e 63 2d 33 2e 33 20 7b 0a 20 20 65 78   func-3.3 {.  ex
0dc0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 73 75  ecsql {SELECT su
0dd0: 62 73 74 72 28 74 31 2c 31 2c 33 29 20 46 52 4f  bstr(t1,1,3) FRO
0de0: 4d 20 74 62 6c 31 20 4f 52 44 45 52 20 42 59 20  M tbl1 ORDER BY 
0df0: 74 31 7d 0a 7d 20 22 55 54 46 20 63 68 61 20 63  t1}.} "UTF cha c
0e00: 6f 6e 20 68 69 5c 75 31 32 33 34 22 0a 64 6f 5f  on hi\u1234".do_
0e10: 74 65 73 74 20 66 75 6e 63 2d 33 2e 34 20 7b 0a  test func-3.4 {.
0e20: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0e30: 54 20 73 75 62 73 74 72 28 74 31 2c 32 2c 32 29  T substr(t1,2,2)
0e40: 20 46 52 4f 4d 20 74 62 6c 31 20 4f 52 44 45 52   FROM tbl1 ORDER
0e50: 20 42 59 20 74 31 7d 0a 7d 20 22 54 46 20 68 61   BY t1}.} "TF ha
0e60: 20 6f 6e 20 69 5c 75 31 32 33 34 22 0a 64 6f 5f   on i\u1234".do_
0e70: 74 65 73 74 20 66 75 6e 63 2d 33 2e 35 20 7b 0a  test func-3.5 {.
0e80: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0e90: 54 20 73 75 62 73 74 72 28 74 31 2c 32 2c 33 29  T substr(t1,2,3)
0ea0: 20 46 52 4f 4d 20 74 62 6c 31 20 4f 52 44 45 52   FROM tbl1 ORDER
0eb0: 20 42 59 20 74 31 7d 0a 7d 20 22 54 46 2d 20 68   BY t1}.} "TF- h
0ec0: 61 72 20 6f 6e 74 20 69 5c 75 31 32 33 34 68 22  ar ont i\u1234h"
0ed0: 0a 64 6f 5f 74 65 73 74 20 66 75 6e 63 2d 33 2e  .do_test func-3.
0ee0: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  6 {.  execsql {S
0ef0: 45 4c 45 43 54 20 73 75 62 73 74 72 28 74 31 2c  ELECT substr(t1,
0f00: 33 2c 32 29 20 46 52 4f 4d 20 74 62 6c 31 20 4f  3,2) FROM tbl1 O
0f10: 52 44 45 52 20 42 59 20 74 31 7d 0a 7d 20 22 46  RDER BY t1}.} "F
0f20: 2d 20 61 72 20 6e 74 20 5c 75 31 32 33 34 68 22  - ar nt \u1234h"
0f30: 0a 64 6f 5f 74 65 73 74 20 66 75 6e 63 2d 33 2e  .do_test func-3.
0f40: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  7 {.  execsql {S
0f50: 45 4c 45 43 54 20 73 75 62 73 74 72 28 74 31 2c  ELECT substr(t1,
0f60: 34 2c 32 29 20 46 52 4f 4d 20 74 62 6c 31 20 4f  4,2) FROM tbl1 O
0f70: 52 44 45 52 20 42 59 20 74 31 7d 0a 7d 20 22 2d  RDER BY t1}.} "-
0f80: 38 20 72 61 20 74 61 20 68 6f 22 0a 64 6f 5f 74  8 ra ta ho".do_t
0f90: 65 73 74 20 66 75 6e 63 2d 33 2e 38 20 7b 0a 20  est func-3.8 {. 
0fa0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
0fb0: 20 73 75 62 73 74 72 28 74 31 2c 2d 31 2c 31 29   substr(t1,-1,1)
0fc0: 20 46 52 4f 4d 20 74 62 6c 31 20 4f 52 44 45 52   FROM tbl1 ORDER
0fd0: 20 42 59 20 74 31 7d 0a 7d 20 22 38 20 73 20 73   BY t1}.} "8 s s
0fe0: 20 6f 22 0a 64 6f 5f 74 65 73 74 20 66 75 6e 63   o".do_test func
0ff0: 2d 33 2e 39 20 7b 0a 20 20 65 78 65 63 73 71 6c  -3.9 {.  execsql
1000: 20 7b 53 45 4c 45 43 54 20 73 75 62 73 74 72 28   {SELECT substr(
1010: 74 31 2c 2d 33 2c 32 29 20 46 52 4f 4d 20 74 62  t1,-3,2) FROM tb
1020: 6c 31 20 4f 52 44 45 52 20 42 59 20 74 31 7d 0a  l1 ORDER BY t1}.
1030: 7d 20 22 46 2d 20 65 72 20 69 6e 20 5c 75 31 32  } "F- er in \u12
1040: 33 34 68 22 0a 64 6f 5f 74 65 73 74 20 66 75 6e  34h".do_test fun
1050: 63 2d 33 2e 31 30 20 7b 0a 20 20 65 78 65 63 73  c-3.10 {.  execs
1060: 71 6c 20 7b 53 45 4c 45 43 54 20 73 75 62 73 74  ql {SELECT subst
1070: 72 28 74 31 2c 2d 34 2c 33 29 20 46 52 4f 4d 20  r(t1,-4,3) FROM 
1080: 74 62 6c 31 20 4f 52 44 45 52 20 42 59 20 74 31  tbl1 ORDER BY t1
1090: 7d 0a 7d 20 22 54 46 2d 20 74 65 72 20 61 69 6e  }.} "TF- ter ain
10a0: 20 69 5c 75 31 32 33 34 68 22 0a 64 6f 5f 74 65   i\u1234h".do_te
10b0: 73 74 20 66 75 6e 63 2d 33 2e 39 39 20 7b 0a 20  st func-3.99 {. 
10c0: 20 65 78 65 63 73 71 6c 20 7b 44 45 4c 45 54 45   execsql {DELETE
10d0: 20 46 52 4f 4d 20 74 62 6c 31 7d 0a 20 20 66 6f   FROM tbl1}.  fo
10e0: 72 65 61 63 68 20 77 6f 72 64 20 7b 74 68 69 73  reach word {this
10f0: 20 70 72 6f 67 72 61 6d 20 69 73 20 66 72 65 65   program is free
1100: 20 73 6f 66 74 77 61 72 65 7d 20 7b 0a 20 20 20   software} {.   
1110: 20 65 78 65 63 73 71 6c 20 22 49 4e 53 45 52 54   execsql "INSERT
1120: 20 49 4e 54 4f 20 74 62 6c 31 20 56 41 4c 55 45   INTO tbl1 VALUE
1130: 53 28 27 24 77 6f 72 64 27 29 22 0a 20 20 7d 0a  S('$word')".  }.
1140: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
1150: 54 20 74 31 20 46 52 4f 4d 20 74 62 6c 31 7d 0a  T t1 FROM tbl1}.
1160: 7d 20 7b 74 68 69 73 20 70 72 6f 67 72 61 6d 20  } {this program 
1170: 69 73 20 66 72 65 65 20 73 6f 66 74 77 61 72 65  is free software
1180: 7d 0a 0a 7d 20 3b 23 20 45 6e 64 20 5b 73 71 6c  }..} ;# End [sql
1190: 69 74 65 20 2d 65 6e 63 6f 64 69 6e 67 5d 3d 3d  ite -encoding]==
11a0: 55 54 46 2d 38 20 61 6e 64 20 5c 75 31 32 33 34  UTF-8 and \u1234
11b0: 21 3d 75 31 32 33 34 0a 0a 23 20 54 65 73 74 20  !=u1234..# Test 
11c0: 74 68 65 20 61 62 73 28 29 20 61 6e 64 20 72 6f  the abs() and ro
11d0: 75 6e 64 28 29 20 66 75 6e 63 74 69 6f 6e 73 2e  und() functions.
11e0: 0a 23 0a 64 6f 5f 74 65 73 74 20 66 75 6e 63 2d  .#.do_test func-
11f0: 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.1 {.  execsql 
1200: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
1210: 4c 45 20 74 31 28 61 2c 62 2c 63 29 3b 0a 20 20  LE t1(a,b,c);.  
1220: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
1230: 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 3b 0a   VALUES(1,2,3);.
1240: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1250: 74 31 20 56 41 4c 55 45 53 28 32 2c 31 2e 32 33  t1 VALUES(2,1.23
1260: 34 35 36 37 38 39 30 31 32 33 34 2c 2d 31 32 33  45678901234,-123
1270: 34 35 2e 36 37 38 39 30 29 3b 0a 20 20 20 20 49  45.67890);.    I
1280: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
1290: 4c 55 45 53 28 33 2c 2d 32 2c 2d 35 29 3b 0a 20  LUES(3,-2,-5);. 
12a0: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53   }.  catchsql {S
12b0: 45 4c 45 43 54 20 61 62 73 28 61 2c 62 29 20 46  ELECT abs(a,b) F
12c0: 52 4f 4d 20 74 31 7d 0a 7d 20 7b 31 20 7b 77 72  ROM t1}.} {1 {wr
12d0: 6f 6e 67 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  ong number of ar
12e0: 67 75 6d 65 6e 74 73 20 74 6f 20 66 75 6e 63 74  guments to funct
12f0: 69 6f 6e 20 61 62 73 28 29 7d 7d 0a 64 6f 5f 74  ion abs()}}.do_t
1300: 65 73 74 20 66 75 6e 63 2d 34 2e 32 20 7b 0a 20  est func-4.2 {. 
1310: 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43   catchsql {SELEC
1320: 54 20 61 62 73 28 29 20 46 52 4f 4d 20 74 31 7d  T abs() FROM t1}
1330: 0a 7d 20 7b 31 20 7b 77 72 6f 6e 67 20 6e 75 6d  .} {1 {wrong num
1340: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
1350: 20 74 6f 20 66 75 6e 63 74 69 6f 6e 20 61 62 73   to function abs
1360: 28 29 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 75 6e  ()}}.do_test fun
1370: 63 2d 34 2e 33 20 7b 0a 20 20 63 61 74 63 68 73  c-4.3 {.  catchs
1380: 71 6c 20 7b 53 45 4c 45 43 54 20 61 62 73 28 62  ql {SELECT abs(b
1390: 29 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20  ) FROM t1 ORDER 
13a0: 42 59 20 61 7d 0a 7d 20 7b 30 20 7b 32 20 31 2e  BY a}.} {0 {2 1.
13b0: 32 33 34 35 36 37 38 39 30 31 32 33 34 20 32 7d  2345678901234 2}
13c0: 7d 0a 64 6f 5f 74 65 73 74 20 66 75 6e 63 2d 34  }.do_test func-4
13d0: 2e 34 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .4 {.  catchsql 
13e0: 7b 53 45 4c 45 43 54 20 61 62 73 28 63 29 20 46  {SELECT abs(c) F
13f0: 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20  ROM t1 ORDER BY 
1400: 61 7d 0a 7d 20 7b 30 20 7b 33 20 31 32 33 34 35  a}.} {0 {3 12345
1410: 2e 36 37 38 39 30 20 35 7d 7d 0a 64 6f 5f 74 65  .67890 5}}.do_te
1420: 73 74 20 66 75 6e 63 2d 34 2e 34 2e 31 20 7b 0a  st func-4.4.1 {.
1430: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
1440: 54 20 61 62 73 28 61 29 20 46 52 4f 4d 20 74 32  T abs(a) FROM t2
1450: 7d 0a 7d 20 7b 31 20 7b 7d 20 33 34 35 20 7b 7d  }.} {1 {} 345 {}
1460: 20 36 37 38 39 30 7d 0a 64 6f 5f 74 65 73 74 20   67890}.do_test 
1470: 66 75 6e 63 2d 34 2e 34 2e 32 20 7b 0a 20 20 65  func-4.4.2 {.  e
1480: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 61  xecsql {SELECT a
1490: 62 73 28 74 31 29 20 46 52 4f 4d 20 74 62 6c 31  bs(t1) FROM tbl1
14a0: 7d 0a 7d 20 7b 74 68 69 73 20 70 72 6f 67 72 61  }.} {this progra
14b0: 6d 20 69 73 20 66 72 65 65 20 73 6f 66 74 77 61  m is free softwa
14c0: 72 65 7d 0a 0a 64 6f 5f 74 65 73 74 20 66 75 6e  re}..do_test fun
14d0: 63 2d 34 2e 35 20 7b 0a 20 20 63 61 74 63 68 73  c-4.5 {.  catchs
14e0: 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 75 6e 64  ql {SELECT round
14f0: 28 61 2c 62 2c 63 29 20 46 52 4f 4d 20 74 31 7d  (a,b,c) FROM t1}
1500: 0a 7d 20 7b 31 20 7b 77 72 6f 6e 67 20 6e 75 6d  .} {1 {wrong num
1510: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
1520: 20 74 6f 20 66 75 6e 63 74 69 6f 6e 20 72 6f 75   to function rou
1530: 6e 64 28 29 7d 7d 0a 64 6f 5f 74 65 73 74 20 66  nd()}}.do_test f
1540: 75 6e 63 2d 34 2e 36 20 7b 0a 20 20 63 61 74 63  unc-4.6 {.  catc
1550: 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 75  hsql {SELECT rou
1560: 6e 64 28 62 2c 32 29 20 46 52 4f 4d 20 74 31 20  nd(b,2) FROM t1 
1570: 4f 52 44 45 52 20 42 59 20 62 7d 0a 7d 20 7b 30  ORDER BY b}.} {0
1580: 20 7b 2d 32 2e 30 30 20 31 2e 32 33 20 32 2e 30   {-2.00 1.23 2.0
1590: 30 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 75 6e 63  0}}.do_test func
15a0: 2d 34 2e 37 20 7b 0a 20 20 63 61 74 63 68 73 71  -4.7 {.  catchsq
15b0: 6c 20 7b 53 45 4c 45 43 54 20 72 6f 75 6e 64 28  l {SELECT round(
15c0: 62 2c 30 29 20 46 52 4f 4d 20 74 31 20 4f 52 44  b,0) FROM t1 ORD
15d0: 45 52 20 42 59 20 61 7d 0a 7d 20 7b 30 20 7b 32  ER BY a}.} {0 {2
15e0: 20 31 20 2d 32 7d 7d 0a 64 6f 5f 74 65 73 74 20   1 -2}}.do_test 
15f0: 66 75 6e 63 2d 34 2e 38 20 7b 0a 20 20 63 61 74  func-4.8 {.  cat
1600: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f  chsql {SELECT ro
1610: 75 6e 64 28 63 29 20 46 52 4f 4d 20 74 31 20 4f  und(c) FROM t1 O
1620: 52 44 45 52 20 42 59 20 61 7d 0a 7d 20 7b 30 20  RDER BY a}.} {0 
1630: 7b 33 20 2d 31 32 33 34 36 20 2d 35 7d 7d 0a 64  {3 -12346 -5}}.d
1640: 6f 5f 74 65 73 74 20 66 75 6e 63 2d 34 2e 39 20  o_test func-4.9 
1650: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45  {.  catchsql {SE
1660: 4c 45 43 54 20 72 6f 75 6e 64 28 63 2c 61 29 20  LECT round(c,a) 
1670: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
1680: 20 61 7d 0a 7d 20 7b 30 20 7b 33 2e 30 20 2d 31   a}.} {0 {3.0 -1
1690: 32 33 34 35 2e 36 38 20 2d 35 2e 30 30 30 7d 7d  2345.68 -5.000}}
16a0: 0a 64 6f 5f 74 65 73 74 20 66 75 6e 63 2d 34 2e  .do_test func-4.
16b0: 31 30 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  10 {.  catchsql 
16c0: 7b 53 45 4c 45 43 54 20 27 78 27 20 7c 7c 20 72  {SELECT 'x' || r
16d0: 6f 75 6e 64 28 63 2c 61 29 20 7c 7c 20 27 79 27  ound(c,a) || 'y'
16e0: 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42   FROM t1 ORDER B
16f0: 59 20 61 7d 0a 7d 20 7b 30 20 7b 78 33 2e 30 79  Y a}.} {0 {x3.0y
1700: 20 78 2d 31 32 33 34 35 2e 36 38 79 20 78 2d 35   x-12345.68y x-5
1710: 2e 30 30 30 79 7d 7d 0a 64 6f 5f 74 65 73 74 20  .000y}}.do_test 
1720: 66 75 6e 63 2d 34 2e 31 31 20 7b 0a 20 20 63 61  func-4.11 {.  ca
1730: 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 72  tchsql {SELECT r
1740: 6f 75 6e 64 28 29 20 46 52 4f 4d 20 74 31 20 4f  ound() FROM t1 O
1750: 52 44 45 52 20 42 59 20 61 7d 0a 7d 20 7b 31 20  RDER BY a}.} {1 
1760: 7b 77 72 6f 6e 67 20 6e 75 6d 62 65 72 20 6f 66  {wrong number of
1770: 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 66 75   arguments to fu
1780: 6e 63 74 69 6f 6e 20 72 6f 75 6e 64 28 29 7d 7d  nction round()}}
1790: 0a 64 6f 5f 74 65 73 74 20 66 75 6e 63 2d 34 2e  .do_test func-4.
17a0: 31 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  12 {.  execsql {
17b0: 53 45 4c 45 43 54 20 63 6f 61 6c 65 73 63 65 28  SELECT coalesce(
17c0: 72 6f 75 6e 64 28 61 2c 32 29 2c 27 6e 69 6c 27  round(a,2),'nil'
17d0: 29 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 2e  ) FROM t2}.} {1.
17e0: 30 30 20 6e 69 6c 20 33 34 35 2e 30 30 20 6e 69  00 nil 345.00 ni
17f0: 6c 20 36 37 38 39 30 2e 30 30 7d 0a 64 6f 5f 74  l 67890.00}.do_t
1800: 65 73 74 20 66 75 6e 63 2d 34 2e 31 33 20 7b 0a  est func-4.13 {.
1810: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
1820: 54 20 72 6f 75 6e 64 28 74 31 2c 32 29 20 46 52  T round(t1,2) FR
1830: 4f 4d 20 74 62 6c 31 7d 0a 7d 20 7b 30 2e 30 30  OM tbl1}.} {0.00
1840: 20 30 2e 30 30 20 30 2e 30 30 20 30 2e 30 30 20   0.00 0.00 0.00 
1850: 30 2e 30 30 7d 0a 0a 23 20 54 65 73 74 20 74 68  0.00}..# Test th
1860: 65 20 75 70 70 65 72 28 29 20 61 6e 64 20 6c 6f  e upper() and lo
1870: 77 65 72 28 29 20 66 75 6e 63 74 69 6f 6e 73 0a  wer() functions.
1880: 23 0a 64 6f 5f 74 65 73 74 20 66 75 6e 63 2d 35  #.do_test func-5
1890: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
18a0: 53 45 4c 45 43 54 20 75 70 70 65 72 28 74 31 29  SELECT upper(t1)
18b0: 20 46 52 4f 4d 20 74 62 6c 31 7d 0a 7d 20 7b 54   FROM tbl1}.} {T
18c0: 48 49 53 20 50 52 4f 47 52 41 4d 20 49 53 20 46  HIS PROGRAM IS F
18d0: 52 45 45 20 53 4f 46 54 57 41 52 45 7d 0a 64 6f  REE SOFTWARE}.do
18e0: 5f 74 65 73 74 20 66 75 6e 63 2d 35 2e 32 20 7b  _test func-5.2 {
18f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
1900: 43 54 20 6c 6f 77 65 72 28 75 70 70 65 72 28 74  CT lower(upper(t
1910: 31 29 29 20 46 52 4f 4d 20 74 62 6c 31 7d 0a 7d  1)) FROM tbl1}.}
1920: 20 7b 74 68 69 73 20 70 72 6f 67 72 61 6d 20 69   {this program i
1930: 73 20 66 72 65 65 20 73 6f 66 74 77 61 72 65 7d  s free software}
1940: 0a 64 6f 5f 74 65 73 74 20 66 75 6e 63 2d 35 2e  .do_test func-5.
1950: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  3 {.  execsql {S
1960: 45 4c 45 43 54 20 75 70 70 65 72 28 61 29 2c 20  ELECT upper(a), 
1970: 6c 6f 77 65 72 28 61 29 20 46 52 4f 4d 20 74 32  lower(a) FROM t2
1980: 7d 0a 7d 20 7b 31 20 31 20 7b 7d 20 7b 7d 20 33  }.} {1 1 {} {} 3
1990: 34 35 20 33 34 35 20 7b 7d 20 7b 7d 20 36 37 38  45 345 {} {} 678
19a0: 39 30 20 36 37 38 39 30 7d 0a 64 6f 5f 74 65 73  90 67890}.do_tes
19b0: 74 20 66 75 6e 63 2d 35 2e 34 20 7b 0a 20 20 63  t func-5.4 {.  c
19c0: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
19d0: 75 70 70 65 72 28 61 2c 35 29 20 46 52 4f 4d 20  upper(a,5) FROM 
19e0: 74 32 7d 0a 7d 20 7b 31 20 7b 77 72 6f 6e 67 20  t2}.} {1 {wrong 
19f0: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
1a00: 6e 74 73 20 74 6f 20 66 75 6e 63 74 69 6f 6e 20  nts to function 
1a10: 75 70 70 65 72 28 29 7d 7d 0a 64 6f 5f 74 65 73  upper()}}.do_tes
1a20: 74 20 66 75 6e 63 2d 35 2e 35 20 7b 0a 20 20 63  t func-5.5 {.  c
1a30: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
1a40: 75 70 70 65 72 28 2a 29 20 46 52 4f 4d 20 74 32  upper(*) FROM t2
1a50: 7d 0a 7d 20 7b 31 20 7b 77 72 6f 6e 67 20 6e 75  }.} {1 {wrong nu
1a60: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
1a70: 73 20 74 6f 20 66 75 6e 63 74 69 6f 6e 20 75 70  s to function up
1a80: 70 65 72 28 29 7d 7d 0a 0a 23 20 54 65 73 74 20  per()}}..# Test 
1a90: 74 68 65 20 63 6f 61 6c 65 73 63 65 28 29 20 61  the coalesce() a
1aa0: 6e 64 20 6e 75 6c 6c 69 66 28 29 20 66 75 6e 63  nd nullif() func
1ab0: 74 69 6f 6e 73 0a 23 0a 64 6f 5f 74 65 73 74 20  tions.#.do_test 
1ac0: 66 75 6e 63 2d 36 2e 31 20 7b 0a 20 20 65 78 65  func-6.1 {.  exe
1ad0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 61  csql {SELECT coa
1ae0: 6c 65 73 63 65 28 61 2c 27 78 79 7a 27 29 20 46  lesce(a,'xyz') F
1af0: 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 78 79 7a  ROM t2}.} {1 xyz
1b00: 20 33 34 35 20 78 79 7a 20 36 37 38 39 30 7d 0a   345 xyz 67890}.
1b10: 64 6f 5f 74 65 73 74 20 66 75 6e 63 2d 36 2e 32  do_test func-6.2
1b20: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
1b30: 4c 45 43 54 20 63 6f 61 6c 65 73 63 65 28 75 70  LECT coalesce(up
1b40: 70 65 72 28 61 29 2c 27 6e 69 6c 27 29 20 46 52  per(a),'nil') FR
1b50: 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 6e 69 6c 20  OM t2}.} {1 nil 
1b60: 33 34 35 20 6e 69 6c 20 36 37 38 39 30 7d 0a 64  345 nil 67890}.d
1b70: 6f 5f 74 65 73 74 20 66 75 6e 63 2d 36 2e 33 20  o_test func-6.3 
1b80: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
1b90: 45 43 54 20 63 6f 61 6c 65 73 63 65 28 6e 75 6c  ECT coalesce(nul
1ba0: 6c 69 66 28 31 2c 31 29 2c 27 6e 69 6c 27 29 7d  lif(1,1),'nil')}
1bb0: 0a 7d 20 7b 6e 69 6c 7d 0a 64 6f 5f 74 65 73 74  .} {nil}.do_test
1bc0: 20 66 75 6e 63 2d 36 2e 34 20 7b 0a 20 20 65 78   func-6.4 {.  ex
1bd0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f  ecsql {SELECT co
1be0: 61 6c 65 73 63 65 28 6e 75 6c 6c 69 66 28 31 2c  alesce(nullif(1,
1bf0: 32 29 2c 27 6e 69 6c 27 29 7d 0a 7d 20 7b 31 7d  2),'nil')}.} {1}
1c00: 0a 64 6f 5f 74 65 73 74 20 66 75 6e 63 2d 36 2e  .do_test func-6.
1c10: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  5 {.  execsql {S
1c20: 45 4c 45 43 54 20 63 6f 61 6c 65 73 63 65 28 6e  ELECT coalesce(n
1c30: 75 6c 6c 69 66 28 31 2c 4e 55 4c 4c 29 2c 27 6e  ullif(1,NULL),'n
1c40: 69 6c 27 29 7d 0a 7d 20 7b 31 7d 0a 0a 0a 23 20  il')}.} {1}...# 
1c50: 54 65 73 74 20 74 68 65 20 6c 61 73 74 5f 69 6e  Test the last_in
1c60: 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e  sert_rowid() fun
1c70: 63 74 69 6f 6e 0a 23 0a 64 6f 5f 74 65 73 74 20  ction.#.do_test 
1c80: 66 75 6e 63 2d 37 2e 31 20 7b 0a 20 20 65 78 65  func-7.1 {.  exe
1c90: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6c 61 73  csql {SELECT las
1ca0: 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
1cb0: 7d 0a 7d 20 5b 64 62 20 6c 61 73 74 5f 69 6e 73  }.} [db last_ins
1cc0: 65 72 74 5f 72 6f 77 69 64 5d 0a 0a 23 20 54 65  ert_rowid]..# Te
1cd0: 73 74 73 20 66 6f 72 20 61 67 67 72 65 67 61 74  sts for aggregat
1ce0: 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64 20  e functions and 
1cf0: 68 6f 77 20 74 68 65 79 20 68 61 6e 64 6c 65 20  how they handle 
1d00: 4e 55 4c 4c 73 2e 0a 23 0a 64 6f 5f 74 65 73 74  NULLs..#.do_test
1d10: 20 66 75 6e 63 2d 38 2e 31 20 7b 0a 20 20 65 78   func-8.1 {.  ex
1d20: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
1d30: 43 54 20 73 75 6d 28 61 29 2c 20 63 6f 75 6e 74  CT sum(a), count
1d40: 28 61 29 2c 20 72 6f 75 6e 64 28 61 76 67 28 61  (a), round(avg(a
1d50: 29 2c 32 29 2c 20 6d 69 6e 28 61 29 2c 20 6d 61  ),2), min(a), ma
1d60: 78 28 61 29 2c 20 63 6f 75 6e 74 28 2a 29 20 46  x(a), count(*) F
1d70: 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 36  ROM t2;.  }.} {6
1d80: 38 32 33 36 20 33 20 32 32 37 34 35 2e 33 33 20  8236 3 22745.33 
1d90: 31 20 36 37 38 39 30 20 35 7d 0a 64 6f 5f 74 65  1 67890 5}.do_te
1da0: 73 74 20 66 75 6e 63 2d 38 2e 32 20 7b 0a 20 20  st func-8.2 {.  
1db0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
1dc0: 4c 45 43 54 20 6d 61 78 28 27 7a 2b 27 7c 7c 61  LECT max('z+'||a
1dd0: 7c 7c 27 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d  ||'abcdefghijklm
1de0: 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 41 42 43  nopqrstuvwxyzABC
1df0: 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 27 29 20  DEFGHIJKLMNOP') 
1e00: 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b  FROM t2;.  }.} {
1e10: 7a 2b 36 37 38 39 30 61 62 63 64 65 66 67 68 69  z+67890abcdefghi
1e20: 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79  jklmnopqrstuvwxy
1e30: 7a 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f  zABCDEFGHIJKLMNO
1e40: 50 7d 0a 64 6f 5f 74 65 73 74 20 66 75 6e 63 2d  P}.do_test func-
1e50: 38 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  8.3 {.  execsql 
1e60: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 45 4d  {.    CREATE TEM
1e70: 50 20 54 41 42 4c 45 20 74 33 20 41 53 20 53 45  P TABLE t3 AS SE
1e80: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32 20 4f  LECT a FROM t2 O
1e90: 52 44 45 52 20 42 59 20 61 20 44 45 53 43 3b 0a  RDER BY a DESC;.
1ea0: 20 20 20 20 53 45 4c 45 43 54 20 6d 69 6e 28 27      SELECT min('
1eb0: 7a 2b 27 7c 7c 61 7c 7c 27 61 62 63 64 65 66 67  z+'||a||'abcdefg
1ec0: 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77  hijklmnopqrstuvw
1ed0: 78 79 7a 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d  xyzABCDEFGHIJKLM
1ee0: 4e 4f 50 27 29 20 46 52 4f 4d 20 74 33 3b 0a 20  NOP') FROM t3;. 
1ef0: 20 7d 0a 7d 20 7b 7a 2b 31 61 62 63 64 65 66 67   }.} {z+1abcdefg
1f00: 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77  hijklmnopqrstuvw
1f10: 78 79 7a 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d  xyzABCDEFGHIJKLM
1f20: 4e 4f 50 7d 0a 0a 23 20 48 6f 77 20 64 6f 20 79  NOP}..# How do y
1f30: 6f 75 20 74 65 73 74 20 74 68 65 20 72 61 6e 64  ou test the rand
1f40: 6f 6d 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 6e  om() function in
1f50: 20 61 20 6d 65 61 6e 69 6e 67 66 75 6c 2c 20 64   a meaningful, d
1f60: 65 74 65 72 6d 69 6e 69 73 74 69 63 20 77 61 79  eterministic way
1f70: 3f 0a 23 0a 64 6f 5f 74 65 73 74 20 66 75 6e 63  ?.#.do_test func
1f80: 2d 39 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  -9.1 {.  execsql
1f90: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72 61   {.    SELECT ra
1fa0: 6e 64 6f 6d 28 29 20 69 73 20 6e 6f 74 20 6e 75  ndom() is not nu
1fb0: 6c 6c 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 0a 23  ll;.  }.} {1}..#
1fc0: 20 55 73 65 20 74 68 65 20 22 73 71 6c 69 74 65   Use the "sqlite
1fd0: 5f 72 65 67 69 73 74 65 72 5f 74 65 73 74 5f 66  _register_test_f
1fe0: 75 6e 63 74 69 6f 6e 22 20 54 43 4c 20 63 6f 6d  unction" TCL com
1ff0: 6d 61 6e 64 20 77 68 69 63 68 20 69 73 20 70 61  mand which is pa
2000: 72 74 20 6f 66 0a 23 20 74 68 65 20 74 65 78 74  rt of.# the text
2010: 20 66 69 78 74 75 72 65 20 69 6e 20 6f 72 64 65   fixture in orde
2020: 72 20 74 6f 20 76 65 72 69 66 79 20 63 6f 72 72  r to verify corr
2030: 65 63 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66  ect operation of
2040: 20 73 6f 6d 65 20 6f 66 0a 23 20 74 68 65 20 75   some of.# the u
2050: 73 65 72 2d 64 65 66 69 6e 65 64 20 53 51 4c 20  ser-defined SQL 
2060: 66 75 6e 63 74 69 6f 6e 20 41 50 49 73 20 74 68  function APIs th
2070: 61 74 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20  at are not used 
2080: 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 0a  by the built-in.
2090: 23 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 23 0a 64  # functions..#.d
20a0: 62 20 63 6c 6f 73 65 0a 73 65 74 20 3a 3a 44 42  b close.set ::DB
20b0: 20 5b 73 71 6c 69 74 65 20 64 62 20 74 65 73 74   [sqlite db test
20c0: 2e 64 62 5d 0a 73 71 6c 69 74 65 5f 72 65 67 69  .db].sqlite_regi
20d0: 73 74 65 72 5f 74 65 73 74 5f 66 75 6e 63 74 69  ster_test_functi
20e0: 6f 6e 20 24 3a 3a 44 42 20 74 65 73 74 66 75 6e  on $::DB testfun
20f0: 63 0a 64 6f 5f 74 65 73 74 20 66 75 6e 63 2d 31  c.do_test func-1
2100: 30 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  0.1 {.  catchsql
2110: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 74 65   {.    SELECT te
2120: 73 74 66 75 6e 63 28 4e 55 4c 4c 2c 4e 55 4c 4c  stfunc(NULL,NULL
2130: 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 66 69 72  );.  }.} {1 {fir
2140: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  st argument to t
2150: 65 73 74 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79  est function may
2160: 20 6e 6f 74 20 62 65 20 4e 55 4c 4c 7d 7d 0a 64   not be NULL}}.d
2170: 6f 5f 74 65 73 74 20 66 75 6e 63 2d 31 30 2e 32  o_test func-10.2
2180: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2190: 20 20 20 53 45 4c 45 43 54 20 74 65 73 74 66 75     SELECT testfu
21a0: 6e 63 28 0a 20 20 20 20 20 27 73 74 72 69 6e 67  nc(.     'string
21b0: 27 2c 20 27 61 62 63 64 65 66 67 68 69 6a 6b 6c  ', 'abcdefghijkl
21c0: 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 41 42  mnopqrstuvwxyzAB
21d0: 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52  CDEFGHIJKLMNOPQR
21e0: 53 54 55 56 57 58 59 5a 27 2c 0a 20 20 20 20 20  STUVWXYZ',.     
21f0: 27 69 6e 74 27 2c 20 31 32 33 34 0a 20 20 20 20  'int', 1234.    
2200: 29 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 34 7d 0a  );.  }.} {1234}.
2210: 64 6f 5f 74 65 73 74 20 66 75 6e 63 2d 31 30 2e  do_test func-10.
2220: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
2230: 20 20 20 20 53 45 4c 45 43 54 20 74 65 73 74 66      SELECT testf
2240: 75 6e 63 28 0a 20 20 20 20 20 27 73 74 72 69 6e  unc(.     'strin
2250: 67 27 2c 20 27 61 62 63 64 65 66 67 68 69 6a 6b  g', 'abcdefghijk
2260: 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 41  lmnopqrstuvwxyzA
2270: 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51  BCDEFGHIJKLMNOPQ
2280: 52 53 54 55 56 57 58 59 5a 27 2c 0a 20 20 20 20  RSTUVWXYZ',.    
2290: 20 27 73 74 72 69 6e 67 27 2c 20 4e 55 4c 4c 0a   'string', NULL.
22a0: 20 20 20 20 29 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d      );.  }.} {{}
22b0: 7d 0a 64 6f 5f 74 65 73 74 20 66 75 6e 63 2d 31  }.do_test func-1
22c0: 30 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  0.4 {.  execsql 
22d0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 74 65 73  {.    SELECT tes
22e0: 74 66 75 6e 63 28 0a 20 20 20 20 20 27 73 74 72  tfunc(.     'str
22f0: 69 6e 67 27 2c 20 27 61 62 63 64 65 66 67 68 69  ing', 'abcdefghi
2300: 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79  jklmnopqrstuvwxy
2310: 7a 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f  zABCDEFGHIJKLMNO
2320: 50 51 52 53 54 55 56 57 58 59 5a 27 2c 0a 20 20  PQRSTUVWXYZ',.  
2330: 20 20 20 27 64 6f 75 62 6c 65 27 2c 20 31 2e 32     'double', 1.2
2340: 33 34 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 7d 20  34.    );.  }.} 
2350: 7b 31 2e 32 33 34 7d 0a 64 6f 5f 74 65 73 74 20  {1.234}.do_test 
2360: 66 75 6e 63 2d 31 30 2e 35 20 7b 0a 20 20 65 78  func-10.5 {.  ex
2370: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
2380: 43 54 20 74 65 73 74 66 75 6e 63 28 0a 20 20 20  CT testfunc(.   
2390: 20 20 27 73 74 72 69 6e 67 27 2c 20 27 61 62 63    'string', 'abc
23a0: 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73  defghijklmnopqrs
23b0: 74 75 76 77 78 79 7a 41 42 43 44 45 46 47 48 49  tuvwxyzABCDEFGHI
23c0: 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59  JKLMNOPQRSTUVWXY
23d0: 5a 27 2c 0a 20 20 20 20 20 27 69 6e 74 27 2c 20  Z',.     'int', 
23e0: 31 32 33 34 2c 0a 20 20 20 20 20 27 73 74 72 69  1234,.     'stri
23f0: 6e 67 27 2c 20 27 61 62 63 64 65 66 67 68 69 6a  ng', 'abcdefghij
2400: 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a  klmnopqrstuvwxyz
2410: 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50  ABCDEFGHIJKLMNOP
2420: 51 52 53 54 55 56 57 58 59 5a 27 2c 0a 20 20 20  QRSTUVWXYZ',.   
2430: 20 20 27 73 74 72 69 6e 67 27 2c 20 4e 55 4c 4c    'string', NULL
2440: 2c 0a 20 20 20 20 20 27 73 74 72 69 6e 67 27 2c  ,.     'string',
2450: 20 27 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e   'abcdefghijklmn
2460: 6f 70 71 72 73 74 75 76 77 78 79 7a 41 42 43 44  opqrstuvwxyzABCD
2470: 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54  EFGHIJKLMNOPQRST
2480: 55 56 57 58 59 5a 27 2c 0a 20 20 20 20 20 27 64  UVWXYZ',.     'd
2490: 6f 75 62 6c 65 27 2c 20 31 2e 32 33 34 2c 0a 20  ouble', 1.234,. 
24a0: 20 20 20 20 27 73 74 72 69 6e 67 27 2c 20 27 61      'string', 'a
24b0: 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71  bcdefghijklmnopq
24c0: 72 73 74 75 76 77 78 79 7a 41 42 43 44 45 46 47  rstuvwxyzABCDEFG
24d0: 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57  HIJKLMNOPQRSTUVW
24e0: 58 59 5a 27 2c 0a 20 20 20 20 20 27 69 6e 74 27  XYZ',.     'int'
24f0: 2c 20 31 32 33 34 2c 0a 20 20 20 20 20 27 73 74  , 1234,.     'st
2500: 72 69 6e 67 27 2c 20 27 61 62 63 64 65 66 67 68  ring', 'abcdefgh
2510: 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78  ijklmnopqrstuvwx
2520: 79 7a 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e  yzABCDEFGHIJKLMN
2530: 4f 50 51 52 53 54 55 56 57 58 59 5a 27 2c 0a 20  OPQRSTUVWXYZ',. 
2540: 20 20 20 20 27 73 74 72 69 6e 67 27 2c 20 4e 55      'string', NU
2550: 4c 4c 2c 0a 20 20 20 20 20 27 73 74 72 69 6e 67  LL,.     'string
2560: 27 2c 20 27 61 62 63 64 65 66 67 68 69 6a 6b 6c  ', 'abcdefghijkl
2570: 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 41 42  mnopqrstuvwxyzAB
2580: 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52  CDEFGHIJKLMNOPQR
2590: 53 54 55 56 57 58 59 5a 27 2c 0a 20 20 20 20 20  STUVWXYZ',.     
25a0: 27 64 6f 75 62 6c 65 27 2c 20 31 2e 32 33 34 0a  'double', 1.234.
25b0: 20 20 20 20 29 3b 0a 20 20 7d 0a 7d 20 7b 31 2e      );.  }.} {1.
25c0: 32 33 34 7d 0a 0a 23 20 54 65 73 74 20 74 68 65  234}..# Test the
25d0: 20 62 75 69 6c 74 2d 69 6e 20 73 71 6c 69 74 65   built-in sqlite
25e0: 5f 76 65 72 73 69 6f 6e 28 2a 29 20 53 51 4c 20  _version(*) SQL 
25f0: 66 75 6e 63 74 69 6f 6e 2e 0a 23 0a 64 6f 5f 74  function..#.do_t
2600: 65 73 74 20 66 75 6e 63 2d 31 31 2e 31 20 7b 0a  est func-11.1 {.
2610: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2620: 53 45 4c 45 43 54 20 73 71 6c 69 74 65 5f 76 65  SELECT sqlite_ve
2630: 72 73 69 6f 6e 28 2a 29 3b 0a 20 20 7d 0a 7d 20  rsion(*);.  }.} 
2640: 5b 73 71 6c 69 74 65 20 2d 76 65 72 73 69 6f 6e  [sqlite -version
2650: 5d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a     ]..finish_test.