还剩最后一个exercise,看看能不能一天搞定,直接继续lab2。
实验步骤
完成lab1_query.go
直接开写。从heap file里面找下readcsv的函数,参考一下就会写了。缓冲区的话要自己定义一个文件,而且用完之后记得删掉,充当清空缓冲区的操作。
主要还是熟悉下字段的操作,比如怎么从元组里面拿到value这种。
Go
func computeFieldSum(fileName string, td TupleDesc, sumField string) (int, error) {
sum := 0
lab1_bp := "lab1bp.dat"
if _, err := os.Stat(lab1_bp); err == nil {
os.Remove(lab1_bp)
} else {
f, err := os.OpenFile(lab1_bp, os.O_RDWR|os.O_CREATE, 0666)
if err != nil {
return 0, err
}
defer f.Close()
}
bp := NewBufferPool(30)
hp, err := NewHeapFile(lab1_bp, &td, bp)
if err != nil {
return 0, err
}
csvFile, _ := os.Open(fileName)
err = hp.LoadFromCSV(csvFile, true, ",", false)
if err != nil {
return 0, nil
}
tid := NewTID()
iter, _ := hp.Iterator(tid)
for {
t, _ := iter()
if t == nil {
break
}
for _, field := range t.Fields {
if _, a := field.(IntField); a {
sum = sum + (int)(field.(IntField).Value)
}
}
}
return sum, nil // replace me
}
跑一下,过。

至此lab1就完成咯。前前后后花了两个星期的时间….虽然大部分时间都在学go的语法就是了。