ruby-plsql 0.6.0 → 0.7.0

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.
Files changed (50) hide show
  1. checksums.yaml +5 -5
  2. data/.codeclimate.yml +30 -0
  3. data/.github/stale.yml +37 -0
  4. data/.rubocop.yml +153 -0
  5. data/.travis.yml +20 -6
  6. data/.travis/oracle/download.sh +9 -10
  7. data/.travis/oracle/install.sh +6 -6
  8. data/Gemfile +13 -9
  9. data/History.txt +26 -0
  10. data/README.md +9 -5
  11. data/Rakefile +31 -26
  12. data/VERSION +1 -1
  13. data/Vagrantfile +2 -2
  14. data/gemfiles/Gemfile.activerecord-5.0 +21 -0
  15. data/gemfiles/Gemfile.activerecord-5.1 +21 -0
  16. data/gemfiles/Gemfile.activerecord-5.2 +21 -0
  17. data/lib/plsql/connection.rb +16 -18
  18. data/lib/plsql/helpers.rb +1 -3
  19. data/lib/plsql/jdbc_connection.rb +66 -61
  20. data/lib/plsql/oci8_patches.rb +2 -2
  21. data/lib/plsql/oci_connection.rb +51 -69
  22. data/lib/plsql/package.rb +5 -8
  23. data/lib/plsql/procedure.rb +75 -78
  24. data/lib/plsql/procedure_call.rb +498 -501
  25. data/lib/plsql/schema.rb +95 -100
  26. data/lib/plsql/sequence.rb +10 -13
  27. data/lib/plsql/sql_statements.rb +9 -11
  28. data/lib/plsql/table.rb +59 -63
  29. data/lib/plsql/type.rb +71 -76
  30. data/lib/plsql/variable.rb +89 -94
  31. data/lib/plsql/version.rb +1 -1
  32. data/lib/plsql/view.rb +16 -19
  33. data/ruby-plsql.gemspec +41 -37
  34. data/spec/plsql/connection_spec.rb +67 -67
  35. data/spec/plsql/package_spec.rb +15 -15
  36. data/spec/plsql/procedure_spec.rb +286 -233
  37. data/spec/plsql/schema_spec.rb +22 -23
  38. data/spec/plsql/sequence_spec.rb +2 -2
  39. data/spec/plsql/sql_statements_spec.rb +5 -5
  40. data/spec/plsql/table_spec.rb +77 -77
  41. data/spec/plsql/type_spec.rb +23 -29
  42. data/spec/plsql/variable_spec.rb +59 -59
  43. data/spec/plsql/version_spec.rb +4 -4
  44. data/spec/plsql/view_spec.rb +42 -42
  45. data/spec/spec_helper.rb +37 -29
  46. data/spec/support/test_db.rb +12 -13
  47. metadata +44 -26
  48. data/.travis/oracle/LICENSE +0 -5
  49. data/.travis/oracle/README.md +0 -64
  50. data/.travis/oracle/download.js +0 -100
@@ -21,5 +21,5 @@ if OCI8::VERSION == "2.0.3" &&
21
21
  end
22
22
  private :datetime_to_array_without_timestamp_patch, :datetime_to_array
23
23
  end
24
-
25
- end
24
+
25
+ end
@@ -18,17 +18,16 @@ require "plsql/oci8_patches"
18
18
 
19
19
  # check ruby-oci8 version
20
20
  required_oci8_version = [2, 0, 3]
21
- oci8_version_ints = OCI8::VERSION.scan(/\d+/).map{|s| s.to_i}
21
+ oci8_version_ints = OCI8::VERSION.scan(/\d+/).map { |s| s.to_i }
22
22
  if (oci8_version_ints <=> required_oci8_version) < 0
23
23
  raise LoadError, "ERROR: ruby-oci8 version #{OCI8::VERSION} is too old. Please install ruby-oci8 version #{required_oci8_version.join('.')} or later."
24
24
  end
25
25
 
26
26
  module PLSQL
27
27
  class OCIConnection < Connection #:nodoc:
28
-
29
28
  def self.create_raw(params)
30
29
  connection_string = if params[:host]
31
- "//#{params[:host]}:#{params[:port]||1521}/#{params[:database]}"
30
+ "//#{params[:host]}:#{params[:port] || 1521}/#{params[:database]}"
32
31
  else
33
32
  params[:database]
34
33
  end
@@ -47,7 +46,7 @@ module PLSQL
47
46
  def rollback
48
47
  raw_connection.rollback
49
48
  end
50
-
49
+
51
50
  def autocommit?
52
51
  raw_connection.autocommit?
53
52
  end
@@ -86,7 +85,7 @@ module PLSQL
86
85
  self.new(conn, raw_cursor)
87
86
  end
88
87
 
89
- def self.new_from_query(conn, sql, bindvars=[], options={})
88
+ def self.new_from_query(conn, sql, bindvars = [], options = {})
90
89
  cursor = new_from_parse(conn, sql)
91
90
  if prefetch_rows = options[:prefetch_rows]
92
91
  cursor.prefetch_rows = prefetch_rows
@@ -104,7 +103,7 @@ module PLSQL
104
103
  ora_value = @connection.ruby_value_to_ora_value(value, type)
105
104
  @raw_cursor.bind_param(arg, ora_value, type, length)
106
105
  end
107
-
106
+
108
107
  def exec(*bindvars)
109
108
  @raw_cursor.exec(*bindvars)
110
109
  end
@@ -115,11 +114,11 @@ module PLSQL
115
114
 
116
115
  def fetch
117
116
  row = @raw_cursor.fetch
118
- row && row.map{|v| @connection.ora_value_to_ruby_value(v)}
117
+ row && row.map { |v| @connection.ora_value_to_ruby_value(v) }
119
118
  end
120
119
 
121
120
  def fields
122
- @fields ||= @raw_cursor.get_col_names.map{|c| c.downcase.to_sym}
121
+ @fields ||= @raw_cursor.get_col_names.map { |c| c.downcase.to_sym }
123
122
  end
124
123
 
125
124
  def close_raw_cursor
@@ -133,14 +132,13 @@ module PLSQL
133
132
  end
134
133
  close_raw_cursor
135
134
  end
136
-
137
135
  end
138
136
 
139
137
  def parse(sql)
140
138
  Cursor.new_from_parse(self, sql)
141
139
  end
142
140
 
143
- def cursor_from_query(sql, bindvars=[], options={})
141
+ def cursor_from_query(sql, bindvars = [], options = {})
144
142
  Cursor.new_from_query(self, sql, bindvars, options)
145
143
  end
146
144
 
@@ -174,18 +172,16 @@ module PLSQL
174
172
  end
175
173
  end
176
174
 
177
- def ruby_value_to_ora_value(value, type=nil)
175
+ def ruby_value_to_ora_value(value, type = nil)
178
176
  type ||= value.class
179
177
  case type.to_s.to_sym
180
- when :Fixnum, :BigDecimal, :String
178
+ when :Integer, :BigDecimal, :String
181
179
  value
182
180
  when :OraNumber
183
181
  # pass parameters as OraNumber to avoid rounding errors
184
182
  case value
185
- when Bignum
186
- OraNumber.new(value.to_s)
187
183
  when BigDecimal
188
- OraNumber.new(value.to_s('F'))
184
+ OraNumber.new(value.to_s("F"))
189
185
  when TrueClass
190
186
  OraNumber.new(1)
191
187
  when FalseClass
@@ -218,7 +214,7 @@ module PLSQL
218
214
  raise ArgumentError, "You should pass Array value for collection type parameter" unless value.is_a?(Array)
219
215
  elem_list = value.map do |elem|
220
216
  if (attr_tdo = tdo.coll_attr.typeinfo)
221
- attr_type, attr_length = plsql_to_ruby_data_type(:data_type => 'OBJECT', :sql_type_name => attr_tdo.typename)
217
+ attr_type, _ = plsql_to_ruby_data_type(data_type: "OBJECT", sql_type_name: attr_tdo.typename)
222
218
  else
223
219
  attr_type = elem.class
224
220
  end
@@ -227,7 +223,7 @@ module PLSQL
227
223
  # construct collection value
228
224
  # TODO: change setting instance variable to appropriate ruby-oci8 method call when available
229
225
  collection = type.new(raw_oci_connection)
230
- collection.instance_variable_set('@attributes', elem_list)
226
+ collection.instance_variable_set("@attributes", elem_list)
231
227
  collection
232
228
  else # object type
233
229
  raise ArgumentError, "You should pass Hash value for object type parameter" unless value.is_a?(Hash)
@@ -237,7 +233,7 @@ module PLSQL
237
233
  case attr.datatype
238
234
  when OCI8::TDO::ATTR_NAMED_TYPE, OCI8::TDO::ATTR_NAMED_COLLECTION
239
235
  # nested object type or collection
240
- attr_type, attr_length = plsql_to_ruby_data_type(:data_type => 'OBJECT', :sql_type_name => attr.typeinfo.typename)
236
+ attr_type, _ = plsql_to_ruby_data_type(data_type: "OBJECT", sql_type_name: attr.typeinfo.typename)
241
237
  object_attrs[key] = ruby_value_to_ora_value(object_attrs[key], attr_type)
242
238
  end
243
239
  end
@@ -266,7 +262,7 @@ module PLSQL
266
262
  when OCI8::Object::Base
267
263
  tdo = raw_oci_connection.get_tdo_by_class(value.class)
268
264
  if tdo.is_collection?
269
- value.to_ary.map{|e| ora_value_to_ruby_value(e)}
265
+ value.to_ary.map { |e| ora_value_to_ruby_value(e) }
270
266
  else # object type
271
267
  tdo.attributes.inject({}) do |hash, attr|
272
268
  hash[attr.name] = ora_value_to_ruby_value(value.instance_variable_get(:@attributes)[attr.name])
@@ -280,63 +276,49 @@ module PLSQL
280
276
  end
281
277
  end
282
278
 
283
- def describe_synonym(schema_name, synonym_name)
284
- if schema_name == 'PUBLIC'
285
- full_name = synonym_name.to_s
286
- else
287
- full_name = "#{schema_name}.#{synonym_name}"
288
- end
289
- metadata = raw_connection.describe_synonym(full_name)
290
- [metadata.schema_name, metadata.name]
291
- rescue OCIError
292
- nil
293
- end
294
-
295
279
  def database_version
296
- @database_version ||= (version = raw_connection.oracle_server_version) &&
280
+ @database_version ||= (version = raw_connection.oracle_server_version) &&
297
281
  [version.major, version.minor, version.update, version.patch]
298
282
  end
299
283
 
300
284
  private
301
-
302
- def raw_oci_connection
303
- if raw_connection.is_a? OCI8
304
- raw_connection
305
- # ActiveRecord Oracle enhanced adapter puts OCI8EnhancedAutoRecover wrapper around OCI8
306
- # in this case we need to pass original OCI8 connection
307
- else
308
- raw_connection.instance_variable_get(:@connection)
309
- end
310
- end
311
-
312
- def ora_number_to_ruby_number(num)
313
- # return BigDecimal instead of Float to avoid rounding errors
314
- num == (num_to_i = num.to_i) ? num_to_i : (num.is_a?(BigDecimal) ? num : BigDecimal.new(num.to_s))
315
- end
316
-
317
- def ora_date_to_ruby_date(val)
318
- case val
319
- when DateTime
320
- # similar implementation as in oracle_enhanced adapter
321
- begin
322
- Time.send(plsql.default_timezone, val.year, val.month, val.day, val.hour, val.min, val.sec)
323
- rescue
324
- offset = plsql.default_timezone.to_sym == :local ? plsql.local_timezone_offset : 0
325
- DateTime.civil(val.year, val.month, val.day, val.hour, val.min, val.sec, offset)
326
- end
327
- when OraDate
328
- # similar implementation as in oracle_enhanced adapter
329
- begin
330
- Time.send(plsql.default_timezone, val.year, val.month, val.day, val.hour, val.minute, val.second)
331
- rescue
332
- offset = plsql.default_timezone.to_sym == :local ? plsql.local_timezone_offset : 0
333
- DateTime.civil(val.year, val.month, val.day, val.hour, val.minute, val.second, offset)
285
+
286
+ def raw_oci_connection
287
+ if raw_connection.is_a? OCI8
288
+ raw_connection
289
+ # ActiveRecord Oracle enhanced adapter puts OCI8EnhancedAutoRecover wrapper around OCI8
290
+ # in this case we need to pass original OCI8 connection
291
+ else
292
+ raw_connection.instance_variable_get(:@connection)
334
293
  end
335
- else
336
- val
337
294
  end
338
- end
339
295
 
296
+ def ora_number_to_ruby_number(num)
297
+ # return BigDecimal instead of Float to avoid rounding errors
298
+ num == (num_to_i = num.to_i) ? num_to_i : (num.is_a?(BigDecimal) ? num : BigDecimal(num.to_s))
299
+ end
300
+
301
+ def ora_date_to_ruby_date(val)
302
+ case val
303
+ when DateTime
304
+ # similar implementation as in oracle_enhanced adapter
305
+ begin
306
+ Time.send(plsql.default_timezone, val.year, val.month, val.day, val.hour, val.min, val.sec)
307
+ rescue
308
+ offset = plsql.default_timezone.to_sym == :local ? plsql.local_timezone_offset : 0
309
+ DateTime.civil(val.year, val.month, val.day, val.hour, val.min, val.sec, offset)
310
+ end
311
+ when OraDate
312
+ # similar implementation as in oracle_enhanced adapter
313
+ begin
314
+ Time.send(plsql.default_timezone, val.year, val.month, val.day, val.hour, val.minute, val.second)
315
+ rescue
316
+ offset = plsql.default_timezone.to_sym == :local ? plsql.local_timezone_offset : 0
317
+ DateTime.civil(val.year, val.month, val.day, val.hour, val.minute, val.second, offset)
318
+ end
319
+ else
320
+ val
321
+ end
322
+ end
340
323
  end
341
-
342
324
  end
@@ -1,5 +1,4 @@
1
1
  module PLSQL
2
-
3
2
  module PackageClassMethods #:nodoc:
4
3
  def find(schema, package)
5
4
  package_name = package.to_s.upcase
@@ -56,11 +55,11 @@ module PLSQL
56
55
 
57
56
  private
58
57
 
59
- def method_missing(method, *args, &block)
60
- method = method.to_s
61
- method.chop! if (assignment = method[/=$/])
58
+ def method_missing(method, *args, &block)
59
+ method = method.to_s
60
+ method.chop! if (assignment = method[/=$/])
62
61
 
63
- case (object = self[method])
62
+ case (object = self[method])
64
63
  when Procedure
65
64
  if assignment
66
65
  raise ArgumentError, "Cannot assign value to package procedure '#{method.upcase}'"
@@ -82,9 +81,7 @@ module PLSQL
82
81
  end
83
82
  else
84
83
  raise ArgumentError, "No PL/SQL procedure or variable '#{method.upcase}' found"
84
+ end
85
85
  end
86
- end
87
-
88
86
  end
89
-
90
87
  end
@@ -1,45 +1,44 @@
1
1
  module PLSQL
2
-
3
2
  module ProcedureClassMethods #:nodoc:
4
3
  def find(schema, procedure, package = nil, override_schema_name = nil)
5
4
  if package.nil?
6
5
  if (row = schema.select_first(
7
- "SELECT #{procedure_object_id_src(schema)}.object_id
8
- FROM all_procedures p, all_objects o
9
- WHERE p.owner = :owner
10
- AND p.object_name = :object_name
11
- AND o.owner = p.owner
12
- AND o.object_name = p.object_name
13
- AND o.object_type in ('PROCEDURE', 'FUNCTION')",
6
+ "SELECT #{procedure_object_id_src(schema)}.object_id
7
+ FROM all_procedures p, all_objects o
8
+ WHERE p.owner = :owner
9
+ AND p.object_name = :object_name
10
+ AND o.owner = p.owner
11
+ AND o.object_name = p.object_name
12
+ AND o.object_type in ('PROCEDURE', 'FUNCTION')",
14
13
  schema.schema_name, procedure.to_s.upcase))
15
14
  new(schema, procedure, nil, nil, row[0])
16
15
  # search for synonym
17
16
  elsif (row = schema.select_first(
18
- "SELECT o.owner, o.object_name, #{procedure_object_id_src(schema)}.object_id
19
- FROM all_synonyms s, all_objects o, all_procedures p
20
- WHERE s.owner IN (:owner, 'PUBLIC')
21
- AND s.synonym_name = :synonym_name
22
- AND o.owner = s.table_owner
23
- AND o.object_name = s.table_name
24
- AND o.object_type IN ('PROCEDURE','FUNCTION')
25
- AND o.owner = p.owner
26
- AND o.object_name = p.object_name
27
- ORDER BY DECODE(s.owner, 'PUBLIC', 1, 0)",
17
+ "SELECT o.owner, o.object_name, #{procedure_object_id_src(schema)}.object_id
18
+ FROM all_synonyms s, all_objects o, all_procedures p
19
+ WHERE s.owner IN (:owner, 'PUBLIC')
20
+ AND s.synonym_name = :synonym_name
21
+ AND o.owner = s.table_owner
22
+ AND o.object_name = s.table_name
23
+ AND o.object_type IN ('PROCEDURE','FUNCTION')
24
+ AND o.owner = p.owner
25
+ AND o.object_name = p.object_name
26
+ ORDER BY DECODE(s.owner, 'PUBLIC', 1, 0)",
28
27
  schema.schema_name, procedure.to_s.upcase))
29
28
  new(schema, row[1], nil, row[0], row[2])
30
29
  else
31
30
  nil
32
31
  end
33
32
  elsif package && (row = schema.select_first(
34
- # older Oracle versions do not have object_id column in all_procedures
35
- "SELECT #{procedure_object_id_src(schema)}.object_id
36
- FROM all_procedures p, all_objects o
37
- WHERE p.owner = :owner
38
- AND p.object_name = :object_name
39
- AND p.procedure_name = :procedure_name
40
- AND o.owner = p.owner
41
- AND o.object_name = p.object_name
42
- AND o.object_type = 'PACKAGE'",
33
+ # older Oracle versions do not have object_id column in all_procedures
34
+ "SELECT #{procedure_object_id_src(schema)}.object_id
35
+ FROM all_procedures p, all_objects o
36
+ WHERE p.owner = :owner
37
+ AND p.object_name = :object_name
38
+ AND p.procedure_name = :procedure_name
39
+ AND o.owner = p.owner
40
+ AND o.object_name = p.object_name
41
+ AND o.object_type = 'PACKAGE'",
43
42
  override_schema_name || schema.schema_name, package, procedure.to_s.upcase))
44
43
  new(schema, procedure, package, override_schema_name, row[0])
45
44
  else
@@ -49,9 +48,9 @@ module PLSQL
49
48
 
50
49
  private
51
50
 
52
- def procedure_object_id_src(schema)
53
- (schema.connection.database_version <=> [11, 1, 0, 0]) >= 0 ? "p" : "o"
54
- end
51
+ def procedure_object_id_src(schema)
52
+ (schema.connection.database_version <=> [11, 1, 0, 0]) >= 0 ? "p" : "o"
53
+ end
55
54
  end
56
55
 
57
56
  module ProcedureCommon #:nodoc:
@@ -61,21 +60,21 @@ module PLSQL
61
60
  # return type string from metadata that can be used in DECLARE block or table definition
62
61
  def self.type_to_sql(metadata) #:nodoc:
63
62
  case metadata[:data_type]
64
- when 'NUMBER'
63
+ when "NUMBER"
65
64
  precision, scale = metadata[:data_precision], metadata[:data_scale]
66
- "NUMBER#{precision ? "(#{precision}#{scale ? ",#{scale}": ""})" : ""}"
67
- when 'VARCHAR', 'VARCHAR2', 'CHAR'
65
+ "NUMBER#{precision ? "(#{precision}#{scale ? ",#{scale}" : ""})" : ""}"
66
+ when "VARCHAR", "VARCHAR2", "CHAR"
68
67
  length = case metadata[:char_used]
69
- when 'C' then "#{metadata[:char_length]} CHAR"
70
- when 'B' then "#{metadata[:data_length]} BYTE"
71
- else
72
- metadata[:data_length]
68
+ when "C" then "#{metadata[:char_length]} CHAR"
69
+ when "B" then "#{metadata[:data_length]} BYTE"
70
+ else
71
+ metadata[:data_length]
73
72
  end
74
73
  "#{metadata[:data_type]}#{length && "(#{length})"}"
75
- when 'NVARCHAR2', 'NCHAR'
74
+ when "NVARCHAR2", "NCHAR"
76
75
  length = metadata[:char_length]
77
76
  "#{metadata[:data_type]}#{length && "(#{length})"}"
78
- when 'PL/SQL TABLE', 'TABLE', 'VARRAY', 'OBJECT', 'XMLTYPE'
77
+ when "PL/SQL TABLE", "TABLE", "VARRAY", "OBJECT", "XMLTYPE"
79
78
  metadata[:sql_type_name]
80
79
  else
81
80
  metadata[:data_type]
@@ -99,9 +98,9 @@ module PLSQL
99
98
  @tmp_tables_created = {}
100
99
 
101
100
  # subprogram_id column is available just from version 10g
102
- subprogram_id_column = (@schema.connection.database_version <=> [10, 2, 0, 2]) >= 0 ? 'subprogram_id' : 'NULL'
101
+ subprogram_id_column = (@schema.connection.database_version <=> [10, 2, 0, 2]) >= 0 ? "subprogram_id" : "NULL"
103
102
  # defaulted is available just from version 11g
104
- defaulted_column = (@schema.connection.database_version <=> [11, 0, 0, 0]) >= 0 ? 'defaulted' : 'NULL'
103
+ defaulted_column = (@schema.connection.database_version <=> [11, 0, 0, 0]) >= 0 ? "defaulted" : "NULL"
105
104
 
106
105
  @schema.select_all(
107
106
  "SELECT #{subprogram_id_column}, object_name, TO_NUMBER(overload), argument_name, position, data_level,
@@ -138,7 +137,7 @@ module PLSQL
138
137
  # then generate unique ID from object_name and overload
139
138
  subprogram_id ||= "#{object_name.hash % 10000}#{overload}"
140
139
  tmp_table_name = "#{Connection::RUBY_TEMP_TABLE_PREFIX}#{@schema.connection.session_id}_#{@object_id}_#{subprogram_id}_#{position}"
141
- elsif data_type != 'PL/SQL RECORD'
140
+ elsif data_type != "PL/SQL RECORD"
142
141
  # raise exception only when there are no overloaded procedure definitions
143
142
  # (as probably this overload will not be used at all)
144
143
  raise ArgumentError, "Parameter type #{sql_type_name} definition inside package is not supported, use CREATE TYPE outside package" if overload == 0
@@ -146,19 +145,19 @@ module PLSQL
146
145
  end
147
146
 
148
147
  argument_metadata = {
149
- :position => position && position.to_i,
150
- :data_type => data_type,
151
- :in_out => in_out,
152
- :data_length => data_length && data_length.to_i,
153
- :data_precision => data_precision && data_precision.to_i,
154
- :data_scale => data_scale && data_scale.to_i,
155
- :char_used => char_used,
156
- :char_length => char_length && char_length.to_i,
157
- :type_owner => type_owner,
158
- :type_name => type_name,
159
- :type_subname => type_subname,
160
- :sql_type_name => sql_type_name,
161
- :defaulted => defaulted
148
+ position: position && position.to_i,
149
+ data_type: data_type,
150
+ in_out: in_out,
151
+ data_length: data_length && data_length.to_i,
152
+ data_precision: data_precision && data_precision.to_i,
153
+ data_scale: data_scale && data_scale.to_i,
154
+ char_used: char_used,
155
+ char_length: char_length && char_length.to_i,
156
+ type_owner: type_owner,
157
+ type_name: type_name,
158
+ type_subname: type_subname,
159
+ sql_type_name: sql_type_name,
160
+ defaulted: defaulted
162
161
  }
163
162
  if tmp_table_name
164
163
  @tmp_table_names[overload] << [(argument_metadata[:tmp_table_name] = tmp_table_name), argument_metadata]
@@ -166,14 +165,14 @@ module PLSQL
166
165
 
167
166
  if composite_type?(data_type)
168
167
  case data_type
169
- when 'PL/SQL RECORD'
168
+ when "PL/SQL RECORD"
170
169
  argument_metadata[:fields] = {}
171
170
  end
172
171
  previous_level_argument_metadata[data_level] = argument_metadata
173
172
  end
174
173
 
175
174
  # if function has return value
176
- if argument_name.nil? && data_level == 0 && in_out == 'OUT'
175
+ if argument_name.nil? && data_level == 0 && in_out == "OUT"
177
176
  @return[overload] = argument_metadata
178
177
  # if parameter
179
178
  else
@@ -184,9 +183,9 @@ module PLSQL
184
183
  # or lower level part of composite type
185
184
  else
186
185
  case previous_level_argument_metadata[data_level - 1][:data_type]
187
- when 'PL/SQL RECORD'
186
+ when "PL/SQL RECORD"
188
187
  previous_level_argument_metadata[data_level - 1][:fields][argument_name.downcase.to_sym] = argument_metadata
189
- when 'PL/SQL TABLE', 'TABLE', 'VARRAY', 'REF CURSOR'
188
+ when "PL/SQL TABLE", "TABLE", "VARRAY", "REF CURSOR"
190
189
  previous_level_argument_metadata[data_level - 1][:element] = argument_metadata
191
190
  end
192
191
  end
@@ -201,8 +200,8 @@ module PLSQL
201
200
  def construct_argument_list_for_overloads #:nodoc:
202
201
  @overloads = @arguments.keys.sort
203
202
  @overloads.each do |overload|
204
- @argument_list[overload] = @arguments[overload].keys.sort {|k1, k2| @arguments[overload][k1][:position] <=> @arguments[overload][k2][:position]}
205
- @out_list[overload] = @argument_list[overload].select {|k| @arguments[overload][k][:in_out] =~ /OUT/}
203
+ @argument_list[overload] = @arguments[overload].keys.sort { |k1, k2| @arguments[overload][k1][:position] <=> @arguments[overload][k2][:position] }
204
+ @out_list[overload] = @argument_list[overload].select { |k| @arguments[overload][k][:in_out] =~ /OUT/ }
206
205
  end
207
206
  end
208
207
 
@@ -210,19 +209,19 @@ module PLSQL
210
209
  return if @tmp_tables_created.nil? || @tmp_tables_created[overload]
211
210
  @tmp_table_names[overload] && @tmp_table_names[overload].each do |table_name, argument_metadata|
212
211
  sql = "CREATE GLOBAL TEMPORARY TABLE #{table_name} (\n"
213
- element_metadata = argument_metadata[:element]
214
- case element_metadata[:data_type]
215
- when 'PL/SQL RECORD'
216
- fields_metadata = element_metadata[:fields]
217
- fields_sorted_by_position = fields_metadata.keys.sort_by{|k| fields_metadata[k][:position]}
218
- sql << fields_sorted_by_position.map do |field|
219
- metadata = fields_metadata[field]
220
- "#{field} #{ProcedureCommon.type_to_sql(metadata)}"
221
- end.join(",\n")
222
- else
223
- sql << "element #{ProcedureCommon.type_to_sql(element_metadata)}"
224
- end
225
- sql << ",\ni__ NUMBER(38)\n"
212
+ element_metadata = argument_metadata[:element]
213
+ case element_metadata[:data_type]
214
+ when "PL/SQL RECORD"
215
+ fields_metadata = element_metadata[:fields]
216
+ fields_sorted_by_position = fields_metadata.keys.sort_by { |k| fields_metadata[k][:position] }
217
+ sql << fields_sorted_by_position.map do |field|
218
+ metadata = fields_metadata[field]
219
+ "#{field} #{ProcedureCommon.type_to_sql(metadata)}"
220
+ end.join(",\n")
221
+ else
222
+ sql << "element #{ProcedureCommon.type_to_sql(element_metadata)}"
223
+ end
224
+ sql << ",\ni__ NUMBER(38)\n"
226
225
  sql << ") ON COMMIT PRESERVE ROWS\n"
227
226
  sql_block = "DECLARE\nPRAGMA AUTONOMOUS_TRANSACTION;\nBEGIN\nEXECUTE IMMEDIATE :sql;\nEND;\n"
228
227
  @schema.execute sql_block, sql
@@ -230,12 +229,12 @@ module PLSQL
230
229
  @tmp_tables_created[overload] = true
231
230
  end
232
231
 
233
- PLSQL_COMPOSITE_TYPES = ['PL/SQL RECORD', 'PL/SQL TABLE', 'TABLE', 'VARRAY', 'REF CURSOR'].freeze
232
+ PLSQL_COMPOSITE_TYPES = ["PL/SQL RECORD", "PL/SQL TABLE", "TABLE", "VARRAY", "REF CURSOR"].freeze
234
233
  def composite_type?(data_type) #:nodoc:
235
234
  PLSQL_COMPOSITE_TYPES.include? data_type
236
235
  end
237
236
 
238
- PLSQL_COLLECTION_TYPES = ['PL/SQL TABLE', 'TABLE', 'VARRAY'].freeze
237
+ PLSQL_COLLECTION_TYPES = ["PL/SQL TABLE", "TABLE", "VARRAY"].freeze
239
238
  def collection_type?(data_type) #:nodoc:
240
239
  PLSQL_COLLECTION_TYPES.include? data_type
241
240
  end
@@ -266,7 +265,5 @@ module PLSQL
266
265
  call = ProcedureCall.new(self, args)
267
266
  call.exec(&block)
268
267
  end
269
-
270
268
  end
271
-
272
269
  end