课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
对于大多数的后台编程开发程序员来说,服务器编程开发以及服务器架构等知识是需要重点掌握的,下面我们就一起来了解一下,SQLite库的架构都有哪些组成结构。
SQLite编译SQL文本为字节码bytecode,然后使用虚拟机运行字节码来工作。
sqlite3_prepare_v2()以及相关接口扮演着编译器的角色,将SQL文本转换成字节码。sqlite3_stmt对象是一个容器。该容器用于包含一个实现某一SQL的字节码程序。sqlite3_step()接口向虚拟机传递字节码程序,并执行字节码程序直到完成,或返回产生的一行结果,或碰到一个致命fatal错误,或被打断。
接口
大部分的C语言的接口在main.c,legacy.c和vdbeapi.c这些源文件中,尽管一些程序被分散在其他文件中,他们可以通过文件域访问数据结构。sqlite3_get_table()程序在table.c中实现.sqlite3_mprintf()程序在printf.c中实现。sqlite3_complete()接口在tokenize.c中.TCLInterface在tclsqlite.c中实现.
为了避免命名冲突,SQLite库的所有的外部符号都使用sqlite3前缀。那些用于外部使用的(换句话说,那些符号形成了SQLite的API)符号增加下划线,因此以sqlite3_开头。扩展API有时候在下划线前增加扩展名;例如:sqlite3rbu_或sqlite3session_。
分词器
当一个包含SQL句子的字符串被处理时,它先会被发送到分词器。分词器将SQL文本拆分成词,然后将词一个接一个传递给解析器。分词器代码在tokenize.c文件中。注意在这个设计中,分词器调用解析器。熟悉YACC和BISON的人可能习惯用相反的方式-让解析器调用分词器。让分词器调用解析器的方式更好一些,因为这样能够线程安全,并且执行的更快。
解析器
解析器根据上下文为词赋予意思。SQLite的解析器使用Lemonparsergenerator生成。Lemon和YACC/BISON做同样的事情,但是它使用另一种不容易出错的输入语法。Lemon生成一个可重入的,线程安全的parser。Lemon定义了一个非终端析构的概念,因此在遇到语法错误时它不会内存泄漏。在parse.y中可以找到驱动Lemon的语法文件和SQLite理解SQL语言的定义的文件。因为Lemon这个程序一般不会在开发机器上找到,所以Lemon完整的源代码(就一个C文件)被包含在SQLite分发的“tool”子目录中。
工具
内存分配程序,不区分大小写的字符串比较程序,可移植的文本转数字程序,以及其他工具在util.c文件中。在解析器使用的符号表使用hash.c中的hash表来存储。utf.c源文件包含了Unicode转换子程序。SQLite在printf.c有自己私有的printf()实现,包含了一些扩展。SQLite在random.c中有自己的伪随机数生成器
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!