所以我试图创建一个模拟数据库,在当前的实现中,我试图创建一个插入行并insert返回它们。我决定使用 a来帮助维护一个内存块,我可以在其中插入一行行,并在调用时反序列化该内存块,但它似乎只返回第一行而不是传递给数组的所有行。selectselectbytes.Bufferselectselect
主程序
func main() {
inputBuffer := compiler.NewInputBuffer()
scanner := bufio.NewScanner(os.Stdin)
for {
PrintPrompt()
scanner.Scan()
command := scanner.Text()
inputBuffer.Buffer = command
if strings.HasPrefix(inputBuffer.Buffer, ".") {
switch compiler.DoMetaCommand(inputBuffer) {
case compiler.MetaCommandSuccess:
continue
case compiler.MetaCommandUnrecognizedCommand:
fmt.Printf("Unrecognized command %q \n", inputBuffer.Buffer)
continue
}
}
var statement compiler.Statement
switch compiler.PrepareStatement(inputBuffer, &statement) {
case compiler.PrepareSuccess:
case compiler.PrepareUnrecognizedStatement:
fmt.Printf("Unrecognized command at start of %q \n", inputBuffer.Buffer)
continue
case compiler.PrepareSyntaxError:
fmt.Println("Syntax error. Could not parse statement.")
continue
}
compiler.ExecuteStatement(statement)
fmt.Println("Executed")
}
}
func PrintPrompt() {
fmt.Printf("db > ")
}
上面的代码用于解析条目并将其附加到语句中,并且根据关键字,它是一个insert或select[取出用于定义枚举的代码并保留核心逻辑]
func SerializeRow(r []Row) {
encoder := gob.NewEncoder(&RowsTableBuffer)
err := encoder.Encode(r)
if err != nil {
log.Println("encode error:", err)
}
}
所以上面的代码使用了一个全局变量,buffer在这个全局变量中,slice附加到 in 的PrepareStatement()内容将在 an 完成后进行编码insert。Aselect应该返回所有行的切片,但出于某种原因只返回第一个元素。
示例(在终端中):如果我插入 2 个: db > insert 1 john c@mail.com db > insert 2 collins k@mail.com
然后我做了一个选择: select =>它只返回[{1 john c@mail.com}]。
我在这里缺少什么吗?谢谢你的支持。
慕沐林林
相关分类