| OLD | NEW | 
 | (Empty) | 
|    1 # 2007 May 14 |  | 
|    2 # |  | 
|    3 # The author disclaims copyright to this source code.  In place of |  | 
|    4 # a legal notice, here is a blessing: |  | 
|    5 # |  | 
|    6 #    May you do good and not evil. |  | 
|    7 #    May you find forgiveness for yourself and forgive others. |  | 
|    8 #    May you share freely, never taking more than you give. |  | 
|    9 # |  | 
|   10 #*********************************************************************** |  | 
|   11 # This file implements regression tests for SQLite library.  The |  | 
|   12 # focus of this file is testing the built-in SUBSTR() functions. |  | 
|   13 # |  | 
|   14 # $Id: substr.test,v 1.7 2009/02/03 13:10:54 drh Exp $ |  | 
|   15  |  | 
|   16 set testdir [file dirname $argv0] |  | 
|   17 source $testdir/tester.tcl |  | 
|   18  |  | 
|   19 ifcapable !tclvar { |  | 
|   20   finish_test |  | 
|   21   return |  | 
|   22 } |  | 
|   23  |  | 
|   24 # Create a table to work with. |  | 
|   25 # |  | 
|   26 execsql {  |  | 
|   27   CREATE TABLE t1(t text, b blob) |  | 
|   28 } |  | 
|   29 proc substr-test {id string i1 i2 result} { |  | 
|   30   db eval { |  | 
|   31     DELETE FROM t1; |  | 
|   32     INSERT INTO t1(t) VALUES($string) |  | 
|   33   } |  | 
|   34   do_test substr-$id.1 [subst { |  | 
|   35     execsql { |  | 
|   36       SELECT substr(t, $i1, $i2) FROM t1 |  | 
|   37     } |  | 
|   38   }] [list $result] |  | 
|   39   set qstr '[string map {' ''} $string]' |  | 
|   40   do_test substr-$id.2 [subst { |  | 
|   41     execsql { |  | 
|   42       SELECT substr($qstr, $i1, $i2) |  | 
|   43     } |  | 
|   44   }] [list $result] |  | 
|   45 } |  | 
|   46 proc subblob-test {id hex i1 i2 hexresult} { |  | 
|   47   db eval " |  | 
|   48     DELETE FROM t1; |  | 
|   49     INSERT INTO t1(b) VALUES(x'$hex') |  | 
|   50   " |  | 
|   51   do_test substr-$id.1 [subst { |  | 
|   52     execsql { |  | 
|   53       SELECT hex(substr(b, $i1, $i2)) FROM t1 |  | 
|   54     } |  | 
|   55   }] [list $hexresult] |  | 
|   56   do_test substr-$id.2 [subst { |  | 
|   57     execsql { |  | 
|   58       SELECT hex(substr(x'$hex', $i1, $i2)) |  | 
|   59     } |  | 
|   60   }] [list $hexresult] |  | 
|   61 } |  | 
|   62  |  | 
|   63 # Basic SUBSTR functionality |  | 
|   64 # |  | 
|   65 substr-test 1.1 abcdefg 1 1 a |  | 
|   66 substr-test 1.2 abcdefg 2 1 b |  | 
|   67 substr-test 1.3 abcdefg 1 2 ab |  | 
|   68 substr-test 1.4 abcdefg 1 100 abcdefg |  | 
|   69 substr-test 1.5 abcdefg 0 2 a |  | 
|   70 substr-test 1.6 abcdefg -1 1 g |  | 
|   71 substr-test 1.7 abcdefg -1 10 g |  | 
|   72 substr-test 1.8 abcdefg -5 3 cde |  | 
|   73 substr-test 1.9 abcdefg -7 3 abc |  | 
|   74 substr-test 1.10 abcdefg -100 98 abcde |  | 
|   75 substr-test 1.11 abcdefg 5 -1 d |  | 
|   76 substr-test 1.12 abcdefg 5 -4 abcd |  | 
|   77 substr-test 1.13 abcdefg 5 -5 abcd |  | 
|   78 substr-test 1.14 abcdefg -5 -1 b |  | 
|   79 substr-test 1.15 abcdefg -5 -2 ab |  | 
|   80 substr-test 1.16 abcdefg -5 -3 ab |  | 
|   81 substr-test 1.17 abcdefg 100 200 {} |  | 
|   82 substr-test 1.18 abcdefg 200 100 {} |  | 
|   83  |  | 
|   84 # Make sure NULL is returned if any parameter is NULL |  | 
|   85 # |  | 
|   86 do_test substr-1.90 { |  | 
|   87   db eval {SELECT ifnull(substr(NULL,1,1),'nil')} |  | 
|   88 } nil |  | 
|   89 do_test substr-1.91 { |  | 
|   90   db eval {SELECT ifnull(substr(NULL,1),'nil')} |  | 
|   91 } nil |  | 
|   92 do_test substr-1.92 { |  | 
|   93   db eval {SELECT ifnull(substr('abcdefg',NULL,1),'nil')} |  | 
|   94 } nil |  | 
|   95 do_test substr-1.93 { |  | 
|   96   db eval {SELECT ifnull(substr('abcdefg',NULL),'nil')} |  | 
|   97 } nil |  | 
|   98 do_test substr-1.94 { |  | 
|   99   db eval {SELECT ifnull(substr('abcdefg',1,NULL),'nil')} |  | 
|  100 } nil |  | 
|  101  |  | 
|  102 # Make sure everything works with long unicode characters |  | 
|  103 # |  | 
|  104 substr-test 2.1 \u1234\u2345\u3456 1 1 \u1234 |  | 
|  105 substr-test 2.2 \u1234\u2345\u3456 2 1 \u2345 |  | 
|  106 substr-test 2.3 \u1234\u2345\u3456 1 2 \u1234\u2345 |  | 
|  107 substr-test 2.4 \u1234\u2345\u3456 -1 1 \u3456 |  | 
|  108 substr-test 2.5 a\u1234b\u2345c\u3456c -5 3 b\u2345c |  | 
|  109 substr-test 2.6 a\u1234b\u2345c\u3456c -2 -3 b\u2345c |  | 
|  110  |  | 
|  111 # Basic functionality for BLOBs |  | 
|  112 # |  | 
|  113 subblob-test 3.1 61626364656667 1 1 61 |  | 
|  114 subblob-test 3.2 61626364656667 2 1 62 |  | 
|  115 subblob-test 3.3 61626364656667 1 2 6162 |  | 
|  116 subblob-test 3.4 61626364656667 1 100 61626364656667 |  | 
|  117 subblob-test 3.5 61626364656667 0 2 61 |  | 
|  118 subblob-test 3.6 61626364656667 -1 1 67 |  | 
|  119 subblob-test 3.7 61626364656667 -1 10 67 |  | 
|  120 subblob-test 3.8 61626364656667 -5 3 636465 |  | 
|  121 subblob-test 3.9 61626364656667 -7 3 616263 |  | 
|  122 subblob-test 3.10 61626364656667 -100 98 6162636465 |  | 
|  123 subblob-test 3.11 61626364656667 100 200 {} |  | 
|  124 subblob-test 3.12 61626364656667 200 100 {} |  | 
|  125  |  | 
|  126 # If these blobs were strings, then they would contain multi-byte |  | 
|  127 # characters.  But since they are blobs, the substr indices refer |  | 
|  128 # to bytes. |  | 
|  129 # |  | 
|  130 subblob-test 4.1 61E188B462E28D8563E3919663 1 1 61 |  | 
|  131 subblob-test 4.2 61E188B462E28D8563E3919663 2 1 E1 |  | 
|  132 subblob-test 4.3 61E188B462E28D8563E3919663 1 2 61E1 |  | 
|  133 subblob-test 4.4 61E188B462E28D8563E3919663 -2 1 96 |  | 
|  134 subblob-test 4.5 61E188B462E28D8563E3919663 -5 4 63E39196 |  | 
|  135 subblob-test 4.6 61E188B462E28D8563E3919663 -100 98 61E188B462E28D8563E391  |  | 
|  136  |  | 
|  137 # Two-argument SUBSTR |  | 
|  138 # |  | 
|  139 proc substr-2-test {id string idx result} { |  | 
|  140   db eval { |  | 
|  141     DELETE FROM t1; |  | 
|  142     INSERT INTO t1(t) VALUES($string) |  | 
|  143   } |  | 
|  144   do_test substr-$id.1 [subst { |  | 
|  145     execsql { |  | 
|  146       SELECT substr(t, $idx) FROM t1 |  | 
|  147     } |  | 
|  148   }] [list $result] |  | 
|  149   set qstr '[string map {' ''} $string]' |  | 
|  150   do_test substr-$id.2 [subst { |  | 
|  151     execsql { |  | 
|  152       SELECT substr($qstr, $idx) |  | 
|  153     } |  | 
|  154   }] [list $result] |  | 
|  155 } |  | 
|  156 substr-2-test 5.1 abcdefghijklmnop 5 efghijklmnop |  | 
|  157 substr-2-test 5.2 abcdef -5 bcdef |  | 
|  158  |  | 
|  159 finish_test |  | 
| OLD | NEW |