Skip to content
This repository has been archived by the owner on Sep 7, 2021. It is now read-only.
This repository is currently being migrated. It's locked while the migration is in progress.

limitN = 0 的时候,相当于没有限制。 #1117

Open
xbcbupt725 opened this issue Oct 17, 2018 · 8 comments
Open

limitN = 0 的时候,相当于没有限制。 #1117

xbcbupt725 opened this issue Oct 17, 2018 · 8 comments
Labels

Comments

@xbcbupt725
Copy link

if session.statement.LimitN > 0 {
orderSQL += fmt.Sprintf(" LIMIT %d", session.statement.LimitN)
}

这里 select * from xxx limit 0 原本是查询0个。但是通过xorm去limit相当于没有限制。

@yifhao
Copy link

yifhao commented Oct 17, 2018

超大的问题

@lunny
Copy link
Member

lunny commented Oct 17, 2018

Limit 0 有什么意义吗?

@xbcbupt725
Copy link
Author

Limit 0 有什么意义吗?

就说说我的遭遇,我搞了某个后台定时任务,通过配置文件就控制LimitN。一开始不希望任务执行,设置LimitN = 0。结果就······

@BetaCat0
Copy link
Member

BetaCat0 commented Oct 17, 2018

在 golang 中,由于零值的原因,在逻辑判断中不能很好的判断这个 0 究竟是系统初始值抑或是用户有意为之(因此在框架中我们当作“未给出限制”来处理)。建议“不希望任务执行”这种行为由开关来控制,而不是用一些特殊值来进行一些tricky的操作:这样会降低代码的可读性,并且对框架的功能特性产生强依赖。希望建议对您有用 :)

@yifhao
Copy link

yifhao commented Oct 17, 2018

在 golang 中,由于零值的原因,在逻辑判断中不能很好的判断这个 0 究竟是系统初始值抑或是用户有意为之(因此在框架中我们当作“未给出限制”来处理)。建议“不希望任务执行”这种行为由开关来控制,而不是用一些特殊值来进行一些tricky的操作:这样会降低代码的可读性,并且对框架的功能特性产生强依赖。希望建议对您有用 :)

可以把Statement中的LimitN改为*int, 不是nil的话, 就表示设置了.nil的话, 表示没有设置.

@lunny
Copy link
Member

lunny commented Oct 17, 2018

@xbcbupt725 自己加个if啊,为0时性能还更好,至少不用请求数据库。
@Frank-hust 嗯。这个可以通过改造Limit()函数来解决,关键看是否有那个必要。

@BetaCat0
Copy link
Member

在 golang 中,由于零值的原因,在逻辑判断中不能很好的判断这个 0 究竟是系统初始值抑或是用户有意为之(因此在框架中我们当作“未给出限制”来处理)。建议“不希望任务执行”这种行为由开关来控制,而不是用一些特殊值来进行一些tricky的操作:这样会降低代码的可读性,并且对框架的功能特性产生强依赖。希望建议对您有用 :)

可以把Statement中的LimitN改为*int, 不是nil的话, 就表示设置了.nil的话, 表示没有设置.

因为 golang 不可以直接取基本元素的字面量引用,这样反而会让编码更加麻烦,而且0的话,其实已经可以在外层控制的

@yifhao
Copy link

yifhao commented Mar 16, 2019

很多时候比如翻页,是前端传过来的参数,写代码的人只对了最大值做限制,而没有对0判断,原本以为会是limit 0,结果现在把所有数据都查一遍了

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

4 participants