| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| | |
|
| | |
|
| |
| |
| |
| |
| | |
If we add the casting node to the ast at build time, then we can avoid
doing the lookup at visit time.
|
|\ \
| | |
| | | |
Assign value from attribute test
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Such queries become possible for mortals:
```ruby
table.where(table[:qux].eq 'zomg').compile_update(table[:foo] => table[:bar])
```
Arguably much more sane than using `engine.connection.quote_column_name`
or `engine.connection.visitor.accept` on the right hand (bar), which is
totally leaking the abstraction.
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
|/ /
| |
| |
| | |
inplace directly for test helper.
|
|\ \
| | |
| | | |
Extract comparison array to a constant for the time being until removing the checks completely.
|
| | |
| | |
| | |
| | | |
check completely.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
In commit 68a95542e1a7a79d9777223fbffd2b982fed0268 the last_column feature of ToSql was removed. The visit_Arel_Nodes_Matches and visit_Arel_Nodes_DoesNotMatch methods are overwritten in the PostgreSQL class, but were not updated appropriately. This commit fixes the issue accordingly.
This bug affects at least all update_all statements in Rails 4.0.2 that have subqueries with ILIKE statements on PostgreSQL. The bug is present in Arel 4.0.1 and later, so it probably affects most Rails 4.0.2 projects.
It would be highly appreciated if Arel 4 could get a point release as well. Thanks for your continued work.
|
|/ / |
|
| |
| |
| | |
Documenting the library's behavior. People and other libraries (cf. Squeel) have come to depend on this behavior, and so am submitting this pull request to specify it authoritatively.
|
| | |
|
| | |
|
| | |
|
| | |
|
|\ \
| | |
| | | |
Add :encode_with to sql_literal for proper YAML serialization
|
| | | |
|
| | | |
|
| | |
| | |
| | |
| | | |
`compile_insert`
|
| | | |
|
| | |
| | |
| | |
| | | |
`UpdateManager#key`
|
| | |
| | |
| | |
| | | |
`compile_update` and then calling `to_sql` on the resulting object to execute the SQL
|
| | |
| | |
| | |
| | | |
`compile_insert` and then calling `to_sql` on the resulting object to execute the SQL
|
| | |
| | |
| | |
| | | |
`compile_delete` and then calling `to_sql` on the resulting object to execute the SQL
|
|\ \ \
| |/ /
|/| | |
Remove deprecated
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
|\ \ \
| | | |
| | | | |
Support `columns_for_distinct` with Oracle adapter
|
| | | | |
|
|/ / / |
|
|\ \ \
| | | |
| | | | |
Cache visitor dispatch on a per-visitor basis
|
| |/ / |
|
|/ / |
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The last_column feature of the ToSql visitor and its descendants is what
enabled quoting based on the column last visited -- in other words, if
you have a standard condition like an equality with a string attribute
on the left side and an integer on the right side, then when ARel visits
the node, it'll first visit the left side attribute, setting the
column of the string attribute as the last column, and resulting in the
right side of the condition getting the appropriate quoting.
The downside is that this means that visitors can't be shared between
threads, because of the state mutation. It also makes for some really
weird behavior in the event that the visitor visits a node that happens
to contain an attribute you weren't expecting to be there, since it'll
potentially quote something based on that attribute. So, it prevents
reversing an equality condition. column = value will work, but not value
= column, since the last column wouldn't be the column you're hoping
for.
This is a first pass at fixing this by changing the signature of the
visit methods to accept the currently-relevant attribute, if any.
|
| | |
|
| |
| |
| |
| |
| |
| |
| | |
The project uses "Arel" most of the time, but there were a few "ARel"
here and there. I checked with @brynary back in 2010 to pick one for
the Rails documentation guidelines and "Arel" was chosen and documented.
This patch chooses "Arel" vs "ARel" based on that.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
There are two commits involving issue #99 which should be reverted.
First of all, #99 is not an issue in Arel at all. Second, the fix provides pretty much destroys the purpose of pagination by cause full table scans.
The original code (it seems I can't simply revert the commits) is 900 times slower than this one.
```
SELECT * FROM (
SELECT raw_sql_.*, rownum raw_rnum_
FROM (SELECT "LANCAMENTOS".* FROM "LANCAMENTOS" ) raw_sql_
)
WHERE raw_rnum_ between 1 and 30
----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 4636K| 2701M| 23442 (2)| 00:04:42 |
|* 1 | VIEW | | 4636K| 2701M| 23442 (2)| 00:04:42 |
| 2 | COUNT | | | | | |
| 3 | TABLE ACCESS FULL| LANCAMENTOS | 4636K| 738M| 23442 (2)| 00:04:42 |
-----------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("RAW_RNUM_"<=30 AND "RAW_RNUM_">=1)
Statistics
-----------------------------------------------------------
4 user calls
13 physical read total multi block requests
202588160 physical read total bytes
202588160 cell physical IO interconnect bytes
0 commit cleanout failures: block lost
0 IMU commits
0 IMU Flushes
0 IMU contention
0 IMU bind flushes
0 IMU mbu flush
SELECT * FROM (
SELECT raw_sql_.*, rownum raw_rnum_
FROM (SELECT "LANCAMENTOS".* FROM "LANCAMENTOS" ) raw_sql_
WHERE rownum <= 30
)
WHERE raw_rnum_ >= 0
-----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 30 | 18330 | 2 (0)| 00:00:01 |
|* 1 | VIEW | | 30 | 18330 | 2 (0)| 00:00:01 |
|* 2 | COUNT STOPKEY | | | | | |
| 3 | TABLE ACCESS FULL| LANCAMENTOS | 30 | 5010 | 2 (0)| 00:00:01 |
-----------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("RAW_RNUM_">=0)
2 - filter(ROWNUM<=30)
Statistics
-----------------------------------------------------------
4 user calls
0 physical read total multi block requests
0 physical read total bytes
0 cell physical IO interconnect bytes
0 commit cleanout failures: block lost
0 IMU commits
0 IMU Flushes
0 IMU contention
0 IMU bind flushes
0 IMU mbu flush
```
|
| | |
|
| | |
|
|\ \
| | |
| | | |
Support Float::INFINITY in ranges
|
| | | |
|