Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add a temporary sqlite2BtreeKeyCompare() function to help get regression tests passing again. (CVS 1332) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
d8d1c91e55f24d17233414facaa03136 |
User & Date: | danielk1977 2004-05-09 23:23:57.000 |
Context
2004-05-10
| ||
01:17 | Change some code that assumes the root-page of sqlite_master is 2 (it is now 1) (CVS 1333) (check-in: 37ae528fb8 user: danielk1977 tags: trunk) | |
2004-05-09
| ||
23:23 | Add a temporary sqlite2BtreeKeyCompare() function to help get regression tests passing again. (CVS 1332) (check-in: d8d1c91e55 user: danielk1977 tags: trunk) | |
20:40 | More btree.c bug fixing. It's getting closer but still not there yet. Move obsolete test scripts into the attic. (CVS 1331) (check-in: 9379c7c9cf user: drh tags: trunk) | |
Changes
Changes to src/btree.h.
︙ | ︙ | |||
9 10 11 12 13 14 15 | ** May you share freely, never taking more than you give. ** ************************************************************************* ** This header file defines the interface that the sqlite B-Tree file ** subsystem. See comments in the source code for a detailed description ** of what each interface routine does. ** | | | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | ** May you share freely, never taking more than you give. ** ************************************************************************* ** This header file defines the interface that the sqlite B-Tree file ** subsystem. See comments in the source code for a detailed description ** of what each interface routine does. ** ** @(#) $Id: btree.h,v 1.43 2004/05/09 23:23:57 danielk1977 Exp $ */ #ifndef _BTREE_H_ #define _BTREE_H_ /* TODO: This definition is just included so other modules compile. It ** needs to be revisited. */ |
︙ | ︙ | |||
83 84 85 86 87 88 89 | int sqlite3BtreeEof(BtCursor*); int sqlite3BtreePrevious(BtCursor*, int *pRes); int sqlite3BtreeKeySize(BtCursor*, u64 *pSize); int sqlite3BtreeKey(BtCursor*, u32 offset, u32 amt, void*); void *sqlite3BtreeKeyFetch(BtCursor*); int sqlite3BtreeDataSize(BtCursor*, u32 *pSize); int sqlite3BtreeData(BtCursor*, u32 offset, u32 amt, void*); | < | 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | int sqlite3BtreeEof(BtCursor*); int sqlite3BtreePrevious(BtCursor*, int *pRes); int sqlite3BtreeKeySize(BtCursor*, u64 *pSize); int sqlite3BtreeKey(BtCursor*, u32 offset, u32 amt, void*); void *sqlite3BtreeKeyFetch(BtCursor*); int sqlite3BtreeDataSize(BtCursor*, u32 *pSize); int sqlite3BtreeData(BtCursor*, u32 offset, u32 amt, void*); char *sqlite3BtreeIntegrityCheck(Btree*, int *aRoot, int nRoot); struct Pager *sqlite3BtreePager(Btree*); #ifdef SQLITE_TEST int sqlite3BtreeCursorInfo(BtCursor*, int*); void sqlite3BtreeCursorList(Btree*); int sqlite3BtreeFlags(BtCursor*); int sqlite3BtreePageDump(Btree*, int, int recursive); #endif #endif /* _BTREE_H_ */ |
Changes to src/vdbe.c.
︙ | ︙ | |||
39 40 41 42 43 44 45 | ** ** Various scripts scan this source file in order to generate HTML ** documentation, headers files, or other derived files. The formatting ** of the code in this file is, therefore, important. See other comments ** in this file for details. If in doubt, do not deviate from existing ** commenting and indentation practices when changing or adding code. ** | | | 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | ** ** Various scripts scan this source file in order to generate HTML ** documentation, headers files, or other derived files. The formatting ** of the code in this file is, therefore, important. See other comments ** in this file for details. If in doubt, do not deviate from existing ** commenting and indentation practices when changing or adding code. ** ** $Id: vdbe.c,v 1.271 2004/05/09 23:23:58 danielk1977 Exp $ */ #include "sqliteInt.h" #include "os.h" #include <ctype.h> #include "vdbeInt.h" /* |
︙ | ︙ | |||
2740 2741 2742 2743 2744 2745 2746 | if( res<0 ){ rc = sqlite3BtreeNext(pCrsr, &res); if( res ){ pc = pOp->p2 - 1; break; } } | | | < | 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 | if( res<0 ){ rc = sqlite3BtreeNext(pCrsr, &res); if( res ){ pc = pOp->p2 - 1; break; } } /* FIX ME - the sqlite2BtreeKeyCompare() function is a temporary hack */ rc = sqlite2BtreeKeyCompare(pCrsr, zKey, nKey-4, 4, &res); if( rc!=SQLITE_OK ) goto abort_due_to_error; if( res>0 ){ pc = pOp->p2 - 1; break; } /* At this point, pCrsr is pointing to an entry in P1 where all but |
︙ | ︙ | |||
3470 3471 3472 3473 3474 3475 3476 | assert( nKey >= 4 ); rc = sqlite3BtreeMoveto(pCrsr, zKey, nKey-4, &res); if( rc!=SQLITE_OK ) goto abort_due_to_error; while( res!=0 ){ int c; /* TODO: sqlite3BtreeKeySize(pCrsr, &n); */ if( n==nKey | | | < | 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 | assert( nKey >= 4 ); rc = sqlite3BtreeMoveto(pCrsr, zKey, nKey-4, &res); if( rc!=SQLITE_OK ) goto abort_due_to_error; while( res!=0 ){ int c; /* TODO: sqlite3BtreeKeySize(pCrsr, &n); */ if( n==nKey /* FIX ME - the sqlite2BtreeKeyCompare() function is a temporary hack */ && sqlite2BtreeKeyCompare(pCrsr, zKey, nKey-4, 4, &c)==SQLITE_OK && c==0 ){ rc = SQLITE_CONSTRAINT; if( pOp->p3 && pOp->p3[0] ){ sqlite3SetString(&p->zErrMsg, pOp->p3, (char*)0); } goto abort_due_to_error; |
︙ | ︙ | |||
3593 3594 3595 3596 3597 3598 3599 | assert( i>=0 && i<p->nCursor ); assert( pTos>=p->aStack ); if( (pCrsr = p->aCsr[i].pCursor)!=0 ){ int res, rc; Stringify(pTos); assert( p->aCsr[i].deferredMoveto==0 ); | | | < | 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 | assert( i>=0 && i<p->nCursor ); assert( pTos>=p->aStack ); if( (pCrsr = p->aCsr[i].pCursor)!=0 ){ int res, rc; Stringify(pTos); assert( p->aCsr[i].deferredMoveto==0 ); /* FIX ME - the sqlite2BtreeKeyCompare() function is a temporary hack */ rc = sqlite2BtreeKeyCompare(pCrsr, pTos->z, pTos->n, 4, &res); if( rc!=SQLITE_OK ){ break; } if( pOp->opcode==OP_IdxLT ){ res = -res; }else if( pOp->opcode==OP_IdxGE ){ res++; |
︙ | ︙ |
Changes to src/vdbeInt.h.
︙ | ︙ | |||
297 298 299 300 301 302 303 304 305 306 | void sqlite3VdbeKeylistFree(Keylist*); void sqliteVdbePopStack(Vdbe*,int); int sqlite3VdbeCursorMoveto(Cursor*); int sqlite3VdbeByteSwap(int); #if !defined(NDEBUG) || defined(VDBE_PROFILE) void sqlite3VdbePrintOp(FILE*, int, Op*); #endif | > > | 297 298 299 300 301 302 303 304 305 306 307 308 | void sqlite3VdbeKeylistFree(Keylist*); void sqliteVdbePopStack(Vdbe*,int); int sqlite3VdbeCursorMoveto(Cursor*); int sqlite3VdbeByteSwap(int); #if !defined(NDEBUG) || defined(VDBE_PROFILE) void sqlite3VdbePrintOp(FILE*, int, Op*); #endif int sqlite2BtreeKeyCompare(BtCursor *, const void *, int, int, int *); |
Changes to src/vdbeaux.c.
︙ | ︙ | |||
1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 | } sqlite_search_count++; p->deferredMoveto = 0; } return SQLITE_OK; } /* ** The following is the comparison function for (non-integer) ** keys in the btrees. This function returns negative, zero, or ** positive if the first key is less than, equal to, or greater than ** the second. ** | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 | } sqlite_search_count++; p->deferredMoveto = 0; } return SQLITE_OK; } /* ** FIX ME ** ** This function is included temporarily so that regression tests have ** a chance of passing. It always uses memcmp(). */ int sqlite2BtreeKeyCompare( BtCursor *pCur, /* Pointer to entry to compare against */ const void *pKey, /* Key to compare against entry that pCur points to */ int nKey, /* Number of bytes in pKey */ int nIgnore, /* Ignore this many bytes at the end of pCur */ int *pResult /* Write the result here */ ){ void *pCellKey; u64 nCellKey; int rc; sqlite3BtreeKeySize(pCur, &nCellKey); nCellKey = nCellKey - nIgnore; if( nCellKey<=0 ){ *pResult = 0; return SQLITE_OK; } pCellKey = sqlite3BtreeKeyFetch(pCur); if( pCellKey ){ *pResult = memcmp(pCellKey, pKey, nKey>nCellKey?nCellKey:nKey); return SQLITE_OK; } pCellKey = sqliteMalloc( nCellKey ); if( pCellKey==0 ) return SQLITE_NOMEM; rc = sqlite3BtreeKey(pCur, 0, nCellKey, pCellKey); *pResult = memcmp(pCellKey, pKey, nKey>nCellKey?nCellKey:nKey); sqliteFree(pCellKey); return rc; } /* ** The following is the comparison function for (non-integer) ** keys in the btrees. This function returns negative, zero, or ** positive if the first key is less than, equal to, or greater than ** the second. ** |
︙ | ︙ |