mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-08 14:02:16 +03:00
Combine the OP_CreateTable and OP_CreateIndex opcodes of the bytecode engine
into a single OP_CreateBtree opcode. This simplifies the implementation and makes the bytecode programs clearer. FossilOrigin-Name: eb1202b5e43f1f029ad2bdf845509e7f31361e4dc189943e5e2bd4462e2ef3f3
This commit is contained in:
44
src/vdbe.c
44
src/vdbe.c
@@ -3409,7 +3409,7 @@ case OP_OpenWrite:
|
||||
assert( (pIn2->flags & MEM_Int)!=0 );
|
||||
sqlite3VdbeMemIntegerify(pIn2);
|
||||
p2 = (int)pIn2->u.i;
|
||||
/* The p2 value always comes from a prior OP_CreateTable opcode and
|
||||
/* The p2 value always comes from a prior OP_CreateBtree opcode and
|
||||
** that opcode will always set the p2 value to 2 or more or else fail.
|
||||
** If there were a failure, the prepared statement would have halted
|
||||
** before reaching this instruction. */
|
||||
@@ -5483,50 +5483,28 @@ case OP_ResetSorter: {
|
||||
break;
|
||||
}
|
||||
|
||||
/* Opcode: CreateTable P1 P2 * * *
|
||||
** Synopsis: r[P2]=root iDb=P1
|
||||
/* Opcode: CreateBtree P1 P2 P3 * *
|
||||
** Synopsis: r[P2]=root iDb=P1 flags=P3
|
||||
**
|
||||
** Allocate a new table in the main database file if P1==0 or in the
|
||||
** auxiliary database file if P1==1 or in an attached database if
|
||||
** P1>1. Write the root page number of the new table into
|
||||
** register P2
|
||||
**
|
||||
** The difference between a table and an index is this: A table must
|
||||
** have a 4-byte integer key and can have arbitrary data. An index
|
||||
** has an arbitrary key but no data.
|
||||
**
|
||||
** See also: CreateIndex
|
||||
** Allocate a new b-tree in the main database file if P1==0 or in the
|
||||
** TEMP database file if P1==1 or in an attached database if
|
||||
** P1>1. The P3 argument must be 1 (BTREE_INTKEY) for a rowid table
|
||||
** it must be 2 (BTREE_BLOBKEY) for a index or WITHOUT ROWID table.
|
||||
** The root page number of the new b-tree is stored in register P2.
|
||||
*/
|
||||
/* Opcode: CreateIndex P1 P2 * * *
|
||||
** Synopsis: r[P2]=root iDb=P1
|
||||
**
|
||||
** Allocate a new index in the main database file if P1==0 or in the
|
||||
** auxiliary database file if P1==1 or in an attached database if
|
||||
** P1>1. Write the root page number of the new table into
|
||||
** register P2.
|
||||
**
|
||||
** See documentation on OP_CreateTable for additional information.
|
||||
*/
|
||||
case OP_CreateIndex: /* out2 */
|
||||
case OP_CreateTable: { /* out2 */
|
||||
case OP_CreateBtree: { /* out2 */
|
||||
int pgno;
|
||||
int flags;
|
||||
Db *pDb;
|
||||
|
||||
pOut = out2Prerelease(p, pOp);
|
||||
pgno = 0;
|
||||
assert( pOp->p3==BTREE_INTKEY || pOp->p3==BTREE_BLOBKEY );
|
||||
assert( pOp->p1>=0 && pOp->p1<db->nDb );
|
||||
assert( DbMaskTest(p->btreeMask, pOp->p1) );
|
||||
assert( p->readOnly==0 );
|
||||
pDb = &db->aDb[pOp->p1];
|
||||
assert( pDb->pBt!=0 );
|
||||
if( pOp->opcode==OP_CreateTable ){
|
||||
/* flags = BTREE_INTKEY; */
|
||||
flags = BTREE_INTKEY;
|
||||
}else{
|
||||
flags = BTREE_BLOBKEY;
|
||||
}
|
||||
rc = sqlite3BtreeCreateTable(pDb->pBt, &pgno, flags);
|
||||
rc = sqlite3BtreeCreateTable(pDb->pBt, &pgno, pOp->p3);
|
||||
if( rc ) goto abort_due_to_error;
|
||||
pOut->u.i = pgno;
|
||||
break;
|
||||
|
Reference in New Issue
Block a user