Update this branch with changes from trunk.
FossilOrigin-Name: 53b8b507a10364f5d580655d89c950a5f14c2a8114625fd8749d77f289413b22
This commit is contained in:
commit
42d7a77b61
15
manifest
15
manifest
@ -1,20 +1,25 @@
|
||||
B 5ee3c27e20d12a126fb773b428bb864102b949a5b26a8d5c523753dcedf4be10
|
||||
C Support\sUPDATE...FROM\sstatements\sin\strigger\sprograms.
|
||||
D 2020-07-14T19:51:01.128
|
||||
C Update\sthis\sbranch\swith\schanges\sfrom\strunk.
|
||||
D 2020-07-15T11:00:29.883
|
||||
F src/alter.c c63fb72ae0ca39175996fcf7008d44022a7ea99e03c0af3e1d968505ceff7120
|
||||
F src/attach.c 0b11e00c166b622c84ec176773b1d691c61ad07d247809e3e1635d4e99e71d30
|
||||
F src/btree.c b8b0e80c8bbe4e1fb35ae559e9e9aa009799c20cf12f159ebb503b05be1fab9b
|
||||
F src/parse.y ecb9abdd79ec86c8dca7cb126bbdcf322c0e282f87a6d0d734ea5f2c57ced516
|
||||
F src/resolve.c 04f4710d3ab0070073b60b5b963158dadfbd049db55d10742d9fbd3f28a3f4b8
|
||||
F src/select.c a48570f614f777d02dd7f419789944225432a9231b2dbca863411ac19e5fb683
|
||||
F src/sqliteInt.h 9b73bd726b935568f081d2d77443102f663dbcef872eea4e7fbf56e697f3b53c
|
||||
F src/trigger.c 6ff9c64a06e6354df8eba08ae18bc809e79931175d39dda32bf1101adee238e5
|
||||
F src/update.c ab137d08171e2bb18a4c6af815bbd6dbe8bfb483ddd7a2b97dfbfb4d95906ee0
|
||||
F src/where.c 35cb38d45294118e484fd3a8011aaee8ebe96b28855a6913575a7fe3722d7af5
|
||||
F test/altertab3.test d0d51e652aaa11e37de1f1215181d88334fefcb185f3b9bd91e06e98260c4694
|
||||
F test/decimal.test fcf403fd5585f47342234e153c4a4338cd737b8e0884ac66fc484df47dbcf1a7
|
||||
F test/fts4upfrom.test 8df5acb6e10ad73f393d1add082b042ab1db72567888847d098152121e507b34
|
||||
F test/fuzzdata8.db 281cbc8166a8bc5843f4a913e803ba76e27905eb02fb9d5cfd581c2429f29855
|
||||
F test/triggerupfrom.test 3645a325026619db117683ed1f9da63ec0b9313ff5857f097088c163b291d3fe
|
||||
F test/upfrom1.tcl df984cb88010af1555812af55e9db44c4df50677395b45d1f30b69b1b6c07b73
|
||||
F test/upfrom1.test 2ba1ed45b4a2161fc79f234b9ce4300b0d3deba545e3f23b938fb3ebdbf8758d
|
||||
F test/upfrom3.test 2619374c4806913414cc39514630d85bb12489a5f09a5ebdf6fad0fb4df242e2
|
||||
P 4f3dff045ab90e80479960fed64cf36f23dd0e13144edbde15043913ad3faac5
|
||||
R e4f9685bb72c377807eea72f701df546
|
||||
P 4f6d8d0ebf40029218a1d3b05ea657c0c5953b01c6f0b6a628465aa44c67e7f3 73d62f82f94347c60e026bc9cb859fec2d8b5f0c756df0c4941f11817234bff8
|
||||
R 6cb7af85326f5b68b9bed4397b12a467
|
||||
U dan
|
||||
Z c7df6a3e81fce323937b8f7723933acd
|
||||
Z effbb38e785e7206fb837507bc0dcd3e
|
||||
|
@ -1 +1 @@
|
||||
4f6d8d0ebf40029218a1d3b05ea657c0c5953b01c6f0b6a628465aa44c67e7f3
|
||||
53b8b507a10364f5d580655d89c950a5f14c2a8114625fd8749d77f289413b22
|
@ -3886,7 +3886,7 @@ int sqlite3BtreeIncrVacuum(Btree *p){
|
||||
Pgno nFree = get4byte(&pBt->pPage1->aData[36]);
|
||||
Pgno nFin = finalDbSize(pBt, nOrig, nFree);
|
||||
|
||||
if( nOrig<nFin ){
|
||||
if( nOrig<nFin || nFree>=nOrig ){
|
||||
rc = SQLITE_CORRUPT_BKPT;
|
||||
}else if( nFree>0 ){
|
||||
rc = saveAllCursors(pBt, 0, 0);
|
||||
|
@ -6737,6 +6737,7 @@ int sqlite3Select(
|
||||
explainSimpleCount(pParse, pTab, pBest);
|
||||
}else{
|
||||
int regAcc = 0; /* "populate accumulators" flag */
|
||||
int addrSkip;
|
||||
|
||||
/* If there are accumulator registers but no min() or max() functions
|
||||
** without FILTER clauses, allocate register regAcc. Register regAcc
|
||||
@ -6785,10 +6786,9 @@ int sqlite3Select(
|
||||
}
|
||||
updateAccumulator(pParse, regAcc, pAggInfo);
|
||||
if( regAcc ) sqlite3VdbeAddOp2(v, OP_Integer, 1, regAcc);
|
||||
if( sqlite3WhereIsOrdered(pWInfo)>0 ){
|
||||
sqlite3VdbeGoto(v, sqlite3WhereBreakLabel(pWInfo));
|
||||
VdbeComment((v, "%s() by index",
|
||||
(minMaxFlag==WHERE_ORDERBY_MIN?"min":"max")));
|
||||
addrSkip = sqlite3WhereOrderByLimitOptLabel(pWInfo);
|
||||
if( addrSkip!=sqlite3WhereContinueLabel(pWInfo) ){
|
||||
sqlite3VdbeGoto(v, addrSkip);
|
||||
}
|
||||
sqlite3WhereEnd(pWInfo);
|
||||
finalizeAggFunctions(pParse, pAggInfo);
|
||||
|
20
src/where.c
20
src/where.c
@ -59,8 +59,12 @@ int sqlite3WhereIsDistinct(WhereInfo *pWInfo){
|
||||
}
|
||||
|
||||
/*
|
||||
** Return TRUE if the WHERE clause returns rows in ORDER BY order.
|
||||
** Return FALSE if the output needs to be sorted.
|
||||
** Return the number of ORDER BY terms that are satisfied by the
|
||||
** WHERE clause. A return of 0 means that the output must be
|
||||
** completely sorted. A return equal to the number of ORDER BY
|
||||
** terms means that no sorting is needed at all. A return that
|
||||
** is positive but less than the number of ORDER BY terms means that
|
||||
** block sorting is required.
|
||||
*/
|
||||
int sqlite3WhereIsOrdered(WhereInfo *pWInfo){
|
||||
return pWInfo->nOBSat;
|
||||
@ -3740,7 +3744,9 @@ static i8 wherePathSatisfiesOrderBy(
|
||||
orderDistinctMask = 0;
|
||||
ready = 0;
|
||||
eqOpMask = WO_EQ | WO_IS | WO_ISNULL;
|
||||
if( wctrlFlags & WHERE_ORDERBY_LIMIT ) eqOpMask |= WO_IN;
|
||||
if( wctrlFlags & (WHERE_ORDERBY_LIMIT|WHERE_ORDERBY_MAX|WHERE_ORDERBY_MIN) ){
|
||||
eqOpMask |= WO_IN;
|
||||
}
|
||||
for(iLoop=0; isOrderDistinct && obSat<obDone && iLoop<=nLoop; iLoop++){
|
||||
if( iLoop>0 ) ready |= pLoop->maskSelf;
|
||||
if( iLoop<nLoop ){
|
||||
@ -3776,7 +3782,8 @@ static i8 wherePathSatisfiesOrderBy(
|
||||
/* IN terms are only valid for sorting in the ORDER BY LIMIT
|
||||
** optimization, and then only if they are actually used
|
||||
** by the query plan */
|
||||
assert( wctrlFlags & WHERE_ORDERBY_LIMIT );
|
||||
assert( wctrlFlags &
|
||||
(WHERE_ORDERBY_LIMIT|WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX) );
|
||||
for(j=0; j<pLoop->nLTerm && pTerm!=pLoop->aLTerm[j]; j++){}
|
||||
if( j>=pLoop->nLTerm ) continue;
|
||||
}
|
||||
@ -4424,6 +4431,11 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){
|
||||
}
|
||||
}
|
||||
}
|
||||
}else if( nLoop
|
||||
&& pWInfo->nOBSat==1
|
||||
&& (pWInfo->wctrlFlags & (WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX))!=0
|
||||
){
|
||||
pWInfo->bOrderedInnerLoop = 1;
|
||||
}
|
||||
}
|
||||
if( (pWInfo->wctrlFlags & WHERE_SORTBYGROUP)
|
||||
|
@ -15,7 +15,7 @@ source $testdir/tester.tcl
|
||||
set testprefix decimal
|
||||
|
||||
if {[catch {load_static_extension db decimal} error]} {
|
||||
puts "Skipping zipfile tests, hit load error: $error"
|
||||
puts "Skipping decimal tests, hit load error: $error"
|
||||
finish_test; return
|
||||
}
|
||||
|
||||
@ -138,5 +138,49 @@ do_execsql_test 5103 {
|
||||
SELECT decimal_mul('1234.0000','2');
|
||||
} {2468}
|
||||
|
||||
if {[catch {load_static_extension db ieee754} error]} {
|
||||
puts "Skipping ieee754 tests, hit load error: $error"
|
||||
finish_test; return
|
||||
}
|
||||
|
||||
do_execsql_test 6000 {
|
||||
CREATE TABLE pow2(x INTEGER PRIMARY KEY, v TEXT);
|
||||
WITH RECURSIVE c(x,v) AS (
|
||||
VALUES(0,'1')
|
||||
UNION ALL
|
||||
SELECT x+1, decimal_mul(v,'2') FROM c WHERE x+1<=971
|
||||
) INSERT INTO pow2(x,v) SELECT x, v FROM c;
|
||||
WITH RECURSIVE c(x,v) AS (
|
||||
VALUES(-1,'0.5')
|
||||
UNION ALL
|
||||
SELECT x-1, decimal_mul(v,'0.5') FROM c WHERE x-1>=-1075
|
||||
) INSERT INTO pow2(x,v) SELECT x, v FROM c;
|
||||
} {}
|
||||
do_execsql_test 6010 {
|
||||
WITH c(n) AS (SELECT ieee754_from_blob(x'0000000000000001'))
|
||||
SELECT decimal_mul(ieee754_mantissa(c.n),pow2.v)
|
||||
FROM pow2, c WHERE pow2.x=ieee754_exponent(c.n);
|
||||
} {0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004940656458412465441765687928682213723650598026143247644255856825006755072702087518652998363616359923797965646954457177309266567103559397963987747960107818781263007131903114045278458171678489821036887186360569987307230500063874091535649843873124733972731696151400317153853980741262385655911710266585566867681870395603106249319452715914924553293054565444011274801297099995419319894090804165633245247571478690147267801593552386115501348035264934720193790268107107491703332226844753335720832431936092382893458368060106011506169809753078342277318329247904982524730776375927247874656084778203734469699533647017972677717585125660551199131504891101451037862738167250955837389733598993664809941164205702637090279242767544565229087538682506419718265533447265625}
|
||||
do_execsql_test 6020 {
|
||||
WITH c(n) AS (SELECT ieee754_from_blob(x'7fefffffffffffff'))
|
||||
SELECT decimal_mul(ieee754_mantissa(c.n),pow2.v)
|
||||
FROM pow2, c WHERE pow2.x=ieee754_exponent(c.n);
|
||||
} {179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368}
|
||||
|
||||
do_execsql_test 6100 {
|
||||
SELECT ieee754(ieee754_from_blob(x'0000000000000001'));
|
||||
} {ieee754(1,-1074)}
|
||||
do_execsql_test 6110 {
|
||||
SELECT ieee754(ieee754_from_blob(x'7fefffffffffffff'));
|
||||
} {ieee754(9007199254740991,971)}
|
||||
do_execsql_test 6120 {
|
||||
SELECT printf('%.8e',ieee754_from_blob(x'0000000000000001'));
|
||||
} {4.94065646e-324}
|
||||
do_execsql_test 6130 {
|
||||
SELECT printf('%.8e',ieee754_from_blob(x'ffefffffffffffff'));
|
||||
} {-1.79769313e+308}
|
||||
|
||||
|
||||
|
||||
|
||||
finish_test
|
||||
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user