mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-12 13:01:09 +03:00
Omit the return value from sqlite3VdbeSerialGet() for a size reduction
and performance improvement. FossilOrigin-Name: 788e79f881d443fc1b3a213a7ba4f19bfd245e96c15bb21fcb6bffd92c4320b8
This commit is contained in:
16
manifest
16
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Small\sperformance\soptimization\sand\scode\ssize\sreduction\sin\smoveToRoot().
|
C Omit\sthe\sreturn\svalue\sfrom\ssqlite3VdbeSerialGet()\sfor\sa\ssize\sreduction\nand\sperformance\simprovement.
|
||||||
D 2021-12-13T19:59:55.504
|
D 2021-12-14T00:36:09.965
|
||||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||||
@@ -581,7 +581,7 @@ F src/test_delete.c e2fe07646dff6300b48d49b2fee2fe192ed389e834dd635e3b3bac0ce0bf
|
|||||||
F src/test_demovfs.c 86142ba864d4297d54c5b2e972e74f3141ae4b30f05b3a95824184ed2d3d7f91
|
F src/test_demovfs.c 86142ba864d4297d54c5b2e972e74f3141ae4b30f05b3a95824184ed2d3d7f91
|
||||||
F src/test_devsym.c aff2255ea290d7718da08af30cdf18e470ff7325a5eff63e0057b1496ed66593
|
F src/test_devsym.c aff2255ea290d7718da08af30cdf18e470ff7325a5eff63e0057b1496ed66593
|
||||||
F src/test_fs.c ba1e1dc18fd3159fdba0b9c4256f14032159785320dfbd6776eb9973cb75d480
|
F src/test_fs.c ba1e1dc18fd3159fdba0b9c4256f14032159785320dfbd6776eb9973cb75d480
|
||||||
F src/test_func.c 181f992e5495644434c4f0e3cc72362a78c295eb2cf3ff4d02498b8bde7aa276
|
F src/test_func.c 24df3a346c012b1fc9e1001d346db6054deb426db0a7437e92490630e71c9b0a
|
||||||
F src/test_hexio.c 9478e56a0f08e07841a014a93b20e4ba2709ab56d039d1ca8020e26846aa19bd
|
F src/test_hexio.c 9478e56a0f08e07841a014a93b20e4ba2709ab56d039d1ca8020e26846aa19bd
|
||||||
F src/test_init.c 4413c211a94b62157ca4c145b3f27c497f03c664
|
F src/test_init.c 4413c211a94b62157ca4c145b3f27c497f03c664
|
||||||
F src/test_intarray.c 39b4181662a0f33a427748d87218e7578d913e683dc27eab7098bb41617cac71
|
F src/test_intarray.c 39b4181662a0f33a427748d87218e7578d913e683dc27eab7098bb41617cac71
|
||||||
@@ -625,9 +625,9 @@ F src/util.c 569349b0bddcbfbc661856f446adb92e1b0a47b3cbef548da9fc5aa639d7964c
|
|||||||
F src/vacuum.c 6c38ddc52f0619865c91dae9c441d4d48bf3040d7dc1bc5b22da1e45547ed0b3
|
F src/vacuum.c 6c38ddc52f0619865c91dae9c441d4d48bf3040d7dc1bc5b22da1e45547ed0b3
|
||||||
F src/vdbe.c b63594839cbf770a29e2b3b81570971a3d2c1c995c0586aade09bb548142113a
|
F src/vdbe.c b63594839cbf770a29e2b3b81570971a3d2c1c995c0586aade09bb548142113a
|
||||||
F src/vdbe.h 25dabb25c7e157b84e59260cfb5b466c3ac103ede9f36f4db371332c47601abe
|
F src/vdbe.h 25dabb25c7e157b84e59260cfb5b466c3ac103ede9f36f4db371332c47601abe
|
||||||
F src/vdbeInt.h 910985ac2783fe0938b314d811759d53fd25caf215810f62ca1ff068d6d60d7b
|
F src/vdbeInt.h a7f01b0cd0dcb496343eacd37b0839250f9a718199ab6096e3995db42dec3ec8
|
||||||
F src/vdbeapi.c 22c79072ae7d8a01e9bcae8ba16e918d60d202eaa9553b5fda38f99f7464d99a
|
F src/vdbeapi.c 22c79072ae7d8a01e9bcae8ba16e918d60d202eaa9553b5fda38f99f7464d99a
|
||||||
F src/vdbeaux.c 21db442d159fd745a7693d157b5f998260b6af4ca60de559fa3b7b68c7405af2
|
F src/vdbeaux.c 175f2dad949150abdf0d91d19b2b6db30ff3776af5a84008db4bfe5e12a60180
|
||||||
F src/vdbeblob.c 29c4118f7ee615cdee829e8401f6ead1b96b95d545b4de0042f6de39c962c652
|
F src/vdbeblob.c 29c4118f7ee615cdee829e8401f6ead1b96b95d545b4de0042f6de39c962c652
|
||||||
F src/vdbemem.c da4d594084d581be6436582bb44bb128feeb138a3e6c313eda6749ebdc3a65ec
|
F src/vdbemem.c da4d594084d581be6436582bb44bb128feeb138a3e6c313eda6749ebdc3a65ec
|
||||||
F src/vdbesort.c 513b481c8bab4a6578c92194a60cf3bc3b48736e4a53f8d2d7918121c5b594e7
|
F src/vdbesort.c 513b481c8bab4a6578c92194a60cf3bc3b48736e4a53f8d2d7918121c5b594e7
|
||||||
@@ -1934,7 +1934,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
|||||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P 471070462593faba865d8d05ee89161b340145351e2fa0bfbaa766d974e932d6
|
P cdcde00b2d68eeb35c472fdfd4c4508551f6722054394b43cc97eaf01ad7181d
|
||||||
R 31496f1551d29819dc300c6e9471d345
|
R 74fcb3641325f5444e7c25132e4edd61
|
||||||
U drh
|
U drh
|
||||||
Z 3da685334c6fbdb2df60cd96248cd338
|
Z 1db5e6a6595e0e17160e9f47eedbec36
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
cdcde00b2d68eeb35c472fdfd4c4508551f6722054394b43cc97eaf01ad7181d
|
788e79f881d443fc1b3a213a7ba4f19bfd245e96c15bb21fcb6bffd92c4320b8
|
||||||
@@ -499,7 +499,8 @@ static void test_extract(
|
|||||||
mem.db = db;
|
mem.db = db;
|
||||||
mem.enc = ENC(db);
|
mem.enc = ENC(db);
|
||||||
pHdr += sqlite3GetVarint(pHdr, &iSerialType);
|
pHdr += sqlite3GetVarint(pHdr, &iSerialType);
|
||||||
pBody += sqlite3VdbeSerialGet(pBody, (u32)iSerialType, &mem);
|
sqlite3VdbeSerialGet(pBody, (u32)iSerialType, &mem);
|
||||||
|
pBody += sqlite3VdbeSerialTypeLen((u32)iSerialType);
|
||||||
|
|
||||||
if( iCurrent==iIdx ){
|
if( iCurrent==iIdx ){
|
||||||
sqlite3_result_value(context, &mem);
|
sqlite3_result_value(context, &mem);
|
||||||
@@ -547,7 +548,8 @@ static void test_decode(
|
|||||||
mem.db = db;
|
mem.db = db;
|
||||||
mem.enc = ENC(db);
|
mem.enc = ENC(db);
|
||||||
pHdr += sqlite3GetVarint(pHdr, &iSerialType);
|
pHdr += sqlite3GetVarint(pHdr, &iSerialType);
|
||||||
pBody += sqlite3VdbeSerialGet(pBody, (u32)iSerialType, &mem);
|
sqlite3VdbeSerialGet(pBody, (u32)iSerialType, &mem);
|
||||||
|
pBody += sqlite3VdbeSerialTypeLen((u32)iSerialType);
|
||||||
|
|
||||||
switch( sqlite3_value_type(&mem) ){
|
switch( sqlite3_value_type(&mem) ){
|
||||||
case SQLITE_TEXT:
|
case SQLITE_TEXT:
|
||||||
|
|||||||
@@ -492,7 +492,7 @@ int sqlite3VdbeCursorRestore(VdbeCursor*);
|
|||||||
u32 sqlite3VdbeSerialTypeLen(u32);
|
u32 sqlite3VdbeSerialTypeLen(u32);
|
||||||
u8 sqlite3VdbeOneByteSerialTypeLen(u8);
|
u8 sqlite3VdbeOneByteSerialTypeLen(u8);
|
||||||
u32 sqlite3VdbeSerialPut(unsigned char*, Mem*, u32);
|
u32 sqlite3VdbeSerialPut(unsigned char*, Mem*, u32);
|
||||||
u32 sqlite3VdbeSerialGet(const unsigned char*, u32, Mem*);
|
void sqlite3VdbeSerialGet(const unsigned char*, u32, Mem*);
|
||||||
void sqlite3VdbeDeleteAuxData(sqlite3*, AuxData**, int, int);
|
void sqlite3VdbeDeleteAuxData(sqlite3*, AuxData**, int, int);
|
||||||
|
|
||||||
int sqlite2BtreeKeyCompare(BtCursor *, const void *, int, int, int *);
|
int sqlite2BtreeKeyCompare(BtCursor *, const void *, int, int, int *);
|
||||||
|
|||||||
@@ -3851,14 +3851,14 @@ u32 sqlite3VdbeSerialPut(u8 *buf, Mem *pMem, u32 serial_type){
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
** Deserialize the data blob pointed to by buf as serial type serial_type
|
** Deserialize the data blob pointed to by buf as serial type serial_type
|
||||||
** and store the result in pMem. Return the number of bytes read.
|
** and store the result in pMem.
|
||||||
**
|
**
|
||||||
** This function is implemented as two separate routines for performance.
|
** This function is implemented as two separate routines for performance.
|
||||||
** The few cases that require local variables are broken out into a separate
|
** The few cases that require local variables are broken out into a separate
|
||||||
** routine so that in most cases the overhead of moving the stack pointer
|
** routine so that in most cases the overhead of moving the stack pointer
|
||||||
** is avoided.
|
** is avoided.
|
||||||
*/
|
*/
|
||||||
static u32 serialGet(
|
static void serialGet(
|
||||||
const unsigned char *buf, /* Buffer to deserialize from */
|
const unsigned char *buf, /* Buffer to deserialize from */
|
||||||
u32 serial_type, /* Serial type to deserialize */
|
u32 serial_type, /* Serial type to deserialize */
|
||||||
Mem *pMem /* Memory cell to write value into */
|
Mem *pMem /* Memory cell to write value into */
|
||||||
@@ -3892,9 +3892,8 @@ static u32 serialGet(
|
|||||||
memcpy(&pMem->u.r, &x, sizeof(x));
|
memcpy(&pMem->u.r, &x, sizeof(x));
|
||||||
pMem->flags = IsNaN(x) ? MEM_Null : MEM_Real;
|
pMem->flags = IsNaN(x) ? MEM_Null : MEM_Real;
|
||||||
}
|
}
|
||||||
return 8;
|
|
||||||
}
|
}
|
||||||
u32 sqlite3VdbeSerialGet(
|
void sqlite3VdbeSerialGet(
|
||||||
const unsigned char *buf, /* Buffer to deserialize from */
|
const unsigned char *buf, /* Buffer to deserialize from */
|
||||||
u32 serial_type, /* Serial type to deserialize */
|
u32 serial_type, /* Serial type to deserialize */
|
||||||
Mem *pMem /* Memory cell to write value into */
|
Mem *pMem /* Memory cell to write value into */
|
||||||
@@ -3905,13 +3904,13 @@ u32 sqlite3VdbeSerialGet(
|
|||||||
pMem->flags = MEM_Null|MEM_Zero;
|
pMem->flags = MEM_Null|MEM_Zero;
|
||||||
pMem->n = 0;
|
pMem->n = 0;
|
||||||
pMem->u.nZero = 0;
|
pMem->u.nZero = 0;
|
||||||
break;
|
return;
|
||||||
}
|
}
|
||||||
case 11: /* Reserved for future use */
|
case 11: /* Reserved for future use */
|
||||||
case 0: { /* Null */
|
case 0: { /* Null */
|
||||||
/* EVIDENCE-OF: R-24078-09375 Value is a NULL. */
|
/* EVIDENCE-OF: R-24078-09375 Value is a NULL. */
|
||||||
pMem->flags = MEM_Null;
|
pMem->flags = MEM_Null;
|
||||||
break;
|
return;
|
||||||
}
|
}
|
||||||
case 1: {
|
case 1: {
|
||||||
/* EVIDENCE-OF: R-44885-25196 Value is an 8-bit twos-complement
|
/* EVIDENCE-OF: R-44885-25196 Value is an 8-bit twos-complement
|
||||||
@@ -3919,7 +3918,7 @@ u32 sqlite3VdbeSerialGet(
|
|||||||
pMem->u.i = ONE_BYTE_INT(buf);
|
pMem->u.i = ONE_BYTE_INT(buf);
|
||||||
pMem->flags = MEM_Int;
|
pMem->flags = MEM_Int;
|
||||||
testcase( pMem->u.i<0 );
|
testcase( pMem->u.i<0 );
|
||||||
return 1;
|
return;
|
||||||
}
|
}
|
||||||
case 2: { /* 2-byte signed integer */
|
case 2: { /* 2-byte signed integer */
|
||||||
/* EVIDENCE-OF: R-49794-35026 Value is a big-endian 16-bit
|
/* EVIDENCE-OF: R-49794-35026 Value is a big-endian 16-bit
|
||||||
@@ -3927,7 +3926,7 @@ u32 sqlite3VdbeSerialGet(
|
|||||||
pMem->u.i = TWO_BYTE_INT(buf);
|
pMem->u.i = TWO_BYTE_INT(buf);
|
||||||
pMem->flags = MEM_Int;
|
pMem->flags = MEM_Int;
|
||||||
testcase( pMem->u.i<0 );
|
testcase( pMem->u.i<0 );
|
||||||
return 2;
|
return;
|
||||||
}
|
}
|
||||||
case 3: { /* 3-byte signed integer */
|
case 3: { /* 3-byte signed integer */
|
||||||
/* EVIDENCE-OF: R-37839-54301 Value is a big-endian 24-bit
|
/* EVIDENCE-OF: R-37839-54301 Value is a big-endian 24-bit
|
||||||
@@ -3935,7 +3934,7 @@ u32 sqlite3VdbeSerialGet(
|
|||||||
pMem->u.i = THREE_BYTE_INT(buf);
|
pMem->u.i = THREE_BYTE_INT(buf);
|
||||||
pMem->flags = MEM_Int;
|
pMem->flags = MEM_Int;
|
||||||
testcase( pMem->u.i<0 );
|
testcase( pMem->u.i<0 );
|
||||||
return 3;
|
return;
|
||||||
}
|
}
|
||||||
case 4: { /* 4-byte signed integer */
|
case 4: { /* 4-byte signed integer */
|
||||||
/* EVIDENCE-OF: R-01849-26079 Value is a big-endian 32-bit
|
/* EVIDENCE-OF: R-01849-26079 Value is a big-endian 32-bit
|
||||||
@@ -3947,7 +3946,7 @@ u32 sqlite3VdbeSerialGet(
|
|||||||
#endif
|
#endif
|
||||||
pMem->flags = MEM_Int;
|
pMem->flags = MEM_Int;
|
||||||
testcase( pMem->u.i<0 );
|
testcase( pMem->u.i<0 );
|
||||||
return 4;
|
return;
|
||||||
}
|
}
|
||||||
case 5: { /* 6-byte signed integer */
|
case 5: { /* 6-byte signed integer */
|
||||||
/* EVIDENCE-OF: R-50385-09674 Value is a big-endian 48-bit
|
/* EVIDENCE-OF: R-50385-09674 Value is a big-endian 48-bit
|
||||||
@@ -3955,13 +3954,14 @@ u32 sqlite3VdbeSerialGet(
|
|||||||
pMem->u.i = FOUR_BYTE_UINT(buf+2) + (((i64)1)<<32)*TWO_BYTE_INT(buf);
|
pMem->u.i = FOUR_BYTE_UINT(buf+2) + (((i64)1)<<32)*TWO_BYTE_INT(buf);
|
||||||
pMem->flags = MEM_Int;
|
pMem->flags = MEM_Int;
|
||||||
testcase( pMem->u.i<0 );
|
testcase( pMem->u.i<0 );
|
||||||
return 6;
|
return;
|
||||||
}
|
}
|
||||||
case 6: /* 8-byte signed integer */
|
case 6: /* 8-byte signed integer */
|
||||||
case 7: { /* IEEE floating point */
|
case 7: { /* IEEE floating point */
|
||||||
/* These use local variables, so do them in a separate routine
|
/* These use local variables, so do them in a separate routine
|
||||||
** to avoid having to move the frame pointer in the common case */
|
** to avoid having to move the frame pointer in the common case */
|
||||||
return serialGet(buf,serial_type,pMem);
|
serialGet(buf,serial_type,pMem);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
case 8: /* Integer 0 */
|
case 8: /* Integer 0 */
|
||||||
case 9: { /* Integer 1 */
|
case 9: { /* Integer 1 */
|
||||||
@@ -3969,7 +3969,7 @@ u32 sqlite3VdbeSerialGet(
|
|||||||
/* EVIDENCE-OF: R-18143-12121 Value is the integer 1. */
|
/* EVIDENCE-OF: R-18143-12121 Value is the integer 1. */
|
||||||
pMem->u.i = serial_type-8;
|
pMem->u.i = serial_type-8;
|
||||||
pMem->flags = MEM_Int;
|
pMem->flags = MEM_Int;
|
||||||
return 0;
|
return;
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
/* EVIDENCE-OF: R-14606-31564 Value is a BLOB that is (N-12)/2 bytes in
|
/* EVIDENCE-OF: R-14606-31564 Value is a BLOB that is (N-12)/2 bytes in
|
||||||
@@ -3980,10 +3980,10 @@ u32 sqlite3VdbeSerialGet(
|
|||||||
pMem->z = (char *)buf;
|
pMem->z = (char *)buf;
|
||||||
pMem->n = (serial_type-12)/2;
|
pMem->n = (serial_type-12)/2;
|
||||||
pMem->flags = aFlag[serial_type&1];
|
pMem->flags = aFlag[serial_type&1];
|
||||||
return pMem->n;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
** This routine is used to allocate sufficient space for an UnpackedRecord
|
** This routine is used to allocate sufficient space for an UnpackedRecord
|
||||||
@@ -4046,7 +4046,8 @@ void sqlite3VdbeRecordUnpack(
|
|||||||
/* pMem->flags = 0; // sqlite3VdbeSerialGet() will set this for us */
|
/* pMem->flags = 0; // sqlite3VdbeSerialGet() will set this for us */
|
||||||
pMem->szMalloc = 0;
|
pMem->szMalloc = 0;
|
||||||
pMem->z = 0;
|
pMem->z = 0;
|
||||||
d += sqlite3VdbeSerialGet(&aKey[d], serial_type, pMem);
|
sqlite3VdbeSerialGet(&aKey[d], serial_type, pMem);
|
||||||
|
d += sqlite3VdbeSerialTypeLen(serial_type);
|
||||||
pMem++;
|
pMem++;
|
||||||
if( (++u)>=p->nField ) break;
|
if( (++u)>=p->nField ) break;
|
||||||
}
|
}
|
||||||
@@ -4130,7 +4131,8 @@ static int vdbeRecordCompareDebug(
|
|||||||
|
|
||||||
/* Extract the values to be compared.
|
/* Extract the values to be compared.
|
||||||
*/
|
*/
|
||||||
d1 += sqlite3VdbeSerialGet(&aKey1[d1], serial_type1, &mem1);
|
sqlite3VdbeSerialGet(&aKey1[d1], serial_type1, &mem1);
|
||||||
|
d1 += sqlite3VdbeSerialTypeLen(serial_type1);
|
||||||
|
|
||||||
/* Do the comparison
|
/* Do the comparison
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user