24
Ruby on Rails Oracle adaptera izstrāde +

Ruby on Rails Oracle adaptera izstrāde

  • Upload
    rsim

  • View
    1.036

  • Download
    10

Embed Size (px)

Citation preview

Page 1: Ruby on Rails Oracle adaptera izstrāde

Ruby on RailsOracle adaptera izstrāde

+

Page 2: Ruby on Rails Oracle adaptera izstrāde

Raimonds Simanovskis

TietoEnator Alise

Page 3: Ruby on Rails Oracle adaptera izstrāde

Kas irRuby on

Rails?

Page 4: Ruby on Rails Oracle adaptera izstrāde

Ruby irobjektorientēta

dinamiskaprogrammēšanas valoda

vienkārša pēc izskata

spēcīgas iespējas

Page 5: Ruby on Rails Oracle adaptera izstrāde

Ruby on RailsModerns “tīmekļa lietojumu ietvars”

Veidots Ruby programmēšanas valodā

Radies no 37signals Basecamp aplikācijas

Atvērtā koda programmatūra

Fokusējas uz izstrādātāju produktivitāti

Spējā (Agile) programmatūras izstrādes pieeja

Page 6: Ruby on Rails Oracle adaptera izstrāde

PamatprincipiNeatkārto sevi

DRY - Don’t Repeat Yourself

Vienošanās nevis konfigurēšanaConvention over Configuration

Programmatūra ar viedokliOpinionated software

Page 7: Ruby on Rails Oracle adaptera izstrāde

Komponentes

Page 8: Ruby on Rails Oracle adaptera izstrāde

Active Record (Model)

Page 9: Ruby on Rails Oracle adaptera izstrāde

Action Controller

Page 10: Ruby on Rails Oracle adaptera izstrāde

Action View

Page 11: Ruby on Rails Oracle adaptera izstrāde

Ruby platformasMRI 1.8.6

Ruby/YARV 1.9.1

JRuby

Rubinius IronRuby MacRuby

MagLev BlueRuby

Page 12: Ruby on Rails Oracle adaptera izstrāde

Ruby => Oracle

Ruby application

ruby-oci8

require 'oci8'OCI8.new('scott', 'tiger').exec('select * from emp') do |r| puts r.join(',')end

Oracle Instant Client Oracle Database

SQL*Net

Page 13: Ruby on Rails Oracle adaptera izstrāde

JRuby => Oracle

Ruby application

JRuby

require "java"sql = JavaSQL::DriverManager.getConnection(db, user, password)statement = sql.createStatementstatus = statement.execute "select * from parts;"rs = statement.getResultSet()

JDBC driver Oracle Database

SQL*Net

Page 14: Ruby on Rails Oracle adaptera izstrāde

ActiveRecordOracle Enhanced

Adapter

Page 15: Ruby on Rails Oracle adaptera izstrāde

Ruby on Rails=> Oracle

gem install activerecord-oracle_enhanced-adapter

database.ymldevelopment: adapter: oracle_enhanced database: XE username: blogdemo password: blogdemo encoding: utf8

Page 16: Ruby on Rails Oracle adaptera izstrāde

SQL bind variables

database.ymldevelopment: adapter: oracle_enhanced database: XE username: blogdemo password: blogdemo encoding: utf8 cursor_sharing: similar

Employee.find(1)

SELECT * FROM employees WHERE (employees.id = 1)

SELECT * FROM employees WHERE (employees.id = :SYS_B_0)

ActiveRecord

Oracle optimizer

Page 17: Ruby on Rails Oracle adaptera izstrāde

Oracle Data TypesRuby Rails Oracle

Fixnum :integer NUMBERFloat :float NUMBER

BigDecimal :decimal NUMBER, DECIMALTime :datetime DATETime :time DATEDate :date DATEString :string VARCHAR2String :text CLOBString :binary BLOB

True/FalseClass :boolean NUMBER(1), CHAR(1)

Page 18: Ruby on Rails Oracle adaptera izstrāde

Citi ierobežojumi

Identifikatori līdz 30 simboliem

CLOB / BLOB izmantošana SQL pieprasījumos

LIMIT, OFFSET neesamība

lēni Data Dictionary skatījumi

tukšs String == NULL

Oracle XE nav uz Mac OS X

Page 19: Ruby on Rails Oracle adaptera izstrāde

Multi platformu atbalsts

MRI 1.8.6 Ruby/YARV 1.9.1

JRuby

ruby-oci8 1.x ruby-oci8 2.x JDBC

oracle_enhanced adapter

Page 20: Ruby on Rails Oracle adaptera izstrāde

PL/SQL izsaukšana no Ruby

require "oci8"conn = OCI8.new("hr","hr","xe")

cursor = conn.parse <<-EOSBEGIN :return := test_uppercase(:p_string);END;EOScursor.bind_param(':p_string',"xxx",String)cursor.bind_param(':return',nil,String,4000)cursor.execputs cursor[':return']cursor.close

Page 21: Ruby on Rails Oracle adaptera izstrāde

ruby-plsql gem

gem install ruby-plsql

require "ruby-plsql"plsql.connection = OCI8.new("hr","hr","xe")

puts plsql.test_uppercase('xxx')

Page 22: Ruby on Rails Oracle adaptera izstrāde

ruby-plsql gemplsql.connection = OCI8.new("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') # => 'XXX'plsql.hr.test_package.test_uppercase('xxx') # => 'XXX'

plsql.logoff

Page 23: Ruby on Rails Oracle adaptera izstrāde

PL/SQL procedūras

esošās datubāzēs

class Employee < ActiveRecord::Base set_create_method do plsql.employees_pkg.create_employee( :p_first_name => first_name, :p_last_name => last_name, :p_employee_id => nil )[:p_employee_id] end set_update_method do plsql.employees_pkg.update_employee( :p_employee_id => id, :p_first_name => first_name, :p_last_name => last_name ) end set_delete_method do plsql.employees_pkg.delete_employee( :p_employee_id => id ) endend

Page 24: Ruby on Rails Oracle adaptera izstrāde

Paldies!http://blog.rayapps.comhttp://github.com/rsim