2021SC@SDUSC
OP_NewRowid
OP_NewRowid的内容:
case OP_NewRowid : {
i64 v=0;
int res=0;
VdbeCursor *pC= p->apCsr[pOp->p1];;
sqlite3BtreeLast(pC->pCursor, &res);
if( res ){
v = 1; }
}
OP_NewRowid操作符中的sqlite3BtreeLast函数会移动游标到表最后输入数据的地方,但是由于是空表,所以返回res为1,那么v=1,及rowid为1,并把v赋值给p2。pc加1为10,下一个要执行的是aOp[10] OP_Null。
OP_Null
OP_Null的内容:
case OP_Null : {
int cnt;
cnt = pOp->p3 - pOp->p2; //cnt=-3
while( cnt>0 ){

本文详细解析SQLite数据库引擎的OP_NewRowid、OP_Null、OP_Insert、OP_Close、OP_MustBeInt、OP_NotExists、OP_Rowid和OP_IsNull等操作符的实现,涉及游标管理、数据插入、Btree和Pager模块等内容。
最低0.47元/天 解锁文章
1031

被折叠的 条评论
为什么被折叠?



