From 335d29d20888bf10577656404ced4191e8d0aa99 Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 4 Apr 2008 15:12:21 +0000 Subject: [PATCH] Smaller and hopefully faster routine for converting blob literals into binary. (CVS 4967) FossilOrigin-Name: 92d49499ee3371db64267c7e2ba72a5e12ea76f3 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/util.c | 13 ++++++++++++- test/blob.test | 25 ++++++++++++++++++++++++- 4 files changed, 44 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index ef01b71d24..952a1507fa 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sthe\soutput\slabels\son\sthe\stests\sin\smalloc9.\s(CVS\s4966) -D 2008-04-04T12:21:26 +C Smaller\sand\shopefully\sfaster\sroutine\sfor\sconverting\sblob\sliterals\sinto\sbinary.\s(CVS\s4967) +D 2008-04-04T15:12:22 F Makefile.arm-wince-mingw32ce-gcc ac5f7b2cef0cd850d6f755ba6ee4ab961b1fadf7 F Makefile.in b861627d91df5ee422c54237aa38296954dc0151 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -172,7 +172,7 @@ F src/tokenize.c d642f36a07e3c38703f52b609f13cd534897a57e F src/trigger.c 9bd3b6fa0beff4a02d262c96466f752ec15a7fc3 F src/update.c 6d5f7728ec254c4a36a06a744f45b232b2eef857 F src/utf.c 8c94fa10efc78c2568d08d436acc59df4df7191b -F src/util.c dba9e04121eb17ec4643d6ca231ff859452cf0e2 +F src/util.c 9a435395c8e03fa0b1658f59ff44e552844ac6c6 F src/vacuum.c 3524411bfb58aac0d87eadd3e5b7cd532772af30 F src/vdbe.c 66ca98cce0f5776006eb5fcaa95a6d90b341646e F src/vdbe.h f72201a0657d5f3d6cc008d1f8d9cc65768518c9 @@ -214,7 +214,7 @@ F test/bigrow.test f0aeb7573dcb8caaafea76454be3ade29b7fc747 F test/bind.test 261fd1603613e7f877a516d29f281c9d8c2ecf52 F test/bindxfer.test 995d2cf8df61204d748cde6960443121c4ccd2e1 F test/bitvec.test 62a512c3f7041d1df12558eb25990e5a19820571 -F test/blob.test f2dbdbf1159674283645c2636436839313ee7131 +F test/blob.test 2a38d867bdf08f9ce081776acec1ac8d4bca66be F test/busy.test 76b4887f8b9160ba903c1ac22e8ff406ad6ae2f0 F test/cache.test 3ff445c445742a7b6b9ba6e1d62a25263f9424b9 F test/capi2.test cc64df7560a96f848f919ea2926c60acf639684b @@ -625,7 +625,7 @@ F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5 -P 046a98a8c88be7389c1571a819ccf1907a3f7217 -R c2eb8a3e99b84237743b30cf9d3410ed +P 9987a7b193095dc90a83666bdac5e23105909cba +R ef205f0a77d72d2ab92875e08b608793 U drh -Z 8168e0c974d32f7ba3946f548ac61cf1 +Z c22c0013da67b67c72be28004cc0d047 diff --git a/manifest.uuid b/manifest.uuid index 3e0f3a0a03..5c63cf53bb 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9987a7b193095dc90a83666bdac5e23105909cba \ No newline at end of file +92d49499ee3371db64267c7e2ba72a5e12ea76f3 \ No newline at end of file diff --git a/src/util.c b/src/util.c index e3395e1cdb..ef899aa43b 100644 --- a/src/util.c +++ b/src/util.c @@ -14,7 +14,7 @@ ** This file contains functions for allocating memory, comparing ** strings, and stuff like that. ** -** $Id: util.c,v 1.217 2008/03/19 13:03:34 drh Exp $ +** $Id: util.c,v 1.218 2008/04/04 15:12:22 drh Exp $ */ #include "sqliteInt.h" #include @@ -597,8 +597,18 @@ void sqlite3Put4byte(unsigned char *p, u32 v){ #if !defined(SQLITE_OMIT_BLOB_LITERAL) || defined(SQLITE_HAS_CODEC) /* ** Translate a single byte of Hex into an integer. +** This routinen only works if h really is a valid hexadecimal +** character: 0..9a..fA..F */ static int hexToInt(int h){ +#if !defined(SQLITE_EBCDIC) + int x = h - '0'; + if( x>9 ){ + x = (h - 'A' + 10) & 0xf; + } + assert( x>=0 && x<=15 ); + return x; +#else if( h>='0' && h<='9' ){ return h - '0'; }else if( h>='a' && h<='f' ){ @@ -607,6 +617,7 @@ static int hexToInt(int h){ assert( h>='A' && h<='F' ); return h - 'A' + 10; } +#endif } #endif /* !SQLITE_OMIT_BLOB_LITERAL || SQLITE_HAS_CODEC */ diff --git a/test/blob.test b/test/blob.test index 7840cfef7c..0021ddb519 100644 --- a/test/blob.test +++ b/test/blob.test @@ -10,7 +10,7 @@ #*********************************************************************** # This file implements regression tests for SQLite library. # -# $Id: blob.test,v 1.6 2008/01/22 23:37:10 drh Exp $ +# $Id: blob.test,v 1.7 2008/04/04 15:12:22 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -45,6 +45,10 @@ do_test blob-1.3 { set blob [execsql {SELECT x'abcdEF12';}] bin_to_hex [lindex $blob 0] } {ABCDEF12} +do_test blob-1.3.2 { + set blob [execsql {SELECT x'0123456789abcdefABCDEF';}] + bin_to_hex [lindex $blob 0] +} {0123456789ABCDEFABCDEF} # Try some syntax errors in blob literals. do_test blob-1.4 { @@ -59,6 +63,25 @@ do_test blob-1.6 { do_test blob-1.7 { catchsql {SELECT X'01001'} } {1 {unrecognized token: "X'01001'"}} +do_test blob-1.8 { + catchsql {SELECT x'012/45'} +} {1 {unrecognized token: "x'012/45'"}} +do_test blob-1.9 { + catchsql {SELECT x'012:45'} +} {1 {unrecognized token: "x'012:45'"}} +do_test blob-1.10 { + catchsql {SELECT x'012@45'} +} {1 {unrecognized token: "x'012@45'"}} +do_test blob-1.11 { + catchsql {SELECT x'012G45'} +} {1 {unrecognized token: "x'012G45'"}} +do_test blob-1.12 { + catchsql {SELECT x'012`45'} +} {1 {unrecognized token: "x'012`45'"}} +do_test blob-1.13 { + catchsql {SELECT x'012g45'} +} {1 {unrecognized token: "x'012g45'"}} + # Insert a blob into a table and retrieve it. do_test blob-2.0 {