Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introduction to Arel

Introduction to Arel

Arel fundamentals

Bruno Sutic

October 28, 2014
Tweet

More Decks by Bruno Sutic

Other Decks in Programming

Transcript

  1. What is Arel? • github.com/rails/arel • “Simplifies generation of complex

    SQL”
 You write Ruby, out comes the SQL • dependency of ActiveRecord • can be used together with ActiveRecord
  2. How I learned about Arel? • credit: Janko Marohnic •

    used Arel to optimize a feature on a project
  3. Prerequisites for the examples • ‘Customer’ is an ActiveRecord model

    • Arel api for a column:
 Customer.arel_table[:name] • A “convention”:
 class Customer
 def self.[](column)
 arel_table[column]
 end
 end Customer[:name]
  4. A bit more useful example • ActiveRecord
 Customer.joins(:sales)
 .where(“sales.price” =>

    variable)
 
 or
 
 Customer.joins(:sales)
 .where(sales: { price: variable }) • Arel
 Customer.joins(:sales)
 .where(Sale[:price].eq(variable))
  5. SQL comparisons example • ActiveRecord
 Customer.where(“credits > ?”, credits_variable) •

    Arel
 Customer.where(
 Customer[:credits].gt(credits_variable)
 ) • All comparison operators:
 gt, lt, gteq, lteq
  6. OR condition example • ActiveRecord
 Customer.where(“credits > ? OR credits

    < ?”, var1, var2) • Arel
 Customer.where(
 Customer[:credits].gt(var1).or(
 Customer[:credits].lt(var2)
 )
 )
  7. Complex conditions example • ActiveRecord
 Customer.where(
 “credits > ? OR

    (name = ? AND credits < ?)”, var1, var2, var3
 ) • Arel
 Customer.where(
 Customer[:credits].gt(var1).or(
 Customer[:name].eq(var2).and(
 Customer[:credits].lt(var3)
 )
 )
 )
  8. Other features • support for all SQL ‘join’ types •

    SQL literals • writing only a part of a bigger query as SQL • example: CASE statement
  9. Benefits of using Arel • pure Ruby, nicer looking code

    • proper code highlighting • ruby exceptions • completely avoids SQL injection
  10. Arel resources • github repo:
 https://github.com/rails/arel • great speech:
 https://www.youtube.com/watch?v=ShPAxNcLm3o

    • source code walkthrough:
 https://www.youtube.com/watch?v=EJ6b_2S9Ids • examples from this talk:
 https://gist.github.com/bruno-/5964403476c791331c49