先扔一下我们伟大的助教提供的题面。
注:以下做法仅供娱乐,大多数都十分复杂且低效,请尽量不要尝试。
CREATE TABLE
考虑实现一个 array<ValEx>。
初始化时由于字段数未知,需要实现一个 list<ValEx> 来支持插入,最后将其转为 array<ValEx>。
INSERT
考虑实现一个 vector<array<Val>>。
需要实现一个 list<Val> 来支持插入,最后将其转为 array<Val>。
另一种实现方式可以使用 array<vector<Val>>,即在字段列表后逐一 append 数据,这样可以省去 list<Val>。
WHERE (<condition_clause>)
考虑对给出的条件子句构造一棵表达式树,每次递归求值。
建树后,进行一次类型推导判断是否 ERROR。
Parsing
为了保证 SYNTAX ERROR 返回及时,且内存利用充分,考虑动态构造上述的 list<>,并且随时准备报错并手动析构现有数据。
实现细节
尽量使用指针来做到动态构造、析构。
为了保持代码朴素,尽量减少不必要的封装,多使用裸露的 malloc 和 free。(指针类型自行推导)