This post originated from an RSS feed registered with Ruby Buzz
by Jay Fields.
Original Post: Ruby: sqldsl 1.4.0 released
Feed Title: Jay Fields Thoughts
Feed URL: http://feeds.feedburner.com/jayfields/mjKQ
Feed Description: Blog about Ruby, Agile, Testing and other topics related to software development.
This morning I released the 1.4.0 version of sqldsl. This release is mostly in response to the suggestions that sqldsl has recently gotten from the Ruby Community. The new version can be retrieved via "gem install sqldsl" as soon as the file propagates. For now, it can be downloaded from the download page.
Breaking Changes: Table and column aliasing is now done with an 'as' method instead of using hashes. This change was necessary since column order is important and hashes are unordered.
irb> Select[:column1.as(:book), 1.as(:total), 'foo'.as(:constant)].to_sql => "select column1 as book, 1 as total, 'foo' as constant"
irb> Select.all.from[:table1.as(:aliased_table_name)].to_sql => "select * from table1 aliased_table_name"
Equality in the where clause has been changed from a single equals to double equals. I personally preferred the single equals; however, it broke in scenarios where columns were not prefixed by table names. The previous solution did not work because ruby assigned a local variable instead of raising a method_missing and allowing the ReceiveAny class to handle the assignment.
The new syntax is the same, except it uses == instead of =.
Select[:column1].from[:table1].where do column1 == 99 end.to_sql => "select column1 from table1 where column1 = 99"
New Feature: Inner Joins are now also supported
Select.all.from[:t1.as(:a)].inner_join[:t2.as(:b)].on do a.id == b.id end.inner_join[:t3.as(:c)].on do b.id2 == c.id end.to_sql => "select * from t1 a inner join t2 b on a.id = b.id inner join t3 c on b.id2 = c.id"
Bug Fix: Or conditions are surrounded by parenthesis.
Select[:column1].from[:table1].where do column1.equal 0 end.or do column1 > 100 end.to_sql => "select column1 from table1 where column1 = 0 or (column1 > 100)"