ecodeclub / eorm

简单 ORM 框架
Apache License 2.0
194 stars 64 forks source link

in查询功能的实现 #102

Closed juniaoshaonian closed 1 year ago

flycash commented 1 year ago

unused receiver 错误你只需要删掉那个 receiver 的名字就可以

flycash commented 1 year ago

另外我有一个地方想要问问你的看法,就是某些时候使用 In 查询我们会遇到这么一个问题,就是我也不知道里面有没有元素。如果按照现在的逻辑,假如输入是空的话,那么生成的是:

SELECT * FROM XXX WHERE `id` IN ()

还有两种可以考虑的方向:

SELECT * FROM xxx WHERE true;
SELECT * FROM xxx WHERE false;

第一个意思是,如果要是 In 的候选元素不存在,就认为不需要这个查询条件,所以用 true。 第二个的意思是,如果In的元素没有,认为数据库根本筛选不出来任何结果,所以用 false。

juniaoshaonian commented 1 year ago

另外我有一个地方想要问问你的看法,就是某些时候使用 In 查询我们会遇到这么一个问题,就是我也不知道里面有没有元素。如果按照现在的逻辑,假如输入是空的话,那么生成的是:

SELECT * FROM XXX WHERE `id` IN ()

还有两种可以考虑的方向:

SELECT * FROM xxx WHERE true;
SELECT * FROM xxx WHERE false;

第一个意思是,如果要是 In 的候选元素不存在,就认为不需要这个查询条件,所以用 true。 第二个的意思是,如果In的元素没有,认为数据库根本筛选不出来任何结果,所以用 false。

我偏向于第二种,如果说是第一种并且后面没有其他条件的话就变成遍历全表了。表比较大的话会比较慢。

flycash commented 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 和 NotIn 两个方法的注释里面说清楚,如果要是每元素的话,In 这个会被认为是 false。

codecov[bot] commented 1 year ago

Codecov Report

Merging #102 (e16ce84) into main (e929bd4) will increase coverage by 0.18%. The diff coverage is 84.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.

flycash commented 1 year ago

format go code 错误,是指你需要运行一下 make setup 安装好各种 hook,然后提交之前运行一下 make check,它会格式化代码并且做静态检查