- Database basics: writing a SQL database from scratch in Go 译文
- 原文链接:http://notes.eatonphil.com/database-basics.html
- 原文作者:https://github.com/eatonphil
- 译文来自:https://github.com/suhanyujie/article-transfer-rs/
- 译者:suhanyujie
- 译者博客:suhanyujie
- ps:水平有限,翻译不当之处,还请指正。
- 标签:数据库,golang,解析
Database basics: writing a SQL database from scratch in Go —— part 2
【译】数据库基础:用 Go 从零开始写一个 SQL 数据库 —— 第二部分
目录
- 【译】数据库基础:用 Go 从零开始写一个 SQL 数据库 —— 第一部分
- 【译】数据库基础:用 Go 从零开始写一个 SQL 数据库 —— 第二部分
解析 insert 语句
我们看下下面的这些 token 模式:
- 1.INSERT
- 2.INTO
- 3.$table-name
- 4.VALUES
- 5.(
- 6.$expression [, ...]
- 7.)
在现有的辅助函数基础上,实现很简单:
func parseInsertStatement(tokens []*token, initialCursor uint, delimiter token) (*InsertStatement, uint, bool) {
cursor := initialCursor
// 查看是否 INSERT
if !expectToken(tokens, cursor, tokenFromKeyword(insertKeyword)) {
return nil, initialCursor, false
}
cursor++
// 查看是否 INTO
if !expectToken(tokens, cursor, tokenFromKeyword(intoKeyword)) {
helpMessage(tokens, cursor, "Expected into")
return nil, initialCursor, false
}
cursor++
这就是解析一个 INSERT
语句!
解析 create 语句
最后,我们看看 create 的语句对应的 token:
- 1.CREATE
- 2.$table-name
- 3.(
- 4.[$column-name $column-type [, ...]]
- 5.)
我们实现了新的 parseColumnDefinitions
辅助函数:
func parseCreateTableStatement(tokens []*token, initialCursor uint, delimiter token) (*CreateTableStatement, uint, bool) {
cursor := initialCursor
if !expectToken(tokens, cursor, tokenFromKeyword(createKeyword)) {
return nil, initialCursor, false
}
cursor++
if !expectToken(tokens, cursor, tokenFromKeyword(tableKeyword)) {
return nil, initialCursor,