博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

jiaxiyingying

加喜英英的家 注:文章多为转载,作为学习所用 QQ:122827420
  jiaxi.cublog.cn

关于作者
姓名:jiaxi
职业:计算机
年龄:
位置:武汉
个性介绍:
|| << >> ||
我的分类


VDBE的操作码

操作码VDBE的机器语言由围绕于数据库管理的128个操作码(opcode)组成.

操作码包括:

AddAndCallbackClearCloseColumnCommitCleatIndexDeleteDestroyDivideDropIndexDropTableDupEqFifoReadFifoWriteGeGotoGtHaltIdxDeleteIdxGEIdxGTIdxRowidIfIfNotInsertIntegerIsNullLastLeLtMakeRecordMemIncrMemLoadMemMaxMemMoveMemNullMemStoreMoveGeMoveGtMoveLeMoveltNeNegativeNewRowidNextNotExistsNotFoundNotNullNullNullRowOpenReadOpenWriteOrParseSchemaPopPrevPullPushPutIntKeyRewindRowDataRowidSetNumColumnsSubtractTransaction

每一个操作码具体的含义详细描述如下:

Add 弹出栈顶两个元素,并把它们相加后的结果压入栈中

And 弹出栈顶两个元素,进行与操作,把与运算后的结果压入栈中

Callback 弹出栈顶的P1个元素并在屏幕上打印出来,栈顶的P1个元素就是查询出来的一行记录

Clear 清空数据库文件中根页面为P1的表或索引中的所有记录,但保留表或索引结构,相当于删除表中的所有记录

Close 关闭游标P1

Column 从游标P1所指向的行记录中取出第P2列的值压入栈中

Commit 提交事务,完成此次操作

CreateIndex 在数据库文件中申请分配一个索引结构,并把索引的根页面号压入栈中

CreateTable 在数据库文件中申请分配一个表结构,并把表的根页面号压入栈中

Delete 删除游标P1所指向的行记录

Destroy 在文件中完全删除游标P1所指向的表或索引的所有记录和结构,相当于删除表或索引

Divide 弹出栈顶的2个元素,用第一个数(栈顶元素)除以第二个数,并把运算结果压入栈中

DropIndex 清除内存中的表述数据库中索引名为P3的索引结构

DropTable 清除内存中的表述数据库中表名为P3的表结构

Dup 复制栈顶的第P1个元素,并把复制得到的数据压入栈中。栈顶元素计为0元素。例如“Dup 0 0将把栈顶元素复制一份放入栈顶

Eq 从栈顶弹出两个元素进行比较,如果相等,则跳转到P2指令处执行,否则继续执行下一条指令

FifoRead 从队列中读出一个数据并把此数据压入栈中,如果队列为空,则直接跳转到P2指令处执行

FifoWrite 把栈顶的整数写入到队列中

Ge 从栈顶弹出两个元素,如果第一个(栈顶)大于或等于第二个,则跳转到P2指令处,否则继续执行下一条指令

Goto 无条件跳转指令,跳转到P2指令处执行

Gt从栈顶弹出两个元素,如果第一个(栈顶)大于第二个,则跳转到P2指令处,否则继续执行下一条指令

Halt 停止退出指令,自动关闭所有打开的游标。

IdxDelete 删除索引表中记录号为栈顶元素的记录

IdxGE 比较索引表中游标为P1的行记录与栈顶元素,如果是大于或等于,则跳转到P2指令处,否则继续下一条指令,无论哪种情况,栈顶元素都要弹出一次。

IdxGT 比较索引表中游标为P1的行记录与栈顶元素,如果是大于,则跳转到P2指令处,否则继续下一条指令,无论哪种情况,栈顶元素都要弹出一次。

IdxRowid 把索引表中的记录条数压入栈中作为下一条记录号。

If 从栈顶中弹出一个值,如果为真,则跳转到P2指令处,否则继续执行下一条指令

IfNot从栈顶中弹出一个值,如果为假,则跳转到P2指令处,否则继续执行下一条指令

Insert 插入一条记录到游标P1所指向的表中。从栈顶弹出两个元素,第一个作为记录数据,第二个作为记录号

Integer 把整数P1压入栈中

IsNull 检查栈顶元素是否为NULL,如果为空就跳转到P2指令处。如果P1 是正数,无论是否跳转都弹出栈顶的P1个元素。如果P1为负数,则只在跳转发生的情况下弹出栈顶的P1个元素。

Last 指向游标为P1的表或索引中的最后一条记录

Le 从栈顶弹出两个元素,如果第一个(栈顶)小于或等于第二个,则跳转到P2指令处,否则继续执行下一条指令

Lt 从栈顶弹出两个元素,如果第一个(栈顶)小于第二个,则跳转到P2指令处,否则继续执行下一条指令

MakeRecord 从栈顶中弹出P1个元素,把这P1个弹出值合并为一条记录压入栈中,这就是要插入表中的数据记录

MemIncr 把内存单元P2的整数值加P1

MemInt 把整数P1保存到内存单元P2

MemLoad 把内存单元P1的值复制一份压入栈中,如果内存单元是字符串,那么把内存单元的地址指针压入到栈中

MemMax 把内存单元P1的值设为当前值与栈中值的最大值

MemMove 把内存单元P2中的值移到内存单元P1中,P2单元的值用NULL表示

MemNull 存储NULL到内存单元P1

MemStore 把栈顶值写到内存单元P1中,如果P2是1,那么出栈一次,否则不出栈

MoveGe 弹出栈顶元素作为记录号,定位游标P1到大于或等于此记录号的行,如果没有记录大于或等于此记录号,则跳转到P2指令处

MoveGt 弹出栈顶元素作为记录号,定位游标P1到大于此记录号的行,如果没有记录大于此记录号,则跳转到P2指令处

MoveLe弹出栈顶元素作为记录号,定位游标P1到小于或等于此记录号的行,如果没有记录小于或等于此记录号,则跳转到P2指令处

MoveLt 弹出栈顶元素作为记录号,定位游标P1到小于此记录号的行,如果没有记录小于此记录号,则跳转到P2指令处

Multiply 从栈顶中弹出两个元素,把他们相乘,然后把结果压入到栈中

Ne从栈顶弹出两个元素进行比较,如果不相等,则跳转到P2指令处执行,否则继续执行下一条指令

Negative 把栈顶的整数用它的相反数替换

NewRowid产生一个整数作为新的记录数,此数因该比所有已有的记录号要大,把这个数压入到栈顶

Next 移动游标到下一条记录

NotExists 把栈顶值作为记录号,如果P1表中没有此记录号,那么跳转到P2,否则,把游标指向该行记录,然后把栈顶元素出栈

NotFound 如果P1表中没有记录与栈顶中的记录相符,那么跳转到P2,否则,把游标指向该行记录,然后把栈顶元素出栈

NotNull 如果栈顶的P1(绝对值)个数据不都是NULL,那么跳转到P2指令处,否则不跳转,如果P1大于0,那么弹出栈顶的P1个元素,否则,栈保持不变。

Null 压入NULL到栈中

NullRow 移动游标P1到一个空行

OpenRead 以只读方式打开数据库文件中根页面为P2的表

OpenWrite 以可写方式打开数据库文件中根页面为P2的表

Or 从栈顶弹出两个元素,把它们进行或运算,然后把运算结果压入到栈中

ParseSchema 从字典表中读入并分析所有符合where条件(P3)的记录

Pop 从栈顶中弹出P1个元素

Prev 移动游标到上一条记录

Pull 把第P1个元素从栈中移出并把它压到栈顶,如“Pull 1 0相当于把栈顶的两个元素交换位置

Push 把第P1个元素的值用栈顶元素的值来替换,然后把栈顶元素出栈

PutIntKey 出栈两次,把表中记录号为栈中弹出的记录号的记录用栈顶记录替换

Rewind 把游标指向下一条记录,如果记录为空那么跳转到P2指令处,常用这来实现循环

RowData 把游标所指向的行记录压入到栈中

Rowid 把游标所指向的记录号压入到栈中

SetNumColumns 设置表P1的列数为P2

String 字符串P3被压入到栈中

Subtract 从栈中弹出两个元素,用第一个(栈顶)减去第二个,并把结果压入到栈中

Transaction 开始一个事务,P1是要打开的数据库的索引

发表于: 2008-01-05,修改于: 2008-01-05 21:57,已浏览1784次,有评论0条 推荐 投诉


网友评论
 发表评论