diff --git a/manifest b/manifest
index 292c484..4032a9d 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Enhance\sthe\suse\sof\sthe\scolumn\scache\sfor\sUPDATE\sstatements,\smaking\sthem\nmore\sefficient\sfor\sthe\scase\swhere\sa\scolumn\sis\smodified\sto\sbe\san\sexpression\nof\sother\sunmodified\scolumns.
-D 2015-10-15T19:21:51.254
+C Experiments\swith\san\sOP_Unpack\sopcode\sthat\sextracts\smultiple\scolumns\sfrom\na\srecord\swithout\scaching.
+D 2015-10-15T20:17:15.103
 F Makefile.in 2ea961bc09e441874eb3d1bf7398e04feb24f3ee
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 8e42cb55739cd8c12e1fd25401956e2019448f6a
@@ -338,7 +338,7 @@
 F src/random.c ba2679f80ec82c4190062d756f22d0c358180696
 F src/resolve.c 1954a0f01bf65d78d7d559aea3d5c67f33376d91
 F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e
-F src/select.c dbf1fb82317043304da334a33206add211487f96
+F src/select.c a4478981ce53cb7e28d0252417deece6ad5fe693
 F src/shell.c d25df04168d6ba5a4fa05bdbf859df667f9eb621
 F src/sqlite.h.in 839c818e16ea68703d90d17bd2bb3607191debce
 F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad
@@ -401,7 +401,7 @@
 F src/utf.c fc6b889ba0779b7722634cdeaa25f1930d93820c
 F src/util.c fc612367108b74573c5fd13a85d0a23027f438bd
 F src/vacuum.c 2ddd5cad2a7b9cef7f9e431b8c7771634c6b1701
-F src/vdbe.c 61bd96c72f103d2e96de6ab7852dc009dc9bb6b3
+F src/vdbe.c a0a2aea6a146e2479bdb7dba584f3e625ceccc30
 F src/vdbe.h 4bc88bd0e06f8046ee6ab7487c0015e85ad949ad
 F src/vdbeInt.h 8b867eac234e28627ffcace3cd4b4b79bbec664b
 F src/vdbeapi.c 020681b943e77766b32ae1cddf86d7831b7374ca
@@ -1391,7 +1391,10 @@
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 3a2f73a4924860fde8ee41ad646e7a02d29ad9d5
-R 16722b48de28ae59c1a22e712b62a0b0
+P 871e091df651b2275a672c35ff938bd4b6db0d7f
+R 12f17dff849f2a06a10012eebf93b957
+T *branch * unpack-opcode
+T *sym-unpack-opcode *
+T -sym-trunk *
 U drh
-Z fcd4e595e3a40ac192e62fadc88a95a3
+Z 51853eb094abb609c64d30de1af24213
diff --git a/manifest.uuid b/manifest.uuid
index fce1857..62bb69c 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-871e091df651b2275a672c35ff938bd4b6db0d7f
\ No newline at end of file
+39ae92f5c63de4b95502f438dc7e9f2669efdf91
\ No newline at end of file
diff --git a/src/select.c b/src/select.c
index 67e25f0..cf483e7 100644
--- a/src/select.c
+++ b/src/select.c
@@ -1230,15 +1230,16 @@
     codeOffset(v, p->iOffset, addrContinue);
     sqlite3VdbeAddOp3(v, OP_SorterData, iTab, regSortOut, iSortTab);
     bSeq = 0;
+    sqlite3VdbeAddOp4Int(v, OP_Unpack, regSortOut, regRow, nSortData, nKey);
   }else{
     addr = 1 + sqlite3VdbeAddOp2(v, OP_Sort, iTab, addrBreak); VdbeCoverage(v);
     codeOffset(v, p->iOffset, addrContinue);
     iSortTab = iTab;
     bSeq = 1;
-  }
-  for(i=0; i<nSortData; i++){
-    sqlite3VdbeAddOp3(v, OP_Column, iSortTab, nKey+bSeq+i, regRow+i);
-    VdbeComment((v, "%s", aOutEx[i].zName ? aOutEx[i].zName : aOutEx[i].zSpan));
+    for(i=0; i<nSortData; i++){
+      sqlite3VdbeAddOp3(v, OP_Column, iSortTab, nKey+bSeq+i, regRow+i);
+      VdbeComment((v, "%s", aOutEx[i].zName ? aOutEx[i].zName : aOutEx[i].zSpan));
+    }
   }
   switch( eDest ){
     case SRT_EphemTab: {
@@ -5340,11 +5341,9 @@
       if( groupBySort ){
         sqlite3VdbeAddOp3(v, OP_SorterData, sAggInfo.sortingIdx,
                           sortOut, sortPTab);
-      }
-      for(j=0; j<pGroupBy->nExpr; j++){
-        if( groupBySort ){
-          sqlite3VdbeAddOp3(v, OP_Column, sortPTab, j, iBMem+j);
-        }else{
+        sqlite3VdbeAddOp4Int(v, OP_Unpack, sortOut, iBMem, pGroupBy->nExpr, 0);
+      }else{
+        for(j=0; j<pGroupBy->nExpr; j++){
           sAggInfo.directMode = 1;
           sqlite3ExprCode(pParse, pGroupBy->a[j].pExpr, iBMem+j);
         }
diff --git a/src/vdbe.c b/src/vdbe.c
index 980876c..f50778a 100644
--- a/src/vdbe.c
+++ b/src/vdbe.c
@@ -2614,6 +2614,51 @@
   break;
 }
 
+/* Opcode: Unpack P1 P2 P3 P4 *
+** Synopsis: r[P2@P3] = unpack(P1)
+**
+** Decode the P3 fields of the record object held in register P1
+** start with the P4-th field and store the values in registers P2
+** and following.
+*/
+case OP_Unpack: {
+  const unsigned char *aKey;
+  int d; 
+  u32 idx;                        /* Offset in aKey[] to read from */
+  u16 u;                          /* Unsigned loop counter */
+  u32 szHdr;
+  int nField;     
+  u32 serial_type;
+  int iOfst;                      /* Skip this many fields */
+
+  pIn1 = &aMem[pOp->p1];
+  assert( pIn1->flags & MEM_Blob );
+  aKey = (const unsigned char*)pIn1->z;
+  pOut = &aMem[pOp->p2];
+  nField = pOp->p3;
+  assert( pOp->p4type==P4_INT32 );
+  iOfst = pOp->p4.i;
+  idx = getVarint32(aKey, szHdr);
+  d = szHdr;
+  u = 0;
+  while( idx<szHdr && d<=pIn1->n ){
+    idx += getVarint32(&aKey[idx], serial_type);
+    if( iOfst ){
+      iOfst--;
+      d += sqlite3VdbeSerialTypeLen(serial_type);
+    }else{
+      memAboutToChange(p, pOut);
+      sqlite3VdbeMemSetNull(pOut);
+      pOut->enc = encoding;
+      d += sqlite3VdbeSerialGet(&aKey[d], serial_type, pOut);
+      REGISTER_TRACE((int)(pOut - aMem), pOut);
+      pOut++;
+      if( (++u)>=nField ) break;
+    }
+  }
+  break;
+}
+
 /* Opcode: Affinity P1 P2 * P4 *
 ** Synopsis: affinity(r[P1@P2])
 **
