59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
# File 'lib/parade_db/search_methods.rb', line 59
def contains_paradedb_predicate?(node)
case node
when nil
false
when ::Array
node.any? { |child| contains_paradedb_predicate?(child) }
when ::Arel::Nodes::InfixOperation
PARADEDB_INFIX_OPERATORS.include?(node.operator.to_s) ||
contains_paradedb_predicate?(node.left) ||
contains_paradedb_predicate?(node.right)
when ::Arel::Nodes::NamedFunction
node.name.to_s.start_with?("pdb.") ||
node.expressions.any? { |expr| contains_paradedb_predicate?(expr) }
when ::Arel::Nodes::SqlLiteral
node.to_s.match?(PARADEDB_SQL_PATTERN)
when ::Arel::Nodes::Grouping
contains_paradedb_predicate?(node.expr)
when ::Arel::Nodes::And
node.children.any? { |child| contains_paradedb_predicate?(child) }
when ::Arel::Nodes::Or
contains_paradedb_predicate?(node.left) || contains_paradedb_predicate?(node.right)
when ::Arel::Nodes::Not
contains_paradedb_predicate?(node.expr)
when ::Arel::Nodes::Node
node.class.name.start_with?("ParadeDB::") ||
(node.respond_to?(:expr) && contains_paradedb_predicate?(node.expr)) ||
(node.respond_to?(:left) && contains_paradedb_predicate?(node.left)) ||
(node.respond_to?(:right) && contains_paradedb_predicate?(node.right))
else
false
end
end
|