In the CREATE INDEX statements output by schemalint.tcl, avoid declaring an explicit collation sequence that is the same as the column's default.

FossilOrigin-Name: d3aa067c830e98f2074630c4613c557b0ce90a57
This commit is contained in:
dan
2015-11-23 18:28:07 +00:00
parent 09c480aba1
commit 323f7d3fc6
3 changed files with 59 additions and 32 deletions
+6 -6
View File
@@ -1,5 +1,5 @@
C Merge\slatest\strunk\schanges\swith\sthis\sbranch.
D 2015-11-23T17:14:03.947
C In\sthe\sCREATE\sINDEX\sstatements\soutput\sby\sschemalint.tcl,\savoid\sdeclaring\san\sexplicit\scollation\ssequence\sthat\sis\sthe\ssame\sas\sthe\scolumn's\sdefault.
D 2015-11-23T18:28:07.584
F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
F Makefile.msc e928e68168df69b353300ac87c10105206653a03
@@ -1381,7 +1381,7 @@ F tool/replace.tcl 7727c60a04299b65a92f5e1590896fea0f25b9e0
F tool/restore_jrnl.tcl 6957a34f8f1f0f8285e07536225ec3b292a9024a
F tool/rollback-test.c 9fc98427d1e23e84429d7e6d07d9094fbdec65a5
F tool/run-speed-test.sh 0ae485af4fe9f826e2b494be8c81f8ca9e222a4a
F tool/schemalint.tcl e49c9b25c8c43f0531eca96edaf85ce8bd7f308b
F tool/schemalint.tcl ad61083d39cb40e848b9acc1273e4c487bb55cd7
F tool/showdb.c d4476e000a64eca9f5e2c2f68741e747b9778e8d
F tool/showjournal.c 5bad7ae8784a43d2b270d953060423b8bd480818
F tool/showlocks.c 9920bcc64f58378ff1118caead34147201f48c68
@@ -1406,7 +1406,7 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
P b8f277c9b45c4b30e6690e838a30311aa8d84876 60de5f23424552c98aa760ac89149a3d51f895be
R 00875769a91e68d074e499acf18a7d59
P 8f1ef0904d055b5510ec9043810ebf22a8c5e253
R 4b9b445c1607ad5c9f9bdcf33b4eb416
U dan
Z 5eb820ab8a7550b698dcf8a7d000e044
Z 6d9149db2c512107280c4e32c490b8cb
+1 -1
View File
@@ -1 +1 @@
8f1ef0904d055b5510ec9043810ebf22a8c5e253
d3aa067c830e98f2074630c4613c557b0ce90a57
+52 -25
View File
@@ -124,32 +124,33 @@ proc expand_eq_list {L} {
#--------------------------------------------------------------------------
# Formulate a CREATE INDEX statement that creates an index on table $tname.
#
proc eqset_to_index {ctxvar tname eqset {range {}}} {
proc eqset_to_index {ctxvar aCollVar tname eqset {range {}}} {
upvar $ctxvar G
upvar $aCollVar aColl
set rangeset [list]
foreach e [lsort $eqset] {
lappend rangeset [lindex $e 0] [lindex $e 1] ASC
}
set rangeset [concat $rangeset $range]
set lCols [list]
set idxname $tname
foreach e [lsort $eqset] {
if {[llength $e]==0} continue
foreach {c collate} $e {}
lappend lCols "$c collate $collate"
append idxname "_$c"
if {[string compare -nocase binary $collate]!=0} {
append idxname [string tolower $collate]
}
}
foreach {c collate dir} $range {
foreach {c collate dir} $rangeset {
append idxname "_$c"
if {[string compare -nocase binary $collate]!=0} {
set coldef $c
if {[string compare -nocase $collate $aColl($c)]!=0} {
append idxname [string tolower $collate]
append coldef " COLLATE $collate"
}
if {$dir=="DESC"} {
lappend lCols "$c collate $collate DESC"
append coldef " DESC"
append idxname "desc"
} else {
lappend lCols "$c collate $collate"
}
lappend lCols $coldef
}
set create_index "CREATE INDEX $idxname ON ${tname}("
@@ -184,12 +185,30 @@ proc expand_or_cons {L} {
return $lRet
}
proc sqlidx_get_coll_map {tname arrayvar} {
upvar $arrayvar aColl
set colnames [list]
db eval "PRAGMA table_info = $tname" x { lappend colnames $x(name) }
db eval "CREATE INDEX schemalint_test ON ${tname}([join $colnames ,])"
db eval "PRAGMA index_xinfo = schemalint_test" x {
set aColl($x(name)) $x(coll)
}
db eval "DROP INDEX schemalint_test"
}
proc find_trial_indexes {ctxvar} {
upvar $ctxvar G
foreach t $G(trace) {
set tname [lindex $t 0]
catch { array unset mask }
# Invoke "PRAGMA table_info" on the table. Use the results to create
# an array mapping from column name to collation sequence. Store the
# array in local variable aColl.
#
sqlidx_get_coll_map $tname aColl
set orderby [list]
if {[lindex $t end 0]=="orderby"} {
set orderby [lrange [lindex $t end] 1 end]
@@ -258,7 +277,7 @@ proc find_trial_indexes {ctxvar} {
foreach eqset [expand_eq_list [array get eq]] {
if {$eqset != ""} {
eqset_to_index G $tname $eqset
eqset_to_index G aColl $tname $eqset
}
foreach r $ranges {
@@ -274,7 +293,7 @@ proc find_trial_indexes {ctxvar} {
if {$bSeen==0} { lappend tail {*}$r }
}
if {[llength $tail]} {
eqset_to_index G $tname $eqset $r
eqset_to_index G aColl $tname $eqset $r
}
}
}
@@ -361,8 +380,8 @@ proc sqlidx_internal_tests {} {
} {
SELECT a FROM t1, t2 WHERE a=? AND x=c
} {
{CREATE INDEX t2_x ON t2(x collate BINARY);}
{CREATE INDEX t1_a_c ON t1(a collate BINARY, c collate BINARY);}
{CREATE INDEX t2_x ON t2(x);}
{CREATE INDEX t1_a_c ON t1(a, c);}
}
sqlidx_one_test 2 {
@@ -370,7 +389,7 @@ proc sqlidx_internal_tests {} {
} {
SELECT * FROM t1 WHERE b>?;
} {
{CREATE INDEX t1_b ON t1(b collate BINARY);}
{CREATE INDEX t1_b ON t1(b);}
}
sqlidx_one_test 3 {
@@ -378,7 +397,7 @@ proc sqlidx_internal_tests {} {
} {
SELECT * FROM t1 WHERE b COLLATE nocase BETWEEN ? AND ?
} {
{CREATE INDEX t1_bnocase ON t1(b collate NOCASE);}
{CREATE INDEX t1_bnocase ON t1(b COLLATE NOCASE);}
}
sqlidx_one_test 4 {
@@ -386,7 +405,7 @@ proc sqlidx_internal_tests {} {
} {
SELECT a FROM t1 ORDER BY b;
} {
{CREATE INDEX t1_b ON t1(b collate BINARY);}
{CREATE INDEX t1_b ON t1(b);}
}
sqlidx_one_test 5 {
@@ -394,7 +413,7 @@ proc sqlidx_internal_tests {} {
} {
SELECT a FROM t1 WHERE a=? ORDER BY b;
} {
{CREATE INDEX t1_a_b ON t1(a collate BINARY, b collate BINARY);}
{CREATE INDEX t1_a_b ON t1(a, b);}
}
sqlidx_one_test 5 {
@@ -402,7 +421,7 @@ proc sqlidx_internal_tests {} {
} {
SELECT min(a) FROM t1
} {
{CREATE INDEX t1_a ON t1(a collate BINARY);}
{CREATE INDEX t1_a ON t1(a);}
}
sqlidx_one_test 6 {
@@ -410,7 +429,15 @@ proc sqlidx_internal_tests {} {
} {
SELECT * FROM t1 ORDER BY a ASC, b COLLATE nocase DESC, c ASC;
} {
{CREATE INDEX t1_a_bnocasedesc_c ON t1(a collate BINARY, b collate NOCASE DESC, c collate BINARY);}
{CREATE INDEX t1_a_bnocasedesc_c ON t1(a, b COLLATE NOCASE DESC, c);}
}
sqlidx_one_test 7 {
CREATE TABLE t1(a COLLATE NOCase, b, c);
} {
SELECT * FROM t1 WHERE a=?
} {
{CREATE INDEX t1_a ON t1(a);}
}
exit