Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(135)

Side by Side Diff: third_party/sqlite/src/test/like.test

Issue 6990047: Import SQLite 3.7.6.3. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « third_party/sqlite/src/test/jrnlmode3.test ('k') | third_party/sqlite/src/test/lock.test » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # 2005 August 13 1 # 2005 August 13
2 # 2 #
3 # The author disclaims copyright to this source code. In place of 3 # The author disclaims copyright to this source code. In place of
4 # a legal notice, here is a blessing: 4 # a legal notice, here is a blessing:
5 # 5 #
6 # May you do good and not evil. 6 # May you do good and not evil.
7 # May you find forgiveness for yourself and forgive others. 7 # May you find forgiveness for yourself and forgive others.
8 # May you share freely, never taking more than you give. 8 # May you share freely, never taking more than you give.
9 # 9 #
10 #*********************************************************************** 10 #***********************************************************************
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 SELECT x FROM t1 WHERE x LIKE 'abc' ORDER BY 1; 108 SELECT x FROM t1 WHERE x LIKE 'abc' ORDER BY 1;
109 } 109 }
110 } {ABC abc} 110 } {ABC abc}
111 111
112 # Tests of the REGEXP operator 112 # Tests of the REGEXP operator
113 # 113 #
114 do_test like-2.1 { 114 do_test like-2.1 {
115 proc test_regexp {a b} { 115 proc test_regexp {a b} {
116 return [regexp $a $b] 116 return [regexp $a $b]
117 } 117 }
118 db function regexp test_regexp 118 db function regexp -argcount 2 test_regexp
119 execsql { 119 execsql {
120 SELECT x FROM t1 WHERE x REGEXP 'abc' ORDER BY 1; 120 SELECT x FROM t1 WHERE x REGEXP 'abc' ORDER BY 1;
121 } 121 }
122 } {{ABC abc xyz} abc abcd} 122 } {{ABC abc xyz} abc abcd}
123 do_test like-2.2 { 123 do_test like-2.2 {
124 execsql { 124 execsql {
125 SELECT x FROM t1 WHERE x REGEXP '^abc' ORDER BY 1; 125 SELECT x FROM t1 WHERE x REGEXP '^abc' ORDER BY 1;
126 } 126 }
127 } {abc abcd} 127 } {abc abcd}
128 128
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 CREATE INDEX i1 ON t1(x); 187 CREATE INDEX i1 ON t1(x);
188 } 188 }
189 queryplan { 189 queryplan {
190 SELECT x FROM t1 WHERE x LIKE 'abc%' ORDER BY 1; 190 SELECT x FROM t1 WHERE x LIKE 'abc%' ORDER BY 1;
191 } 191 }
192 } {abc abcd nosort {} i1} 192 } {abc abcd nosort {} i1}
193 do_test like-3.4 { 193 do_test like-3.4 {
194 set sqlite_like_count 194 set sqlite_like_count
195 } 0 195 } 0
196 196
197 # The LIKE optimization still works when the RHS is a string with no
198 # wildcard. Ticket [e090183531fc2747]
199 #
200 do_test like-3.4.2 {
201 queryplan {
202 SELECT x FROM t1 WHERE x LIKE 'a' ORDER BY 1;
203 }
204 } {a nosort {} i1}
205 do_test like-3.4.3 {
206 queryplan {
207 SELECT x FROM t1 WHERE x LIKE 'ab' ORDER BY 1;
208 }
209 } {ab nosort {} i1}
210 do_test like-3.4.4 {
211 queryplan {
212 SELECT x FROM t1 WHERE x LIKE 'abcd' ORDER BY 1;
213 }
214 } {abcd nosort {} i1}
215 do_test like-3.4.5 {
216 queryplan {
217 SELECT x FROM t1 WHERE x LIKE 'abcde' ORDER BY 1;
218 }
219 } {nosort {} i1}
220
221
197 # Partial optimization when the pattern does not end in '%' 222 # Partial optimization when the pattern does not end in '%'
198 # 223 #
199 do_test like-3.5 { 224 do_test like-3.5 {
200 set sqlite_like_count 0 225 set sqlite_like_count 0
201 queryplan { 226 queryplan {
202 SELECT x FROM t1 WHERE x LIKE 'a_c' ORDER BY 1; 227 SELECT x FROM t1 WHERE x LIKE 'a_c' ORDER BY 1;
203 } 228 }
204 } {abc nosort {} i1} 229 } {abc nosort {} i1}
205 do_test like-3.6 { 230 do_test like-3.6 {
206 set sqlite_like_count 231 set sqlite_like_count
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 set sqlite_like_count 0 327 set sqlite_like_count 0
303 queryplan { 328 queryplan {
304 PRAGMA case_sensitive_like=off; 329 PRAGMA case_sensitive_like=off;
305 SELECT x FROM t1 WHERE x GLOB 'a[bc]d' ORDER BY 1; 330 SELECT x FROM t1 WHERE x GLOB 'a[bc]d' ORDER BY 1;
306 } 331 }
307 } {abd acd nosort {} i1} 332 } {abd acd nosort {} i1}
308 do_test like-3.24 { 333 do_test like-3.24 {
309 set sqlite_like_count 334 set sqlite_like_count
310 } 6 335 } 6
311 336
337 # GLOB optimization when there is no wildcard. Ticket [e090183531fc2747]
338 #
339 do_test like-3.25 {
340 queryplan {
341 SELECT x FROM t1 WHERE x GLOB 'a' ORDER BY 1;
342 }
343 } {a nosort {} i1}
344 do_test like-3.26 {
345 queryplan {
346 SELECT x FROM t1 WHERE x GLOB 'abcd' ORDER BY 1;
347 }
348 } {abcd nosort {} i1}
349 do_test like-3.27 {
350 queryplan {
351 SELECT x FROM t1 WHERE x GLOB 'abcde' ORDER BY 1;
352 }
353 } {nosort {} i1}
354
355
356
312 # No optimization if the LHS of the LIKE is not a column name or 357 # No optimization if the LHS of the LIKE is not a column name or
313 # if the RHS is not a string. 358 # if the RHS is not a string.
314 # 359 #
315 do_test like-4.1 { 360 do_test like-4.1 {
316 execsql {PRAGMA case_sensitive_like=on} 361 execsql {PRAGMA case_sensitive_like=on}
317 set sqlite_like_count 0 362 set sqlite_like_count 0
318 queryplan { 363 queryplan {
319 SELECT x FROM t1 WHERE x LIKE 'abc%' ORDER BY 1 364 SELECT x FROM t1 WHERE x LIKE 'abc%' ORDER BY 1
320 } 365 }
321 } {abc abcd nosort {} i1} 366 } {abc abcd nosort {} i1}
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
556 } {1 abcdef 1 ghijkl 1 mnopqr 2 ghijkl} 601 } {1 abcdef 1 ghijkl 1 mnopqr 2 ghijkl}
557 do_test like-8.4 { 602 do_test like-8.4 {
558 db function like -argcount 3 newlike 603 db function like -argcount 3 newlike
559 db eval { 604 db eval {
560 SELECT 1, x FROM t8 WHERE x LIKE '%h%'; 605 SELECT 1, x FROM t8 WHERE x LIKE '%h%';
561 SELECT 2, x FROM t8 WHERE x LIKE '%h%' ESCAPE 'x'; 606 SELECT 2, x FROM t8 WHERE x LIKE '%h%' ESCAPE 'x';
562 } 607 }
563 } {1 abcdef 1 ghijkl 1 mnopqr 2 abcdef 2 ghijkl 2 mnopqr} 608 } {1 abcdef 1 ghijkl 1 mnopqr 2 abcdef 2 ghijkl 2 mnopqr}
564 609
565 610
566 ifcapable like_opt { 611 ifcapable like_opt&&!icu {
567 # Evaluate SQL. Return the result set followed by the 612 # Evaluate SQL. Return the result set followed by the
568 # and the number of full-scan steps. 613 # and the number of full-scan steps.
569 # 614 #
570 db close 615 db close
571 sqlite3 db test.db 616 sqlite3 db test.db
572 proc count_steps {sql} { 617 proc count_steps {sql} {
573 set r [db eval $sql] 618 set r [db eval $sql]
574 lappend r scan [db status step] sort [db status sort] 619 lappend r scan [db status step] sort [db status sort]
575 } 620 }
576 do_test like-9.1 { 621 do_test like-9.1 {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 }] 666 }]
622 } {0 {}} 667 } {0 {}}
623 ifcapable explain { 668 ifcapable explain {
624 do_test like-9.5.2 { 669 do_test like-9.5.2 {
625 set res [sqlite3_exec_hex db { 670 set res [sqlite3_exec_hex db {
626 EXPLAIN QUERY PLAN SELECT x FROM t2 WHERE x LIKE '%fe%25' 671 EXPLAIN QUERY PLAN SELECT x FROM t2 WHERE x LIKE '%fe%25'
627 }] 672 }]
628 regexp {INDEX i2} $res 673 regexp {INDEX i2} $res
629 } {1} 674 } {1}
630 } 675 }
676
677 # Do an SQL statement. Append the search count to the end of the result.
678 #
679 proc count sql {
680 set ::sqlite_search_count 0
681 set ::sqlite_like_count 0
682 return [concat [execsql $sql] scan $::sqlite_search_count \
683 like $::sqlite_like_count]
684 }
685
686 # The LIKE and GLOB optimizations do not work on columns with
687 # affinity other than TEXT.
688 # Ticket #3901
689 #
690 do_test like-10.1 {
691 db close
692 sqlite3 db test.db
693 execsql {
694 CREATE TABLE t10(
695 a INTEGER PRIMARY KEY,
696 b INTEGER COLLATE nocase UNIQUE,
697 c NUMBER COLLATE nocase UNIQUE,
698 d BLOB COLLATE nocase UNIQUE,
699 e COLLATE nocase UNIQUE,
700 f TEXT COLLATE nocase UNIQUE
701 );
702 INSERT INTO t10 VALUES(1,1,1,1,1,1);
703 INSERT INTO t10 VALUES(12,12,12,12,12,12);
704 INSERT INTO t10 VALUES(123,123,123,123,123,123);
705 INSERT INTO t10 VALUES(234,234,234,234,234,234);
706 INSERT INTO t10 VALUES(345,345,345,345,345,345);
707 INSERT INTO t10 VALUES(45,45,45,45,45,45);
708 }
709 count {
710 SELECT a FROM t10 WHERE b LIKE '12%' ORDER BY +a;
711 }
712 } {12 123 scan 5 like 6}
713 do_test like-10.2 {
714 count {
715 SELECT a FROM t10 WHERE c LIKE '12%' ORDER BY +a;
716 }
717 } {12 123 scan 5 like 6}
718 do_test like-10.3 {
719 count {
720 SELECT a FROM t10 WHERE d LIKE '12%' ORDER BY +a;
721 }
722 } {12 123 scan 5 like 6}
723 do_test like-10.4 {
724 count {
725 SELECT a FROM t10 WHERE e LIKE '12%' ORDER BY +a;
726 }
727 } {12 123 scan 5 like 6}
728 do_test like-10.5 {
729 count {
730 SELECT a FROM t10 WHERE f LIKE '12%' ORDER BY +a;
731 }
732 } {12 123 scan 3 like 0}
733 do_test like-10.6 {
734 count {
735 SELECT a FROM t10 WHERE a LIKE '12%' ORDER BY +a;
736 }
737 } {12 123 scan 5 like 6}
738 do_test like-10.10 {
739 execsql {
740 CREATE TABLE t10b(
741 a INTEGER PRIMARY KEY,
742 b INTEGER UNIQUE,
743 c NUMBER UNIQUE,
744 d BLOB UNIQUE,
745 e UNIQUE,
746 f TEXT UNIQUE
747 );
748 INSERT INTO t10b SELECT * FROM t10;
749 }
750 count {
751 SELECT a FROM t10b WHERE b GLOB '12*' ORDER BY +a;
752 }
753 } {12 123 scan 5 like 6}
754 do_test like-10.11 {
755 count {
756 SELECT a FROM t10b WHERE c GLOB '12*' ORDER BY +a;
757 }
758 } {12 123 scan 5 like 6}
759 do_test like-10.12 {
760 count {
761 SELECT a FROM t10b WHERE d GLOB '12*' ORDER BY +a;
762 }
763 } {12 123 scan 5 like 6}
764 do_test like-10.13 {
765 count {
766 SELECT a FROM t10b WHERE e GLOB '12*' ORDER BY +a;
767 }
768 } {12 123 scan 5 like 6}
769 do_test like-10.14 {
770 count {
771 SELECT a FROM t10b WHERE f GLOB '12*' ORDER BY +a;
772 }
773 } {12 123 scan 3 like 0}
774 do_test like-10.15 {
775 count {
776 SELECT a FROM t10b WHERE a GLOB '12*' ORDER BY +a;
777 }
778 } {12 123 scan 5 like 6}
631 } 779 }
632 780
633 # Do an SQL statement. Append the search count to the end of the result. 781 # LIKE and GLOB where the default collating sequence is not appropriate
782 # but an index with the appropriate collating sequence exists.
634 # 783 #
635 proc count sql { 784 do_test like-11.0 {
636 set ::sqlite_search_count 0
637 set ::sqlite_like_count 0
638 return [concat [execsql $sql] scan $::sqlite_search_count \
639 like $::sqlite_like_count]
640 }
641
642 # The LIKE and GLOB optimizations do not work on columns with
643 # affinity other than TEXT.
644 # Ticket #3901
645 #
646 do_test like-10.1 {
647 db close
648 sqlite3 db test.db
649 execsql { 785 execsql {
650 CREATE TABLE t10( 786 CREATE TABLE t11(
651 a INTEGER PRIMARY KEY, 787 a INTEGER PRIMARY KEY,
652 b INTEGER COLLATE nocase UNIQUE, 788 b TEXT COLLATE nocase,
653 c NUMBER COLLATE nocase UNIQUE, 789 c TEXT COLLATE binary
654 d BLOB COLLATE nocase UNIQUE,
655 e COLLATE nocase UNIQUE,
656 f TEXT COLLATE nocase UNIQUE
657 ); 790 );
658 INSERT INTO t10 VALUES(1,1,1,1,1,1); 791 INSERT INTO t11 VALUES(1, 'a','a');
659 INSERT INTO t10 VALUES(12,12,12,12,12,12); 792 INSERT INTO t11 VALUES(2, 'ab','ab');
660 INSERT INTO t10 VALUES(123,123,123,123,123,123); 793 INSERT INTO t11 VALUES(3, 'abc','abc');
661 INSERT INTO t10 VALUES(234,234,234,234,234,234); 794 INSERT INTO t11 VALUES(4, 'abcd','abcd');
662 INSERT INTO t10 VALUES(345,345,345,345,345,345); 795 INSERT INTO t11 VALUES(5, 'A','A');
663 INSERT INTO t10 VALUES(45,45,45,45,45,45); 796 INSERT INTO t11 VALUES(6, 'AB','AB');
797 INSERT INTO t11 VALUES(7, 'ABC','ABC');
798 INSERT INTO t11 VALUES(8, 'ABCD','ABCD');
799 INSERT INTO t11 VALUES(9, 'x','x');
800 INSERT INTO t11 VALUES(10, 'yz','yz');
801 INSERT INTO t11 VALUES(11, 'X','X');
802 INSERT INTO t11 VALUES(12, 'YZ','YZ');
803 SELECT count(*) FROM t11;
664 } 804 }
665 count { 805 } {12}
666 SELECT a FROM t10 WHERE b LIKE '12%' ORDER BY a; 806 do_test like-11.1 {
807 queryplan {
808 PRAGMA case_sensitive_like=OFF;
809 SELECT b FROM t11 WHERE b LIKE 'abc%' ORDER BY a;
667 } 810 }
668 } {12 123 scan 5 like 6} 811 } {abc abcd ABC ABCD nosort t11 *}
669 do_test like-10.2 { 812 do_test like-11.2 {
670 count { 813 queryplan {
671 SELECT a FROM t10 WHERE c LIKE '12%' ORDER BY a; 814 PRAGMA case_sensitive_like=ON;
815 SELECT b FROM t11 WHERE b LIKE 'abc%' ORDER BY a;
672 } 816 }
673 } {12 123 scan 5 like 6} 817 } {abc abcd nosort t11 *}
674 do_test like-10.3 { 818 do_test like-11.3 {
675 count { 819 queryplan {
676 SELECT a FROM t10 WHERE d LIKE '12%' ORDER BY a; 820 PRAGMA case_sensitive_like=OFF;
821 CREATE INDEX t11b ON t11(b);
822 SELECT b FROM t11 WHERE b LIKE 'abc%' ORDER BY +a;
677 } 823 }
678 } {12 123 scan 5 like 6} 824 } {abc abcd ABC ABCD sort {} t11b}
679 do_test like-10.4 { 825 do_test like-11.4 {
680 count { 826 queryplan {
681 SELECT a FROM t10 WHERE e LIKE '12%' ORDER BY a; 827 PRAGMA case_sensitive_like=ON;
828 SELECT b FROM t11 WHERE b LIKE 'abc%' ORDER BY a;
682 } 829 }
683 } {12 123 scan 5 like 6} 830 } {abc abcd nosort t11 *}
684 do_test like-10.5 { 831 do_test like-11.5 {
685 count { 832 queryplan {
686 SELECT a FROM t10 WHERE f LIKE '12%' ORDER BY a; 833 PRAGMA case_sensitive_like=OFF;
834 DROP INDEX t11b;
835 CREATE INDEX t11bnc ON t11(b COLLATE nocase);
836 SELECT b FROM t11 WHERE b LIKE 'abc%' ORDER BY +a;
687 } 837 }
688 } {12 123 scan 3 like 0} 838 } {abc abcd ABC ABCD sort {} t11bnc}
689 do_test like-10.6 { 839 do_test like-11.6 {
690 count { 840 queryplan {
691 SELECT a FROM t10 WHERE a LIKE '12%' ORDER BY a; 841 CREATE INDEX t11bb ON t11(b COLLATE binary);
842 SELECT b FROM t11 WHERE b LIKE 'abc%' ORDER BY +a;
692 } 843 }
693 } {12 123 scan 5 like 6} 844 } {abc abcd ABC ABCD sort {} t11bnc}
694 do_test like-10.10 { 845 do_test like-11.7 {
695 execsql { 846 queryplan {
696 CREATE TABLE t10b( 847 PRAGMA case_sensitive_like=ON;
697 a INTEGER PRIMARY KEY, 848 SELECT b FROM t11 WHERE b LIKE 'abc%' ORDER BY +a;
698 b INTEGER UNIQUE,
699 c NUMBER UNIQUE,
700 d BLOB UNIQUE,
701 e UNIQUE,
702 f TEXT UNIQUE
703 );
704 INSERT INTO t10b SELECT * FROM t10;
705 } 849 }
706 count { 850 } {abc abcd sort {} t11bb}
707 SELECT a FROM t10b WHERE b GLOB '12*' ORDER BY a; 851 do_test like-11.8 {
852 queryplan {
853 PRAGMA case_sensitive_like=OFF;
854 SELECT b FROM t11 WHERE b GLOB 'abc*' ORDER BY +a;
708 } 855 }
709 } {12 123 scan 5 like 6} 856 } {abc abcd sort {} t11bb}
710 do_test like-10.11 { 857 do_test like-11.9 {
711 count { 858 queryplan {
712 SELECT a FROM t10b WHERE c GLOB '12*' ORDER BY a; 859 CREATE INDEX t11cnc ON t11(c COLLATE nocase);
860 CREATE INDEX t11cb ON t11(c COLLATE binary);
861 SELECT c FROM t11 WHERE c LIKE 'abc%' ORDER BY +a;
713 } 862 }
714 } {12 123 scan 5 like 6} 863 } {abc abcd ABC ABCD sort {} t11cnc}
715 do_test like-10.12 { 864 do_test like-11.10 {
716 count { 865 queryplan {
717 SELECT a FROM t10b WHERE d GLOB '12*' ORDER BY a; 866 SELECT c FROM t11 WHERE c GLOB 'abc*' ORDER BY +a;
718 } 867 }
719 } {12 123 scan 5 like 6} 868 } {abc abcd sort {} t11cb}
720 do_test like-10.13 {
721 count {
722 SELECT a FROM t10b WHERE e GLOB '12*' ORDER BY a;
723 }
724 } {12 123 scan 5 like 6}
725 do_test like-10.14 {
726 count {
727 SELECT a FROM t10b WHERE f GLOB '12*' ORDER BY a;
728 }
729 } {12 123 scan 3 like 0}
730 do_test like-10.15 {
731 count {
732 SELECT a FROM t10b WHERE a GLOB '12*' ORDER BY a;
733 }
734 } {12 123 scan 5 like 6}
735 869
736 870
737 finish_test 871 finish_test
OLDNEW
« no previous file with comments | « third_party/sqlite/src/test/jrnlmode3.test ('k') | third_party/sqlite/src/test/lock.test » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698