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

MIT6.5830 Lab1-GoDB实验记录(二) -- WhiteNight's Site

标签:Golang, 数据库

接下来我们将完成tuple.go的缺失代码,并通过tuple_test.go的测试。

实验步骤
观察tuple.go

观察肯定是第一步,先打开tuple.go。

快300行代码,勉勉强强还在接受范围之内。接下来看看我们要做什么,首要目的肯定就是通过go test tuple_test.go。

实验步骤
分析数据结构

开头就给出了DBType的定义,tuple field?那我们暂且把它当作是元组字段--即每一行的每一个数据可以是什么类型的。说白了就是列的域(domain)是{int,string}。这里限定了存储在数据库中的数据只能是int或者string,对应了lab1.md中提到的"Data types except integers and fixed length strings."。

复制代码
// DBType is the type of a tuple field, in GoDB, e.g., IntType or StringType
type DBType int

const (
	IntType     DBType = iota
	StringType  DBType = iota
	UnknownType DBType = iota //used internally, during parsing, because sometimes the type is unknown
)

var typeNames map[DBType]string = map[DBType]string{IntType: "int", StringType: "string"}

如果你不记得iota是啥了,这里有一个使用例:Golang中的iota。这里还新建了一个map,看起来是匹配int和string两种数据类型的。

接下来定义了一个FieldType结构。FieldType?字段类型又是什么玩意?

复制代码
// FieldType is the type of a field in a tuple, e.g., its name, table, and [godb.DBType].
// TableQualifier may or may not be an emtpy string, depending on whether the table
// was specified in the query
type FieldType struct {
	Fname          string
	TableQualifier string
	Ftype          DBType
}

先别着急。我们可以观察到,Ftype的类型是DBType。说明DBType对于FieldType而言是更加底层的方法。

上面的DBType,指向的是每一行的数据,它限定了每个元组中字段的类型。而FieldType指向的是每一列,它限定的是字段所构成的"元组"。举个例子

假设有个table,有四列,或者说是四个字段

id,name,email,address

如果id限定的类型为int,其他三者的类型为string。那么id的域就是{int},相当于Ftype=int;Fname就是"id";那么tableQualifier,顾名思义,"表限定符",指代的是数据库中的表。我们这里没碰到暂时就不管它。

还剩下最后一段:TupelDesc。

复制代码
// TupleDesc is "type" of the tuple, e.g., the field names and types
type TupleDesc struct {
	Fields []FieldType
}

Desc又是什么?不知道,又是没打注释。Descent?Describe?我们回到lab1.md中看看。

复制代码
Tuples also have a type (or schema), called a tuple descriptor, represented by a TupleDesc struct, which consists of a collection of FieldType objects, one per field in the tuple, each of which describes the type of the corresponding field.

Fieids的类型是FieldType,说明TupleDesc要比FieldType更高级,它从FieldType继承了它的方法和数据类型。

总结一下,TupleDesc>FieldType>DBType。而TupleDesc存储着每一列字段的名字,类型。

那么接下来就是完成实验一了,下篇文章在慢慢记录。

相关推荐
流星白龙11 小时前
【MySQL】6.MySQL基本查询(1)
数据库·windows·mysql
夕除11 小时前
Mysql--11
数据库·mysql
❀͜͡傀儡师11 小时前
docker部署WhoDB开源轻量级数据库管理工具
数据库·docker·开源
皙然11 小时前
Redis八大核心数据类型详解:从底层实现到实战落地
数据库·redis·bootstrap
时光追逐者11 小时前
一款免费、简单、高效的在线数据库设计工具
数据库·mysql·oracle·sql server
another heaven11 小时前
【软考 2026 最新版 NoSQL 数据库全分类】
数据库·nosql
满天星830357711 小时前
【MySQL】表的操作
linux·服务器·数据库·mysql
yashuk12 小时前
Ubuntu 系统下安装 Nginx
数据库·nginx·ubuntu
童话ing12 小时前
【LeetCode】239.滑动窗口最大值
数据结构·算法·leetcode·golang
F1FJJ12 小时前
VS Code 里管理 PostgreSQL,有哪些选择?主流扩展横向对比
网络·数据库·postgresql·容器