condition.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. // 分组查询
  37. result, err := table.Query().
  38. Select("class", "AVG(score)").
  39. GroupBy("class").
  40. Having(Gt("AVG(score)", float64(80), types.FieldType(0))).
  41. Find()
  42. // ========== 更新操作 ==========
  43. affected, err := table.Update().
  44. Set("name", []byte("李四")).
  45. Set("age", uint64(26)).
  46. Where(Eq("id", uint64(1), types.FieldType(0))).
  47. Exec()
  48. // ========== 删除操作 ==========
  49. affected, err := table.Delete().
  50. Where(And(
  51. Lt("created_at", uint64(time.Now().Unix()), types.FieldType(0)),
  52. Eq("status", uint64(0), types.FieldType(0)),
  53. )).
  54. Exec()
  55. // ========== 插入操作 ==========
  56. rowID, err := table.Insert().
  57. Set("id", uint64(1), types.FieldType_Uint64).
  58. Set("name", []byte("张三"), types.FieldType_String).
  59. Set("age", uint64(25), types.FieldType_Uint64).
  60. Exec() */