Rails on Oracle
Raimonds Simanovskis       github.com/rsim          @rsim
Self-promotion :)   eazybi.com
How to contribute to  ActiveRecord Oracle enhanced     adapter
Main components                          Rails 3.x                          build query ActiveRecord                      ...
What Oracle Enhanced      adapter does  database         metadata       custom CUD connection        queries         proce...
Oracle Data Types    Ruby            Rails             Oracle    Fixnum          :integer        NUMBER     Float         ...
Latest additionRuby     Rails   OracleString   :raw    RAW
Legacy schemasclass Employee < ActiveRecord::Base  set_table_name "hr_employees"  set_primary_key "employee_id"  set_seque...
class Employee < ActiveRecord::Base             set_create_method do               plsql.employees_pkg.create_employee(   ...
Full-text indexesadd_context_index :posts,  [:title, :body,  # specify aliases always with AS keyword  "SELECT comments.au...
Gemfilegem “ruby-oci8”, “~>2.0.4”gem “activerecord-oracle_enhanced-adapter”, “~>1.3.2”gem “activerecord-oracle_enhanced-ad...
Currently testing onActiveRecord versions        2.3.x        3.0.x      3.1.beta
Currently testing on Oracle versions     10.2.0.4 11gR2 should be     OK :)
Currently testing on  Ruby platforms          oracle_enhanced adapter  Ruby 1.8.7        Ruby 1.9.2      JRuby 1.6ruby-oci...
Reporting issues
Where? http://github.com/rsim/oracle-enhanced/issueshttp://groups.google.com/group/oracle-enhanced
How?      Provide full examplerequire "rubygems"gem "activerecord", "3.0.5"gem "activerecord-oracle_enhanced-adapter", "1....
IdeallyGithub pull request
Other libraries
ruby-plsql gemplsql.connect! "hr","hr","xe"plsql.test_uppercase(xxx)              # => "XXX"plsql.test_uppercase(:p_string...
ruby-plsql-spec                ideal language                for writing tests             powerful testing tools RSpec   ...
http://github.com/rsim/mondrian-olap
More information         http://blog.rayapps.com http://github.com/rsim/oracle-enhancedhttp://groups.google.com/group/orac...
Upcoming SlideShare
Loading in...5
×

Rails on Oracle 2011

15,475

Published on

RailsConf 2011 BoF session "Rails on Oracle" slides

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
15,475
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
28
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Rails on Oracle 2011

  1. 1. Rails on Oracle
  2. 2. Raimonds Simanovskis github.com/rsim @rsim
  3. 3. Self-promotion :) eazybi.com
  4. 4. How to contribute to ActiveRecord Oracle enhanced adapter
  5. 5. Main components Rails 3.x build query ActiveRecord Arel SQL Arel::Visitors::Oracle execute resultsOracleEnhancedAdapter ActiveRecord:: ConnectionAdapters:: AbstractAdapter
  6. 6. What Oracle Enhanced adapter does database metadata custom CUD connection queries procedures schema customvalue quoting definition stmts schema stmtscolumn type context index schema dump mapping creationresults type structure AR patches mapping dump
  7. 7. Oracle Data Types Ruby Rails Oracle Fixnum :integer NUMBER Float :float NUMBER BigDecimal :decimal NUMBER, DECIMAL Time :datetime DATE Time :time DATE Date :date DATE String :string VARCHAR2 String :text CLOB String :binary BLOBTrue/FalseClass :boolean NUMBER(1), CHAR(1)
  8. 8. Latest additionRuby Rails OracleString :raw RAW
  9. 9. Legacy schemasclass Employee < ActiveRecord::Base set_table_name "hr_employees" set_primary_key "employee_id" set_sequence_name "hr_employee_s" set_date_columns :hired_on, :birth_date_on set_datetime_columns :last_login_time set_boolean_columns :manager, :active ignore_table_columns :attribute1, :attribute2end
  10. 10. class Employee < ActiveRecord::Base set_create_method do plsql.employees_pkg.create_employee( :p_first_name => first_name,ActiveRecord :p_last_name => last_name, :p_employee_id => nil )[:p_employee_id] with end set_update_method do PL/SQL plsql.employees_pkg.update_employee( :p_employee_id => id, :p_first_name => first_name, CRUD ) :p_last_name => last_name procedures end set_delete_method do plsql.employees_pkg.delete_employee( :p_employee_id => id ) end end
  11. 11. Full-text indexesadd_context_index :posts, [:title, :body, # specify aliases always with AS keyword "SELECT comments.author AS comment_author, " + "comments.body AS comment_body " + "FROM comments WHERE comments.post_id = :id" ], :name => post_and_comments_index, :index_column => :all_text, :index_column_trigger_on => [:updated_at, :comments_count], :sync => ON COMMITPost.contains(:all_text, "hello")Post.contains(:all_text, "{first} within title")Post.contains(:all_text, "{first} AND {post}")
  12. 12. Gemfilegem “ruby-oci8”, “~>2.0.4”gem “activerecord-oracle_enhanced-adapter”, “~>1.3.2”gem “activerecord-oracle_enhanced-adapter”, :git=> “git://github.com/rsim/oracle-enhanced.git”
  13. 13. Currently testing onActiveRecord versions 2.3.x 3.0.x 3.1.beta
  14. 14. Currently testing on Oracle versions 10.2.0.4 11gR2 should be OK :)
  15. 15. Currently testing on Ruby platforms oracle_enhanced adapter Ruby 1.8.7 Ruby 1.9.2 JRuby 1.6ruby-oci8 2.0.4 ruby-oci8 2.0.4 ojdbc6.jar
  16. 16. Reporting issues
  17. 17. Where? http://github.com/rsim/oracle-enhanced/issueshttp://groups.google.com/group/oracle-enhanced
  18. 18. How? Provide full examplerequire "rubygems"gem "activerecord", "3.0.5"gem "activerecord-oracle_enhanced-adapter", "1.3.2"require "active_record"ActiveRecord::Base.establish_connection(:adapter => "oracle_enhanced", :database => "orcl", :username => "hr", :password => "hr")ActiveRecord::Base.connection.instance_eval do drop_table :test_categories rescue nil create_table :test_categories, :force => true do |t| t.string :name t.string :category_code endendclass TestCategory < ActiveRecord::Baseendcategory = TestCategory.new(:name=>"hl", :category_code=>"hd")category.id = 1category.save!p category
  19. 19. IdeallyGithub pull request
  20. 20. Other libraries
  21. 21. ruby-plsql gemplsql.connect! "hr","hr","xe"plsql.test_uppercase(xxx) # => "XXX"plsql.test_uppercase(:p_string => xxx) # => "XXX"plsql.test_copy("abc", nil, nil) # => { :p_to => "abc", # :p_to_double => "abcabc" }plsql.test_copy(:p_from => "abc", :p_to => nil, :p_to_double => nil) # => { :p_to => "abc", # :p_to_double => "abcabc" }plsql.hr.test_uppercase(xxx) # => "XXX"plsql.test_package.test_uppercase(xxx) # => XXXplsql.hr.test_package.test_uppercase(xxx) # => XXXplsql.logoff
  22. 22. ruby-plsql-spec ideal language for writing tests powerful testing tools RSpec with “readable” syntax library for callingruby-plsql PL/SQL procedures from Ruby
  23. 23. http://github.com/rsim/mondrian-olap
  24. 24. More information http://blog.rayapps.com http://github.com/rsim/oracle-enhancedhttp://groups.google.com/group/oracle-enhanced
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×