Lance Add

Results 17 issues of Lance Add

这个改进解决了在使用`uuid.UUID`字段时,当`uuid`字段未设置时,其值为 `uuid.Nil`,但这并不被标准的`empty.IsEmpty()`空值检测函数识别为空值。通过引入 `IsUUIDNil` 函数,在 ORM 层面正确处理这种情况使`OmitEmpty`等功能对 `UUID` 类型更加友好。

bug

目前 `gf gen dao`可以设置`genTable`为`true`生成表字段让用户自行注入到`db`的缓存中,让用户无需真的连接到数据库也可以正常的输出sql。 在使用过程中发现部分`gdb`方法列如`FieldsEx`依赖`GetTablesWithCache`方法,`GetTablesWithCache`会去拉取所有`table name`然后缓存起来,这次补充下`table name`缓存生成,在`genTable`时生成一个`tables.go`提供一个`SetTables`方法让用户自行注入,完善`dao`功能,让sql生成可以不依赖实体数据库

1. 进行数据库查询Count()时使用强制缓存Force = true如果count(1) = 0, 那么缓存内容会是 ```json { "Result": null, "FirstResultColumn": "COUNT(1)" } ``` 导致第二次查询时走缓存但是拿到null然后再查一次数据库,强制缓存等于失效,流量较大时容易缓存击穿 debug原因是缓存查询结果时,对count的结果判断`isEmpty()`,但是`IsEmpty()`对值为0的整数类型判断为true,然后将result=nil缓存起来,所以当Force = true时COUNT(1)=0应该存入缓存 ```json { "Result": [ { "COUNT(1)": 0 } ], "FirstResultColumn": "COUNT(1)"...

```golang func main() { adapter := gcache.NewAdapterRedis(g.Redis()) g.DB().GetCache().SetAdapter(adapter) result, count, err := g.Model("TBL_USER").Cache(gdb.CacheOption{ Duration: 100 * time.Minute, Name: "VIP", }).AllAndCount(false) g.DumpJson(result) fmt.Println(count, err) } ``` 执行这段查询后`g.DumpJson(result)`的结果是`[ { "COUNT(1)": 5 }...

1. 新增基于内存的令牌桶限速器 2. 新增基于redis的令牌桶限速器

`gdb`目前支持分库分表级别的多租户,补充一个行级多租户的实现 #### 主要特性: 1. **租户上下文管理**: - 提供`WithTenantIdField`和`WithTenantIdValue`函数用于设置租户字段名和值到上下文中 - 默认实现`DefaultGetTenantIdFieldValue`从上下文中获取租户信息 2. **模型级租户支持**: - 在Model中添加`Tenant()`方法启用多租户功能 - 支持通过`UnTenant()`方法禁用多租户功能 - `TenantOption`可配置选项包括: - `Enable`: 控制是否启用租户功能 - `PropagateToJoins`: 控制是否将租户条件应用于连接表 - `GetTenantIdFieldValueFunc`: 自定义获取租户ID字段和值的函数 3. **智能租户条件生成**: - 自动识别单表、JOIN表和逗号分隔的多表查询...

实现了GoFrame框架的事件总线模块(`gevent`),提供了一种解耦组件间通信的机制。该模块支持事件优先级、并行处理、错误处理策略等。 ## 主要特性 1. **事件总线(Event Bus)**: - 实现了顺序事件总线(SeqEventBus) - 支持多个订阅者订阅同一主题 - 提供默认事件总线实例 2. **事件(Event)**: - 基础事件接口和实现 - 支持自定义事件工厂函数 - 包含主题、数据、错误处理模式和执行模式等属性 3. **优先级处理**: - 5个优先级级别(PriorityImmediate, PriorityUrgent, PriorityHigh, PriorityNormal, PriorityLow) - 相同优先级按订阅顺序处理...