From: drh Date: Wed, 24 Feb 2016 13:35:22 +0000 (+0000) Subject: LSM1: Fix the integer key encoding so that negative keys are in numeric order. X-Git-Tag: version-3.20.0~165^2~17 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=16b7dcc717e9b28860e7b911e932bea24396b0bf;p=thirdparty%2Fsqlite.git LSM1: Fix the integer key encoding so that negative keys are in numeric order. FossilOrigin-Name: f92dc4187f6046fcb3ab63449efd7f3738594adc --- diff --git a/ext/lsm1/lsm_vtab.c b/ext/lsm1/lsm_vtab.c index 0ba8aeda86..cbea198ffd 100644 --- a/ext/lsm1/lsm_vtab.c +++ b/ext/lsm1/lsm_vtab.c @@ -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; diff --git a/manifest b/manifest index 1fe94cf9b0..1969eb8502 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index 0b6cb3e157..51aa0db334 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -fac4f4ecee21a460e527a0e2ffa24094b74e17dd \ No newline at end of file +f92dc4187f6046fcb3ab63449efd7f3738594adc \ No newline at end of file