diff options
author | drh <drh@noemail.net> | 2001-01-13 14:34:05 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2001-01-13 14:34:05 +0000 |
commit | ae85dc8b0b06ebbf86bcad4e4d7119a5741fbcec (patch) | |
tree | dc15f520521376992b889e96c8a79a3c22a976ef /src/vdbe.c | |
parent | 993c2a7c8f48ab2ac61a7eb63d8a3b30d6a937c5 (diff) | |
download | sqlite-ae85dc8b0b06ebbf86bcad4e4d7119a5741fbcec.tar.gz sqlite-ae85dc8b0b06ebbf86bcad4e4d7119a5741fbcec.zip |
Changes to the DBBE. Moving toward having many more
backend driver choices. (CVS 176)
FossilOrigin-Name: c0730217a04323a1a73d125e3e7da32bcc8d58fc
Diffstat (limited to 'src/vdbe.c')
-rw-r--r-- | src/vdbe.c | 89 |
1 files changed, 45 insertions, 44 deletions
diff --git a/src/vdbe.c b/src/vdbe.c index bfdb65b79..749f1e039 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -41,7 +41,7 @@ ** But other routines are also provided to help in building up ** a program instruction by instruction. ** -** $Id: vdbe.c,v 1.49 2000/12/10 18:35:20 drh Exp $ +** $Id: vdbe.c,v 1.50 2001/01/13 14:34:07 drh Exp $ */ #include "sqliteInt.h" #include <unistd.h> @@ -696,7 +696,7 @@ static void Cleanup(Vdbe *p){ p->azColName = 0; for(i=0; i<p->nCursor; i++){ if( p->aCsr[i].pCursor ){ - p->pBe->CloseCursor(p->aCsr[i].pCursor); + p->pBe->x->CloseCursor(p->aCsr[i].pCursor); p->aCsr[i].pCursor = 0; } } @@ -713,7 +713,7 @@ static void Cleanup(Vdbe *p){ p->nMem = 0; for(i=0; i<p->nList; i++){ if( p->apList[i] ){ - p->pBe->CloseTempFile(p->pBe, p->apList[i]); + p->pBe->x->CloseTempFile(p->pBe, p->apList[i]); p->apList[i] = 0; } } @@ -953,6 +953,7 @@ int sqliteVdbeExec( Op *pOp; /* Current operation */ int rc; /* Value to return */ Dbbe *pBe = p->pBe; /* The backend driver */ + DbbeMethods *pBex = pBe->x; /* The backend driver methods */ sqlite *db = p->db; /* The database */ char **zStack; Stack *aStack; @@ -1809,10 +1810,10 @@ int sqliteVdbeExec( for(j=p->nCursor; j<=i; j++) p->aCsr[j].pCursor = 0; p->nCursor = i+1; }else if( p->aCsr[i].pCursor ){ - pBe->CloseCursor(p->aCsr[i].pCursor); + pBex->CloseCursor(p->aCsr[i].pCursor); } do { - rc = pBe->OpenCursor(pBe,pOp->p3,pOp->p2,&p->aCsr[i].pCursor); + rc = pBex->OpenCursor(pBe,pOp->p3,pOp->p2,&p->aCsr[i].pCursor); switch( rc ){ case SQLITE_BUSY: { if( xBusy==0 || (*xBusy)(pBusyArg, pOp->p3, ++busy)==0 ){ @@ -1853,7 +1854,7 @@ int sqliteVdbeExec( case OP_Close: { int i = pOp->p1; if( i>=0 && i<p->nCursor && p->aCsr[i].pCursor ){ - pBe->CloseCursor(p->aCsr[i].pCursor); + pBex->CloseCursor(p->aCsr[i].pCursor); p->aCsr[i].pCursor = 0; } break; @@ -1871,11 +1872,11 @@ int sqliteVdbeExec( VERIFY( if( tos<0 ) goto not_enough_stack; ) if( i>=0 && i<p->nCursor && p->aCsr[i].pCursor ){ if( aStack[tos].flags & STK_Int ){ - pBe->Fetch(p->aCsr[i].pCursor, sizeof(int), + pBex->Fetch(p->aCsr[i].pCursor, sizeof(int), (char*)&aStack[tos].i); }else{ if( Stringify(p, tos) ) goto no_mem; - pBe->Fetch(p->aCsr[i].pCursor, aStack[tos].n, + pBex->Fetch(p->aCsr[i].pCursor, aStack[tos].n, zStack[tos]); } p->nFetch++; @@ -1937,11 +1938,11 @@ int sqliteVdbeExec( VERIFY( if( tos<0 ) goto not_enough_stack; ) if( VERIFY( i>=0 && i<p->nCursor && ) p->aCsr[i].pCursor ){ if( aStack[tos].flags & STK_Int ){ - alreadyExists = pBe->Test(p->aCsr[i].pCursor, sizeof(int), + alreadyExists = pBex->Test(p->aCsr[i].pCursor, sizeof(int), (char*)&aStack[tos].i); }else{ if( Stringify(p, tos) ) goto no_mem; - alreadyExists = pBe->Test(p->aCsr[i].pCursor,aStack[tos].n, + alreadyExists = pBex->Test(p->aCsr[i].pCursor,aStack[tos].n, zStack[tos]); } } @@ -1967,7 +1968,7 @@ int sqliteVdbeExec( if( VERIFY( i<0 || i>=p->nCursor || ) p->aCsr[i].pCursor==0 ){ v = 0; }else{ - v = pBe->New(p->aCsr[i].pCursor); + v = pBex->New(p->aCsr[i].pCursor); } VERIFY( NeedStack(p, p->tos+1); ) p->tos++; @@ -2000,7 +2001,7 @@ int sqliteVdbeExec( nKey = sizeof(int); zKey = (char*)&aStack[nos].i; } - pBe->Put(p->aCsr[i].pCursor, nKey, zKey, + pBex->Put(p->aCsr[i].pCursor, nKey, zKey, aStack[tos].n, zStack[tos]); } POPSTACK; @@ -2028,7 +2029,7 @@ int sqliteVdbeExec( nKey = aStack[tos].n; zKey = zStack[tos]; } - pBe->Delete(p->aCsr[i].pCursor, nKey, zKey); + pBex->Delete(p->aCsr[i].pCursor, nKey, zKey); } POPSTACK; break; @@ -2082,29 +2083,29 @@ int sqliteVdbeExec( VERIFY( if( NeedStack(p, tos) ) goto no_mem; ) if( VERIFY( i>=0 && i<p->nCursor && ) (pCrsr = p->aCsr[i].pCursor)!=0 ){ if( p->aCsr[i].keyAsData ){ - amt = pBe->KeyLength(pCrsr); + amt = pBex->KeyLength(pCrsr); if( amt<=sizeof(int)*(p2+1) ){ aStack[tos].flags = STK_Null; break; } - pAddr = (int*)pBe->ReadKey(pCrsr, sizeof(int)*p2); + pAddr = (int*)pBex->ReadKey(pCrsr, sizeof(int)*p2); if( *pAddr==0 ){ aStack[tos].flags = STK_Null; break; } - z = pBe->ReadKey(pCrsr, *pAddr); + z = pBex->ReadKey(pCrsr, *pAddr); }else{ - amt = pBe->DataLength(pCrsr); + amt = pBex->DataLength(pCrsr); if( amt<=sizeof(int)*(p2+1) ){ aStack[tos].flags = STK_Null; break; } - pAddr = (int*)pBe->ReadData(pCrsr, sizeof(int)*p2); + pAddr = (int*)pBex->ReadData(pCrsr, sizeof(int)*p2); if( *pAddr==0 ){ aStack[tos].flags = STK_Null; break; } - z = pBe->ReadData(pCrsr, *pAddr); + z = pBex->ReadData(pCrsr, *pAddr); } zStack[tos] = z; aStack[tos].n = strlen(z) + 1; @@ -2127,11 +2128,11 @@ int sqliteVdbeExec( VERIFY( if( NeedStack(p, p->tos) ) goto no_mem; ) if( VERIFY( i>=0 && i<p->nCursor && ) (pCrsr = p->aCsr[i].pCursor)!=0 ){ - char *z = pBe->ReadKey(pCrsr, 0); + char *z = pBex->ReadKey(pCrsr, 0); if( p->aCsr[i].keyAsData ){ zStack[tos] = z; aStack[tos].flags = STK_Str; - aStack[tos].n = pBe->KeyLength(pCrsr); + aStack[tos].n = pBex->KeyLength(pCrsr); }else{ memcpy(&aStack[tos].i, z, sizeof(int)); aStack[tos].flags = STK_Int; @@ -2148,7 +2149,7 @@ int sqliteVdbeExec( case OP_Rewind: { int i = pOp->p1; if( VERIFY( i>=0 && i<p->nCursor && ) p->aCsr[i].pCursor!=0 ){ - pBe->Rewind(p->aCsr[i].pCursor); + pBex->Rewind(p->aCsr[i].pCursor); } break; } @@ -2161,7 +2162,7 @@ int sqliteVdbeExec( case OP_Next: { int i = pOp->p1; if( VERIFY( i>=0 && i<p->nCursor && ) p->aCsr[i].pCursor!=0 ){ - if( pBe->NextKey(p->aCsr[i].pCursor)==0 ){ + if( pBex->NextKey(p->aCsr[i].pCursor)==0 ){ pc = pOp->p2 - 1; }else{ p->nFetch++; @@ -2211,8 +2212,8 @@ int sqliteVdbeExec( int *aIdx; int nIdx; int j, k; - nIdx = pBe->DataLength(pCrsr)/sizeof(int); - aIdx = (int*)pBe->ReadData(pCrsr, 0); + nIdx = pBex->DataLength(pCrsr)/sizeof(int); + aIdx = (int*)pBex->ReadData(pCrsr, 0); if( nIdx>1 ){ k = *(aIdx++); if( k>nIdx-1 ) k = nIdx-1; @@ -2257,10 +2258,10 @@ int sqliteVdbeExec( Integerify(p, nos); newVal = aStack[nos].i; if( Stringify(p, tos) ) goto no_mem; - r = pBe->Fetch(pCrsr, aStack[tos].n, zStack[tos]); + r = pBex->Fetch(pCrsr, aStack[tos].n, zStack[tos]); if( r==0 ){ /* Create a new record for this index */ - pBe->Put(pCrsr, aStack[tos].n, zStack[tos], + pBex->Put(pCrsr, aStack[tos].n, zStack[tos], sizeof(int), (char*)&newVal); }else{ /* Extend the existing record */ @@ -2268,32 +2269,32 @@ int sqliteVdbeExec( int *aIdx; int k; - nIdx = pBe->DataLength(pCrsr)/sizeof(int); + nIdx = pBex->DataLength(pCrsr)/sizeof(int); if( nIdx==1 ){ aIdx = sqliteMalloc( sizeof(int)*4 ); if( aIdx==0 ) goto no_mem; aIdx[0] = 2; - pBe->CopyData(pCrsr, 0, sizeof(int), (char*)&aIdx[1]); + pBex->CopyData(pCrsr, 0, sizeof(int), (char*)&aIdx[1]); aIdx[2] = newVal; - pBe->Put(pCrsr, aStack[tos].n, zStack[tos], + pBex->Put(pCrsr, aStack[tos].n, zStack[tos], sizeof(int)*4, (char*)aIdx); sqliteFree(aIdx); }else{ - aIdx = (int*)pBe->ReadData(pCrsr, 0); + aIdx = (int*)pBex->ReadData(pCrsr, 0); k = aIdx[0]; if( k<nIdx-1 ){ aIdx[k+1] = newVal; aIdx[0]++; - pBe->Put(pCrsr, aStack[tos].n, zStack[tos], + pBex->Put(pCrsr, aStack[tos].n, zStack[tos], sizeof(int)*nIdx, (char*)aIdx); }else{ nIdx *= 2; aIdx = sqliteMalloc( sizeof(int)*nIdx ); if( aIdx==0 ) goto no_mem; - pBe->CopyData(pCrsr, 0, sizeof(int)*(k+1), (char*)aIdx); + pBex->CopyData(pCrsr, 0, sizeof(int)*(k+1), (char*)aIdx); aIdx[k+1] = newVal; aIdx[0]++; - pBe->Put(pCrsr, aStack[tos].n, zStack[tos], + pBex->Put(pCrsr, aStack[tos].n, zStack[tos], sizeof(int)*nIdx, (char*)aIdx); sqliteFree(aIdx); } @@ -2333,12 +2334,12 @@ int sqliteVdbeExec( Integerify(p, nos); oldVal = aStack[nos].i; if( Stringify(p, tos) ) goto no_mem; - r = pBe->Fetch(pCrsr, aStack[tos].n, zStack[tos]); + r = pBex->Fetch(pCrsr, aStack[tos].n, zStack[tos]); if( r==0 ) break; - nIdx = pBe->DataLength(pCrsr)/sizeof(int); - aIdx = (int*)pBe->ReadData(pCrsr, 0); + nIdx = pBex->DataLength(pCrsr)/sizeof(int); + aIdx = (int*)pBex->ReadData(pCrsr, 0); if( (nIdx==1 && aIdx[0]==oldVal) || (aIdx[0]==1 && aIdx[1]==oldVal) ){ - pBe->Delete(pCrsr, aStack[tos].n, zStack[tos]); + pBex->Delete(pCrsr, aStack[tos].n, zStack[tos]); }else{ k = aIdx[0]; for(j=1; j<=k && aIdx[j]!=oldVal; j++){} @@ -2349,7 +2350,7 @@ int sqliteVdbeExec( if( aIdx[0]*3 + 1 < nIdx ){ nIdx /= 2; } - pBe->Put(pCrsr, aStack[tos].n, zStack[tos], + pBex->Put(pCrsr, aStack[tos].n, zStack[tos], sizeof(int)*nIdx, (char*)aIdx); } } @@ -2365,7 +2366,7 @@ int sqliteVdbeExec( ** from the disk. */ case OP_Destroy: { - pBe->DropTable(pBe, pOp->p3); + pBex->DropTable(pBe, pOp->p3); break; } @@ -2374,7 +2375,7 @@ int sqliteVdbeExec( ** Compress, optimize, and tidy up the GDBM file named by P3. */ case OP_Reorganize: { - pBe->ReorganizeTable(pBe, pOp->p3); + pBex->ReorganizeTable(pBe, pOp->p3); break; } @@ -2396,9 +2397,9 @@ int sqliteVdbeExec( for(j=p->nList; j<=i; j++) p->apList[j] = 0; p->nList = i+1; }else if( p->apList[i] ){ - pBe->CloseTempFile(pBe, p->apList[i]); + pBex->CloseTempFile(pBe, p->apList[i]); } - rc = pBe->OpenTempFile(pBe, &p->apList[i]); + rc = pBex->OpenTempFile(pBe, &p->apList[i]); if( rc!=SQLITE_OK ){ sqliteSetString(pzErrMsg, "unable to open a temporary file", 0); } @@ -2468,7 +2469,7 @@ int sqliteVdbeExec( int i = pOp->p1; VERIFY( if( i<0 ) goto bad_instruction; ) if( VERIFY( i<p->nList && ) p->apList[i]!=0 ){ - pBe->CloseTempFile(pBe, p->apList[i]); + pBex->CloseTempFile(pBe, p->apList[i]); p->apList[i] = 0; } break; |