VDBE是SQLite的核心,理解的VDBE的内部工作机制对于理解SQLite是如何工作的十分重要。 从SQLite Architectue图中可以看出, VDBE处在SQLite的中心位置。VDBE实现了一个可以执行 VDBE指令的虚拟机。VDBE指令由opcode和operand组成, 指令可以有0~4个operand. 如果了解汇编语言, 就可以很容易的理解VDBE指令。
查看VDBE 指令方法
sqlite>.explain
sqlite>CREATE TABLE examp(one text, two int);
sqlite>EXPLAIN INSERT INTO examp VALUES('Hello, World!',99);
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Trace 0 0 0 00
1 Goto 0 10 0 00
2 OpenWrite 0 4 0 2 00
3 NewRowid 0 2 0 00
4 String8 0 3 0 Hello, World! 00
5 Integer 99 4 0 00
6 MakeRecord 3 2 5 ad 00
7 Insert 0 5 2 examp 1b
8 Close 0 0 0 00
9 Halt 0 0 0 00
10 Transaction 0 1 0 00
11 VerifyCookie 0 3 0 00
12 TableLock 0 4 1 examp 00
13 Goto 0 2 0 00
具体每个opcode的意义可以查这个网页: http://www.sqlite.org/opcode.html
或者
直接阅读vdbe.c 源代码文件中的sqlite3VdbeExec(vdbe* p)函数