bunnier / sqlmer

数据库访问库,提供了统一的 SQL 参数抽象,基于 map 的交互接口等,目前支持 MySql 和 Sql Server。
MIT License
8 stars 1 forks source link

需要提供一个简单的方式判断 DbNull。 #5

Closed bunnier closed 2 years ago

cmstar commented 2 years ago

目前的问题是,返回的结果比较不友好,并且有些情况在 API 上没有明确定义。

例如对于 Scalar 方法:

实际使用起来,调用者非常难以判定。

为了解决这个问题,采用两种方式,思路为:

  1. 对于 MapScan / SliceScan 等以行为输出单位的 API :
    • 没有行时,返回的 map/slice 为 nil 。
    • 某个列值为 dbnull 时,统一使用 Go 的 nil 值表示。
  2. 对于 Scalar 这样返回一个值的 API :
    • 增加一个 bool 返回值表示是否有行。
    • 当有行时, 用 nil 表示 dbnull 。
    • error 仅留给执行错误,不会返回 sql.ErrNoRows

我在 cmstar/sqlmer@065ab1e09 为特定类型的 Scalar* 添加一个 bool 值表示是否有行的形式, DbClient.Scarlar 应该可以用一样的模式。

总体上,希望调用者的代码不会直接 import 标准库的 sql 包。

bunnier commented 2 years ago

在 v1.2.0 以上的 tag 中,已经按此方式处理,详见 bunnier/sqlmer@a93f468