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存储着每一列字段的名字,类型。

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

相关推荐
成富9 分钟前
文本转SQL(Text-to-SQL),场景介绍与 Spring AI 实现
数据库·人工智能·sql·spring·oracle
songqq2710 分钟前
SQL题:使用hive查询各类型专利top 10申请人,以及对应的专利申请数
数据库·sql
计算机学长felix13 分钟前
基于SpringBoot的“校园交友网站”的设计与实现(源码+数据库+文档+PPT)
数据库·spring boot·毕业设计·交友
小码的头发丝、1 小时前
Django中ListView 和 DetailView类的区别
数据库·python·django
杜杜的man1 小时前
【go从零单排】go中的结构体struct和method
开发语言·后端·golang
幼儿园老大*1 小时前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go
半桶水专家1 小时前
go语言中package详解
开发语言·golang·xcode
llllinuuu1 小时前
Go语言结构体、方法与接口
开发语言·后端·golang
Karoku0661 小时前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix
cookies_s_s1 小时前
Golang--协程和管道
开发语言·后端·golang