| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
Since Active Record needs to eagerly cast values, we need to check for
quoted infinity in our range handling
|
|
|
|
|
| |
It's not quite duck typed, but it will allow us to pass in our own
objects with additional logic (like type casting).
|
|
|
|
|
| |
Given that we are going to remove casting from Arel in the near future,
having a single place nodes in predications will help.
|
|
|
|
|
|
|
| |
The goal of these methods should be to generate in nodes, not handle
every possible permutation of more than one value. The `#between` and
`#not_between` methods have been extracted, which better represent the
semantics of handling ranges in SQL.
|
|
|
|
|
|
|
| |
These methods duplicate a lot of logic from the other predications. We
can just use those methods directly, and only build nodes with the same
name in our method directly. We've already had one bug that came from
building nodes directly, rather than using the proper predicate.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Currently, doing
```ruby
relation[:id].not_eq(4).and(relation[:id].not_in(1..3))
```
will generate
```sql
"id" != 4 AND "id" < 1 OR "id" > 3
```
Which would incorrectly include records with an id of 4, as the OR
statement has higher precidence than the AND statement. The `or`
method on `Node` properly groups the statement in parenthesis.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
If we add the casting node to the ast at build time, then we can avoid
doing the lookup at visit time.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is useful for dynamically created predicates e.g:
expr1 = table.create_false
expr2 = table.create_false
expr1 = create_a_predicate() if some_condition
expr2 = create_another_predicate() if some_other_condition
table.where(expr1.and(expr2))
|
| |
|
|
|
|
|
| |
This reverts commit 490d6f98f8974c717ddca29df162f5f1ad48e094, reversing
changes made to dd07005dceb6641214f7d1166f75acbd379fb570.
|
|\
| |
| | |
Passing nil in array generates improper SQL
|
| |
| |
| |
| |
| |
| |
| |
| | |
Now, instead of the following SQL code:
some_field IN (1, 2, NULL)
Arel will generate the proper one:
some_field IN (1, 2) OR IS NULL
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
lib/arel.rb
lib/arel/attributes/attribute.rb
lib/arel/nodes/infix_operation.rb
lib/arel/nodes/named_function.rb
Conflicts:
lib/arel.rb
lib/arel/attributes/attribute.rb
|
|/ |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
with very wide ranges that was caused by using Range#min and Range#max rather than Range#begin and Range#end. Ruby 1.8 uses Enumerable#min and Enumerable#max in Ranges, which calls to_a internally. It is not necessary to enumerate the range in order to construct the predicates. At the same time, an off-by-one error (failing test) with exclusive-end Ranges in Nodes::NotIn queries was fixed.
|
|
|