diff options
author | Keenan Brock <keenan@thebrocks.net> | 2015-12-05 19:13:05 -0500 |
---|---|---|
committer | Keenan Brock <keenan@thebrocks.net> | 2015-12-05 19:13:31 -0500 |
commit | 193d2ad2147a5cd1de44f2d57f4f3bd65e161293 (patch) | |
tree | ac0708511c1c52d29d57d0469307a87e91a56c54 /lib/arel | |
parent | 508a6783c8f75742ac64e5073b3b211b0c15662a (diff) | |
download | rails-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/arel')
-rw-r--r-- | lib/arel/nodes.rb | 1 | ||||
-rw-r--r-- | lib/arel/nodes/binary.rb | 2 | ||||
-rw-r--r-- | lib/arel/nodes/regexp.rb | 14 | ||||
-rw-r--r-- | lib/arel/visitors/postgresql.rb | 6 |
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 |