SQlite源码分析

insert的主要关系

主要的入口是sqlite3Insert()函数,当一条insert语句经过词法分析器,语法分析器,到代码生成器,主要调用insert.c 的sqlite3Insert()函数,完成代码的生成。 在代码生成器中sqlite3Insert()函数调用生命的函数,去查询数据库字典表中是否存在要查询的表,及 表中索引(还要排除虚拟表),对语法分析得到的数据表,数据列,索引列进行比对,查看是否符合条件的约束,insert的触发器,唯一性等的约束,针对integer主键的问题是可以不给定有数据库中给定相关数据(表中最大值),还有就是用户可以给定表中没有的,在insert语句行含有select子句的还要考虑查询数据的关联性,是否需要额外的临时表,或者是有怎样的查询效率等的优化。在进行数据插入时,还有就是各种可能会使数据操作报出异常,而需要终止或回滚的返回。来保持数据的一致性。最终返回的vdbe 的指令集,看懂这些指令集需要去找最新的指令集参照(在此我没有找到)。