SQlite源码分析

访问授权

       如果查询被成功解析,下一阶段就是授权检查,以确保用户对查询中所引用到的这些表、用户自定义的函数以及其他对象具有适当的权限(SELECT/DELETE/INSERT?UPDATE).一些系统在语句解析阶段执行授权检查.然而这并不总是可行的.例如,支持行级安全检查的系统,直到执行时间才能进行完全的安全检查,因为,安全检查可能依赖于数据值.尽管理论上授权可以在编译时间内静态验证,但是,推迟授权验证到查询计划时间是有好处的.将安全检查推迟到执行时间的查询计划,可以在用户之间共享,而且,当安全条件变化时,不需要重新对查询进行编译.因此,部分安全检查通常被推迟到查询计划执行的时候.

       在编译期间对约束常量表达式进行约束检查,也是可能的.例如,一个UPDATE命令可能有一个形如SET EMP.salary=-1的子句.如果约束条件指定为正值,查询甚至没比亚执行.但是把这个检查工作推迟到执行时间,也是相当普遍的.