Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
6296617c
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 搜索 >>
提交
6296617c
编写于
3月 07, 2014
作者:
J
James Le Cuirot
提交者:
James Le Cuirot
4月 08, 2014
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add Regexp and NotRegexp nodes for PostgreSQL
上级
75154459
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
74 addition
and
0 deletion
+74
-0
lib/arel/nodes/binary.rb
lib/arel/nodes/binary.rb
+2
-0
lib/arel/visitors/depth_first.rb
lib/arel/visitors/depth_first.rb
+2
-0
lib/arel/visitors/postgresql.rb
lib/arel/visitors/postgresql.rb
+8
-0
lib/arel/visitors/to_sql.rb
lib/arel/visitors/to_sql.rb
+8
-0
test/visitors/test_postgres.rb
test/visitors/test_postgres.rb
+34
-0
test/visitors/test_to_sql.rb
test/visitors/test_to_sql.rb
+20
-0
未找到文件。
lib/arel/nodes/binary.rb
浏览文件 @
6296617c
...
...
@@ -40,7 +40,9 @@ def eql? other
Matches
NotEqual
NotIn
NotRegexp
Or
Regexp
Union
UnionAll
Intersect
...
...
lib/arel/visitors/depth_first.rb
浏览文件 @
6296617c
...
...
@@ -79,8 +79,10 @@ def binary o
alias
:visit_Arel_Nodes_Matches
:binary
alias
:visit_Arel_Nodes_NotEqual
:binary
alias
:visit_Arel_Nodes_NotIn
:binary
alias
:visit_Arel_Nodes_NotRegexp
:binary
alias
:visit_Arel_Nodes_Or
:binary
alias
:visit_Arel_Nodes_OuterJoin
:binary
alias
:visit_Arel_Nodes_Regexp
:binary
alias
:visit_Arel_Nodes_RightOuterJoin
:binary
alias
:visit_Arel_Nodes_TableAlias
:binary
alias
:visit_Arel_Nodes_Values
:binary
...
...
lib/arel/visitors/postgresql.rb
浏览文件 @
6296617c
...
...
@@ -11,6 +11,14 @@ def visit_Arel_Nodes_DoesNotMatch o
"
#{
visit
o
.
left
}
NOT ILIKE
#{
visit
o
.
right
}
"
end
def
visit_Arel_Nodes_Regexp
o
"
#{
visit
o
.
left
}
~
#{
visit
o
.
right
}
"
end
def
visit_Arel_Nodes_NotRegexp
o
"
#{
visit
o
.
left
}
!~
#{
visit
o
.
right
}
"
end
def
visit_Arel_Nodes_DistinctOn
o
"DISTINCT ON (
#{
visit
o
.
expr
}
)"
end
...
...
lib/arel/visitors/to_sql.rb
浏览文件 @
6296617c
...
...
@@ -435,6 +435,14 @@ def visit_Arel_Nodes_DoesNotMatch o
"
#{
visit
o
.
left
}
NOT LIKE
#{
visit
o
.
right
}
"
end
def
visit_Arel_Nodes_Regexp
o
raise
NotImplementedError
,
'~ not implemented for this db'
end
def
visit_Arel_Nodes_NotRegexp
o
raise
NotImplementedError
,
'!~ not implemented for this db'
end
def
visit_Arel_Nodes_JoinSource
o
[
(
visit
(
o
.
left
)
if
o
.
left
),
...
...
test/visitors/test_postgres.rb
浏览文件 @
6296617c
...
...
@@ -79,6 +79,40 @@ module Visitors
}
end
end
describe
"Nodes::Regexp"
do
it
"should know how to visit"
do
node
=
Arel
::
Nodes
::
Regexp
.
new
(
@table
[
:name
],
Nodes
.
build_quoted
(
'foo%'
))
@visitor
.
accept
(
node
).
must_be_like
%{
"users"."name" ~ 'foo%'
}
end
it
'can handle subqueries'
do
subquery
=
@table
.
project
(
:id
).
where
(
Arel
::
Nodes
::
Regexp
.
new
(
@table
[
:name
],
Nodes
.
build_quoted
(
'foo%'
)))
node
=
@attr
.
in
subquery
@visitor
.
accept
(
node
).
must_be_like
%{
"users"."id" IN (SELECT id FROM "users" WHERE "users"."name" ~ 'foo%')
}
end
end
describe
"Nodes::NotRegexp"
do
it
"should know how to visit"
do
node
=
Arel
::
Nodes
::
NotRegexp
.
new
(
@table
[
:name
],
Nodes
.
build_quoted
(
'foo%'
))
@visitor
.
accept
(
node
).
must_be_like
%{
"users"."name" !~ 'foo%'
}
end
it
'can handle subqueries'
do
subquery
=
@table
.
project
(
:id
).
where
(
Arel
::
Nodes
::
NotRegexp
.
new
(
@table
[
:name
],
Nodes
.
build_quoted
(
'foo%'
)))
node
=
@attr
.
in
subquery
@visitor
.
accept
(
node
).
must_be_like
%{
"users"."id" IN (SELECT id FROM "users" WHERE "users"."name" !~ 'foo%')
}
end
end
end
end
end
test/visitors/test_to_sql.rb
浏览文件 @
6296617c
...
...
@@ -526,6 +526,26 @@ def quote value, column = nil
end
end
end
describe
'Nodes::Regexp'
do
it
'raises not implemented error'
do
node
=
Arel
::
Nodes
::
Regexp
.
new
(
@table
[
:name
],
Nodes
.
build_quoted
(
'foo%'
))
assert_raises
(
NotImplementedError
)
do
@visitor
.
accept
(
node
)
end
end
end
describe
'Nodes::NotRegexp'
do
it
'raises not implemented error'
do
node
=
Arel
::
Nodes
::
NotRegexp
.
new
(
@table
[
:name
],
Nodes
.
build_quoted
(
'foo%'
))
assert_raises
(
NotImplementedError
)
do
@visitor
.
accept
(
node
)
end
end
end
end
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录