Small. Fast. Reliable.
Choose any three.
Bytecode()和Tables_Used()表值函数

1.概述

Bytecode和table_used是SQLite内置的虚拟表,用于访问有关准备好的语句的信息。字节码和table_used都可以用作表值函数。它们采用一个必需的参数,该参数可以是SQL语句的文本,也可以是指向现有的准备好的语句的指针。字节码函数为 准备好的语句中的每个字节码操作返回一行结果。table_used函数为由prepared语句访问的每个持久性btree(表或索引)返回一行。

2.用法

仅当使用-DSQLITE_ENABLE_BYTECODE_VTAB编译时选项编译SQLite时,字节码表和tables_used表才可用。该CLI已编制这种方式,所以你可以使用标准的 CLI作为测试平台,以实验性功能。

这两个虚拟表都是只读的同义虚拟表。您可以通过在SELECT语句的FROM子句中直接提及它们来使用它们。它们都需要一个参数,即要分析的SQL语句。例如:

SELECT * FROM bytecode('SELECT * FROM bytecode(?1)');

参数可以是SQL语句的文本,在这种情况下,将返回该语句的字节码(或tables_used),或者参数可以是诸如?1或$ stmt之类的参数,该参数随后绑定到已准备好的语句对象使用 sqlite3_bind_pointer()接口。在sqlite3_bind_pointer()接口中使用“ stmt-pointer”指针类型。

2.1。架构图

字节码表的架构为:

创建表字节码(
  地址INT,
  操作码TEXT,
  p1 INT,
  p2 INT,
  p3 INT,
  p4 TEXT,
  p5 INT,
  评论TEXT,
  subprog TEXT,
  隐藏
);

前八列是实现该语句的虚拟机中单个字节码的地址,操作码和操作数。这些列与使用EXPLAIN时输出的列相同。字节码虚拟表显示了预处理语句中的所有操作,包括预处理语句的主体和用于实现触发器或外键动作的子程序。对于准备好的语句的主体,“ subprog”字段为NULL,对于触发器和外键操作,该字段为触发器名称或字符串“(FK)”。

table_used表的架构为:

创建表table_used(
  输入TEXT,
  模式TEXT,
  名称TEXT,
  wr INT,
  subprog TEXT,
  隐藏
);

table_used表旨在显示准备好的语句读取或写入数据库文件的哪些btree,既可以通过主语句本身,也可以通过相关的触发器和外键动作来读取或写入。列如下: