-C Fix\sa\sproblem\swith\sSQLITE_CHANGESET_CONFLICT\sconflicts\scaused\sby\sDELETE\striggers\swithin\sa\scall\sto\ssqlite3changset_apply_v2()\swith\sSQLITE_CHANGESETAPPLY_IGNORENOOP\sspecified.
-D 2025-08-20T11:21:35.942
+C Avoid\sreturning\sSQLITE_ERROR_RETRY\sif\scollation\ssequences\sassociated\swith\sthe\stable's\sPK\scannot\sbe\sfound\swhen\screating\san\sindex.\sPossible\sfix\sfor\s[forum:aa61ab56ad\s|\sforum\spost\saa61ab56ad].
+D 2025-08-20T15:42:23.331
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F src/btree.c cb5b8ceb9baa02a63a2f83dec09c4153e1cfbdf9c2adef5c62c26d2160eeb067
F src/btree.h e823c46d87f63d904d735a24b76146d19f51f04445ea561f71cc3382fd1307f0
F src/btreeInt.h 9c0f9ea5c9b5f4dcaea18111d43efe95f2ac276cd86d770dce10fd99ccc93886
-F src/build.c 7cbb216c7ff51b321a9767d78d510d1ee5b82642aa3a29f59a3e5c415462eb77
+F src/build.c 213a9d24c931ef4694564894cda8dac8dbeb1519d428fd2d7ae622ac357c05a5
F src/callback.c acae8c8dddda41ee85cfdf19b926eefe830f371069f8aadca3aa39adf5b1c859
F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
F src/date.c 9db4d604e699a73e10b8e85a44db074a1f04c0591a77e2abfd77703f50dce1e9
F src/json.c cb87977b1ee25ee7d27505d65a9261b687395bf895342c8ba566b7c01aee2047
F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa
F src/loadext.c d7edd8e671237539d795d30daaf888908a2c82e99bade4c78f3be021e8b7d655
-F src/main.c eb46066bf2f0bec2dd89229572de5a9c479c47da134e2422e7a0056e9510cbee
+F src/main.c 458e79da86c957a094c1c256136af43e7dfec2c58475ee9cbbda4dc202005021
F src/malloc.c 410e570b30c26cc36e3372577df50f7a96ee3eed5b2b161c6b6b48773c650c5e
F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
F src/mem1.c 3bb59158c38e05f6270e761a9f435bf19827a264c13d1631c58b84bdc96d73b2
F test/without_rowid4.test 4e08bcbaee0399f35d58b5581881e7a6243d458a
F test/without_rowid5.test f14298eb5ac8013894b75141c3f4f5f325a6ad0eded55516eef72c49e60a67cb
F test/without_rowid6.test efbd7add62c59bf5ca97bf8da674e734e6a70ef979234e816166824b4d258f68
-F test/without_rowid7.test d7c59a93d726b55812d620f8f284e01904a5b85f9ee9eea8f2f68571a5e8c40e
+F test/without_rowid7.test 747d3fbef7108d416d6416694b03d8ff046dc9cc82b3d911715feb472444b95a
F test/wordcount.c d721a4b6fae93e6e33449700bce1686bc23257c27425bc3ef1599dc912adec66
F test/writecrash.test 13520af28f376bfc8c0bcd130efc1fff20bb165198e8b94cf153f1f754154bb9
F test/zeroblob.test 7b74cefc7b281dfa2b07cd237987fbe94b4a2037a7771e9e83f2d5f608b1d99e
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 7d13e8e403ba00d37b950caa359d74452319247495284d252efa6473bad15b64
-R ae093d0946efac31f01b7b9bdaa4b770
+P 138e2aab43ac07aaf8c5389105ff6d3e107ff2d35badcb48233664fcb9661471
+R 9e5c7e81644c35679b2a0a46b53e72da
+T *branch * create-index-error-retry-fix
+T *sym-create-index-error-retry-fix *
+T -sym-trunk *
U dan
-Z 7b86a84e6c2cd643602bc41c4f1ab398
+Z 19b61eb0eb1df6f2f14da4dd841ac729
# Remove this line to create a well-formed Fossil manifest.
-138e2aab43ac07aaf8c5389105ff6d3e107ff2d35badcb48233664fcb9661471
+ac649e5b9ca9b8f7729defa8d646df8c0cb57977a5eedcfa2cf1147d109a17f1
}
if( pParse->nErr ){
assert( pParse->rc==SQLITE_ERROR_MISSING_COLLSEQ );
- if( pIdx->bNoQuery==0 ){
+ if( pIdx->bNoQuery==0
+ && sqlite3HashFind(&pIdx->pSchema->idxHash, pIdx->zName)
+ ){
/* Deactivate the index because it contains an unknown collating
** sequence. The only way to reactive the index is to reload the
** schema. Adding the missing collating sequence later does not
** reactive the index. The application had the chance to register
** the missing index using the collation-needed callback. For
** simplicity, SQLite will not give the application a second chance.
- */
+ **
+ ** Except, do not do this if the index is not in the schema hash
+ ** table. In this case the index is currently being constructed
+ ** by a CREATE INDEX statement, and retrying will not help. */
pIdx->bNoQuery = 1;
pParse->rc = SQLITE_ERROR_RETRY;
}
case SQLITE_OK: zName = "SQLITE_OK"; break;
case SQLITE_ERROR: zName = "SQLITE_ERROR"; break;
case SQLITE_ERROR_SNAPSHOT: zName = "SQLITE_ERROR_SNAPSHOT"; break;
+ case SQLITE_ERROR_RETRY: zName = "SQLITE_ERROR_RETRY"; break;
+ case SQLITE_ERROR_MISSING_COLLSEQ:
+ zName = "SQLITE_ERROR_MISSING_COLLSEQ"; break;
case SQLITE_INTERNAL: zName = "SQLITE_INTERNAL"; break;
case SQLITE_PERM: zName = "SQLITE_PERM"; break;
case SQLITE_ABORT: zName = "SQLITE_ABORT"; break;
PRAGMA index_info(t3);
} {}
+#-------------------------------------------------------------------------
+reset_db
+db collate mysort mysort
+db collate mysort2 mysort
+proc mysort {a b} { string compare $a $b }
+do_execsql_test 3.0 {
+ CREATE TABLE t1(
+ a PRIMARY KEY COLLATE mysort, b COLLATE mysort2
+ ) WITHOUT ROWID;
+ INSERT INTO t1 VALUES(1, 2);
+}
+
+db close
+sqlite3 db test.db
+
+do_catchsql_test 3.1.1 {
+ SELECT * FROM t1 WHERE a=1;
+} {1 {no such collation sequence: mysort}}
+do_test 3.1.2 {
+ sqlite3_extended_errcode db
+} {SQLITE_ERROR_MISSING_COLLSEQ}
+
+db collate mysort mysort
+
+do_catchsql_test 3.2.1 {
+ CREATE UNIQUE INDEX i1 ON t1(b);
+} {1 {no such collation sequence: mysort2}}
+do_test 3.2.2 {
+ sqlite3_extended_errcode db
+} {SQLITE_ERROR_MISSING_COLLSEQ}
+
+db close
+sqlite3 db test.db
+
+do_catchsql_test 3.3.1 {
+ CREATE UNIQUE INDEX i1 ON t1(1);
+} {1 {no such collation sequence: mysort}}
+do_test 3.3.2 {
+ sqlite3_extended_errcode db
+} {SQLITE_ERROR_MISSING_COLLSEQ}
+
+do_test 3.4.1 {
+ list [catch {
+ sqlite3_prepare_v3 db "CREATE UNIQUE INDEX i1 ON t1(1)" -1 0
+ } msg] $msg
+} {1 {(1) no such collation sequence: mysort}}
+do_test 3.4.2 {
+ sqlite3_extended_errcode db
+} {SQLITE_ERROR_MISSING_COLLSEQ}
+
+sqlite3_extended_result_codes db 1
+
+do_test 3.5.1 {
+ list [catch {
+ sqlite3_prepare_v3 db "CREATE UNIQUE INDEX i1 ON t1(1)" -1 0
+ } msg] $msg
+} {1 {(257) no such collation sequence: mysort}}
+do_test 3.5.2 {
+ sqlite3_extended_errcode db
+} {SQLITE_ERROR_MISSING_COLLSEQ}
+do_catchsql_test 3.6 {
+ SELECT * FROM t1 WHERE a=1;
+} {1 {no such collation sequence: mysort}}
finish_test