Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
01e7ceef
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
01e7ceef
编写于
10月 27, 2010
作者:
E
Ernie Miller
提交者:
Aaron Patterson
10月 27, 2010
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Refactor predication methods to be available to SqlLiterals as well.
上级
f515283f
变更
5
显示空白变更内容
内联
并排
Showing
5 changed file
with
204 addition
and
174 deletion
+204
-174
lib/arel.rb
lib/arel.rb
+1
-0
lib/arel/attributes/attribute.rb
lib/arel/attributes/attribute.rb
+1
-174
lib/arel/nodes/sql_literal.rb
lib/arel/nodes/sql_literal.rb
+1
-0
lib/arel/predications.rb
lib/arel/predications.rb
+177
-0
test/nodes/test_sql_literal.rb
test/nodes/test_sql_literal.rb
+24
-0
未找到文件。
lib/arel.rb
浏览文件 @
01e7ceef
require
'arel/crud'
require
'arel/expressions'
require
'arel/predications'
require
'arel/table'
require
'arel/attributes'
require
'arel/compatibility/wheres'
...
...
lib/arel/attributes/attribute.rb
浏览文件 @
01e7ceef
...
...
@@ -2,180 +2,7 @@ module Arel
module
Attributes
class
Attribute
<
Struct
.
new
:relation
,
:name
,
:column
include
Arel
::
Expressions
def
not_eq
other
Nodes
::
NotEqual
.
new
self
,
other
end
def
not_eq_any
others
grouping_any
:not_eq
,
others
end
def
not_eq_all
others
grouping_all
:not_eq
,
others
end
def
eq
other
Nodes
::
Equality
.
new
self
,
other
end
def
eq_any
others
grouping_any
:eq
,
others
end
def
eq_all
others
grouping_all
:eq
,
others
end
def
in
other
case
other
when
Arel
::
SelectManager
Nodes
::
In
.
new
self
,
other
.
to_a
.
map
{
|
x
|
x
.
id
}
when
Range
if
other
.
exclude_end?
left
=
Nodes
::
GreaterThanOrEqual
.
new
(
self
,
other
.
min
)
right
=
Nodes
::
LessThan
.
new
(
self
,
other
.
max
+
1
)
Nodes
::
And
.
new
left
,
right
else
Nodes
::
Between
.
new
(
self
,
Nodes
::
And
.
new
(
other
.
min
,
other
.
max
))
end
else
Nodes
::
In
.
new
self
,
other
end
end
def
in_any
others
grouping_any
:in
,
others
end
def
in_all
others
grouping_all
:in
,
others
end
def
not_in
other
case
other
when
Arel
::
SelectManager
Nodes
::
NotIn
.
new
self
,
other
.
to_a
.
map
{
|
x
|
x
.
id
}
when
Range
if
other
.
exclude_end?
left
=
Nodes
::
LessThan
.
new
(
self
,
other
.
min
)
right
=
Nodes
::
GreaterThanOrEqual
.
new
(
self
,
other
.
max
)
Nodes
::
Or
.
new
left
,
right
else
left
=
Nodes
::
LessThan
.
new
(
self
,
other
.
min
)
right
=
Nodes
::
GreaterThan
.
new
(
self
,
other
.
max
)
Nodes
::
Or
.
new
left
,
right
end
else
Nodes
::
NotIn
.
new
self
,
other
end
end
def
not_in_any
others
grouping_any
:not_in
,
others
end
def
not_in_all
others
grouping_all
:not_in
,
others
end
def
matches
other
Nodes
::
Matches
.
new
self
,
other
end
def
matches_any
others
grouping_any
:matches
,
others
end
def
matches_all
others
grouping_all
:matches
,
others
end
def
does_not_match
other
Nodes
::
DoesNotMatch
.
new
self
,
other
end
def
does_not_match_any
others
grouping_any
:does_not_match
,
others
end
def
does_not_match_all
others
grouping_all
:does_not_match
,
others
end
def
gteq
right
Nodes
::
GreaterThanOrEqual
.
new
self
,
right
end
def
gteq_any
others
grouping_any
:gteq
,
others
end
def
gteq_all
others
grouping_all
:gteq
,
others
end
def
gt
right
Nodes
::
GreaterThan
.
new
self
,
right
end
def
gt_any
others
grouping_any
:gt
,
others
end
def
gt_all
others
grouping_all
:gt
,
others
end
def
lt
right
Nodes
::
LessThan
.
new
self
,
right
end
def
lt_any
others
grouping_any
:lt
,
others
end
def
lt_all
others
grouping_all
:lt
,
others
end
def
lteq
right
Nodes
::
LessThanOrEqual
.
new
self
,
right
end
def
lteq_any
others
grouping_any
:lteq
,
others
end
def
lteq_all
others
grouping_all
:lteq
,
others
end
def
asc
Nodes
::
Ordering
.
new
self
,
:asc
end
def
desc
Nodes
::
Ordering
.
new
self
,
:desc
end
private
def
grouping_any
method_id
,
others
first
=
send
method_id
,
others
.
shift
Nodes
::
Grouping
.
new
others
.
inject
(
first
)
{
|
memo
,
expr
|
Nodes
::
Or
.
new
(
memo
,
send
(
method_id
,
expr
))
}
end
def
grouping_all
method_id
,
others
first
=
send
method_id
,
others
.
shift
Nodes
::
Grouping
.
new
others
.
inject
(
first
)
{
|
memo
,
expr
|
Nodes
::
And
.
new
(
memo
,
send
(
method_id
,
expr
))
}
end
include
Arel
::
Predications
end
class
String
<
Attribute
;
end
...
...
lib/arel/nodes/sql_literal.rb
浏览文件 @
01e7ceef
...
...
@@ -2,6 +2,7 @@ module Arel
module
Nodes
class
SqlLiteral
<
String
include
Arel
::
Expressions
include
Arel
::
Predications
end
end
end
lib/arel/predications.rb
0 → 100644
浏览文件 @
01e7ceef
module
Arel
module
Predications
def
not_eq
other
Nodes
::
NotEqual
.
new
self
,
other
end
def
not_eq_any
others
grouping_any
:not_eq
,
others
end
def
not_eq_all
others
grouping_all
:not_eq
,
others
end
def
eq
other
Nodes
::
Equality
.
new
self
,
other
end
def
eq_any
others
grouping_any
:eq
,
others
end
def
eq_all
others
grouping_all
:eq
,
others
end
def
in
other
case
other
when
Arel
::
SelectManager
Nodes
::
In
.
new
self
,
other
.
to_a
.
map
{
|
x
|
x
.
id
}
when
Range
if
other
.
exclude_end?
left
=
Nodes
::
GreaterThanOrEqual
.
new
(
self
,
other
.
min
)
right
=
Nodes
::
LessThan
.
new
(
self
,
other
.
max
+
1
)
Nodes
::
And
.
new
left
,
right
else
Nodes
::
Between
.
new
(
self
,
Nodes
::
And
.
new
(
other
.
min
,
other
.
max
))
end
else
Nodes
::
In
.
new
self
,
other
end
end
def
in_any
others
grouping_any
:in
,
others
end
def
in_all
others
grouping_all
:in
,
others
end
def
not_in
other
case
other
when
Arel
::
SelectManager
Nodes
::
NotIn
.
new
self
,
other
.
to_a
.
map
{
|
x
|
x
.
id
}
when
Range
if
other
.
exclude_end?
left
=
Nodes
::
LessThan
.
new
(
self
,
other
.
min
)
right
=
Nodes
::
GreaterThanOrEqual
.
new
(
self
,
other
.
max
)
Nodes
::
Or
.
new
left
,
right
else
left
=
Nodes
::
LessThan
.
new
(
self
,
other
.
min
)
right
=
Nodes
::
GreaterThan
.
new
(
self
,
other
.
max
)
Nodes
::
Or
.
new
left
,
right
end
else
Nodes
::
NotIn
.
new
self
,
other
end
end
def
not_in_any
others
grouping_any
:not_in
,
others
end
def
not_in_all
others
grouping_all
:not_in
,
others
end
def
matches
other
Nodes
::
Matches
.
new
self
,
other
end
def
matches_any
others
grouping_any
:matches
,
others
end
def
matches_all
others
grouping_all
:matches
,
others
end
def
does_not_match
other
Nodes
::
DoesNotMatch
.
new
self
,
other
end
def
does_not_match_any
others
grouping_any
:does_not_match
,
others
end
def
does_not_match_all
others
grouping_all
:does_not_match
,
others
end
def
gteq
right
Nodes
::
GreaterThanOrEqual
.
new
self
,
right
end
def
gteq_any
others
grouping_any
:gteq
,
others
end
def
gteq_all
others
grouping_all
:gteq
,
others
end
def
gt
right
Nodes
::
GreaterThan
.
new
self
,
right
end
def
gt_any
others
grouping_any
:gt
,
others
end
def
gt_all
others
grouping_all
:gt
,
others
end
def
lt
right
Nodes
::
LessThan
.
new
self
,
right
end
def
lt_any
others
grouping_any
:lt
,
others
end
def
lt_all
others
grouping_all
:lt
,
others
end
def
lteq
right
Nodes
::
LessThanOrEqual
.
new
self
,
right
end
def
lteq_any
others
grouping_any
:lteq
,
others
end
def
lteq_all
others
grouping_all
:lteq
,
others
end
def
asc
Nodes
::
Ordering
.
new
self
,
:asc
end
def
desc
Nodes
::
Ordering
.
new
self
,
:desc
end
private
def
grouping_any
method_id
,
others
first
=
send
method_id
,
others
.
shift
Nodes
::
Grouping
.
new
others
.
inject
(
first
)
{
|
memo
,
expr
|
Nodes
::
Or
.
new
(
memo
,
send
(
method_id
,
expr
))
}
end
def
grouping_all
method_id
,
others
first
=
send
method_id
,
others
.
shift
Nodes
::
Grouping
.
new
others
.
inject
(
first
)
{
|
memo
,
expr
|
Nodes
::
And
.
new
(
memo
,
send
(
method_id
,
expr
))
}
end
end
end
\ No newline at end of file
test/nodes/test_sql_literal.rb
浏览文件 @
01e7ceef
...
...
@@ -23,6 +23,30 @@ module Nodes
viz
.
accept
(
node
).
must_be_like
%{ COUNT(DISTINCT *) }
end
end
describe
'equality'
do
it
'makes an equality node'
do
node
=
SqlLiteral
.
new
(
'foo'
).
eq
(
1
)
viz
=
Visitors
::
ToSql
.
new
Table
.
engine
viz
.
accept
(
node
).
must_be_like
%{ foo = 1 }
end
end
describe
'grouped "or" equality'
do
it
'makes a grouping node with an or node'
do
node
=
SqlLiteral
.
new
(
'foo'
).
eq_any
([
1
,
2
])
viz
=
Visitors
::
ToSql
.
new
Table
.
engine
viz
.
accept
(
node
).
must_be_like
%{ (foo = 1 OR foo = 2) }
end
end
describe
'grouped "and" equality'
do
it
'makes a grouping node with an or node'
do
node
=
SqlLiteral
.
new
(
'foo'
).
eq_all
([
1
,
2
])
viz
=
Visitors
::
ToSql
.
new
Table
.
engine
viz
.
accept
(
node
).
must_be_like
%{ (foo = 1 AND foo = 2) }
end
end
end
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录