Closed juniaoshaonian closed 1 year ago
另外我有一个地方想要问问你的看法,就是某些时候使用 In 查询我们会遇到这么一个问题,就是我也不知道里面有没有元素。如果按照现在的逻辑,假如输入是空的话,那么生成的是:
SELECT * FROM XXX WHERE `id` IN ()
还有两种可以考虑的方向:
SELECT * FROM xxx WHERE true;
SELECT * FROM xxx WHERE false;
第一个意思是,如果要是 In 的候选元素不存在,就认为不需要这个查询条件,所以用 true。 第二个的意思是,如果In的元素没有,认为数据库根本筛选不出来任何结果,所以用 false。
另外我有一个地方想要问问你的看法,就是某些时候使用 In 查询我们会遇到这么一个问题,就是我也不知道里面有没有元素。如果按照现在的逻辑,假如输入是空的话,那么生成的是:
SELECT * FROM XXX WHERE `id` IN ()
还有两种可以考虑的方向:
SELECT * FROM xxx WHERE true; SELECT * FROM xxx WHERE false;
第一个意思是,如果要是 In 的候选元素不存在,就认为不需要这个查询条件,所以用 true。 第二个的意思是,如果In的元素没有,认为数据库根本筛选不出来任何结果,所以用 false。
我偏向于第二种,如果说是第一种并且后面没有其他条件的话就变成遍历全表了。表比较大的话会比较慢。
另外我有一个地方想要问问你的看法,就是某些时候使用 In 查询我们会遇到这么一个问题,就是我也不知道里面有没有元素。如果按照现在的逻辑,假如输入是空的话,那么生成的是:
SELECT * FROM XXX WHERE `id` IN ()
还有两种可以考虑的方向:
SELECT * FROM xxx WHERE true; SELECT * FROM xxx WHERE false;
第一个意思是,如果要是 In 的候选元素不存在,就认为不需要这个查询条件,所以用 true。 第二个的意思是,如果In的元素没有,认为数据库根本筛选不出来任何结果,所以用 false。
我偏向于第二种,如果说是第一种并且后面没有其他条件的话就变成遍历全表了。表比较大的话会比较慢。
那可以,你修改一下代码,然后在In 和 NotIn 两个方法的注释里面说清楚,如果要是每元素的话,In 这个会被认为是 false。
Merging #102 (e16ce84) into main (e929bd4) will increase coverage by
0.18%
. The diff coverage is84.09%
.
@@ Coverage Diff @@
## main #102 +/- ##
==========================================
+ Coverage 82.72% 82.91% +0.18%
==========================================
Files 18 18
Lines 1146 1188 +42
==========================================
+ Hits 948 985 +37
- Misses 169 173 +4
- Partials 29 30 +1
Impacted Files | Coverage Δ | |
---|---|---|
predicate.go | 90.00% <ø> (ø) |
|
builder.go | 80.76% <78.57%> (-0.22%) |
:arrow_down: |
column.go | 87.87% <86.66%> (+1.96%) |
:arrow_up: |
Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.
format go code 错误,是指你需要运行一下 make setup 安装好各种 hook,然后提交之前运行一下 make check,它会格式化代码并且做静态检查
unused receiver 错误你只需要删掉那个 receiver 的名字就可以