0204: CRUD

添加 CRUD 接口

这一步实现基于主键的查、改、增、删,也是就是 CRUD(create,read,update,delete)。

type DB struct {
    KV KV
}

func (db *DB) Open() error  { return db.KV.Open() }
func (db *DB) Close() error { return db.KV.Close() }

用 KV 的 get、set、del 实现这些函数:

func (db *DB) Select(schema *Schema, row Row) (ok bool, err error)
func (db *DB) Insert(schema *Schema, row Row) (updated bool, err error)
func (db *DB) Upsert(schema *Schema, row Row) (updated bool, err error)
func (db *DB) Update(schema *Schema, row Row) (updated bool, err error)
func (db *DB) Delete(schema *Schema, row Row) (deleted bool, err error)

要求:

比如 insert 的实现是:

func (db *DB) Insert(schema *Schema, row Row) (updated bool, err error) {
    key := row.EncodeKey(schema)
    val := row.EncodeVal(schema)
    return db.KV.SetEx(key, val, ModeInsert)
}

再比如这个表 create table t (a int64, b int64, primary key (b))Select() 输入一个长度为2的 Row,第2列是主键,第1列是要从 KV 里返回的 V。

关系型数据库主要功能

除了通过主键来操作单个 row,后续还会实现其他主要功能: