aboutsummaryrefslogtreecommitdiffstats
path: root/lib/arel/engines
diff options
context:
space:
mode:
Diffstat (limited to 'lib/arel/engines')
-rw-r--r--lib/arel/engines/memory/predicates.rb12
-rw-r--r--lib/arel/engines/sql/core_extensions/array.rb4
-rw-r--r--lib/arel/engines/sql/core_extensions/range.rb4
-rw-r--r--lib/arel/engines/sql/predicates.rb8
-rw-r--r--lib/arel/engines/sql/relations/relation.rb4
5 files changed, 31 insertions, 1 deletions
diff --git a/lib/arel/engines/memory/predicates.rb b/lib/arel/engines/memory/predicates.rb
index f87bf68357..b8642136d8 100644
--- a/lib/arel/engines/memory/predicates.rb
+++ b/lib/arel/engines/memory/predicates.rb
@@ -10,7 +10,7 @@ module Arel
def operator; :== end
end
- class Not < Binary
+ class Not < Equality
def eval(row)
operand1.eval(row) != operand2.eval(row)
end
@@ -35,9 +35,19 @@ module Arel
class Match < Binary
def operator; :=~ end
end
+
+ class NotMatch < Binary
+ def operator; :!~ end
+ end
class In < Binary
def operator; :include? end
end
+
+ class NotIn < Binary
+ def eval(row)
+ !(operand1.eval(row).include?(operand2.eval(row)))
+ end
+ end
end
end
diff --git a/lib/arel/engines/sql/core_extensions/array.rb b/lib/arel/engines/sql/core_extensions/array.rb
index 72f579b7eb..412479dc83 100644
--- a/lib/arel/engines/sql/core_extensions/array.rb
+++ b/lib/arel/engines/sql/core_extensions/array.rb
@@ -12,6 +12,10 @@ module Arel
def inclusion_predicate_sql
"IN"
end
+
+ def exclusion_predicate_sql
+ "NOT IN"
+ end
Array.send(:include, self)
end
diff --git a/lib/arel/engines/sql/core_extensions/range.rb b/lib/arel/engines/sql/core_extensions/range.rb
index 46124f8865..b5b1534e48 100644
--- a/lib/arel/engines/sql/core_extensions/range.rb
+++ b/lib/arel/engines/sql/core_extensions/range.rb
@@ -8,6 +8,10 @@ module Arel
def inclusion_predicate_sql
"BETWEEN"
end
+
+ def exclusion_predicate_sql
+ "NOT BETWEEN"
+ end
Range.send(:include, self)
end
diff --git a/lib/arel/engines/sql/predicates.rb b/lib/arel/engines/sql/predicates.rb
index e40240eec5..e9a068fb13 100644
--- a/lib/arel/engines/sql/predicates.rb
+++ b/lib/arel/engines/sql/predicates.rb
@@ -51,9 +51,17 @@ module Arel
class Match < Binary
def predicate_sql; 'LIKE' end
end
+
+ class NotMatch < Binary
+ def predicate_sql; 'NOT LIKE' end
+ end
class In < Binary
def predicate_sql; operand2.inclusion_predicate_sql end
end
+
+ class NotIn < Binary
+ def predicate_sql; operand2.exclusion_predicate_sql end
+ end
end
end
diff --git a/lib/arel/engines/sql/relations/relation.rb b/lib/arel/engines/sql/relations/relation.rb
index f372589af1..fc353fe0c8 100644
--- a/lib/arel/engines/sql/relations/relation.rb
+++ b/lib/arel/engines/sql/relations/relation.rb
@@ -21,6 +21,10 @@ module Arel
def inclusion_predicate_sql
"IN"
end
+
+ def exclusion_predicate_sql
+ "NOT IN"
+ end
def primary_key
connection_id = engine.connection.object_id