aboutsummaryrefslogtreecommitdiffstats
path: root/lib
Commit message (Collapse)AuthorAgeFilesLines
* Remove unused `bind_values`Ryuta Kamizono2017-07-251-4/+1
| | | | | Since https://github.com/rails/rails/commit/213796f, `bind_values` is no longer used from Active Record.
* Adjust `BindParam` as needed for ARSean Griffin2017-07-241-1/+5
| | | | | | | | | | We need `value` to have a writer for `StatementCache` to work when prepared statements are disabled. This is something I'd like to revert eventually, either by disabling that form of caching in that case or re-introducing something like the old `Bind` collector. The addition of `nil?` is to make `IS NULL` be inserted correctly, similar to what we already do with quoted and casted nodes
* Add a collector to grab the bind values off the ASTSean Griffin2017-07-212-0/+56
| | | | | | | | Now that the bind values are being stored on the actual AST, we need a way to pull them off into the array that we were previously maintaining separately. This requires a full walk of the AST. This is an expensive operation, so I've also added a visitor for delegating to more than one visitor in a single pass.
* Ensure `ToSql` collector returns a UTF-8 stringSean Griffin2017-07-211-1/+1
| | | | | | | | Switching from `''.dup` to `String.new` had the side effect of changing the encoding on Ruby 2.4 and later. Oddly, `String.new(encoding: Encoding::UTF_8)` is significantly slower than `''.dup`. This seems like a bug in Ruby, but not something we're going to address right now. A test has been added to ensure this regression doesn't occur again.
* Refactor `substitute_binds` to perform substitution immediatelySean Griffin2017-07-215-23/+14
| | | | | | | | | | | | | | | | | | I'm honestly not sure if replacing bind params with their concrete values is something that belongs in Arel at all, as it's something that will need to be coupled to the quoting mechanism of the caller, and could just be accomplished by using `Quoted` instead. Still, with the new structure we can provide a much simpler API around substitution. The expectation of the quoter responding to `quote` is a reasonably minimal API. I originally used `DelegateClass` here, with the one line override of `add_bind`, but realized that we have some funky code going on where the collector returns the next collector to use (in practice `self` is always returned, and I don't see why we'd ever want to do this). Removing that would likely be worthwhile, but would be a larger refactoring
* Add a value field `Nodes::BindParam`Sean Griffin2017-07-213-42/+10
| | | | | | | | | | | | | | | | | | | | This is part of a greater refactoring to have the `BindParam` nodes hold onto their values. We want to generally keep the AST decoupled from what you're actually doing with those values, but ultimately the usage of `BindParam` is almost identical to how you'd use `Casted` or `Quoted`. Forcing consumers of Arel's API to maintain the bind values separately from the AST makes manipulating the AST essentially impossible, as you would need to perform a full walk of the AST to determine whether a given node contains bind parameters, and which value it maps to. By storing the value on the bind parameter directly, we can collect them in another AST pass (realistically it'll be part of the same pass that performs SQL construction for performance reasons). This will dramatically simplify AST manipulation for Rails or any other consumers that work with bind params. As part of this change I've removed the `BindVisitor`, which appears to be dead code, and had tests break from this change.
* Rename `Collectors::Bind`Sean Griffin2017-07-212-11/+1
| | | | | | The "bind collector" does not actually collect bind params at all, it substitutes them out of the final AST, replacing them with a quoted value.
* Merge pull request #484 from kirs/multiple-insert-v2Rafael França2017-06-154-0/+40
|\ | | | | Support INSERT with multiple values (v2)
| * Support INSERT with multiple valuesKir Shatrov2017-05-224-0/+40
| |
* | Merge pull request #472 from film42/masterMatthew Draper2017-06-052-4/+6
|\ \ | |/ |/| Make Visitor visit thread safe by holding dispatch method reference
| * Make Visitor visit thread safe by holding dispatch method referenceGarrett Thornburg2017-02-172-4/+6
| |
* | Remove unused `engine`Ryuta Kamizono2017-05-041-1/+1
| | | | | | | | | | | | Follow up of 98fc25991137ee09b6800578117f8c1c322680f2. `engine` is only used for `to_sql` and `where_sql` now.
* | Made InsertManager#insert chainablePedro Sena2017-02-281-0/+1
|/
* Enable frozen_string_literal in all files in arelRafael Mendonça França2017-02-1369-1/+70
|
* Performance improvement.zhufenggood2017-01-271-4/+4
|
* Raise custom error on empty joinDaniel Colson2017-01-174-2/+11
|
* Remove dead code now that attr is not used anymoreRafael Mendonça França2016-12-291-1/+1
|
* Bump arel to 8.0.0Rafael Mendonça França2016-12-291-1/+1
|
* Remove deprecated type cast support in ArelRafael Mendonça França2016-12-291-44/+5
|
* Remove dead codeRafael Mendonça França2016-12-291-12/+0
|
* Arel master is alre 7.2Rafael Mendonça França2016-12-281-1/+1
| | | | closes #461
* use #data_source_exists? instead of deprecated #table_exists?Alexander Baronec2016-10-081-1/+1
|
* Merge pull request #443 from mgbatchelor/masterRafael França2016-10-071-1/+0
|\ | | | | remove union mapping as :binary node when performing DepthFirst enumeration
| * remove union mapping as :binary node when performing DepthFirst enumerationMichael Batchelor2016-08-191-1/+0
| |
* | Merge pull request #445 from oliverguenther/fix/dot-visitor-casted-nodeRafael França2016-10-071-0/+5
|\ \ | | | | | | Add Arel::Nodes::Casted to dot visitor
| * | Add Arel::Nodes::Casted to dot visitorOliver Günther2016-08-271-0/+5
| |/ | | | | | | | | | | | | Adds casted node to the dot visitor with outgoing edges to val and attribute. Fixes #419
* | Merge pull request #447 from ojab/masterRafael França2016-10-0712-2/+14
|\ \ | | | | | | Freeze all the strings in visitors
| * | Freeze all the strings in visitorsojab2016-08-3112-2/+14
| | |
* | | Fix issue #438 when oracle visitor gets BindParamsRodrigo Castro2016-10-071-2/+13
| | |
* | | Don't store all aliases to a tableSean Griffin2016-09-131-6/+2
|/ / | | | | | | | | | | | | The aliases property of a table is never used other than for equality. However, the aliases that have been created for a table aren't really something that should affect whether a table is considered to be the same table or not. This removal does not appear to have any affect within Active Record or within Arel.
* / Change BindParam visit method for Dot to a noopAdam Lassek2016-08-261-1/+2
|/ | | | | | Since BindParam contains no information, treating it like a string adds no useful information to the graph, and results in an invalid label format.
* Release 7.1.1Rafael Mendonça França2016-07-271-1/+1
|
* Fix Casted#hashMatthew Draper2016-07-281-1/+1
| | | | There is no @class variable.
* Release 7.1.0Rafael Mendonça França2016-07-191-1/+1
|
* Merge pull request #417 from tlkahn/masterRafael França2016-07-191-0/+9
|\ | | | | Fix issue #415 - Should Arel::Nodes::True.new() be 1 in sqlite3?
| * Fix issue #415 - Should Arel::Nodes::True.new() be 1 in sqlite3?Yong Guo2016-03-011-0/+9
| |
* | Merge pull request #328 from vipulnsward/dryup-collectorsRafael França2016-07-191-33/+13
|\ \ | | | | | | DRY up visit_Arel_Nodes_SelectCore
| * | DRY up visit_Arel_Nodes_SelectCore and extract nodes collection to ↵Vipul A M2016-04-111-33/+13
| | | | | | | | | | | | collect_nodes_for, for collecting wheres, projections, groups, windows
* | | Bump to 7.0.1.pre in anticipation of next releaseJeremy Daer2016-05-291-1/+1
| | | | | | | | | | | | [ci skip]
* | | Support for unified Integer class in Ruby 2.4+yui-knk2016-05-303-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ruby 2.4 unifies Fixnum and Bignum into Integer: https://bugs.ruby-lang.org/issues/12005 Ruby ~2.3 `1234.class` is `Fixnum` and `123456789012345678901234567890.class` is `Bignum`. Ruby 2.4+ `1234.class` is `Integer` and `123456789012345678901234567890.class` is `Integer`. So what we should do is defining `visit_Integer` method to visitors.
* | | Merge pull request #422 from yahonda/oracle12_support_bind_valueSean Griffin2016-05-061-0/+4
|\ \ \ | | | | | | | | Support Oracle bind parameter value for Oracle12 visitor
| * | | Support Oracle bind parameter value for Oracle12 visitorYasuo Honda2016-04-111-0/+4
| |/ /
* | | Merge pull request #432 from tradegecko/pg-grouping-elements-supportRafael França2016-05-054-2/+50
|\ \ \ | | | | | | | | PG: Add Support for GroupBy's Cube, Rollup and Grouping Set
| * | | Add Support for GroupBy Cube, Rollup and Grouping Set Syntax for PostgreSQL ↵Mohammad Habbab2016-05-044-2/+50
| | | | | | | | | | | | | | | | Visitor
* | | | Raise ArgumentError if limit and lock are used for Oracle12 visitorYasuo Honda2016-05-021-3/+5
|/ / / | | | | | | | | | | | | | | | | | | it would generates `SELECT ... FETCH FIRST n ROWS ONLY FOR UPDATE` which causes Oracle 12c database returns this error : ORA-02014: cannot select FOR UPDATE from view with DISTINCT, GROUP BY, etc.
* / / Update to_sql.rbzhufenggood2016-04-151-3/+3
|/ / | | | | Update to_sql.rb. Slightly performance improvement.
* / Update to_sql.rb. Slightly performance improment.zhufenggood2016-03-311-1/+1
|/ | | Update to_sql.rb. Slightly performance improment.
* added Casted#hashBert Bruynooghe2016-02-171-0/+4
|
* Delete not used codesyui-knk2016-02-061-23/+0
| | | | | These codes were introduced by 03724fb1789198cc394f6e8b69cf9404e03eddd7, and to be not used by 79411322ae225289e1c051f4f68ed84c6349e4a0.
* * Support for bitwise operations as infix operators. Tests included.Shahbaz Javeed2016-01-065-0/+85
| | | | | | | | | | | | | | | | | | | | | | *** Individual commit messages included below *** * Preliminary support for bitwise operations as infix operators. Tests to follow. * Added bitwise xor, shift left and shift right operators * Fixed the BitwiseOr class so it uses the :| operator instead of :& * All the methods for the bitwise operators in the Arel::Math module now wrap them up in Arel::Nodes::Grouping so the operation becomes isolated like addition and subtraction * Preliminary set of tests for the new operators * Updated README with examples of bitwise operations * Added a new UnaryOperation class which is a riff on the InfixOperation class * Added tests for UnaryOperation (inspired by InfixOperation tests) * Added the bitwise not (~) operator as a UnaryOperation * Added tests for the bitwise not operator * Added documentation for the bitwise not operator * Updated gemspec using `rake arel.gemspec`