]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
LSM1: Fix the integer key encoding so that negative keys are in numeric order.
authordrh <drh@noemail.net>
Wed, 24 Feb 2016 13:35:22 +0000 (13:35 +0000)
committerdrh <drh@noemail.net>
Wed, 24 Feb 2016 13:35:22 +0000 (13:35 +0000)
FossilOrigin-Name: f92dc4187f6046fcb3ab63449efd7f3738594adc

ext/lsm1/lsm_vtab.c
manifest
manifest.uuid

index 0ba8aeda869f5686a9fcc020dbc488e7275add8f..cbea198ffd3492a08e62262f92fb860127d2b982 100644 (file)
@@ -379,7 +379,7 @@ static int lsm1EncodeKey(
       sqlite3_uint64 uVal;
       if( iVal<0 ){
         if( iVal==0xffffffffffffffffLL ) return SQLITE_ERROR;
-        uVal = -iVal;
+        uVal = *(sqlite3_uint64*)&iVal;
         eType = LSM1_TYPE_NEGATIVE;
       }else{
         uVal = iVal;
@@ -424,16 +424,12 @@ static int lsm1Column(
         }else if( pVal[0]==LSM1_TYPE_TEXT ){
           sqlite3_result_text(ctx, (const char*)&pVal[1],nVal-1,
                               SQLITE_TRANSIENT);
-        }else if( nVal>=2 && nVal<=9 &&
+        }else if( nVal>=2 && nVal<=10 &&
            (pVal[0]==LSM1_TYPE_POSITIVE || pVal[0]==LSM1_TYPE_NEGATIVE)
         ){
-          sqlite3_uint64 uVal = 0;
-          lsm1GetVarint64(pVal+1, nVal-1, &uVal);
-          if( pVal[0]==LSM1_TYPE_NEGATIVE ){
-            sqlite3_result_int64(ctx, -(sqlite3_int64)uVal);
-          }else{
-            sqlite3_result_int64(ctx, (sqlite3_int64)uVal); 
-          }
+          sqlite3_int64 iVal;
+          lsm1GetVarint64(pVal+1, nVal-1, (sqlite3_uint64*)&iVal);
+          sqlite3_result_int64(ctx, iVal);
         }         
       }
       break;
index 1fe94cf9b04c95dad5712dd32b32324808ac3eeb..1969eb850273e814a1a1e794154ef04037eaa31d 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Merge\strunk\senhancements.
-D 2016-02-23T01:41:35.494
+C LSM1:\sFix\sthe\sinteger\skey\sencoding\sso\sthat\snegative\skeys\sare\sin\snumeric\sorder.
+D 2016-02-24T13:35:22.043
 F Makefile.in 4e90dc1521879022aa9479268a4cd141d1771142
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 28fc4ee02333996d31b3602b39eeb8e609a89ce4
@@ -215,7 +215,7 @@ F ext/lsm1/lsm_str.c 77ebdd5040ddf267a6f724d4c83132d2dce8a226
 F ext/lsm1/lsm_tree.c 5d9fb2bc58a1a70c75126bd8d7198f7b627e165b
 F ext/lsm1/lsm_unix.c fcaf5b6738713f1229dc0e1a90393ecf24f787f2
 F ext/lsm1/lsm_varint.c b19ae9bd26b5a1e8402fb8a564b25d9542338a41
-F ext/lsm1/lsm_vtab.c f7fb6c185ebd5dcf70f676886e28799afa72424e
+F ext/lsm1/lsm_vtab.c fff303ce03168eca9e333add3c1429b3471674b0
 F ext/misc/amatch.c a1a8f66c29d40bd71b075546ddeddb477b17a2bb
 F ext/misc/closure.c 0d2a038df8fbae7f19de42e7c7d71f2e4dc88704
 F ext/misc/compress.c 122faa92d25033d6c3f07c39231de074ab3d2e83
@@ -1445,7 +1445,7 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh a98af506df552f3b3c0d904f94e4cdc4e1a6d598
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 32f3daec0a8084b258b2513c8025bc4d95a5d757 aa9f4c622af191edbeb6a535942944f8c91f5c37
-R 03319de6b06f1ae4f2324c01efdb9598
+P fac4f4ecee21a460e527a0e2ffa24094b74e17dd
+R 9f78396a287b58b8dc55076320f7b772
 U drh
-Z 7e07aa1e426a3abb50d562fbcc7f53c0
+Z 4d07009afed81bdff10146a4248806a2
index 0b6cb3e157e80250d6e382f1c6f8c6936c75a89e..51aa0db334cbd9320310d71ff98621f838b045b8 100644 (file)
@@ -1 +1 @@
-fac4f4ecee21a460e527a0e2ffa24094b74e17dd
\ No newline at end of file
+f92dc4187f6046fcb3ab63449efd7f3738594adc
\ No newline at end of file