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:
@@ -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
@@ -1 +1 @@
|
||||
8f1ef0904d055b5510ec9043810ebf22a8c5e253
|
||||
d3aa067c830e98f2074630c4613c557b0ce90a57
|
||||
+52
-25
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user