package core // 条件接口 type Condition interface { Fields() []string Match(row []byte, table *Table) bool } // ========== 查询操作 ========== // // 注意: 下面示例里 Eq/Gt/Lt/Ge/Le/In 的第三个参数一律写成 types.FieldType(0) —— // 该参数已废弃 (Go 无法标记单个参数废弃, 所以各构造函数都没写 "Deprecated:" 段落, // 否则会连函数本身一起被判为废弃): 比较一律按列的实际存储类型进行 // (见 Table.compareColTypeFor), 传什么值结果都一样。 // // 注意区分: Insert().Set("id", uint64(1), types.FieldType_8byte) 的类型参数是必需的 // —— 写入要靠它决定编码方式, 传 0 会直接报错。废弃的只有【条件构造函数】的第三个 // 参数。 /* // 简单查询 rows, err := table.Query(). Select("id", "name", "age"). Where(Eq("status", uint64(1), types.FieldType(0))). OrderBy("age", true). // 降序 Limit(10). Offset(20). Find() // 聚合查询 count, err := table.Query(). Where(Gt("age", uint64(18), types.FieldType(0))). Count() sum, err := table.Query(). Where(Eq("status", uint64(1), types.FieldType(0))). Sum("score") maxAge, err := table.Query(). Where(Eq("class", uint64(1), types.FieldType(0))). Max("age") // 分组查询 result, err := table.Query(). Select("class", "AVG(score)"). GroupBy("class"). Having(Gt("AVG(score)", float64(80), types.FieldType(0))). Find() // ========== 更新操作 ========== affected, err := table.Update(). Set("name", []byte("李四")). Set("age", uint64(26)). Where(Eq("id", uint64(1), types.FieldType(0))). Exec() // ========== 删除操作 ========== affected, err := table.Delete(). Where(And( Lt("created_at", uint64(time.Now().Unix()), types.FieldType(0)), Eq("status", uint64(0), types.FieldType(0)), )). Exec() // ========== 插入操作 ========== rowID, err := table.Insert(). Set("id", uint64(1), types.FieldType_8byte). Set("name", []byte("张三"), types.FieldType_256byte). Set("age", uint64(25), types.FieldType_8byte). Exec() */