OLD | NEW |
1 # 2007 May 8 | 1 # 2007 May 8 |
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 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 } $SQLITE_MAX_LIKE_PATTERN_LENGTH | 243 } $SQLITE_MAX_LIKE_PATTERN_LENGTH |
244 do_test sqllimits1-4.10.1 { | 244 do_test sqllimits1-4.10.1 { |
245 sqlite3_limit db SQLITE_LIMIT_VARIABLE_NUMBER 0x7fffffff | 245 sqlite3_limit db SQLITE_LIMIT_VARIABLE_NUMBER 0x7fffffff |
246 sqlite3_limit db SQLITE_LIMIT_VARIABLE_NUMBER -1 | 246 sqlite3_limit db SQLITE_LIMIT_VARIABLE_NUMBER -1 |
247 } $SQLITE_MAX_VARIABLE_NUMBER | 247 } $SQLITE_MAX_VARIABLE_NUMBER |
248 | 248 |
249 #-------------------------------------------------------------------- | 249 #-------------------------------------------------------------------- |
250 # Test cases sqllimits1-5.* test that the SQLITE_MAX_LENGTH limit | 250 # Test cases sqllimits1-5.* test that the SQLITE_MAX_LENGTH limit |
251 # is enforced. | 251 # is enforced. |
252 # | 252 # |
| 253 # EVIDENCE-OF: R-61987-00541 SQLITE_LIMIT_LENGTH The maximum size of any |
| 254 # string or BLOB or table row, in bytes. |
| 255 # |
253 db close | 256 db close |
254 sqlite3 db test.db | 257 sqlite3 db test.db |
255 set LARGESIZE 99999 | 258 set LARGESIZE 99999 |
256 set SQLITE_LIMIT_LENGTH 100000 | 259 set SQLITE_LIMIT_LENGTH 100000 |
257 sqlite3_limit db SQLITE_LIMIT_LENGTH $SQLITE_LIMIT_LENGTH | 260 sqlite3_limit db SQLITE_LIMIT_LENGTH $SQLITE_LIMIT_LENGTH |
258 | 261 |
259 do_test sqllimits1-5.1.1 { | 262 do_test sqllimits1-5.1.1 { |
260 catchsql { SELECT randomblob(2147483647) } | 263 catchsql { SELECT randomblob(2147483647) } |
261 } {1 {string or blob too big}} | 264 } {1 {string or blob too big}} |
262 do_test sqllimits1-5.1.2 { | 265 do_test sqllimits1-5.1.2 { |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
399 do_test sqllimits1-5.21 { | 402 do_test sqllimits1-5.21 { |
400 catchsql {SELECT strftime('%Y-%m-%d ' || $::strvalue, '2008-01-02')} | 403 catchsql {SELECT strftime('%Y-%m-%d ' || $::strvalue, '2008-01-02')} |
401 } {1 {string or blob too big}} | 404 } {1 {string or blob too big}} |
402 } | 405 } |
403 unset strvalue | 406 unset strvalue |
404 | 407 |
405 #-------------------------------------------------------------------- | 408 #-------------------------------------------------------------------- |
406 # Test cases sqllimits1-6.* test that the SQLITE_MAX_SQL_LENGTH limit | 409 # Test cases sqllimits1-6.* test that the SQLITE_MAX_SQL_LENGTH limit |
407 # is enforced. | 410 # is enforced. |
408 # | 411 # |
| 412 # EVIDENCE-OF: R-09808-17554 SQLITE_LIMIT_SQL_LENGTH The maximum length |
| 413 # of an SQL statement, in bytes. |
| 414 # |
409 do_test sqllimits1-6.1 { | 415 do_test sqllimits1-6.1 { |
410 sqlite3_limit db SQLITE_LIMIT_SQL_LENGTH 50000 | 416 sqlite3_limit db SQLITE_LIMIT_SQL_LENGTH 50000 |
411 set sql "SELECT 1 WHERE 1==1" | 417 set sql "SELECT 1 WHERE 1==1" |
412 set tail " /* A comment to take up space in order to make the string\ | 418 set tail " /* A comment to take up space in order to make the string\ |
413 longer without increasing the expression depth */\ | 419 longer without increasing the expression depth */\ |
414 AND 1 == 1" | 420 AND 1 == 1" |
415 set N [expr {(50000 / [string length $tail])+1}] | 421 set N [expr {(50000 / [string length $tail])+1}] |
416 append sql [string repeat $tail $N] | 422 append sql [string repeat $tail $N] |
417 catchsql $sql | 423 catchsql $sql |
418 } {1 {string or blob too big}} | 424 } {1 {string or blob too big}} |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
560 } $fsize | 566 } $fsize |
561 do_test sqllimits1-7.7.4 { | 567 do_test sqllimits1-7.7.4 { |
562 execsql { | 568 execsql { |
563 DROP TABLE abc; | 569 DROP TABLE abc; |
564 } | 570 } |
565 } {} | 571 } {} |
566 | 572 |
567 #-------------------------------------------------------------------- | 573 #-------------------------------------------------------------------- |
568 # Test cases sqllimits1-8.* test the SQLITE_MAX_COLUMN limit. | 574 # Test cases sqllimits1-8.* test the SQLITE_MAX_COLUMN limit. |
569 # | 575 # |
| 576 # EVIDENCE-OF: R-43996-29471 SQLITE_LIMIT_COLUMN The maximum number of |
| 577 # columns in a table definition or in the result set of a SELECT or the |
| 578 # maximum number of columns in an index or in an ORDER BY or GROUP BY |
| 579 # clause. |
| 580 # |
570 set SQLITE_LIMIT_COLUMN 200 | 581 set SQLITE_LIMIT_COLUMN 200 |
571 sqlite3_limit db SQLITE_LIMIT_COLUMN $SQLITE_LIMIT_COLUMN | 582 sqlite3_limit db SQLITE_LIMIT_COLUMN $SQLITE_LIMIT_COLUMN |
572 do_test sqllimits1-8.1 { | 583 do_test sqllimits1-8.1 { |
573 # Columns in a table. | 584 # Columns in a table. |
574 set cols [list] | 585 set cols [list] |
575 for {set i 0} {$i <= $SQLITE_LIMIT_COLUMN} {incr i} { | 586 for {set i 0} {$i <= $SQLITE_LIMIT_COLUMN} {incr i} { |
576 lappend cols "c$i" | 587 lappend cols "c$i" |
577 } | 588 } |
578 catchsql "CREATE TABLE t([join $cols ,])" | 589 catchsql "CREATE TABLE t([join $cols ,])" |
579 } {1 {too many columns on t}} | 590 } {1 {too many columns on t}} |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
625 } | 636 } |
626 catchsql "UPDATE t1 SET [join $cols ,];" | 637 catchsql "UPDATE t1 SET [join $cols ,];" |
627 } {1 {too many columns in set list}} | 638 } {1 {too many columns in set list}} |
628 | 639 |
629 do_test sqllimits1-8.8 { | 640 do_test sqllimits1-8.8 { |
630 # Columns in a view definition: | 641 # Columns in a view definition: |
631 set cols [list] | 642 set cols [list] |
632 for {set i 0} {$i <= $SQLITE_LIMIT_COLUMN} {incr i} { | 643 for {set i 0} {$i <= $SQLITE_LIMIT_COLUMN} {incr i} { |
633 lappend cols "c$i" | 644 lappend cols "c$i" |
634 } | 645 } |
635 catchsql "CREATE VIEW v1 AS SELECT [join $cols ,] FROM t1;" | 646 execsql "CREATE VIEW v1 AS SELECT [join $cols ,] FROM t1;" |
| 647 catchsql {SELECT * FROM v1} |
636 } {1 {too many columns in result set}} | 648 } {1 {too many columns in result set}} |
637 | 649 |
638 do_test sqllimits1-8.9 { | 650 do_test sqllimits1-8.9 { |
639 # Columns in a view definition (testing * expansion): | 651 # Columns in a view definition (testing * expansion): |
640 set cols [list] | 652 set cols [list] |
641 for {set i 0} {$i < $SQLITE_LIMIT_COLUMN} {incr i} { | 653 for {set i 0} {$i < $SQLITE_LIMIT_COLUMN} {incr i} { |
642 lappend cols "c$i" | 654 lappend cols "c$i" |
643 } | 655 } |
| 656 execsql {DROP VIEW IF EXISTS v1} |
644 catchsql "CREATE TABLE t2([join $cols ,])" | 657 catchsql "CREATE TABLE t2([join $cols ,])" |
645 catchsql "CREATE VIEW v1 AS SELECT *, c1 AS o FROM t2;" | 658 catchsql "CREATE VIEW v1 AS SELECT *, c1 AS o FROM t2;" |
| 659 catchsql "SELECT * FROM v1" |
646 } {1 {too many columns in result set}} | 660 } {1 {too many columns in result set}} |
| 661 |
647 do_test sqllimits1-8.10 { | 662 do_test sqllimits1-8.10 { |
648 # ORDER BY columns | 663 # ORDER BY columns |
649 set cols [list] | 664 set cols [list] |
650 for {set i 0} {$i <= $SQLITE_LIMIT_COLUMN} {incr i} { | 665 for {set i 0} {$i <= $SQLITE_LIMIT_COLUMN} {incr i} { |
651 lappend cols c | 666 lappend cols c |
652 } | 667 } |
653 set sql "SELECT c FROM t1 ORDER BY [join $cols ,]" | 668 set sql "SELECT c FROM t1 ORDER BY [join $cols ,]" |
654 catchsql $sql | 669 catchsql $sql |
655 } {1 {too many terms in ORDER BY clause}} | 670 } {1 {too many terms in ORDER BY clause}} |
656 do_test sqllimits1-8.11 { | 671 do_test sqllimits1-8.11 { |
657 # ORDER BY columns | 672 # ORDER BY columns |
658 set cols [list] | 673 set cols [list] |
659 for {set i 0} {$i <= $SQLITE_LIMIT_COLUMN} {incr i} { | 674 for {set i 0} {$i <= $SQLITE_LIMIT_COLUMN} {incr i} { |
660 lappend cols [expr {$i%3 + 1}] | 675 lappend cols [expr {$i%3 + 1}] |
661 } | 676 } |
662 set sql "SELECT c, c+1, c+2 FROM t1 UNION SELECT c-1, c-2, c-3 FROM t1" | 677 set sql "SELECT c, c+1, c+2 FROM t1 UNION SELECT c-1, c-2, c-3 FROM t1" |
663 append sql " ORDER BY [join $cols ,]" | 678 append sql " ORDER BY [join $cols ,]" |
664 catchsql $sql | 679 catchsql $sql |
665 } {1 {too many terms in ORDER BY clause}} | 680 } {1 {too many terms in ORDER BY clause}} |
666 | 681 |
667 | 682 |
668 #-------------------------------------------------------------------- | 683 #-------------------------------------------------------------------- |
669 # These tests - sqllimits1-9.* - test that the SQLITE_LIMIT_EXPR_DEPTH | 684 # These tests - sqllimits1-9.* - test that the SQLITE_LIMIT_EXPR_DEPTH |
670 # limit is enforced. The limit refers to the number of terms in | 685 # limit is enforced. The limit refers to the number of terms in |
671 # the expression. | 686 # the expression. |
672 # | 687 # |
| 688 # EVIDENCE-OF: R-12723-08526 SQLITE_LIMIT_EXPR_DEPTH The maximum depth |
| 689 # of the parse tree on any expression. |
| 690 # |
673 if {$SQLITE_MAX_EXPR_DEPTH==0} { | 691 if {$SQLITE_MAX_EXPR_DEPTH==0} { |
674 puts -nonewline stderr "WARNING: Compile with -DSQLITE_MAX_EXPR_DEPTH to run " | 692 puts -nonewline stderr "WARNING: Compile with -DSQLITE_MAX_EXPR_DEPTH to run " |
675 puts stderr "tests sqllimits1-9.X" | 693 puts stderr "tests sqllimits1-9.X" |
676 } else { | 694 } else { |
677 do_test sqllimits1-9.1 { | 695 do_test sqllimits1-9.1 { |
678 set max $::SQLITE_MAX_EXPR_DEPTH | 696 set max $::SQLITE_MAX_EXPR_DEPTH |
679 set expr "(1 [string repeat {AND 1 } $max])" | 697 set expr "(1 [string repeat {AND 1 } $max])" |
680 catchsql [subst { | 698 catchsql [subst { |
681 SELECT $expr | 699 SELECT $expr |
682 }] | 700 }] |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
722 # Test cases sqllimits1-10.* test that the SQLITE_MAX_VDBE_OP | 740 # Test cases sqllimits1-10.* test that the SQLITE_MAX_VDBE_OP |
723 # limit works as expected. The limit refers to the number of opcodes | 741 # limit works as expected. The limit refers to the number of opcodes |
724 # in a single VDBE program. | 742 # in a single VDBE program. |
725 # | 743 # |
726 # TODO | 744 # TODO |
727 | 745 |
728 #-------------------------------------------------------------------- | 746 #-------------------------------------------------------------------- |
729 # Test the SQLITE_LIMIT_FUNCTION_ARG limit works. Test case names | 747 # Test the SQLITE_LIMIT_FUNCTION_ARG limit works. Test case names |
730 # match the pattern "sqllimits1-11.*". | 748 # match the pattern "sqllimits1-11.*". |
731 # | 749 # |
| 750 # EVIDENCE-OF: R-59001-45278 SQLITE_LIMIT_FUNCTION_ARG The maximum |
| 751 # number of arguments on a function. |
| 752 # |
732 for {set max 5} {$max<=$SQLITE_MAX_FUNCTION_ARG} {incr max} { | 753 for {set max 5} {$max<=$SQLITE_MAX_FUNCTION_ARG} {incr max} { |
733 do_test sqllimits1-11.$max.1 { | 754 do_test sqllimits1-11.$max.1 { |
734 set vals [list] | 755 set vals [list] |
735 sqlite3_limit db SQLITE_LIMIT_FUNCTION_ARG $::max | 756 sqlite3_limit db SQLITE_LIMIT_FUNCTION_ARG $::max |
736 for {set i 0} {$i < $::max} {incr i} { | 757 for {set i 0} {$i < $::max} {incr i} { |
737 lappend vals $i | 758 lappend vals $i |
738 } | 759 } |
739 catchsql "SELECT max([join $vals ,])" | 760 catchsql "SELECT max([join $vals ,])" |
740 } "0 [expr {$::max - 1}]" | 761 } "0 [expr {$::max - 1}]" |
741 do_test sqllimits1-11.$max.2 { | 762 do_test sqllimits1-11.$max.2 { |
(...skipping 13 matching lines...) Expand all Loading... |
755 for {set i 0} {$i <= $::max} {incr i} { | 776 for {set i 0} {$i <= $::max} {incr i} { |
756 lappend vals $i | 777 lappend vals $i |
757 } | 778 } |
758 catchsql "SELECT myfunc([join $vals ,])" | 779 catchsql "SELECT myfunc([join $vals ,])" |
759 } {1 {too many arguments on function myfunc}} | 780 } {1 {too many arguments on function myfunc}} |
760 } | 781 } |
761 | 782 |
762 #-------------------------------------------------------------------- | 783 #-------------------------------------------------------------------- |
763 # Test cases sqllimits1-12.*: Test the SQLITE_MAX_ATTACHED limit. | 784 # Test cases sqllimits1-12.*: Test the SQLITE_MAX_ATTACHED limit. |
764 # | 785 # |
| 786 # EVIDENCE-OF: R-41778-26203 SQLITE_LIMIT_ATTACHED The maximum number of |
| 787 # attached databases. |
| 788 # |
765 ifcapable attach { | 789 ifcapable attach { |
766 do_test sqllimits1-12.1 { | 790 do_test sqllimits1-12.1 { |
767 set max $::SQLITE_MAX_ATTACHED | 791 set max $::SQLITE_MAX_ATTACHED |
768 for {set i 0} {$i < ($max)} {incr i} { | 792 for {set i 0} {$i < ($max)} {incr i} { |
769 forcedelete test${i}.db test${i}.db-journal | 793 forcedelete test${i}.db test${i}.db-journal |
770 } | 794 } |
771 for {set i 0} {$i < ($max)} {incr i} { | 795 for {set i 0} {$i < ($max)} {incr i} { |
772 execsql "ATTACH 'test${i}.db' AS aux${i}" | 796 execsql "ATTACH 'test${i}.db' AS aux${i}" |
773 } | 797 } |
774 catchsql "ATTACH 'test${i}.db' AS aux${i}" | 798 catchsql "ATTACH 'test${i}.db' AS aux${i}" |
775 } "1 {too many attached databases - max $::SQLITE_MAX_ATTACHED}" | 799 } "1 {too many attached databases - max $::SQLITE_MAX_ATTACHED}" |
776 do_test sqllimits1-12.2 { | 800 do_test sqllimits1-12.2 { |
777 set max $::SQLITE_MAX_ATTACHED | 801 set max $::SQLITE_MAX_ATTACHED |
778 for {set i 0} {$i < ($max)} {incr i} { | 802 for {set i 0} {$i < ($max)} {incr i} { |
779 execsql "DETACH aux${i}" | 803 execsql "DETACH aux${i}" |
780 } | 804 } |
781 } {} | 805 } {} |
782 } | 806 } |
783 | 807 |
784 #-------------------------------------------------------------------- | 808 #-------------------------------------------------------------------- |
785 # Test cases sqllimits1-13.*: Check that the SQLITE_MAX_VARIABLE_NUMBER | 809 # Test cases sqllimits1-13.*: Check that the SQLITE_MAX_VARIABLE_NUMBER |
786 # limit works. | 810 # limit works. |
787 # | 811 # |
| 812 # EVIDENCE-OF: R-42363-29104 SQLITE_LIMIT_VARIABLE_NUMBER The maximum |
| 813 # index number of any parameter in an SQL statement. |
| 814 # |
788 do_test sqllimits1-13.1 { | 815 do_test sqllimits1-13.1 { |
789 set max $::SQLITE_MAX_VARIABLE_NUMBER | 816 set max $::SQLITE_MAX_VARIABLE_NUMBER |
790 catchsql "SELECT ?[expr {$max+1}] FROM t1" | 817 catchsql "SELECT ?[expr {$max+1}] FROM t1" |
791 } "1 {variable number must be between ?1 and ?$::SQLITE_MAX_VARIABLE_NUMBER}" | 818 } "1 {variable number must be between ?1 and ?$::SQLITE_MAX_VARIABLE_NUMBER}" |
792 do_test sqllimits1-13.2 { | 819 do_test sqllimits1-13.2 { |
793 set max $::SQLITE_MAX_VARIABLE_NUMBER | 820 set max $::SQLITE_MAX_VARIABLE_NUMBER |
794 set vals [list] | 821 set vals [list] |
795 for {set i 0} {$i < ($max+3)} {incr i} { | 822 for {set i 0} {$i < ($max+3)} {incr i} { |
796 lappend vals ? | 823 lappend vals ? |
797 } | 824 } |
798 catchsql "SELECT [join $vals ,] FROM t1" | 825 catchsql "SELECT [join $vals ,] FROM t1" |
799 } "1 {too many SQL variables}" | 826 } "1 {too many SQL variables}" |
800 | 827 |
801 | 828 |
802 #-------------------------------------------------------------------- | 829 #-------------------------------------------------------------------- |
803 # Test cases sqllimits1-15.* verify that the | 830 # Test cases sqllimits1-15.* verify that the |
804 # SQLITE_MAX_LIKE_PATTERN_LENGTH limit is enforced. This limit only | 831 # SQLITE_MAX_LIKE_PATTERN_LENGTH limit is enforced. This limit only |
805 # applies to the built-in LIKE operator, supplying an external | 832 # applies to the built-in LIKE operator, supplying an external |
806 # implementation by overriding the like() scalar function bypasses | 833 # implementation by overriding the like() scalar function bypasses |
807 # this limitation. | 834 # this limitation. |
808 # | 835 # |
| 836 # EVIDENCE-OF: R-12940-37052 SQLITE_LIMIT_LIKE_PATTERN_LENGTH The |
| 837 # maximum length of the pattern argument to the LIKE or GLOB operators. |
| 838 # |
809 # These tests check that the limit is not incorrectly applied to | 839 # These tests check that the limit is not incorrectly applied to |
810 # the left-hand-side of the LIKE operator (the string being tested | 840 # the left-hand-side of the LIKE operator (the string being tested |
811 # against the pattern). | 841 # against the pattern). |
812 # | 842 # |
813 set SQLITE_LIMIT_LIKE_PATTERN 1000 | 843 set SQLITE_LIMIT_LIKE_PATTERN 1000 |
814 sqlite3_limit db SQLITE_LIMIT_LIKE_PATTERN_LENGTH $SQLITE_LIMIT_LIKE_PATTERN | 844 sqlite3_limit db SQLITE_LIMIT_LIKE_PATTERN_LENGTH $SQLITE_LIMIT_LIKE_PATTERN |
815 do_test sqllimits1-15.1 { | 845 do_test sqllimits1-15.1 { |
816 set max $::SQLITE_LIMIT_LIKE_PATTERN | 846 set max $::SQLITE_LIMIT_LIKE_PATTERN |
817 set ::pattern [string repeat "A%" [expr $max/2]] | 847 set ::pattern [string repeat "A%" [expr $max/2]] |
818 set ::string [string repeat "A" [expr {$max*2}]] | 848 set ::string [string repeat "A" [expr {$max*2}]] |
(...skipping 18 matching lines...) Expand all Loading... |
837 set ::N [expr int(([expr pow(2,32)]/50) + 1)] | 867 set ::N [expr int(([expr pow(2,32)]/50) + 1)] |
838 expr (($::N*50) & 0xffffffff)<55 | 868 expr (($::N*50) & 0xffffffff)<55 |
839 } {1} | 869 } {1} |
840 do_test sqllimits1-16.2 { | 870 do_test sqllimits1-16.2 { |
841 set ::format "[string repeat A 60][string repeat "%J" $::N]" | 871 set ::format "[string repeat A 60][string repeat "%J" $::N]" |
842 catchsql { | 872 catchsql { |
843 SELECT strftime($::format, 1); | 873 SELECT strftime($::format, 1); |
844 } | 874 } |
845 } {1 {string or blob too big}} | 875 } {1 {string or blob too big}} |
846 | 876 |
| 877 do_catchsql_test sqllimits1.17.0 { |
| 878 SELECT *,*,*,*,*,*,*,* FROM ( |
| 879 SELECT *,*,*,*,*,*,*,* FROM ( |
| 880 SELECT *,*,*,*,*,*,*,* FROM ( |
| 881 SELECT *,*,*,*,*,*,*,* FROM ( |
| 882 SELECT *,*,*,*,*,*,*,* FROM ( |
| 883 SELECT 1,2,3,4,5,6,7,8,9,10 |
| 884 ) |
| 885 )))) |
| 886 } "1 {too many columns in result set}" |
| 887 |
847 | 888 |
848 foreach {key value} [array get saved] { | 889 foreach {key value} [array get saved] { |
849 catch {set $key $value} | 890 catch {set $key $value} |
850 } | 891 } |
851 finish_test | 892 finish_test |
OLD | NEW |