aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorKeenan Brock <keenan@thebrocks.net>2015-12-05 19:13:05 -0500
committerKeenan Brock <keenan@thebrocks.net>2015-12-05 19:13:31 -0500
commit193d2ad2147a5cd1de44f2d57f4f3bd65e161293 (patch)
treeac0708511c1c52d29d57d0469307a87e91a56c54 /lib
parent508a6783c8f75742ac64e5073b3b211b0c15662a (diff)
downloadrails-193d2ad2147a5cd1de44f2d57f4f3bd65e161293.tar.gz
rails-193d2ad2147a5cd1de44f2d57f4f3bd65e161293.tar.bz2
rails-193d2ad2147a5cd1de44f2d57f4f3bd65e161293.zip
Add case sensitive regexp
Explicitly declare if this is case sensitive or not currently postgres assumes case insensitive regexp no other databases support regexps
Diffstat (limited to 'lib')
-rw-r--r--lib/arel/nodes.rb1
-rw-r--r--lib/arel/nodes/binary.rb2
-rw-r--r--lib/arel/nodes/regexp.rb14
-rw-r--r--lib/arel/visitors/postgresql.rb6
4 files changed, 19 insertions, 4 deletions
diff --git a/lib/arel/nodes.rb b/lib/arel/nodes.rb
index 8d61bb320f..0e66d2dd0c 100644
--- a/lib/arel/nodes.rb
+++ b/lib/arel/nodes.rb
@@ -30,6 +30,7 @@ require 'arel/nodes/table_alias'
require 'arel/nodes/infix_operation'
require 'arel/nodes/over'
require 'arel/nodes/matches'
+require 'arel/nodes/regexp'
# nary
require 'arel/nodes/and'
diff --git a/lib/arel/nodes/binary.rb b/lib/arel/nodes/binary.rb
index dddbde1431..763091c267 100644
--- a/lib/arel/nodes/binary.rb
+++ b/lib/arel/nodes/binary.rb
@@ -38,9 +38,7 @@ module Arel
LessThanOrEqual
NotEqual
NotIn
- NotRegexp
Or
- Regexp
Union
UnionAll
Intersect
diff --git a/lib/arel/nodes/regexp.rb b/lib/arel/nodes/regexp.rb
new file mode 100644
index 0000000000..784368f5bf
--- /dev/null
+++ b/lib/arel/nodes/regexp.rb
@@ -0,0 +1,14 @@
+module Arel
+ module Nodes
+ class Regexp < Binary
+ attr_accessor :case_sensitive
+
+ def initialize(left, right, case_sensitive = true)
+ super(left, right)
+ @case_sensitive = case_sensitive
+ end
+ end
+
+ class NotRegexp < Regexp; end
+ end
+end
diff --git a/lib/arel/visitors/postgresql.rb b/lib/arel/visitors/postgresql.rb
index 75d2ad9c93..1ef0261bdd 100644
--- a/lib/arel/visitors/postgresql.rb
+++ b/lib/arel/visitors/postgresql.rb
@@ -26,11 +26,13 @@ module Arel
end
def visit_Arel_Nodes_Regexp o, collector
- infix_value o, collector, ' ~ '
+ op = o.case_sensitive ? ' ~ ' : ' ~* '
+ infix_value o, collector, op
end
def visit_Arel_Nodes_NotRegexp o, collector
- infix_value o, collector, ' !~ '
+ op = o.case_sensitive ? ' !~ ' : ' !~* '
+ infix_value o, collector, op
end
def visit_Arel_Nodes_DistinctOn o, collector