condition.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package core
  2. // 条件接口
  3. type Condition interface {
  4. Fields() []string
  5. Match(row []byte, table *Table) bool
  6. }
  7. // ========== 查询操作 ==========
  8. //
  9. // 注意: 下面示例里 Eq/Gt/Lt/Ge/Le/In 的第三个参数一律写成 types.FieldType(0) ——
  10. // 该参数已废弃 (Go 无法标记单个参数废弃, 所以各构造函数都没写 "Deprecated:" 段落,
  11. // 否则会连函数本身一起被判为废弃): 比较一律按列的实际存储类型进行
  12. // (见 Table.compareColTypeFor), 传什么值结果都一样。
  13. //
  14. // 注意区分: Insert().Set("id", uint64(1), types.FieldType_Uint64) 的类型参数是必需的
  15. // —— 写入要靠它决定编码方式, 传 0 会直接报错。废弃的只有【条件构造函数】的第三个
  16. // 参数。
  17. /*
  18. // 简单查询
  19. rows, err := table.Query().
  20. Select("id", "name", "age").
  21. Where(Eq("status", uint64(1), types.FieldType(0))).
  22. OrderBy("age", true). // 降序
  23. Limit(10).
  24. Offset(20).
  25. Find()
  26. // 聚合查询
  27. count, err := table.Query().
  28. Where(Gt("age", uint64(18), types.FieldType(0))).
  29. Count()
  30. sum, err := table.Query().
  31. Where(Eq("status", uint64(1), types.FieldType(0))).
  32. Sum("score")
  33. maxAge, err := table.Query().
  34. Where(Eq("class", uint64(1), types.FieldType(0))).
  35. Max("age")
  36. // 分组聚合暂未支持: Query 没有 GroupBy/Having, 需要分组统计时
  37. // 只能按组逐次 Where 查询, 或用 Count/Sum/Max/Min 做全表聚合
  38. // ========== 更新操作 ==========
  39. affected, err := table.Update().
  40. Set("name", []byte("李四")).
  41. Set("age", uint64(26)).
  42. Where(Eq("id", uint64(1), types.FieldType(0))).
  43. Exec()
  44. // ========== 删除操作 ==========
  45. affected, err := table.Delete().
  46. Where(And(
  47. Lt("created_at", uint64(time.Now().Unix()), types.FieldType(0)),
  48. Eq("status", uint64(0), types.FieldType(0)),
  49. )).
  50. Exec()
  51. // ========== 插入操作 ==========
  52. rowID, err := table.Insert().
  53. Set("id", uint64(1), types.FieldType_Uint64).
  54. Set("name", []byte("张三"), types.FieldType_String).
  55. Set("age", uint64(25), types.FieldType_Uint64).
  56. Exec() */