ruby-plsql 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,8 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe "Version" do
4
+ it "should return ruby-plsql version" do
5
+ PLSQL::VERSION.should == File.read(File.dirname(__FILE__)+'/../../VERSION').chomp
6
+ end
7
+
8
+ end
@@ -0,0 +1,259 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe "View" do
4
+ before(:all) do
5
+ plsql.connection = get_connection
6
+ plsql.connection.autocommit = false
7
+ plsql.execute <<-SQL
8
+ CREATE TABLE test_employees (
9
+ employee_id NUMBER(15),
10
+ first_name VARCHAR2(50),
11
+ last_name VARCHAR2(50),
12
+ hire_date DATE,
13
+ status VARCHAR2(1) DEFAULT 'N'
14
+ )
15
+ SQL
16
+ plsql.execute "CREATE OR REPLACE VIEW test_employees_v AS SELECT * FROM test_employees"
17
+
18
+ @employees = (1..10).map do |i|
19
+ {
20
+ :employee_id => i,
21
+ :first_name => "First #{i}",
22
+ :last_name => "Last #{i}",
23
+ :hire_date => Time.local(2000,01,i),
24
+ :status => 'A'
25
+ }
26
+ end
27
+ @employees_all_fields = [:employee_id, :first_name, :last_name, :hire_date, :status]
28
+ @employees_all_values = @employees.map{|e| @employees_all_fields.map{|f| e[f]}}
29
+ @employees_some_fields = [:employee_id, :first_name, :last_name]
30
+ @employees_some_values = @employees.map{|e| @employees_some_fields.map{|f| e[f]}}
31
+ @employee_default_values = {:hire_date => nil, :status => 'N'}
32
+ end
33
+
34
+ after(:all) do
35
+ plsql.execute "DROP VIEW test_employees_v"
36
+ plsql.execute "DROP TABLE test_employees"
37
+ plsql.logoff
38
+ end
39
+
40
+ after(:each) do
41
+ plsql.rollback
42
+ end
43
+
44
+ describe "find" do
45
+
46
+ it "should find existing view" do
47
+ PLSQL::View.find(plsql, :test_employees_v).should_not be_nil
48
+ end
49
+
50
+ it "should not find nonexisting view" do
51
+ PLSQL::View.find(plsql, :qwerty123456).should be_nil
52
+ end
53
+
54
+ it "should find existing view in schema" do
55
+ plsql.test_employees_v.should be_instance_of(PLSQL::View)
56
+ end
57
+
58
+ end
59
+
60
+ describe "synonym" do
61
+
62
+ before(:all) do
63
+ plsql.execute "CREATE SYNONYM test_employees_v_synonym FOR hr.test_employees_v"
64
+ end
65
+
66
+ after(:all) do
67
+ plsql.execute "DROP SYNONYM test_employees_v_synonym" rescue nil
68
+ end
69
+
70
+ it "should find synonym to view" do
71
+ PLSQL::View.find(plsql, :test_employees_v_synonym).should_not be_nil
72
+ end
73
+
74
+ it "should find view using synonym in schema" do
75
+ plsql.test_employees_v_synonym.should be_instance_of(PLSQL::View)
76
+ end
77
+
78
+ end
79
+
80
+ describe "public synonym" do
81
+
82
+ it "should find public synonym to view" do
83
+ PLSQL::View.find(plsql, :user_tables).should_not be_nil
84
+ end
85
+
86
+ it "should find view using public synonym in schema" do
87
+ plsql.user_tables.should be_instance_of(PLSQL::View)
88
+ end
89
+
90
+ end
91
+
92
+ describe "columns" do
93
+
94
+ it "should get column names for view" do
95
+ plsql.test_employees_v.column_names.should == [:employee_id, :first_name, :last_name, :hire_date, :status]
96
+ end
97
+
98
+ it "should get columns metadata for view" do
99
+ plsql.test_employees_v.columns.should == {
100
+ :employee_id =>
101
+ {:position=>1, :data_type=>"NUMBER", :data_length=>22, :data_precision=>15, :data_scale=>0, :char_used=>nil, :type_owner=>nil, :type_name=>nil, :sql_type_name=>nil},
102
+ :first_name =>
103
+ {:position=>2, :data_type=>"VARCHAR2", :data_length=>50, :data_precision=>nil, :data_scale=>nil, :char_used=>"B", :type_owner=>nil, :type_name=>nil, :sql_type_name=>nil},
104
+ :last_name =>
105
+ {:position=>3, :data_type=>"VARCHAR2", :data_length=>50, :data_precision=>nil, :data_scale=>nil, :char_used=>"B", :type_owner=>nil, :type_name=>nil, :sql_type_name=>nil},
106
+ :hire_date =>
107
+ {:position=>4, :data_type=>"DATE", :data_length=>7, :data_precision=>nil, :data_scale=>nil, :char_used=>nil, :type_owner=>nil, :type_name=>nil, :sql_type_name=>nil},
108
+ :status =>
109
+ {:position=>5, :data_type=>"VARCHAR2", :data_length=>1, :data_precision=>nil, :data_scale=>nil, :char_used=>"B", :type_owner=>nil, :type_name=>nil, :sql_type_name=>nil}
110
+ }
111
+ end
112
+
113
+ end
114
+
115
+ describe "insert" do
116
+ it "should insert a record in view" do
117
+ plsql.test_employees_v.insert @employees.first
118
+ plsql.test_employees_v.all.should == [@employees.first]
119
+ end
120
+
121
+ it "should insert a record in view using partial list of columns" do
122
+ plsql.test_employees_v.insert @employees.first.except(:hire_date)
123
+ plsql.test_employees_v.all.should == [@employees.first.merge(:hire_date => nil)]
124
+ end
125
+
126
+ it "should insert default value from table definition if value not provided" do
127
+ plsql.test_employees_v.insert @employees.first.except(:status)
128
+ plsql.test_employees_v.all.should == [@employees.first.merge(:status => 'N')]
129
+ end
130
+
131
+ it "should insert array of records in view" do
132
+ plsql.test_employees_v.insert @employees
133
+ plsql.test_employees_v.all("ORDER BY employee_id").should == @employees
134
+ end
135
+
136
+ end
137
+
138
+ describe "insert values" do
139
+ it "should insert a record with array of values" do
140
+ plsql.test_employees_v.insert_values @employees_all_values.first
141
+ plsql.test_employees_v.all.should == [@employees.first]
142
+ end
143
+
144
+ it "should insert a record with list of all fields and array of values" do
145
+ plsql.test_employees_v.insert_values @employees_all_fields, @employees_all_values.first
146
+ plsql.test_employees_v.all.should == [@employees.first]
147
+ end
148
+
149
+ it "should insert a record with list of some fields and array of values" do
150
+ plsql.test_employees_v.insert_values @employees_some_fields, @employees_some_values.first
151
+ plsql.test_employees_v.all.should == [@employees.first.merge(@employee_default_values)]
152
+ end
153
+
154
+ it "should insert many records with array of values" do
155
+ plsql.test_employees_v.insert_values *@employees_all_values
156
+ plsql.test_employees_v.all.should == @employees
157
+ end
158
+
159
+ it "should insert many records with list of all fields and array of values" do
160
+ plsql.test_employees_v.insert_values @employees_all_fields, *@employees_all_values
161
+ plsql.test_employees_v.all.should == @employees
162
+ end
163
+
164
+ it "should insert many records with list of some fields and array of values" do
165
+ plsql.test_employees_v.insert_values @employees_some_fields, *@employees_some_values
166
+ plsql.test_employees_v.all.should == @employees.map{|e| e.merge(@employee_default_values)}
167
+ end
168
+
169
+ end
170
+
171
+ describe "select" do
172
+ before(:each) do
173
+ plsql.test_employees_v.insert @employees
174
+ end
175
+
176
+ it "should select first record in view" do
177
+ plsql.test_employees_v.select(:first, "ORDER BY employee_id").should == @employees.first
178
+ plsql.test_employees_v.first("ORDER BY employee_id").should == @employees.first
179
+ end
180
+
181
+ it "should select all records in view" do
182
+ plsql.test_employees_v.select(:all, "ORDER BY employee_id").should == @employees
183
+ plsql.test_employees_v.all("ORDER BY employee_id").should == @employees
184
+ plsql.test_employees_v.all(:order_by => :employee_id).should == @employees
185
+ end
186
+
187
+ it "should select record in view using WHERE condition" do
188
+ plsql.test_employees_v.select(:first, "WHERE employee_id = :1", @employees.first[:employee_id]).should == @employees.first
189
+ plsql.test_employees_v.first("WHERE employee_id = :1", @employees.first[:employee_id]).should == @employees.first
190
+ plsql.test_employees_v.first(:employee_id => @employees.first[:employee_id]).should == @employees.first
191
+ end
192
+
193
+ it "should select record in view using :column => nil condition" do
194
+ employee = @employees.last
195
+ employee[:employee_id] = employee[:employee_id] + 1
196
+ employee[:hire_date] = nil
197
+ plsql.test_employees_v.insert employee
198
+ plsql.test_employees_v.first("WHERE hire_date IS NULL").should == employee
199
+ plsql.test_employees_v.first(:hire_date => nil).should == employee
200
+ end
201
+
202
+ it "should count records in view" do
203
+ plsql.test_employees_v.select(:count).should == @employees.size
204
+ plsql.test_employees_v.count.should == @employees.size
205
+ end
206
+
207
+ it "should count records in view using condition" do
208
+ plsql.test_employees_v.select(:count, "WHERE employee_id <= :1", @employees[2][:employee_id]).should == 3
209
+ plsql.test_employees_v.count("WHERE employee_id <= :1", @employees[2][:employee_id]).should == 3
210
+ end
211
+
212
+ end
213
+
214
+ describe "update" do
215
+ it "should update a record in view" do
216
+ employee_id = @employees.first[:employee_id]
217
+ plsql.test_employees_v.insert @employees.first
218
+ plsql.test_employees_v.update :first_name => 'Test', :where => {:employee_id => employee_id}
219
+ plsql.test_employees_v.first(:employee_id => employee_id)[:first_name].should == 'Test'
220
+ end
221
+
222
+ it "should update a record in view using String WHERE condition" do
223
+ employee_id = @employees.first[:employee_id]
224
+ plsql.test_employees_v.insert @employees
225
+ plsql.test_employees_v.update :first_name => 'Test', :where => "employee_id = #{employee_id}"
226
+ plsql.test_employees_v.first(:employee_id => employee_id)[:first_name].should == 'Test'
227
+ # all other records should not be changed
228
+ plsql.test_employees_v.all("WHERE employee_id > :1", employee_id) do |employee|
229
+ employee[:first_name].should_not == 'Test'
230
+ end
231
+ end
232
+
233
+ it "should update all records in view" do
234
+ plsql.test_employees_v.insert @employees
235
+ plsql.test_employees_v.update :first_name => 'Test'
236
+ plsql.test_employees_v.all do |employee|
237
+ employee[:first_name].should == 'Test'
238
+ end
239
+ end
240
+
241
+ end
242
+
243
+ describe "delete" do
244
+ it "should delete record from view" do
245
+ employee_id = @employees.first[:employee_id]
246
+ plsql.test_employees_v.insert @employees
247
+ plsql.test_employees_v.delete :employee_id => employee_id
248
+ plsql.test_employees_v.first(:employee_id => employee_id).should be_nil
249
+ plsql.test_employees_v.all(:order_by => :employee_id).should == @employees[1, @employees.size-1]
250
+ end
251
+
252
+ it "should delete all records from view" do
253
+ plsql.test_employees_v.insert @employees
254
+ plsql.test_employees_v.delete
255
+ plsql.test_employees_v.all.should be_empty
256
+ end
257
+ end
258
+
259
+ end
data/spec/spec_helper.rb CHANGED
@@ -3,7 +3,7 @@ gem "rspec"
3
3
  require "spec"
4
4
 
5
5
  gem "activerecord"
6
- require "activerecord"
6
+ require "active_record"
7
7
  gem "activerecord-oracle_enhanced-adapter"
8
8
 
9
9
  if !defined?(RUBY_ENGINE) || RUBY_ENGINE == 'ruby'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-plsql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Raimonds Simanovskis
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-11-24 00:00:00 +02:00
12
+ date: 2010-01-04 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -42,7 +42,9 @@ files:
42
42
  - Rakefile
43
43
  - VERSION
44
44
  - lib/plsql/connection.rb
45
+ - lib/plsql/helpers.rb
45
46
  - lib/plsql/jdbc_connection.rb
47
+ - lib/plsql/oci8_patches.rb
46
48
  - lib/plsql/oci_connection.rb
47
49
  - lib/plsql/package.rb
48
50
  - lib/plsql/procedure.rb
@@ -51,7 +53,10 @@ files:
51
53
  - lib/plsql/sequence.rb
52
54
  - lib/plsql/sql_statements.rb
53
55
  - lib/plsql/table.rb
56
+ - lib/plsql/type.rb
57
+ - lib/plsql/variable.rb
54
58
  - lib/plsql/version.rb
59
+ - lib/plsql/view.rb
55
60
  - lib/ruby-plsql.rb
56
61
  - lib/ruby_plsql.rb
57
62
  - spec/plsql/connection_spec.rb
@@ -61,6 +66,10 @@ files:
61
66
  - spec/plsql/sequence_spec.rb
62
67
  - spec/plsql/sql_statements_spec.rb
63
68
  - spec/plsql/table_spec.rb
69
+ - spec/plsql/type_spec.rb
70
+ - spec/plsql/variable_spec.rb
71
+ - spec/plsql/version_spec.rb
72
+ - spec/plsql/view_spec.rb
64
73
  - spec/spec.opts
65
74
  - spec/spec_helper.rb
66
75
  has_rdoc: true
@@ -99,4 +108,8 @@ test_files:
99
108
  - spec/plsql/sequence_spec.rb
100
109
  - spec/plsql/sql_statements_spec.rb
101
110
  - spec/plsql/table_spec.rb
111
+ - spec/plsql/type_spec.rb
112
+ - spec/plsql/variable_spec.rb
113
+ - spec/plsql/version_spec.rb
114
+ - spec/plsql/view_spec.rb
102
115
  - spec/spec_helper.rb