mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-12 13:01:09 +03:00
Move the sqlite3LocateCollSeq(), sqlite3FindCollSeq(), and
sqlite3GetCollSeq() routines so that they are all beside one another in the callback.c source file. No logic changes. FossilOrigin-Name: 9ff80a9bf8fee776e2f282d0597215b77d48093ebc71d047ad1457da0582ddbc
This commit is contained in:
14
manifest
14
manifest
@@ -1,5 +1,5 @@
|
|||||||
C When\sflipping\s("commuting")\sa\scomparison\soperator,\sset\sthe\snew\sEP_Commuted\nbit\srather\sthan\sadding\sextra\sEP_Collate\sbits,\sto\ssingle\slater\sprocessing\sthat\nthe\sorder\sof\sprecedence\sfor\sCOLLATE\soperators\sis\sinverted.\nFix\sfor\sticket\s[b47e3627ecaadbde]
|
C Move\sthe\ssqlite3LocateCollSeq(),\ssqlite3FindCollSeq(),\sand\nsqlite3GetCollSeq()\sroutines\sso\sthat\sthey\sare\sall\sbeside\sone\sanother\sin\nthe\scallback.c\ssource\sfile.\s\sNo\slogic\schanges.
|
||||||
D 2019-10-22T00:03:41.431
|
D 2019-10-22T01:00:16.928
|
||||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||||
@@ -469,8 +469,8 @@ F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6
|
|||||||
F src/btree.c a8a9c2ce62bdf54c8cf9795143d7cb10b7473a1230a0572f702d061ffcceefe5
|
F src/btree.c a8a9c2ce62bdf54c8cf9795143d7cb10b7473a1230a0572f702d061ffcceefe5
|
||||||
F src/btree.h f27a33c49280209a93385e218306c4ee5f46ba8d7649d2f81a7166b282232484
|
F src/btree.h f27a33c49280209a93385e218306c4ee5f46ba8d7649d2f81a7166b282232484
|
||||||
F src/btreeInt.h 91806f01fd1145a9a86ba3042f25c38d8faf6002701bf5e780742cf88bcff437
|
F src/btreeInt.h 91806f01fd1145a9a86ba3042f25c38d8faf6002701bf5e780742cf88bcff437
|
||||||
F src/build.c 13de2fdabbabcf2e2aaf6443a049fb851d9d3170136c08345468e158ceea3dc6
|
F src/build.c 0e558ef847ccc4b6aa38dee44cde9d9df46e953b0a66e4fa4376265824955fe3
|
||||||
F src/callback.c 25dda5e1c2334a367b94a64077b1d06b2553369f616261ca6783c48bcb6bda73
|
F src/callback.c 88615dfc0a82167b65b452b4b305dbf86be77200b3343c6ffc6d03e92a01d181
|
||||||
F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
|
F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
|
||||||
F src/ctime.c 1b0724e66f95f33b160b1af85caaf9cceb325d22abf39bd24df4f54a73982251
|
F src/ctime.c 1b0724e66f95f33b160b1af85caaf9cceb325d22abf39bd24df4f54a73982251
|
||||||
F src/date.c e1d8ac7102f3f283e63e13867acb0efa33861cf34f0faf4cdbaf9fa7a1eb7041
|
F src/date.c e1d8ac7102f3f283e63e13867acb0efa33861cf34f0faf4cdbaf9fa7a1eb7041
|
||||||
@@ -1847,7 +1847,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
|||||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P cd2317d04c1c4bcf5fe63aa02a6051bdfae8f5566a098e3f45bf9ec1dd0c3ea6
|
P 90f7c477354d67d22d5eb0da22dac579f384ab44743fdc19887220e32203ebc2
|
||||||
R 3a3c136ff4c96296b02b1f2633ff663b
|
R 3a6f62c10243ee61b28a93dbeca6af23
|
||||||
U drh
|
U drh
|
||||||
Z 20a6808e6237368aa12eb5e4f5b30bb2
|
Z 533045e8c1f04d69c5fc59655d97ca67
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
90f7c477354d67d22d5eb0da22dac579f384ab44743fdc19887220e32203ebc2
|
9ff80a9bf8fee776e2f282d0597215b77d48093ebc71d047ad1457da0582ddbc
|
||||||
35
src/build.c
35
src/build.c
@@ -1520,41 +1520,6 @@ void sqlite3AddCollateType(Parse *pParse, Token *pToken){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
** This function returns the collation sequence for database native text
|
|
||||||
** encoding identified by the string zName, length nName.
|
|
||||||
**
|
|
||||||
** If the requested collation sequence is not available, or not available
|
|
||||||
** in the database native encoding, the collation factory is invoked to
|
|
||||||
** request it. If the collation factory does not supply such a sequence,
|
|
||||||
** and the sequence is available in another text encoding, then that is
|
|
||||||
** returned instead.
|
|
||||||
**
|
|
||||||
** If no versions of the requested collations sequence are available, or
|
|
||||||
** another error occurs, NULL is returned and an error message written into
|
|
||||||
** pParse.
|
|
||||||
**
|
|
||||||
** This routine is a wrapper around sqlite3FindCollSeq(). This routine
|
|
||||||
** invokes the collation factory if the named collation cannot be found
|
|
||||||
** and generates an error message.
|
|
||||||
**
|
|
||||||
** See also: sqlite3FindCollSeq(), sqlite3GetCollSeq()
|
|
||||||
*/
|
|
||||||
CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char *zName){
|
|
||||||
sqlite3 *db = pParse->db;
|
|
||||||
u8 enc = ENC(db);
|
|
||||||
u8 initbusy = db->init.busy;
|
|
||||||
CollSeq *pColl;
|
|
||||||
|
|
||||||
pColl = sqlite3FindCollSeq(db, enc, zName, initbusy);
|
|
||||||
if( !initbusy && (!pColl || !pColl->xCmp) ){
|
|
||||||
pColl = sqlite3GetCollSeq(pParse, enc, pColl, zName);
|
|
||||||
}
|
|
||||||
|
|
||||||
return pColl;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Generate code that will increment the schema cookie.
|
** Generate code that will increment the schema cookie.
|
||||||
**
|
**
|
||||||
|
|||||||
132
src/callback.c
132
src/callback.c
@@ -65,51 +65,6 @@ static int synthCollSeq(sqlite3 *db, CollSeq *pColl){
|
|||||||
return SQLITE_ERROR;
|
return SQLITE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
** This function is responsible for invoking the collation factory callback
|
|
||||||
** or substituting a collation sequence of a different encoding when the
|
|
||||||
** requested collation sequence is not available in the desired encoding.
|
|
||||||
**
|
|
||||||
** If it is not NULL, then pColl must point to the database native encoding
|
|
||||||
** collation sequence with name zName, length nName.
|
|
||||||
**
|
|
||||||
** The return value is either the collation sequence to be used in database
|
|
||||||
** db for collation type name zName, length nName, or NULL, if no collation
|
|
||||||
** sequence can be found. If no collation is found, leave an error message.
|
|
||||||
**
|
|
||||||
** See also: sqlite3LocateCollSeq(), sqlite3FindCollSeq()
|
|
||||||
*/
|
|
||||||
CollSeq *sqlite3GetCollSeq(
|
|
||||||
Parse *pParse, /* Parsing context */
|
|
||||||
u8 enc, /* The desired encoding for the collating sequence */
|
|
||||||
CollSeq *pColl, /* Collating sequence with native encoding, or NULL */
|
|
||||||
const char *zName /* Collating sequence name */
|
|
||||||
){
|
|
||||||
CollSeq *p;
|
|
||||||
sqlite3 *db = pParse->db;
|
|
||||||
|
|
||||||
p = pColl;
|
|
||||||
if( !p ){
|
|
||||||
p = sqlite3FindCollSeq(db, enc, zName, 0);
|
|
||||||
}
|
|
||||||
if( !p || !p->xCmp ){
|
|
||||||
/* No collation sequence of this type for this encoding is registered.
|
|
||||||
** Call the collation factory to see if it can supply us with one.
|
|
||||||
*/
|
|
||||||
callCollNeeded(db, enc, zName);
|
|
||||||
p = sqlite3FindCollSeq(db, enc, zName, 0);
|
|
||||||
}
|
|
||||||
if( p && !p->xCmp && synthCollSeq(db, p) ){
|
|
||||||
p = 0;
|
|
||||||
}
|
|
||||||
assert( !p || p->xCmp );
|
|
||||||
if( p==0 ){
|
|
||||||
sqlite3ErrorMsg(pParse, "no such collation sequence: %s", zName);
|
|
||||||
pParse->rc = SQLITE_ERROR_MISSING_COLLSEQ;
|
|
||||||
}
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** This routine is called on a collation sequence before it is used to
|
** This routine is called on a collation sequence before it is used to
|
||||||
** check that it is defined. An undefined collation sequence exists when
|
** check that it is defined. An undefined collation sequence exists when
|
||||||
@@ -202,10 +157,10 @@ static CollSeq *findCollSeqEntry(
|
|||||||
** See also: sqlite3LocateCollSeq(), sqlite3GetCollSeq()
|
** See also: sqlite3LocateCollSeq(), sqlite3GetCollSeq()
|
||||||
*/
|
*/
|
||||||
CollSeq *sqlite3FindCollSeq(
|
CollSeq *sqlite3FindCollSeq(
|
||||||
sqlite3 *db,
|
sqlite3 *db, /* Database connection to search */
|
||||||
u8 enc,
|
u8 enc, /* Desired text encoding */
|
||||||
const char *zName,
|
const char *zName, /* Name of the collating sequence. Might be NULL */
|
||||||
int create
|
int create /* True to create CollSeq if doesn't already exist */
|
||||||
){
|
){
|
||||||
CollSeq *pColl;
|
CollSeq *pColl;
|
||||||
if( zName ){
|
if( zName ){
|
||||||
@@ -219,6 +174,85 @@ CollSeq *sqlite3FindCollSeq(
|
|||||||
return pColl;
|
return pColl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** This function is responsible for invoking the collation factory callback
|
||||||
|
** or substituting a collation sequence of a different encoding when the
|
||||||
|
** requested collation sequence is not available in the desired encoding.
|
||||||
|
**
|
||||||
|
** If it is not NULL, then pColl must point to the database native encoding
|
||||||
|
** collation sequence with name zName, length nName.
|
||||||
|
**
|
||||||
|
** The return value is either the collation sequence to be used in database
|
||||||
|
** db for collation type name zName, length nName, or NULL, if no collation
|
||||||
|
** sequence can be found. If no collation is found, leave an error message.
|
||||||
|
**
|
||||||
|
** See also: sqlite3LocateCollSeq(), sqlite3FindCollSeq()
|
||||||
|
*/
|
||||||
|
CollSeq *sqlite3GetCollSeq(
|
||||||
|
Parse *pParse, /* Parsing context */
|
||||||
|
u8 enc, /* The desired encoding for the collating sequence */
|
||||||
|
CollSeq *pColl, /* Collating sequence with native encoding, or NULL */
|
||||||
|
const char *zName /* Collating sequence name */
|
||||||
|
){
|
||||||
|
CollSeq *p;
|
||||||
|
sqlite3 *db = pParse->db;
|
||||||
|
|
||||||
|
p = pColl;
|
||||||
|
if( !p ){
|
||||||
|
p = sqlite3FindCollSeq(db, enc, zName, 0);
|
||||||
|
}
|
||||||
|
if( !p || !p->xCmp ){
|
||||||
|
/* No collation sequence of this type for this encoding is registered.
|
||||||
|
** Call the collation factory to see if it can supply us with one.
|
||||||
|
*/
|
||||||
|
callCollNeeded(db, enc, zName);
|
||||||
|
p = sqlite3FindCollSeq(db, enc, zName, 0);
|
||||||
|
}
|
||||||
|
if( p && !p->xCmp && synthCollSeq(db, p) ){
|
||||||
|
p = 0;
|
||||||
|
}
|
||||||
|
assert( !p || p->xCmp );
|
||||||
|
if( p==0 ){
|
||||||
|
sqlite3ErrorMsg(pParse, "no such collation sequence: %s", zName);
|
||||||
|
pParse->rc = SQLITE_ERROR_MISSING_COLLSEQ;
|
||||||
|
}
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** This function returns the collation sequence for database native text
|
||||||
|
** encoding identified by the string zName.
|
||||||
|
**
|
||||||
|
** If the requested collation sequence is not available, or not available
|
||||||
|
** in the database native encoding, the collation factory is invoked to
|
||||||
|
** request it. If the collation factory does not supply such a sequence,
|
||||||
|
** and the sequence is available in another text encoding, then that is
|
||||||
|
** returned instead.
|
||||||
|
**
|
||||||
|
** If no versions of the requested collations sequence are available, or
|
||||||
|
** another error occurs, NULL is returned and an error message written into
|
||||||
|
** pParse.
|
||||||
|
**
|
||||||
|
** This routine is a wrapper around sqlite3FindCollSeq(). This routine
|
||||||
|
** invokes the collation factory if the named collation cannot be found
|
||||||
|
** and generates an error message.
|
||||||
|
**
|
||||||
|
** See also: sqlite3FindCollSeq(), sqlite3GetCollSeq()
|
||||||
|
*/
|
||||||
|
CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char *zName){
|
||||||
|
sqlite3 *db = pParse->db;
|
||||||
|
u8 enc = ENC(db);
|
||||||
|
u8 initbusy = db->init.busy;
|
||||||
|
CollSeq *pColl;
|
||||||
|
|
||||||
|
pColl = sqlite3FindCollSeq(db, enc, zName, initbusy);
|
||||||
|
if( !initbusy && (!pColl || !pColl->xCmp) ){
|
||||||
|
pColl = sqlite3GetCollSeq(pParse, enc, pColl, zName);
|
||||||
|
}
|
||||||
|
|
||||||
|
return pColl;
|
||||||
|
}
|
||||||
|
|
||||||
/* During the search for the best function definition, this procedure
|
/* During the search for the best function definition, this procedure
|
||||||
** is called to test how well the function passed as the first argument
|
** is called to test how well the function passed as the first argument
|
||||||
** matches the request for a function with nArg arguments in a system
|
** matches the request for a function with nArg arguments in a system
|
||||||
|
|||||||
Reference in New Issue
Block a user