mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-18 10:21:03 +03:00
Simplification of the WHERE loop code generator for NULLS LAST saves a
few CPU cycles and about a hundred bytes of code space. FossilOrigin-Name: e3ed2f496f51234a8f81d90d47ba603b06dbed38b8bd8f1934294379cde74d3a
This commit is contained in:
12
manifest
12
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Invert\sthe\smeaning\sof\sthe\sregBignull\sflag\sso\sthat\sit\sis\s1\swhen\sdoing\sthe\nnormal\sscan\sand\s1\swhen\sscanning\snulls.\s\sThis\senables\sthe\sre-do\sjump\sat\sthe\nbottom\sof\sthe\sloop\sto\sbe\scoded\swith\sa\ssingle\sOP_IfNotZero\sopcode,\srather\nthan\sa\ssequence\sof\sOP_If,\sOP_Integer,\sOP_Goto.
|
C Simplification\sof\sthe\sWHERE\sloop\scode\sgenerator\sfor\sNULLS\sLAST\ssaves\sa\nfew\sCPU\scycles\sand\sabout\sa\shundred\sbytes\sof\scode\sspace.
|
||||||
D 2019-08-23T13:32:03.306
|
D 2019-08-23T16:12:20.533
|
||||||
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
|
||||||
@@ -611,7 +611,7 @@ F src/wal.h 606292549f5a7be50b6227bd685fa76e3a4affad71bb8ac5ce4cb5c79f6a176a
|
|||||||
F src/walker.c d5a94907dcac990e31976be9dc769d17f6a806782593d6aec9d760ee01ec22cd
|
F src/walker.c d5a94907dcac990e31976be9dc769d17f6a806782593d6aec9d760ee01ec22cd
|
||||||
F src/where.c 10e21ac338582a4f87b2d09f09dd812c9bda0a0c4c456f54daeeee355afae733
|
F src/where.c 10e21ac338582a4f87b2d09f09dd812c9bda0a0c4c456f54daeeee355afae733
|
||||||
F src/whereInt.h 4a296fd4fa79fdcbc2b5e8c1b898901617655811223e1082b899c23ecb092217
|
F src/whereInt.h 4a296fd4fa79fdcbc2b5e8c1b898901617655811223e1082b899c23ecb092217
|
||||||
F src/wherecode.c c02ff23ea48b8980d003817bd412e3ce7ce4982159a090566a24cb6101688a9d
|
F src/wherecode.c f8ba85888b8a6843bce84e7e21f61d6c043c21c888871ad84fb911f45671e95d
|
||||||
F src/whereexpr.c 2757afbd5cfdbb420f9d0392e1bd5f5c0e33dee50a8c692befc7e502308e449f
|
F src/whereexpr.c 2757afbd5cfdbb420f9d0392e1bd5f5c0e33dee50a8c692befc7e502308e449f
|
||||||
F src/window.c 3ea716bb0dd5ffc8cdbaa48baffc525958b51bc61b2afd73a56baccfcd7ceb2f
|
F src/window.c 3ea716bb0dd5ffc8cdbaa48baffc525958b51bc61b2afd73a56baccfcd7ceb2f
|
||||||
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
||||||
@@ -1837,7 +1837,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 649b08ead50f10a9ec0357a5e1ed020195d9f93be61ef703ea036a8e53f07a34
|
P bf875e1a259a4167694e06349458452dc36c1d38aa6843518d9ae46ce74e5559
|
||||||
R c7fec8ea82d2ec3c4ef608bd58d88fd0
|
R f34508d6bf0c4c450df67caf81b0a3ce
|
||||||
U drh
|
U drh
|
||||||
Z 0dcd16d55adeefa06ece8236ed711d36
|
Z 77866c600215002b5dd6dd0eeafd861f
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
bf875e1a259a4167694e06349458452dc36c1d38aa6843518d9ae46ce74e5559
|
e3ed2f496f51234a8f81d90d47ba603b06dbed38b8bd8f1934294379cde74d3a
|
||||||
@@ -1671,10 +1671,10 @@ Bitmask sqlite3WhereCodeOneLoopStart(
|
|||||||
}
|
}
|
||||||
bSeekPastNull = 0;
|
bSeekPastNull = 0;
|
||||||
}else if( bSeekPastNull ){
|
}else if( bSeekPastNull ){
|
||||||
sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq);
|
|
||||||
nConstraint++;
|
|
||||||
startEq = 0;
|
startEq = 0;
|
||||||
|
sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq);
|
||||||
start_constraints = 1;
|
start_constraints = 1;
|
||||||
|
nConstraint++;
|
||||||
}else if( regBignull ){
|
}else if( regBignull ){
|
||||||
sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq);
|
sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq);
|
||||||
start_constraints = 1;
|
start_constraints = 1;
|
||||||
@@ -1705,30 +1705,20 @@ Bitmask sqlite3WhereCodeOneLoopStart(
|
|||||||
VdbeCoverageIf(v, op==OP_SeekLE); testcase( op==OP_SeekLE );
|
VdbeCoverageIf(v, op==OP_SeekLE); testcase( op==OP_SeekLE );
|
||||||
VdbeCoverageIf(v, op==OP_SeekLT); testcase( op==OP_SeekLT );
|
VdbeCoverageIf(v, op==OP_SeekLT); testcase( op==OP_SeekLT );
|
||||||
|
|
||||||
|
assert( bSeekPastNull==0 || bStopAtNull==0 );
|
||||||
if( regBignull ){
|
if( regBignull ){
|
||||||
|
assert( bSeekPastNull==1 || bStopAtNull==1 );
|
||||||
|
assert( bStopAtNull==startEq );
|
||||||
sqlite3VdbeAddOp2(v, OP_Goto, 0, sqlite3VdbeCurrentAddr(v)+2);
|
sqlite3VdbeAddOp2(v, OP_Goto, 0, sqlite3VdbeCurrentAddr(v)+2);
|
||||||
if( bStopAtNull ){
|
op = aStartOp[(nConstraint>1)*4 + 2 + bRev];
|
||||||
start_constraints = (nConstraint>1);
|
sqlite3VdbeAddOp4Int(v, op, iIdxCur, addrNxt, regBase,
|
||||||
op = aStartOp[(start_constraints<<2) + (startEq<<1) + bRev];
|
nConstraint-startEq);
|
||||||
sqlite3VdbeAddOp4Int(v, op, iIdxCur, addrNxt, regBase, nConstraint-1);
|
VdbeCoverage(v);
|
||||||
VdbeCoverage(v);
|
VdbeCoverageIf(v, op==OP_Rewind); testcase( op==OP_Rewind );
|
||||||
VdbeCoverageIf(v, op==OP_Rewind); testcase( op==OP_Rewind );
|
VdbeCoverageIf(v, op==OP_Last); testcase( op==OP_Last );
|
||||||
VdbeCoverageIf(v, op==OP_Last); testcase( op==OP_Last );
|
VdbeCoverageIf(v, op==OP_SeekGE); testcase( op==OP_SeekGE );
|
||||||
VdbeCoverageIf(v, op==OP_SeekGT); testcase( op==OP_SeekGT );
|
VdbeCoverageIf(v, op==OP_SeekLE); testcase( op==OP_SeekLE );
|
||||||
VdbeCoverageIf(v, op==OP_SeekGE); testcase( op==OP_SeekGE );
|
assert( op==OP_Rewind || op==OP_Last || op==OP_SeekGE || op==OP_SeekLE);
|
||||||
VdbeCoverageIf(v, op==OP_SeekLE); testcase( op==OP_SeekLE );
|
|
||||||
VdbeCoverageIf(v, op==OP_SeekLT); testcase( op==OP_SeekLT );
|
|
||||||
}else{
|
|
||||||
op = aStartOp[(start_constraints<<2) + ((!startEq)<<1) + bRev];
|
|
||||||
sqlite3VdbeAddOp4Int(v, op, iIdxCur, addrNxt, regBase, nConstraint);
|
|
||||||
VdbeCoverage(v);
|
|
||||||
VdbeCoverageIf(v, op==OP_Rewind); testcase( op==OP_Rewind );
|
|
||||||
VdbeCoverageIf(v, op==OP_Last); testcase( op==OP_Last );
|
|
||||||
VdbeCoverageIf(v, op==OP_SeekGT); testcase( op==OP_SeekGT );
|
|
||||||
VdbeCoverageIf(v, op==OP_SeekGE); testcase( op==OP_SeekGE );
|
|
||||||
VdbeCoverageIf(v, op==OP_SeekLE); testcase( op==OP_SeekLE );
|
|
||||||
VdbeCoverageIf(v, op==OP_SeekLT); testcase( op==OP_SeekLT );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user