gpui 2
在上一篇文章中,我们创建了一个空白窗口,没有展示任何内容。今天,我们将在这个窗口中显示一个“HelloWorld”。 通过上一篇文章的介绍,我们了解到需要实现一个 Render 的 Trait 才能绘制内容。 我们先给出完整的代码,随后逐步解析: use gpui::{ App, Application, Bounds, Context, SharedString, Windo...
在上一篇文章中,我们创建了一个空白窗口,没有展示任何内容。今天,我们将在这个窗口中显示一个“HelloWorld”。 通过上一篇文章的介绍,我们了解到需要实现一个 Render 的 Trait 才能绘制内容。 我们先给出完整的代码,随后逐步解析: use gpui::{ App, Application, Bounds, Context, SharedString, Windo...
最近打算开始将学过的 Rust 语言使用起来,就选择了 GPUI 这一个 GUI 的框架,然后使用 gpui-compoent 这个库来提供组件,目的是为了实现一个类似于 DBeaver 的数据库客户端的工具,先从支持 PostgreSQL 开始,今天我们现在学习如何去创建一个窗口; 因为目前 GPUI 和 gpui-compoent 都没有正式的 crate,因此我们只能通过 git ...
在 SQLITE3 数据库的实现过程中会使用日志来实现 ACID 的功能。当然也可以使用 WAL 来实现。在这里我们讲述使用日志来实现 ACID.
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...