构建你自己的 SQLite,第 5 部分:评估查询

主要观点:之前探索了 SQLite 文件格式和构建了简单 SQL 解析器,现在要将它们整合实现查询评估器,本文为其奠定基础并能处理基本 SELECT 语句,后续会添加更多功能;
关键信息:创建测试数据库queries_test.db并插入数据,更新PagerValueCursor相关代码,定义OperatorPlanner用于评估SELECT语句,在 REPL 中测试查询评估器;
重要细节:

  • 测试数据库创建及插入数据代码sqlite3 queries_test.db...,注意不能用现有 SQLite 数据库测试以免出现问题;
  • Pager代码更新,通过Arc<Mutex<_>>Arc<RwLock<_>>使其可共享,read_pageload_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语句并得到输出。
阅读 8
0 条评论