2021SC@SDUSC
概述
SQLite的工作方式是将SQL语句转换为字节码,然后在虚拟机中运行该字节码。本节描述字节码引擎如何工作。
字节码引擎(Bytecode Engine)
代码生成器创建的字节码程序由虚拟机运行。
虚拟机本身完全包含在单个源文件vdbe.c中。vdbe.h头文件定义了虚拟机与SQLite库其余部分之间的接口,vdbeInt.h定义了虚拟机本身专用的结构和接口。各种其他vdbe*.c文件是虚拟机的助手。vdbeaux.c文件包含虚拟机使用的实用程序和库的其余部分用于构造VM程序的接口模块。vdbeapi.c文件包含虚拟机的外部接口,如sqlite3_bind_int()和sqlite3_step()。单个值(字符串、整数、浮点数和blob)存储在名为“Mem”的内部对象中,该对象由vdbemem.c实现。
SQLite使用对C语言例程的回调来实现SQL函数。甚至内置的SQL函数也是这样实现的。大多数内置SQL函数(例如:abs()、count()、substr()等)都可以在func.c源文件中找到。日期和时间转换函数可在Date.c中找到。代码生成器直接将一些函数(如coalesce()和typeof()实现为字节码。
VDBE全称为虚拟数据库引擎(virtual database engine);它是对真实计算机资源环境的一个抽象。它的原理类似于Java中的JVM(java虚拟机),它们实现了这两种语言跨平台性。
vdbeInt.h代码分析
一些方法和结构体的条件编译和预处理
typedef struct VdbeOp Op;
/*
** Boolean values
*/
typedef unsigned char Bool;
/* Opaque type used by code in vdbesort.c
**Opaque类型被vdbesort.c文件中的代码使用
*/
typedef struct VdbeSorter VdbeSorter;