]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Merge latest trunk enhancements and fixes into the orderby-planning branch.
authordrh <drh@noemail.net>
Fri, 2 May 2014 13:09:06 +0000 (13:09 +0000)
committerdrh <drh@noemail.net>
Fri, 2 May 2014 13:09:06 +0000 (13:09 +0000)
FossilOrigin-Name: 84862d3a095629d20c8e7b8a16f4dc26cd41ab6d

1  2 
manifest
manifest.uuid
src/select.c
src/vdbe.c

diff --cc manifest
index b7837cbb9426f0d8f7e95bbdc167c67ff3600189,af2b3b36eccdfd7a7462819bae13d77bc5cd7f26..6166275bb9045cf92ee0f77ea4448a3b2c78f98b
+++ b/manifest
@@@ -1,5 -1,5 +1,5 @@@
- C Improved\sheader\scomment\son\sthe\svdbesort.c\smodule.\s\sNo\schanges\sto\scode.
- D 2014-04-24T16:25:25.812
 -C Add\sa\scomment\sexplaining\swhy\sWhereLoop\scost\sadjustments\sare\somitted\sfor\nskip-scan\sloops.
 -D 2014-05-02T00:09:40.134
++C Merge\slatest\strunk\senhancements\sand\sfixes\sinto\sthe\sorderby-planning\sbranch.
++D 2014-05-02T13:09:06.754
  F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
  F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81
  F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@@ -217,7 -218,7 +218,7 @@@ F src/printf.c e5a0005f8b3de21f85da6a70
  F src/random.c d10c1f85b6709ca97278428fd5db5bbb9c74eece
  F src/resolve.c 273d5f47c4e2c05b2d3d2bffeda939551ab59e66
  F src/rowset.c a9c9aae3234b44a6d7c6f5a3cadf90dce1e627be
- F src/select.c 1a229278810ac02b9cb58687c3aa8cdc304d4dcf
 -F src/select.c 089c4d46f067a5cccae93524c6377f981ba99bd9
++F src/select.c a5ed3fdc82ebab5b9b095ea1971515a7f8a303d2
  F src/shell.c 2afe7a7154e97be0c74c5feacf09626bda8493be
  F src/sqlite.h.in bde98816e1ba0c9ffef50afe7b32f4e5a8f54fe0
  F src/sqlite3.rc 11094cc6a157a028b301a9f06b3d03089ea37c3e
@@@ -276,9 -277,9 +277,9 @@@ F src/tokenize.c 6da2de6e12218ccb0aea51
  F src/trigger.c 66f3470b03b52b395e839155786966e3e037fddb
  F src/update.c 5b3e74a03b3811e586b4f2b4cbd7c49f01c93115
  F src/utf.c 6dc9ec9f1b3db43ae8ba0365377f11df1ee4c01c
- F src/util.c c46c90459ef9bdc0c6c73803cf4c55425b4771cf
+ F src/util.c 2b5fb283a190aacdb286f7835a447c45b345b83c
  F src/vacuum.c 3728d74919d4fb1356f9e9a13e27773db60b7179
- F src/vdbe.c 59ad2f4c62178dcce4acef516e00290a7a58dd39
 -F src/vdbe.c 7f359193bf2366cc914a9ece093ebf284e56acdc
++F src/vdbe.c b3510cc71f706beffc66e2aa4bbda54bcd5e9668
  F src/vdbe.h 394464909ed682334aa3d5831aae0c2fe2abef94
  F src/vdbeInt.h e6d83e5bfd62fc6685ba1ed6153f7099f82de9f7
  F src/vdbeapi.c 0ed6053f947edd0b30f64ce5aeb811872a3450a4
@@@ -813,10 -817,10 +817,10 @@@ F test/show_speedtest1_rtree.tcl 32e6c5
  F test/shrink.test 8c70f62b6e8eb4d54533de6d65bd06b1b9a17868
  F test/sidedelete.test f0ad71abe6233e3b153100f3b8d679b19a488329
  F test/skipscan1.test bed8cbe9d554c8c27afb6c88500f704c86a9196f
- F test/skipscan2.test 5a4db0799c338ddbacb154aaa5589c0254b36a8d
+ F test/skipscan2.test d77f79cdbba25f0f6f35298136cff21a7d7a553a
  F test/soak.test 0b5b6375c9f4110c828070b826b3b4b0bb65cd5f
  F test/softheap1.test 40562fe6cac6d9827b7b42b86d45aedf12c15e24
 -F test/sort.test 0e4456e729e5a92a625907c63dcdedfbe72c5dc5
 +F test/sort.test cb76a6e9db897b6871ef4dbc206ebc6dbc033bf4
  F test/speed1.test f2974a91d79f58507ada01864c0e323093065452
  F test/speed1p.explain d841e650a04728b39e6740296b852dccdca9b2cb
  F test/speed1p.test b180e98609c7677382cf618c0ec9b69f789033a8
@@@ -1161,7 -1166,7 +1166,7 @@@ F tool/vdbe_profile.tcl 67746953071a9f8
  F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
  F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
  F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
- P 6077ddcd93318e24b9756adaaf293ba9fb3cedf7
- R f7111ea680230454a4775d5c337b77f9
 -P 427409ae106cdab7892a6b50fe30c5f52de5addc
 -R ee65c8e54ebb299c9693aee246a7e200
++P bf09ce24d054bc68c226064f5f28d97e0e648a13 3bc43594aaeee9225c0590677fcce480bedcb37b
++R 54b60e57b7c4903b7427b2471b549ff9
  U drh
- Z b4087c0ba17f1174753bea8bd453086a
 -Z 5a37e5aacc1e047352493d523b6fb849
++Z 3f220c7986d95ea2653ad2dab9b5d42e
diff --cc manifest.uuid
index a672982fcb5f3c7fe4b793e54b868f4987ac3d26,6c6f1f805debbc59ac87c7f89ebb53c3e7e9902c..2809ea21e5f8e026c4679f1ee6b64bd4bf32766d
@@@ -1,1 -1,1 +1,1 @@@
- bf09ce24d054bc68c226064f5f28d97e0e648a13
 -3bc43594aaeee9225c0590677fcce480bedcb37b
++84862d3a095629d20c8e7b8a16f4dc26cd41ab6d
diff --cc src/select.c
index d71ac94121562f0e412af4e2d49faaf5cfe2f876,5fff010f34c01c15fe6c6d750d3e01cce68834a2..2747c56af741b0d02b591512f379db27df02803d
@@@ -462,35 -462,21 +462,36 @@@ static void pushOntoSorter
    Parse *pParse,         /* Parser context */
    SortCtx *pSort,        /* Information about the ORDER BY clause */
    Select *pSelect,       /* The whole SELECT statement */
 -  int regData            /* Register holding data to be sorted */
 +  int regData,           /* First register holding data to be sorted */
 +  int nData,             /* Number of elements in the data array */
 +  int nPrefixReg         /* No. of reg prior to regData available for use */
  ){
 -  Vdbe *v = pParse->pVdbe;
 -  int nExpr = pSort->pOrderBy->nExpr;
 -  int regRecord = ++pParse->nMem;
 -  int regBase = pParse->nMem+1;
 -  int nOBSat = pSort->nOBSat;
 -  int op;
 +  Vdbe *v = pParse->pVdbe;                         /* Stmt under construction */
 +  int bSeq = ((pSort->sortFlags & SORTFLAG_UseSorter)==0);
 +  int nExpr = pSort->pOrderBy->nExpr;              /* No. of ORDER BY terms */
 +  int nBase = nExpr + bSeq + nData;                /* Fields in sorter record */
 +  int regBase;                                     /* Regs for sorter record */
-   int regRecord = sqlite3GetTempReg(pParse);       /* Assembled sorter record */
++  int regRecord = ++pParse->nMem;                  /* Assembled sorter record */
 +  int nOBSat = pSort->nOBSat;                      /* ORDER BY terms to skip */
 +  int op;                            /* Opcode to add sorter record to sorter */
 +
 +  assert( bSeq==0 || bSeq==1 );
 +  if( nPrefixReg ){
 +    assert( nPrefixReg==nExpr+bSeq );
 +    regBase = regData - nExpr - bSeq;
 +  }else{
-     regBase = sqlite3GetTempRange(pParse, nBase);
++    regBase = pParse->nMem + 1;
++    pParse->nMem += nBase;
 +  }
 +  sqlite3ExprCodeExprList(pParse, pSort->pOrderBy, regBase, SQLITE_ECEL_DUP);
 +  if( bSeq ){
 +    sqlite3VdbeAddOp2(v, OP_Sequence, pSort->iECursor, regBase+nExpr);
 +  }
 +  if( nPrefixReg==0 ){
 +    sqlite3VdbeAddOp3(v, OP_Move, regData, regBase+nExpr+bSeq, nData);
 +  }
  
 -  pParse->nMem += nExpr+2;        /* nExpr+2 registers allocated at regBase */
 -  sqlite3ExprCacheClear(pParse);
 -  sqlite3ExprCodeExprList(pParse, pSort->pOrderBy, regBase, 0);
 -  sqlite3VdbeAddOp2(v, OP_Sequence, pSort->iECursor, regBase+nExpr);
 -  sqlite3ExprCodeMove(pParse, regData, regBase+nExpr+1, 1);
 -  sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase+nOBSat, nExpr+2-nOBSat,regRecord);
 +  sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase+nOBSat, nBase-nOBSat, regRecord);
    if( nOBSat>0 ){
      int regPrevKey;   /* The first nOBSat columns of the previous row */
      int addrFirst;    /* Address of the OP_IfNot opcode */
      sqlite3VdbeAddOp3(v, OP_Compare, regPrevKey, regBase, pSort->nOBSat);
      pOp = sqlite3VdbeGetOp(v, pSort->addrSortIndex);
      if( pParse->db->mallocFailed ) return;
--    pOp->p2 = nKey + 1;
++    pOp->p2 = nKey + nData;
      pKI = pOp->p4.pKeyInfo;
      memset(pKI->aSortOrder, 0, pKI->nField); /* Makes OP_Jump below testable */
      sqlite3VdbeChangeP4(v, -1, (char*)pKI, P4_KEYINFO);
diff --cc src/vdbe.c
Simple merge