- 博客(12)
- 收藏
- 关注
原创 SQLite源代码分析----------代码生成器④
2021SC@SDUSC目录OP_NewRowidOP_NullOP_InsertOP_CloseOP_MustBeIntOP_NotExistsOP_RowidOP_IsNull附源代码OP_NewRowidOP_NewRowid的内容:case OP_NewRowid : { i64 v=0; int res=0; VdbeCursor *pC= p->apCsr[pOp->p1];; sqlite3BtreeLast(pC->pCursor
2021-12-19 21:10:08
254
原创 SQLite源代码分析----------代码生成器③
2021SC@SDUSC目录OP_GotoOP_ReadCookieOP_IfOP_IntegerOP_SetCookieOP_IntegerOP_CreateTableOP_OpenWrite附源代码OP_GotoOP_Goto的内容:case OP_Goto: { pc = pOp->p2 - 1;}OP_Goto操作符就是跳转到p2所指向的操作码,这里是pc为0,经过for循环后pc为1。下一个要执行的是 aOp[1] OP_ReadCookie。OP_ReadCooki
2021-12-12 22:10:29
491
原创 SQLite源代码分析----------代码生成器②
2021SC@SDUSC这里写目录标题VDBE核心main函数OP_InitOP_TransactionOP_TableLock附录:VDBE核心 vdbe.c文件中存放着VDBE的执行方法(sqlite3VdbeExec),这是VDBE的核心,也是SQLite的核心,SQL解析器生成一个程序然后由VDBE执行SQL语句的工作。 下面是sqlite3VdbeExec函数的说明: int sqlite3
2021-12-05 19:10:33
434
原创 SQLite源代码分析----------代码生成器①
2021SC@SDUSC目录概述字节码引擎(Bytecode Engine)vdbeInt.h代码分析一些方法和结构体的条件编译和预处理几个重要结构体的分析附(源代码):概述 SQLite的工作方式是将SQL语句转换为字节码,然后在虚拟机中运行该字节码。本节描述字节码引擎如何工作。字节码引擎(Bytecode Engine)  
2021-11-28 21:18:45
828
原创 SQLite源代码分析----------分析器④
目录特殊指令%code%default_type%destructor%token_prefix%include%extra_argument%parse_accept%stack_overflow%name%token_type与%type错误处理特殊指令 Lemon的输入语法由语法规则和特殊指令组成。我们已经描述了所有的语法规则,现在我们将讨论特殊的指令。  
2021-11-21 20:54:15
315
原创 SQLite源代码分析----------分析器③
目录Lemon输入文件语法终点站和非终点站语法规则优先规则Lemon输入文件语法 Lemon语法规范文件的主要目的是为解析器定义语法。但是,输入文件还指定Lemon完成其工作所需的附加信息。使用Lemon的大部分工作是编写一个适当的语法文件。 Lemon的语法文件在很大程度上是一种自由格式。它没有像yacc或bison那样的分区。任何声
2021-11-14 20:32:17
332
原创 SQLite源代码分析----------分析器②
2021SC@SDUSC文章目录导言在堆栈上分配Parse对象接口摘要构建可执行的“lemon”或“lemon.exe”导言 书接SQLite源代码分析----------分析器①,本节介绍lemon的相关知识。在堆栈上分配Parse对象 如果所有对Parse()接口的调用都是从内部进行的%code,则可以从堆栈而不是从堆中分配解析对象。这些步骤如下:
2021-11-07 19:27:08
149
原创 SQLite源代码分析----------分析器①
2021SC@SDUSC目录简介解析器接口附源代码简介 SQLite的SQL语言解析器是使用一个名为“Lemon”的代码生成器程序生成的。Lemon程序读取输入语言的语法,并发出C代码来实现该语言的解析器。 Lemon是一个LALR(1)文法分析器生成工具,它的操作类似于更熟悉的工具。yacc和bison,但是Lemon增加了重要的改进,包括: 
2021-10-31 17:56:22
768
1
原创 SQLite源代码分析----------分词器③
2021SC@SDUSC目录简介源码分析解析简介 本文我们介绍分词器部分的最后一个内容fts3_expr.c;fts3_expr.c这个文件主要是实现查询字符串功能(MATCH函数)。MATCH运算符用在全文检索中。例如这两句:SELECT title, body FROM pages WHERE pages MATCH 'world';SELECT title, body FROM pages WHERE title MAT
2021-10-24 18:31:55
209
原创 SQLite源代码分析----------分词器②
2021SC@SDUSC文章目录简介代码分析简介 承接上文SQLite源代码分析----------分词器①,接下来我们介绍Tokenizer的另外一个模块:Porter_Tokenizer; 除了“simple”分词器之外,FTS源代码还提供了一个使用波特词干算法(porter stemming algorithm)的分词器。此分词器使用相同的规则将输入文
2021-10-17 20:03:03
493
原创 SQLite源代码分析----------分词器①
2021SC@SDUSC文章目录Tokenizer功能介绍代码分析自定义分词器Tokenizer功能介绍 当执行一个包含SQL语句的字符串时,接口程序要把这个字符串传递给tokenizer。Tokenizer的任务是把原有字符串分成一个个标示符,并把这些标示符传递给剖析器。 当向SQLite提交SQL程序时,第一步是将源文本拆分为“tokens”。一个“to
2021-10-10 19:33:01
447
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人