主要观点:之前探索了 SQLite 文件格式和构建了简单 SQL 解析器,现在要将它们整合实现查询评估器,本文为其奠定基础并能处理基本 SELECT 语句,后续会添加更多功能;
关键信息:创建测试数据库queries_test.db
并插入数据,更新Pager
、Value
和Cursor
相关代码,定义Operator
和Planner
用于评估SELECT
语句,在 REPL 中测试查询评估器;
重要细节:
- 测试数据库创建及插入数据代码
sqlite3 queries_test.db...
,注意不能用现有 SQLite 数据库测试以免出现问题; Pager
代码更新,通过Arc<Mutex<_>>
和Arc<RwLock<_>>
使其可共享,read_page
和load_page
方法相应更新,注意获取读写锁的顺序和缓存检查;Value
枚举的OwnedValue
版本定义及转换方法From<Value<'p>> for OwnedValue
和显示方法std::fmt::Display for OwnedValue
;Cursor
结构体增加owned_field
方法用于获取字段值;Operator
枚举定义及SeqScan
结构体用于扫描表并生成行,compile_select
方法用于从SELECT
语句构建Operator
;- 在 REPL 中创建
eval_query
函数用于评估查询,在cli
函数中使用该函数并处理不同输入,可在 REPL 中运行简单SELECT
语句并得到输出。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。