diff --git a/manifest b/manifest index 6155b6a5ce..a1d854972a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C The\ssorter\senhancement\sat\s[bdc841de10fef65b]\scontains\sa\sbug\swhere\sit\nmight\ssort\s64-bit\sintegers\sin\sthe\swrong\sorder\sdue\sto\sthe\slimited\nprecision\sof\sdouble.\s\sFixed\shere. -D 2026-08-04T20:40:10.440 +C Performance\soptimization\sin\sOP_Column:\sdecode\sserial\stypes\s0\sthrough\s6,\s8,\sand\s9\s(NULL\sand\sall\sinteger\swidths)\sinline\sin\sa\sswitch,\savoiding\sthe\scall\sand\sdispatch\soverhead\sof\ssqlite3VdbeSerialGet().\sThe\swide-integer\scases\s5\sand\s6\sadd\sbulk,\sbut\somitting\sthem\swould\sleave\sthose\stypes\spaying\sthe\sswitch\smiss\splus\sthe\soriginal\scall.\sOther\sserial\stypes\sare\sdecoded\sas\sbefore. +D 2026-08-07T00:00:05.627 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea @@ -809,7 +809,7 @@ F src/upsert.c dd9f0fcccbfb4f20e1026a21a7254ba3f2c08e9cfa92affaff5b5ec3b00ea549 F src/utf.c 7267c3fb9e2467020507601af3354c2446c61f444387e094c779dccd5ca62165 F src/util.c fcab5d997364c657e973e2bd3b9d2181aeb0926be0c028f20dfd4445894af3b4 F src/vacuum.c d3d35d8ae893d419ade5fa196d761a83bddcbb62137a1a157ae751ef38b26e82 -F src/vdbe.c 0649187bbbe1990e7d32f4737d59cacf554de34b30a3121279830f3e0d3859ff +F src/vdbe.c 27338bd31556b944154a4fa59967d97e7fb43852249dd34197544945ac092899 F src/vdbe.h 70e862ac8a11b590f8c1eaac17a0078429d42bc4ea3f757a9af0f451dd966a71 F src/vdbeInt.h c31ba4dc8d280c2b1dc89c6fcee68f2555e3813ab34279552c20b964c0e338b1 F src/vdbeapi.c 6ad0c841b6cb87de068f71787f385149d794e8830176bf72d09a36b9f655ac5b @@ -2218,8 +2218,11 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c -P bdc841de10fef65b627deb8b770702c976174a66af847c96ebecf24d91798744 -R 0db8bad880544fadd75c136d6d89db37 -U drh -Z c0254d132a18aeae6d54aba80ce46af2 +P 6bdfff7ddb63d0b4f28f6c174a36e81486a652056a4e21644378a22feda780fd +R 85ac5a0e76583d1cebd71a1fc73dc3a8 +T *branch * opcol-inline-ints +T *sym-opcol-inline-ints * +T -sym-trunk * +U jeffchen +Z 95c84f6166e2c42d3da56108de95ab36 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.tags b/manifest.tags index bec971799f..59221cc2de 100644 --- a/manifest.tags +++ b/manifest.tags @@ -1,2 +1,2 @@ -branch trunk -tag trunk +branch opcol-inline-ints +tag opcol-inline-ints diff --git a/manifest.uuid b/manifest.uuid index fd3459d4bf..30f9f34212 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6bdfff7ddb63d0b4f28f6c174a36e81486a652056a4e21644378a22feda780fd +cf829cc21ba3e00e9201f02a8feb2fe60f937315f1b267457717e8cd824f8e1d diff --git a/src/vdbe.c b/src/vdbe.c index 4139bd7b03..dc39bebd8c 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -3250,7 +3250,53 @@ op_column_restart: ** page - where the content is not on an overflow page */ zData = pC->aRow + aOffset[p2]; if( t<12 ){ - sqlite3VdbeSerialGet(zData, t, pDest); + switch( t ){ + case 0: + pDest->flags = MEM_Null; + break; + case 1: + pDest->u.i = (i8)zData[0]; + pDest->flags = MEM_Int; + testcase( pDest->u.i<0 ); + break; + case 2: + pDest->u.i = 256*(i8)zData[0] | zData[1]; + pDest->flags = MEM_Int; + testcase( pDest->u.i<0 ); + break; + case 3: + pDest->u.i = 65536*(i8)zData[0] | (zData[1]<<8) | zData[2]; + pDest->flags = MEM_Int; + testcase( pDest->u.i<0 ); + break; + case 4: + pDest->u.i = 16777216*(i8)zData[0] | (zData[1]<<16) + | (zData[2]<<8) | zData[3]; + pDest->flags = MEM_Int; + testcase( pDest->u.i<0 ); + break; + case 5: + pDest->u.i = (((u32)zData[2]<<24)|(zData[3]<<16)|(zData[4]<<8)|zData[5]) + + (((i64)1)<<32)*(256*(i8)zData[0] | zData[1]); + pDest->flags = MEM_Int; + testcase( pDest->u.i<0 ); + break; + case 6: { + u64 x = ((u64)(((u32)zData[0]<<24)|(zData[1]<<16)|(zData[2]<<8)|zData[3])<<32) + + (((u32)zData[4]<<24)|(zData[5]<<16)|(zData[6]<<8)|zData[7]); + memcpy(&pDest->u.i, &x, sizeof(x)); + pDest->flags = MEM_Int; + testcase( pDest->u.i<0 ); + break; + } + case 8: + case 9: + pDest->u.i = t-8; + pDest->flags = MEM_Int; + break; + default: + sqlite3VdbeSerialGet(zData, t, pDest); + } }else{ /* If the column value is a string, we need a persistent value, not ** a MEM_Ephem value. This branch is a fast short-cut that is equivalent