主要观点:之前探索了 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) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。