MIT6.5830 Lab1-GoDB实验记录(八)

Lab1实验记录:完成lab1

还剩最后一个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的语法就是了。

Subscribe
提醒
0 评论
Inline Feedbacks
View all comments
0
在此留下你的评论x