ruby-plsql 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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