PostgreSQL btree_gist 插件源码分析
GIST 简介 GIST(Generalized Search Tree),是通用搜索树的缩写,是一种平衡的树状结构的访问方法,是实现很多索引方案的基础模板,包括 B 树,R 树,RD 树等等。 GIST 的一个优点是它允许数据类型领域的专家(而不是数据库专家)开发自定义数据类型的访问方法,可以理解为,如果你对某个数据类型有独特的理解,可以在 PostgreSQL 中实现自己的索引访问方...
GIST 简介 GIST(Generalized Search Tree),是通用搜索树的缩写,是一种平衡的树状结构的访问方法,是实现很多索引方案的基础模板,包括 B 树,R 树,RD 树等等。 GIST 的一个优点是它允许数据类型领域的专家(而不是数据库专家)开发自定义数据类型的访问方法,可以理解为,如果你对某个数据类型有独特的理解,可以在 PostgreSQL 中实现自己的索引访问方...
前记 SQLite3 中有比较复杂的内存管理,为 SQLite3 的稳定和高性能提供了保障. 主要参考资料: 官方文档 malloc.c, mem2.c SQLite3 内存系统的特点 强大的内存分配失败处理机制 无内存泄露 内存使用限制 可配置的内存分配器 防止崩溃和内存碎片问题 内存使用统计 友好的内存调试功能 尽量减少内存分配 ...
前记 在这一篇内容中,我们来看一下 insert into 语句是如何工作的,这里我们先给出了 insert into test values(88, 1.88, "Hello World") 的 vdbe 吗,因为我们在前一篇中已经讲述了关于 SQLite3 数据格式的相关内容,因此我们在这一章中讲述数据被插入之前是如何被组织的. addr opcode p1 ...
前记 这一篇我们将分析一下 SQlite3 的文件格式. 参考链接. 我们需要用到一个网站,可以直观的展示 sqlite3 的格式,带有互动功能. 同时我们还可以使用 sqlite 自带的一个 showdb 的工具来查看 sqlite 的数据库的一些信息. 格式分析 sqlite3 的数据文件被分成了固定大小的页面,然后页面之间通过一个页编号来进行互相引用。 其中页面可以被分为:...
在本文中我们会介绍 SQLite3 中用于添加指令的 vdbe 函数,
在最近分析 SQLITE3 的源码的时候,发现查询 SQLITE3 VDBE 虚拟机的执行指令很不方便,指令都是定义的类似如下的宏 #define OP_Savepoint 0 #define OP_AutoCommit 1 #define OP_Transaction 2 #define OP_Checkpoint 3 #define OP_Jou...
前记 flowchart LR A(["shell_exec"]) --> B(["1.sqlite3_prepare_v2"]) A(["shell_exec"]) --> C(["2.exec_prepared_stmt"]) 函数调用图: shell_exec 先调用 sqlite3_prepare_v3 生成 VDBE 虚拟指令 shell_Ex...
前记 在 sqlite 初始化的过程中,会首先创建 sqlite_schema(sqlite_master) 这个表,然后执行 select * from main.sqlite_master 语句,将数据库中的表,索引,视图,触发器等信息加载到 sqlite->aDb->pSchema 中。 整体结构图 flowchart LR A(["sqlite init"]) -...
前记 我们此次对 SQlite3 3.40 版本的源码进行分析,可以直接在 gitee 上进行下载。操作系统我们这次使用的是 Rocky Linux 9 ,当然也可以选择其他系统。此外我们还需要的软件是 Vscode ,可以很方便的帮助我们分析代码,调试代码。 环境准备 下载代码 git clone -b version-3.40.0 https://gitee.com/mirror...
LLDB 打印数组 在 vscode 中使用 lldb 调试 C/C++ 时,我们想打印数组的时候,可以在 DEBUG 命令行输入 parray 即可输出数组,也可以在 WATCH 窗口中使用 var,[N] 的语法形式,注意逗号后不要有空格。