mirror of https://github.com/sqlite/sqlite
Move the sqlite_offset() function implementation to be an in-line function,
thereby avoiding special case code and freeing up a bit in the FuncDef.flags field. FossilOrigin-Name: 1c9812c458bd229c862efe5df1b64fae333da9871c8756b5ae4605a81bcda4b5
This commit is contained in:
parent
6ffa895884
commit
645682a7c7
18
manifest
18
manifest
|
@ -1,5 +1,5 @@
|
||||||
C Initial\sproof\sof\sconcept\scode\sfor\sa\sJavaScript\sbinding\swhich\sruns\sin\sthe\smain\swindow\sthread\sbut\sacts\son\sa\sdb\shandle\srunning\sin\sa\sWorker\sthread.\sExpanded\sthe\sDB.exec()\sand\sDB()\sconstructor\sto\ssimplify\scertain\suse\scases.
|
C Move\sthe\ssqlite_offset()\sfunction\simplementation\sto\sbe\san\sin-line\sfunction,\nthereby\savoiding\sspecial\scase\scode\sand\sfreeing\sup\sa\sbit\sin\sthe\nFuncDef.flags\sfield.
|
||||||
D 2022-06-01T08:09:06.176
|
D 2022-06-01T11:05:59.088
|
||||||
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
|
||||||
|
@ -521,10 +521,10 @@ F src/date.c 15082566229d4b1e5f24fdb490bf9bcc68824b911d70e3573ef075a1b9e2d26f
|
||||||
F src/dbpage.c 90661a87e1db8bfbc8d2ebbdcd3749651ddb287c555c07a28fb17c7c591ffb68
|
F src/dbpage.c 90661a87e1db8bfbc8d2ebbdcd3749651ddb287c555c07a28fb17c7c591ffb68
|
||||||
F src/dbstat.c 861e08690fcb0f2ee1165eff0060ea8d4f3e2ea10f80dab7d32ad70443a6ff2d
|
F src/dbstat.c 861e08690fcb0f2ee1165eff0060ea8d4f3e2ea10f80dab7d32ad70443a6ff2d
|
||||||
F src/delete.c a8e844af211a48b13b5b358be77a12c860c6a557c21990ad51a548e2536500ce
|
F src/delete.c a8e844af211a48b13b5b358be77a12c860c6a557c21990ad51a548e2536500ce
|
||||||
F src/expr.c 19507ae3244402860cac2944be3b92bf9a8b50212fbfabaf7e9817127fec7c00
|
F src/expr.c 67c0510697364c4f93aace305f47b229d7881fd11403fb0971ac8b27b3efef46
|
||||||
F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
|
F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
|
||||||
F src/fkey.c d965ede15d8360c09ed59348940649ee647b192e784466837d7aefa836d1d91e
|
F src/fkey.c d965ede15d8360c09ed59348940649ee647b192e784466837d7aefa836d1d91e
|
||||||
F src/func.c 41bf487f04d54e694baf84baacff7de621847fd7e89a35b776d5fb9ade772ff7
|
F src/func.c 8f72e88cccdee22185133c10f96ccd61dc34c5ea4b1fa9a73c237ef59b2e64f1
|
||||||
F src/global.c e83ee571b79ee3adc32e380cf554cf1254bc43763d23786c71721fbcdfbbb965
|
F src/global.c e83ee571b79ee3adc32e380cf554cf1254bc43763d23786c71721fbcdfbbb965
|
||||||
F src/hash.c 8d7dda241d0ebdafb6ffdeda3149a412d7df75102cecfc1021c98d6219823b19
|
F src/hash.c 8d7dda241d0ebdafb6ffdeda3149a412d7df75102cecfc1021c98d6219823b19
|
||||||
F src/hash.h 3340ab6e1d13e725571d7cee6d3e3135f0779a7d8e76a9ce0a85971fa3953c51
|
F src/hash.h 3340ab6e1d13e725571d7cee6d3e3135f0779a7d8e76a9ce0a85971fa3953c51
|
||||||
|
@ -575,7 +575,7 @@ F src/shell.c.in b76e681f9e441928d574f21f9473ef615158bbeab1ae49f05ecab9d81730a51
|
||||||
F src/sqlite.h.in 172528c287399a34f188154017b7268bf82c6d5b780902e361958d2318c4e37c
|
F src/sqlite.h.in 172528c287399a34f188154017b7268bf82c6d5b780902e361958d2318c4e37c
|
||||||
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
|
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
|
||||||
F src/sqlite3ext.h a988810c9b21c0dc36dc7a62735012339dc76fc7ab448fb0792721d30eacb69d
|
F src/sqlite3ext.h a988810c9b21c0dc36dc7a62735012339dc76fc7ab448fb0792721d30eacb69d
|
||||||
F src/sqliteInt.h 3064533677f135771e71843b5221482df18d6589afe65e6a7ef828ccb8879a5f
|
F src/sqliteInt.h bc88540ae44fa1a88c41b94bea247ff16709e95f0a81a1382a629e71f6b28426
|
||||||
F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657
|
F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657
|
||||||
F src/status.c 4a3da6d77eeb3531cb0dbdf7047772a2a1b99f98c69e90ce009c75fe6328b2c0
|
F src/status.c 4a3da6d77eeb3531cb0dbdf7047772a2a1b99f98c69e90ce009c75fe6328b2c0
|
||||||
F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
|
F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
|
||||||
|
@ -1974,8 +1974,8 @@ 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 f6d6f969791f0d2367ae5418623b4794f6df657d9d7d9002fb5aec4206dcfd4c
|
P d9efe3e92d1c95aee6f5ae37a8ba28d8cf4891d746744ce4aa2464f766821a0b
|
||||||
R 3e7544f3d688eef8add8c5291273a264
|
R 52cfcb84f807d4bfd299e794f93f33ab
|
||||||
U stephan
|
U drh
|
||||||
Z fea18e61d8da4eacf9dfc674d92c9514
|
Z 74e345d13b420413b02c8b365815c584
|
||||||
# Remove this line to create a well-formed Fossil manifest.
|
# Remove this line to create a well-formed Fossil manifest.
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
d9efe3e92d1c95aee6f5ae37a8ba28d8cf4891d746744ce4aa2464f766821a0b
|
1c9812c458bd229c862efe5df1b64fae333da9871c8756b5ae4605a81bcda4b5
|
26
src/expr.c
26
src/expr.c
|
@ -3955,7 +3955,15 @@ static int exprCodeInlineFunction(
|
||||||
caseExpr.x.pList = pFarg;
|
caseExpr.x.pList = pFarg;
|
||||||
return sqlite3ExprCodeTarget(pParse, &caseExpr, target);
|
return sqlite3ExprCodeTarget(pParse, &caseExpr, target);
|
||||||
}
|
}
|
||||||
|
case INLINEFUNC_sqlite_offset: {
|
||||||
|
Expr *pArg = pFarg->a[0].pExpr;
|
||||||
|
if( pArg->op==TK_COLUMN && pArg->iTable>=0 ){
|
||||||
|
sqlite3VdbeAddOp3(v, OP_Offset, pArg->iTable, pArg->iColumn, target);
|
||||||
|
}else{
|
||||||
|
sqlite3VdbeAddOp2(v, OP_Null, 0, target);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
default: {
|
default: {
|
||||||
/* The UNLIKELY() function is a no-op. The result is the value
|
/* The UNLIKELY() function is a no-op. The result is the value
|
||||||
** of the first argument.
|
** of the first argument.
|
||||||
|
@ -4494,20 +4502,8 @@ expr_code_doover:
|
||||||
if( !pColl ) pColl = db->pDfltColl;
|
if( !pColl ) pColl = db->pDfltColl;
|
||||||
sqlite3VdbeAddOp4(v, OP_CollSeq, 0, 0, 0, (char *)pColl, P4_COLLSEQ);
|
sqlite3VdbeAddOp4(v, OP_CollSeq, 0, 0, 0, (char *)pColl, P4_COLLSEQ);
|
||||||
}
|
}
|
||||||
#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC
|
sqlite3VdbeAddFunctionCall(pParse, constMask, r1, target, nFarg,
|
||||||
if( (pDef->funcFlags & SQLITE_FUNC_OFFSET)!=0 && ALWAYS(pFarg!=0) ){
|
pDef, pExpr->op2);
|
||||||
Expr *pArg = pFarg->a[0].pExpr;
|
|
||||||
if( pArg->op==TK_COLUMN ){
|
|
||||||
sqlite3VdbeAddOp3(v, OP_Offset, pArg->iTable, pArg->iColumn, target);
|
|
||||||
}else{
|
|
||||||
sqlite3VdbeAddOp2(v, OP_Null, 0, target);
|
|
||||||
}
|
|
||||||
}else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
sqlite3VdbeAddFunctionCall(pParse, constMask, r1, target, nFarg,
|
|
||||||
pDef, pExpr->op2);
|
|
||||||
}
|
|
||||||
if( nFarg ){
|
if( nFarg ){
|
||||||
if( constMask==0 ){
|
if( constMask==0 ){
|
||||||
sqlite3ReleaseTempRange(pParse, r1, nFarg);
|
sqlite3ReleaseTempRange(pParse, r1, nFarg);
|
||||||
|
|
|
@ -2241,8 +2241,7 @@ void sqlite3RegisterBuiltinFunctions(void){
|
||||||
INLINE_FUNC(likelihood, 2, INLINEFUNC_unlikely, SQLITE_FUNC_UNLIKELY),
|
INLINE_FUNC(likelihood, 2, INLINEFUNC_unlikely, SQLITE_FUNC_UNLIKELY),
|
||||||
INLINE_FUNC(likely, 1, INLINEFUNC_unlikely, SQLITE_FUNC_UNLIKELY),
|
INLINE_FUNC(likely, 1, INLINEFUNC_unlikely, SQLITE_FUNC_UNLIKELY),
|
||||||
#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC
|
#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC
|
||||||
{1, SQLITE_FUNC_BUILTIN|SQLITE_UTF8|SQLITE_FUNC_OFFSET|SQLITE_FUNC_TYPEOF,
|
INLINE_FUNC(sqlite_offset, 1, INLINEFUNC_sqlite_offset, 0 ),
|
||||||
0, 0, noopFunc, 0, 0, 0, "sqlite_offset", {0} },
|
|
||||||
#endif
|
#endif
|
||||||
FUNCTION(ltrim, 1, 1, 0, trimFunc ),
|
FUNCTION(ltrim, 1, 1, 0, trimFunc ),
|
||||||
FUNCTION(ltrim, 2, 1, 0, trimFunc ),
|
FUNCTION(ltrim, 2, 1, 0, trimFunc ),
|
||||||
|
|
|
@ -1884,7 +1884,7 @@ struct FuncDestructor {
|
||||||
#define SQLITE_FUNC_SLOCHNG 0x2000 /* "Slow Change". Value constant during a
|
#define SQLITE_FUNC_SLOCHNG 0x2000 /* "Slow Change". Value constant during a
|
||||||
** single query - might change over time */
|
** single query - might change over time */
|
||||||
#define SQLITE_FUNC_TEST 0x4000 /* Built-in testing functions */
|
#define SQLITE_FUNC_TEST 0x4000 /* Built-in testing functions */
|
||||||
#define SQLITE_FUNC_OFFSET 0x8000 /* Built-in sqlite_offset() function */
|
/* 0x8000 -- available for reuse */
|
||||||
#define SQLITE_FUNC_WINDOW 0x00010000 /* Built-in window-only function */
|
#define SQLITE_FUNC_WINDOW 0x00010000 /* Built-in window-only function */
|
||||||
#define SQLITE_FUNC_INTERNAL 0x00040000 /* For use by NestedParse() only */
|
#define SQLITE_FUNC_INTERNAL 0x00040000 /* For use by NestedParse() only */
|
||||||
#define SQLITE_FUNC_DIRECT 0x00080000 /* Not for use in TRIGGERs or VIEWs */
|
#define SQLITE_FUNC_DIRECT 0x00080000 /* Not for use in TRIGGERs or VIEWs */
|
||||||
|
@ -1901,6 +1901,7 @@ struct FuncDestructor {
|
||||||
#define INLINEFUNC_expr_compare 3
|
#define INLINEFUNC_expr_compare 3
|
||||||
#define INLINEFUNC_affinity 4
|
#define INLINEFUNC_affinity 4
|
||||||
#define INLINEFUNC_iif 5
|
#define INLINEFUNC_iif 5
|
||||||
|
#define INLINEFUNC_sqlite_offset 6
|
||||||
#define INLINEFUNC_unlikely 99 /* Default case */
|
#define INLINEFUNC_unlikely 99 /* Default case */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue