For every SQL statement, QDB generates a program for the virtual machine.
If you precede the SQL statement with the keyword
EXPLAIN, the
virtual machine doesn't execute the program. Instead, the program instructions are
returned like a query result. This feature is useful for debugging and learning how
the virtual machine operates, and for profiling an SQL statement. The following example
shows the output from the statement
EXPLAIN DELETE FROM tbl1 WHERE
two<20;:
addr |
opcode |
p1 |
p2 |
p3 |
0 |
Transaction |
0 |
0 |
|
1 |
VerifyCookie |
219 |
0 |
|
2 |
ListOpen |
0 |
0 |
|
3 |
Open |
0 |
3 |
tbl1 |
4 |
Rewind |
0 |
0 |
|
5 |
Next |
0 |
12 |
|
6 |
Column |
0 |
1 |
|
7 |
Integer |
20 |
0 |
|
8 |
Ge |
0 |
5 |
|
9 |
Recno |
0 |
0 |
|
10 |
ListWrite |
0 |
0 |
|
11 |
Goto |
0 |
5 |
|
12 |
Close |
0 |
0 |
|
13 |
ListRewind |
0 |
0 |
|
14 |
OpenWrite |
0 |
3 |
|
15 |
ListRead |
0 |
19 |
|
16 |
MoveTo |
0 |
0 |
|
17 |
Delete |
0 |
0 |
|
18 |
Goto |
0 |
15 |
|
19 |
ListClose |
0 |
0 |
|
20 |
Commit |
0 |
0 |
|
Note:
You can make the program output more readable by first issuing the
.explain command to qdb, to enable output mode.
You can trace the execution of the QDB virtual machine by making it write messages to
standard output. This is done using the non-standard SQL
PRAGMA
command. You can turn tracing on with this command:
PRAGMA vdbe_trace=on;
To turn tracing off again, enter a similar statement but with on
changed to off.