ruby-plsql 0.7.1 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 561e2fcdfa5b528f42ebe473058e1d1c68a47876e3142ebce4c78df2f9583f16
4
- data.tar.gz: 76bc35318e85ca4fc0f08bde88ce9dab706a94130138cac61872105b79c66ba1
3
+ metadata.gz: 786698aedb4dff545a44a91fda4b7529d392b6d3afaee1e5a4447ee3be81a9d6
4
+ data.tar.gz: fa71bb0ec3ad558ab6805b077069401225fb1d8e949f4dc00360ecd085bae81b
5
5
  SHA512:
6
- metadata.gz: 8e15cd8d687a56e1a60846a9cd7943e3d6b2969195b5e4876aa3aba1a4fc6a13f10090c028936bf57527ddcf351f5f6b7bec4f44f55592fd40199d1364c74cea
7
- data.tar.gz: da24e51d1ac39afcdf49025c721c30a503fb84b77f946be96e58466c06fc56236c51ba0fb132f0dbf8582cbd21f20927eb26cb185bf1bd61ac2d6e69da1e17b8
6
+ metadata.gz: f814a2f6b9b2b0784e41f861f0ed0965cb814aaf4e8687293f8285e4758810fd4979e1ef96d7f7b0a305e701f0426fb81d3be0ece725abdf1888270a91131691
7
+ data.tar.gz: c17b7330167301d53715b4d43441acb67697a53a0b0378ea51f65824b96215ece3730db3af01be4e7442a2c3c632dc9fc14109425cfda73cfa535997d77444ba
@@ -0,0 +1,37 @@
1
+ name: RuboCop
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+ schedule:
7
+ - cron: "0 0 * * *"
8
+
9
+ jobs:
10
+ build:
11
+
12
+ runs-on: ubuntu-latest
13
+
14
+ steps:
15
+ - uses: actions/checkout@v1
16
+ - name: Set up Ruby 2.6
17
+ uses: actions/setup-ruby@v1
18
+ with:
19
+ ruby-version: 2.6.x
20
+ - name: Install required package
21
+ run: |
22
+ sudo apt-get install alien
23
+ - name: Download Oracle instant client
24
+ run: |
25
+ wget -q https://download.oracle.com/otn_software/linux/instantclient/193000/oracle-instantclient19.3-basic-19.3.0.0.0-1.x86_64.rpm
26
+ wget -q https://download.oracle.com/otn_software/linux/instantclient/193000/oracle-instantclient19.3-sqlplus-19.3.0.0.0-1.x86_64.rpm
27
+ wget -q https://download.oracle.com/otn_software/linux/instantclient/193000/oracle-instantclient19.3-devel-19.3.0.0.0-1.x86_64.rpm
28
+ - name: Install Oracle instant client
29
+ run: |
30
+ sudo alien -i oracle-instantclient19.3-basic-19.3.0.0.0-1.x86_64.rpm
31
+ sudo alien -i oracle-instantclient19.3-sqlplus-19.3.0.0.0-1.x86_64.rpm
32
+ sudo alien -i oracle-instantclient19.3-devel-19.3.0.0.0-1.x86_64.rpm
33
+
34
+ - name: Build and run RuboCop
35
+ run: |
36
+ bundle install --jobs 4 --retry 3
37
+ bundle exec rubocop --parallel
@@ -0,0 +1,69 @@
1
+ name: test
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+
7
+ jobs:
8
+ build:
9
+
10
+ runs-on: ubuntu-20.04
11
+ continue-on-error: true
12
+ strategy:
13
+ matrix:
14
+ ruby: [
15
+ 3.0,
16
+ 2.7,
17
+ 2.6,
18
+ 2.5,
19
+ ruby-head,
20
+ ruby-debug
21
+ ]
22
+ env:
23
+ ORACLE_HOME: /usr/lib/oracle/18.5/client64
24
+ LD_LIBRARY_PATH: /usr/lib/oracle/18.5/client64/lib
25
+ NLS_LANG: AMERICAN_AMERICA.AL32UTF8
26
+ TNS_ADMIN: ./ci/network/admin
27
+ DATABASE_NAME: XEPDB1
28
+ TZ: Europe/Riga
29
+ DATABASE_SYS_PASSWORD: Oracle18
30
+ DATABASE_VERSION: 18.4.0.0
31
+
32
+ services:
33
+ oracle:
34
+ image: quillbuilduser/oracle-18-xe
35
+ ports:
36
+ - 1521:1521
37
+ env:
38
+ TZ: Europe/Riga
39
+ steps:
40
+ - uses: actions/checkout@v2
41
+ - name: Set up Ruby
42
+ uses: ruby/setup-ruby@v1
43
+ with:
44
+ ruby-version: ${{ matrix.ruby }}
45
+ - name: Install required package
46
+ run: |
47
+ sudo apt-get install alien
48
+ - name: Download Oracle client
49
+ run: |
50
+ wget -q https://download.oracle.com/otn_software/linux/instantclient/185000/oracle-instantclient18.5-basic-18.5.0.0.0-3.x86_64.rpm
51
+ wget -q https://download.oracle.com/otn_software/linux/instantclient/185000/oracle-instantclient18.5-sqlplus-18.5.0.0.0-3.x86_64.rpm
52
+ wget -q https://download.oracle.com/otn_software/linux/instantclient/185000/oracle-instantclient18.5-devel-18.5.0.0.0-3.x86_64.rpm
53
+ - name: Install Oracle client
54
+ run: |
55
+ sudo alien -i oracle-instantclient18.5-basic-18.5.0.0.0-3.x86_64.rpm
56
+ sudo alien -i oracle-instantclient18.5-sqlplus-18.5.0.0.0-3.x86_64.rpm
57
+ sudo alien -i oracle-instantclient18.5-devel-18.5.0.0.0-3.x86_64.rpm
58
+ - name: Install JDBC Driver
59
+ run: |
60
+ cp $ORACLE_HOME/lib/ojdbc8.jar lib/.
61
+ - name: Create database user
62
+ run: |
63
+ ./ci/setup_accounts.sh
64
+ - name: Bundle install
65
+ run: |
66
+ bundle install --jobs 4 --retry 3
67
+ - name: Run RSpec
68
+ run: |
69
+ bundle exec rspec
data/.rubocop.yml CHANGED
@@ -2,19 +2,13 @@
2
2
  # We should not use cops only available for Ruby 2.1 or later
3
3
  # since ruby-plsql itself supports Ruby 1.9.3
4
4
  AllCops:
5
- TargetRubyVersion: 2.2
5
+ TargetRubyVersion: 2.3
6
6
  DisabledByDefault: true
7
7
 
8
8
  # Prefer &&/|| over and/or.
9
9
  Style/AndOr:
10
10
  Enabled: true
11
11
 
12
- # Do not use braces for hash literals when they are the last argument of a
13
- # method call.
14
- Style/BracesAroundHashParameters:
15
- Enabled: true
16
- EnforcedStyle: context_dependent
17
-
18
12
  # Align `when` with `case`.
19
13
  Layout/CaseIndentation:
20
14
  Enabled: true
@@ -45,7 +39,7 @@ Layout/EmptyLinesAroundMethodBody:
45
39
  Layout/EmptyLinesAroundModuleBody:
46
40
  Enabled: true
47
41
 
48
- Layout/FirstParameterIndentation:
42
+ Layout/FirstArgumentIndentation:
49
43
  Enabled: true
50
44
 
51
45
  # Use Ruby >= 1.9 syntax for hashes. Prefer { a: :b } over { :a => :b }.
@@ -56,7 +50,7 @@ Style/HashSyntax:
56
50
  # extra level of indentation.
57
51
  Layout/IndentationConsistency:
58
52
  Enabled: true
59
- EnforcedStyle: rails
53
+ EnforcedStyle: indented_internal_methods
60
54
 
61
55
  # Two spaces, no tabs (for indentation).
62
56
  Layout/IndentationWidth:
@@ -122,7 +116,7 @@ Layout/Tab:
122
116
  Enabled: true
123
117
 
124
118
  # Blank lines should not have any spaces.
125
- Layout/TrailingBlankLines:
119
+ Layout/TrailingEmptyLines:
126
120
  Enabled: true
127
121
 
128
122
  # No trailing whitespace.
@@ -130,7 +124,7 @@ Layout/TrailingWhitespace:
130
124
  Enabled: true
131
125
 
132
126
  # Use quotes for string literals when they are enough.
133
- Style/UnneededPercentQ:
127
+ Style/RedundantPercentQ:
134
128
  Enabled: true
135
129
 
136
130
  # Align `end` with the matching keyword or starting expression except for
data/.travis.yml CHANGED
@@ -1,5 +1,8 @@
1
+ dist: xenial
1
2
  sudo: required
2
3
 
4
+ jdk:
5
+ - openjdk8
3
6
  env:
4
7
  global:
5
8
  - ORACLE_COOKIE=sqldev
@@ -19,7 +22,7 @@ before_install:
19
22
  - chmod +x .travis/oracle/download.sh
20
23
  - chmod +x .travis/oracle/install.sh
21
24
  - chmod +x .travis/setup_accounts.sh
22
- - gem install bundler
25
+ - 'gem install bundler || gem install bundler -v 1.17.3'
23
26
 
24
27
  install:
25
28
  - .travis/oracle/download.sh
@@ -29,11 +32,13 @@ install:
29
32
 
30
33
  language: ruby
31
34
  rvm:
32
- - 2.5.1
33
- - 2.4.4
34
- - 2.3.7
35
- - 2.2.10
36
- - jruby-9.2.0.0
35
+ - 3.0.2
36
+ - 2.7.4
37
+ - 2.6.8
38
+ - 2.5.9
39
+ - 2.4.10
40
+ - 2.3.8
41
+ - jruby-9.2.17.0
37
42
  - ruby-head
38
43
  - jruby-head
39
44
 
@@ -42,8 +47,42 @@ gemfile:
42
47
  - gemfiles/Gemfile.activerecord-5.0
43
48
  - gemfiles/Gemfile.activerecord-5.1
44
49
  - gemfiles/Gemfile.activerecord-5.2
50
+ - gemfiles/Gemfile.activerecord-6.0
51
+ - gemfiles/Gemfile.activerecord-6.1
52
+ - gemfiles/Gemfile.activerecord-main
45
53
 
46
54
  matrix:
55
+ exclude:
56
+ - gemfile: gemfiles/Gemfile.activerecord-main
57
+ rvm: jruby-head
58
+ - gemfile: gemfiles/Gemfile.activerecord-main
59
+ rvm: jruby-9.2.17.0
60
+ - gemfile: gemfiles/Gemfile.activerecord-main
61
+ rvm: 2.6.8
62
+ - gemfile: gemfiles/Gemfile.activerecord-main
63
+ rvm: 2.5.9
64
+ - gemfile: gemfiles/Gemfile.activerecord-main
65
+ rvm: 2.4.10
66
+ - gemfile: gemfiles/Gemfile.activerecord-main
67
+ rvm: 2.3.8
68
+ - gemfile: gemfiles/Gemfile.activerecord-main
69
+ rvm: 2.2.10
70
+ - gemfile: gemfiles/Gemfile.activerecord-6.0
71
+ rvm: 2.4.10
72
+ - gemfile: gemfiles/Gemfile.activerecord-6.0
73
+ rvm: 2.3.8
74
+ - gemfile: gemfiles/Gemfile.activerecord-6.0
75
+ rvm: 2.2.10
76
+ - gemfile: gemfiles/Gemfile.activerecord-6.1
77
+ rvm: 2.4.10
78
+ - gemfile: gemfiles/Gemfile.activerecord-6.1
79
+ rvm: 2.3.8
80
+ - gemfile: gemfiles/Gemfile.activerecord-6.1
81
+ rvm: 2.2.10
47
82
  allow_failures:
48
83
  - rvm: ruby-head
49
84
  - rvm: jruby-head
85
+ - gemfile: gemfiles/Gemfile.activerecord-main
86
+ rvm: 3.0.2
87
+ - gemfile: gemfiles/Gemfile.activerecord-main
88
+ rvm: 2.7.4
data/Gemfile CHANGED
@@ -3,6 +3,9 @@ source "http://rubygems.org"
3
3
  group :development do
4
4
  gem "juwelier", "~> 2.0"
5
5
  gem "rspec_junit_formatter"
6
+ gem "rubocop", "0.81", require: false
7
+ gem "rubocop-performance", require: false
8
+ gem "rubocop-rails", require: false
6
9
  end
7
10
 
8
11
  group :test, :development do
data/History.txt CHANGED
@@ -1,3 +1,27 @@
1
+ == 0.8.0 2021-08-10
2
+ * Improvements and fixes
3
+ * Support Rails 6.1 [#193]
4
+ * Support Rails 6.0 [#178]
5
+ * Support Oracle Database 18c or higher [#196]
6
+ * case-insensitive table names and proc params [#185]
7
+ * Use OCI driver type for RUBY_ENGINE TruffleRuby [#190]
8
+ * Replace NativeException with Java::JavaSql::SQLException [#192]
9
+ * Fixnum and Bignum are deprecated in Ruby 2.4 [#191]
10
+
11
+ * CI
12
+ * Run CI with GitHub Actions [#198]
13
+ * CI against Rails 6.1 [#193]
14
+ * CI against Rails 6.0 [#178]
15
+ * CI against Ruby 3.0.2, 2.7.4 and 2.6.8 [#197]
16
+ * Exclude jruby-head with Rails main [#194]
17
+ * Exclude jruby-head with Rails main [#194]
18
+ * Bump RuboCop version to 0.81.0 [#186]
19
+ * Run RuboCop using GitHub Actions [#180, #182]
20
+ * Remove .codeclimate.yml [#181]
21
+ * Fallback to bundler 1.7.13 [#171]
22
+ * Terminate CI against Ruby 2.2.x [#172]
23
+ * Use Ubuntu Xenial at Travis CI [#176]
24
+
1
25
  == 0.7.1 2018-09-03
2
26
  * Fix
3
27
  * Address incorrect versions in Gemfile
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- [![Build Status](https://travis-ci.org/rsim/ruby-plsql.svg?branch=master)](https://travis-ci.org/rsim/ruby-plsql)
1
+ [![Build Status](https://travis-ci.com/rsim/ruby-plsql.svg?branch=master)](https://travis-ci.com/rsim/ruby-plsql)
2
2
 
3
3
  ruby-plsql
4
4
  ==========
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.1
1
+ 0.8.0
@@ -0,0 +1,7 @@
1
+ XEPDB1 =
2
+ (DESCRIPTION =
3
+ (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
4
+ (CONNECT_DATA =
5
+ (SERVICE_NAME = XEPDB1)
6
+ )
7
+ )
@@ -0,0 +1,9 @@
1
+ #!/bin/bash
2
+
3
+ set -ev
4
+
5
+ ${ORACLE_HOME}/bin/sqlplus system/${DATABASE_SYS_PASSWORD}@${DATABASE_NAME} <<SQL
6
+ @@spec/support/unlock_and_setup_hr_user.sql
7
+ @@spec/support/create_arunit_user.sql
8
+ exit
9
+ SQL
@@ -0,0 +1,21 @@
1
+ source 'http://rubygems.org'
2
+
3
+ group :development do
4
+ gem 'juwelier', '~> 2.0'
5
+ gem 'rspec_junit_formatter'
6
+ end
7
+
8
+ group :test, :development do
9
+ gem 'rake', '>= 10.0'
10
+ gem 'rspec', '~> 3.1'
11
+
12
+ unless ENV['NO_ACTIVERECORD']
13
+ gem 'activerecord', '~> 6.0.0.rc1'
14
+ gem 'activerecord-oracle_enhanced-adapter', '~>6.0.0.rc1'
15
+ gem 'simplecov', '>= 0'
16
+ end
17
+
18
+ platforms :ruby, :mswin, :mingw do
19
+ gem 'ruby-oci8', '~> 2.1'
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ source 'http://rubygems.org'
2
+
3
+ group :development do
4
+ gem 'juwelier', '~> 2.0'
5
+ gem 'rspec_junit_formatter'
6
+ end
7
+
8
+ group :test, :development do
9
+ gem 'rake', '>= 10.0'
10
+ gem 'rspec', '~> 3.1'
11
+
12
+ unless ENV['NO_ACTIVERECORD']
13
+ gem 'activerecord', '~> 6.1.0'
14
+ gem 'activerecord-oracle_enhanced-adapter', '~>6.1.0'
15
+ gem 'simplecov', '>= 0'
16
+ end
17
+
18
+ platforms :ruby, :mswin, :mingw do
19
+ gem 'ruby-oci8', '~> 2.1'
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ source 'http://rubygems.org'
2
+
3
+ group :development do
4
+ gem 'juwelier', '~> 2.0'
5
+ gem 'rspec_junit_formatter'
6
+ end
7
+
8
+ group :test, :development do
9
+ gem 'rake', '>= 10.0'
10
+ gem 'rspec', '~> 3.1'
11
+
12
+ unless ENV['NO_ACTIVERECORD']
13
+ gem 'activerecord', github: 'rails/rails', branch: 'main'
14
+ gem 'activerecord-oracle_enhanced-adapter', github: 'rsim/oracle-enhanced', branch: 'master'
15
+ gem 'simplecov', '>= 0'
16
+ end
17
+
18
+ platforms :ruby, :mswin, :mingw do
19
+ gem 'ruby-oci8', '~> 2.1'
20
+ end
21
+ end
@@ -37,8 +37,8 @@ module PLSQL
37
37
  end
38
38
 
39
39
  def self.driver_type #:nodoc:
40
- # MRI 1.8.6 or YARV 1.9.1
41
- @driver_type ||= if (!defined?(RUBY_ENGINE) || RUBY_ENGINE == "ruby") && defined?(OCI8)
40
+ # MRI 1.8.6 or YARV 1.9.1 or TruffleRuby
41
+ @driver_type ||= if (!defined?(RUBY_ENGINE) || RUBY_ENGINE == "ruby" || RUBY_ENGINE == "truffleruby") && defined?(OCI8)
42
42
  :oci
43
43
  # JRuby
44
44
  elsif (defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby")
@@ -223,8 +223,6 @@ module PLSQL
223
223
  end
224
224
 
225
225
  RUBY_CLASS_TO_SQL_TYPE = {
226
- Fixnum => java.sql.Types::INTEGER,
227
- Bignum => java.sql.Types::INTEGER,
228
226
  Integer => java.sql.Types::INTEGER,
229
227
  Float => java.sql.Types::FLOAT,
230
228
  BigDecimal => java.sql.Types::NUMERIC,
@@ -83,6 +83,14 @@ module PLSQL
83
83
 
84
84
  # get procedure argument metadata from data dictionary
85
85
  def get_argument_metadata #:nodoc:
86
+ if (@schema.connection.database_version <=> [18, 0, 0, 0]) >= 0
87
+ get_argument_metadata_from_18c
88
+ else
89
+ get_argument_metadata_below_18c
90
+ end
91
+ end
92
+
93
+ def get_argument_metadata_below_18c #:nodoc:
86
94
  @arguments = {}
87
95
  @argument_list = {}
88
96
  @out_list = {}
@@ -197,6 +205,99 @@ module PLSQL
197
205
  construct_argument_list_for_overloads
198
206
  end
199
207
 
208
+ # get procedure argument metadata from data dictionary
209
+ def get_argument_metadata_from_18c #:nodoc:
210
+ @arguments = {}
211
+ @argument_list = {}
212
+ @out_list = {}
213
+ @return = {}
214
+ @overloaded = false
215
+
216
+ # store tmp tables for each overload for table parameters with types defined inside packages
217
+ @tmp_table_names = {}
218
+ # store if tmp tables are created for specific overload
219
+ @tmp_tables_created = {}
220
+
221
+ @schema.select_all(
222
+ "SELECT subprogram_id, object_name, TO_NUMBER(overload), argument_name, position,
223
+ data_type, in_out, data_length, data_precision, data_scale, char_used,
224
+ char_length, type_owner, nvl(type_subname, type_name),
225
+ decode(type_object_type, 'PACKAGE', type_name, null), type_object_type, defaulted
226
+ FROM all_arguments
227
+ WHERE object_id = :object_id
228
+ AND owner = :owner
229
+ AND object_name = :procedure_name
230
+ ORDER BY overload, sequence",
231
+ @object_id, @schema_name, @procedure
232
+ ) do |r|
233
+
234
+ subprogram_id, object_name, overload, argument_name, position,
235
+ data_type, in_out, data_length, data_precision, data_scale, char_used,
236
+ char_length, type_owner, type_name, type_package, type_object_type, defaulted = r
237
+
238
+ @overloaded ||= !overload.nil?
239
+ # if not overloaded then store arguments at key 0
240
+ overload ||= 0
241
+ @arguments[overload] ||= {}
242
+ @return[overload] ||= nil
243
+ @tmp_table_names[overload] ||= []
244
+
245
+ sql_type_name = build_sql_type_name(type_owner, type_package, type_name)
246
+
247
+ tmp_table_name = nil
248
+ # type defined inside package
249
+ if type_package
250
+ if collection_type?(data_type)
251
+ tmp_table_name = "#{Connection::RUBY_TEMP_TABLE_PREFIX}#{@schema.connection.session_id}_#{@object_id}_#{subprogram_id}_#{position}"
252
+ end
253
+ end
254
+
255
+ argument_metadata = {
256
+ position: position && position.to_i,
257
+ data_type: data_type,
258
+ in_out: in_out,
259
+ data_length: data_length && data_length.to_i,
260
+ data_precision: data_precision && data_precision.to_i,
261
+ data_scale: data_scale && data_scale.to_i,
262
+ char_used: char_used,
263
+ char_length: char_length && char_length.to_i,
264
+ type_owner: type_owner,
265
+ type_name: type_name,
266
+ # TODO: should be renamed to type_package, when support for legacy database versions is dropped
267
+ # due to the explicit change declaration of types in oracle plsql_type-catalogs (type_package + type_name),
268
+ # the assignment of type + subtype was switched here for 18c and beyond
269
+ type_subname: type_package,
270
+ sql_type_name: sql_type_name,
271
+ defaulted: defaulted,
272
+ type_object_type: type_object_type
273
+ }
274
+ if tmp_table_name
275
+ @tmp_table_names[overload] << [(argument_metadata[:tmp_table_name] = tmp_table_name), argument_metadata]
276
+ end
277
+
278
+ if composite_type?(data_type)
279
+ case data_type
280
+ when "PL/SQL RECORD", "REF CURSOR"
281
+ argument_metadata[:fields] = get_field_definitions(argument_metadata)
282
+ when "PL/SQL TABLE", "TABLE", "VARRAY"
283
+ argument_metadata[:element] = get_element_definition(argument_metadata)
284
+ end
285
+ end
286
+
287
+ # if function has return value
288
+ if argument_name.nil? && in_out == "OUT"
289
+ @return[overload] = argument_metadata
290
+ else
291
+ # sometime there are empty IN arguments in all_arguments view for procedures without arguments (e.g. for DBMS_OUTPUT.DISABLE)
292
+ @arguments[overload][argument_name.downcase.to_sym] = argument_metadata if argument_name
293
+ end
294
+ end
295
+ # if procedure is without arguments then create default empty argument list for default overload
296
+ @arguments[0] = {} if @arguments.keys.empty?
297
+
298
+ construct_argument_list_for_overloads
299
+ end
300
+
200
301
  def construct_argument_list_for_overloads #:nodoc:
201
302
  @overloads = @arguments.keys.sort
202
303
  @overloads.each do |overload|
@@ -229,6 +330,185 @@ module PLSQL
229
330
  @tmp_tables_created[overload] = true
230
331
  end
231
332
 
333
+ def build_sql_type_name(type_owner, type_package, type_name) #:nodoc:
334
+ if type_owner == nil || type_owner == "PUBLIC"
335
+ type_owner_res = ""
336
+ else
337
+ type_owner_res = "#{type_owner}."
338
+ end
339
+
340
+ if type_package == nil
341
+ type_name_res = type_name
342
+ else
343
+ type_name_res = "#{type_package}.#{type_name}"
344
+ end
345
+ type_name_res && "#{type_owner_res}#{type_name_res}"
346
+ end
347
+
348
+ def get_field_definitions(argument_metadata) #:nodoc:
349
+ fields = {}
350
+ case argument_metadata[:type_object_type]
351
+ when "PACKAGE"
352
+ @schema.select_all(
353
+ "SELECT attr_no, attr_name, attr_type_owner, attr_type_name, attr_type_package, length, precision, scale, char_used
354
+ FROM ALL_PLSQL_TYPES t, ALL_PLSQL_TYPE_ATTRS ta
355
+ WHERE t.OWNER = :owner AND t.type_name = :type_name AND t.package_name = :package_name
356
+ AND ta.OWNER = t.owner AND ta.TYPE_NAME = t.TYPE_NAME AND ta.PACKAGE_NAME = t.PACKAGE_NAME
357
+ ORDER BY attr_no",
358
+ @schema_name, argument_metadata[:type_name], argument_metadata[:type_subname]) do |r|
359
+
360
+ attr_no, attr_name, attr_type_owner, attr_type_name, attr_type_package, attr_length, attr_precision, attr_scale, attr_char_used = r
361
+
362
+ fields[attr_name.downcase.to_sym] = {
363
+ position: attr_no.to_i,
364
+ data_type: attr_type_owner == nil ? attr_type_name : get_composite_type(attr_type_owner, attr_type_name, attr_type_package),
365
+ in_out: argument_metadata[:in_out],
366
+ data_length: attr_length && attr_length.to_i,
367
+ data_precision: attr_precision && attr_precision.to_i,
368
+ data_scale: attr_scale && attr_scale.to_i,
369
+ char_used: attr_char_used == nil ? "0" : attr_char_used,
370
+ char_length: attr_char_used && attr_length && attr_length.to_i,
371
+ type_owner: attr_type_owner,
372
+ type_name: attr_type_owner && attr_type_name,
373
+ type_subname: attr_type_package,
374
+ sql_type_name: attr_type_owner && build_sql_type_name(attr_type_owner, attr_type_package, attr_type_name),
375
+ defaulted: argument_metadata[:defaulted]
376
+ }
377
+
378
+ if fields[attr_name.downcase.to_sym][:data_type] == "TABLE" && fields[attr_name.downcase.to_sym][:type_subname] != nil
379
+ fields[attr_name.downcase.to_sym][:fields] = get_field_definitions(fields[attr_name.downcase.to_sym])
380
+ end
381
+ end
382
+ when "TABLE", "VIEW"
383
+ @schema.select_all(
384
+ "SELECT column_id, column_name, data_type, data_length, data_precision, data_scale, char_length, char_used
385
+ FROM ALL_TAB_COLS WHERE OWNER = :owner AND TABLE_NAME = :type_name
386
+ ORDER BY column_id",
387
+ @schema_name, argument_metadata[:type_name]) do |r|
388
+
389
+ col_no, col_name, col_type_name, col_length, col_precision, col_scale, col_char_length, col_char_used = r
390
+
391
+ fields[col_name.downcase.to_sym] = {
392
+ position: col_no.to_i,
393
+ data_type: col_type_name,
394
+ in_out: argument_metadata[:in_out],
395
+ data_length: col_length && col_length.to_i,
396
+ data_precision: col_precision && col_precision.to_i,
397
+ data_scale: col_scale && col_scale.to_i,
398
+ char_used: col_char_used == nil ? "0" : col_char_used,
399
+ char_length: col_char_length && col_char_length.to_i,
400
+ type_owner: nil,
401
+ type_name: nil,
402
+ type_subname: nil,
403
+ sql_type_name: nil,
404
+ defaulted: argument_metadata[:defaulted]
405
+ }
406
+ end
407
+ end
408
+ fields
409
+ end
410
+
411
+ def get_element_definition(argument_metadata) #:nodoc:
412
+ element_metadata = {}
413
+ if collection_type?(argument_metadata[:data_type])
414
+ case argument_metadata[:type_object_type]
415
+ when "PACKAGE"
416
+ r = @schema.select_first(
417
+ "SELECT elem_type_owner, elem_type_name, elem_type_package, length, precision, scale, char_used, index_by
418
+ FROM ALL_PLSQL_COLL_TYPES t
419
+ WHERE t.OWNER = :owner AND t.TYPE_NAME = :type_name AND t.PACKAGE_NAME = :package_name",
420
+ @schema_name, argument_metadata[:type_name], argument_metadata[:type_subname])
421
+
422
+ elem_type_owner, elem_type_name, elem_type_package, elem_length, elem_precision, elem_scale, elem_char_used, index_by = r
423
+
424
+ if index_by == "VARCHAR2"
425
+ raise ArgumentError, "Index-by Varchar-Table (associative array) #{argument_metadata[:type_name]} is not supported"
426
+ end
427
+
428
+ element_metadata = {
429
+ position: 1,
430
+ data_type: if elem_type_owner == nil
431
+ elem_type_name
432
+ else
433
+ elem_type_package != nil ? "PL/SQL RECORD" : "OBJECT"
434
+ end,
435
+ in_out: argument_metadata[:in_out],
436
+ data_length: elem_length && elem_length.to_i,
437
+ data_precision: elem_precision && elem_precision.to_i,
438
+ data_scale: elem_scale && elem_scale.to_i,
439
+ char_used: elem_char_used,
440
+ char_length: elem_char_used && elem_length && elem_length.to_i,
441
+ type_owner: elem_type_owner,
442
+ type_name: elem_type_name,
443
+ type_subname: elem_type_package,
444
+ sql_type_name: elem_type_owner && build_sql_type_name(elem_type_owner, elem_type_package, elem_type_name),
445
+ type_object_type: elem_type_package != nil ? "PACKAGE" : nil,
446
+ defaulted: argument_metadata[:defaulted]
447
+ }
448
+
449
+ if elem_type_package != nil
450
+ element_metadata[:fields] = get_field_definitions(element_metadata)
451
+ end
452
+ when "TYPE"
453
+ r = @schema.select_first(
454
+ "SELECT elem_type_owner, elem_type_name, length, precision, scale, char_used
455
+ FROM ALL_COLL_TYPES t
456
+ WHERE t.owner = :owner AND t.TYPE_NAME = :type_name",
457
+ @schema_name, argument_metadata[:type_name]
458
+ )
459
+ elem_type_owner, elem_type_name, elem_length, elem_precision, elem_scale, elem_char_used = r
460
+
461
+ element_metadata = {
462
+ position: 1,
463
+ data_type: elem_type_owner == nil ? elem_type_name : "OBJECT",
464
+ in_out: argument_metadata[:in_out],
465
+ data_length: elem_length && elem_length.to_i,
466
+ data_precision: elem_precision && elem_precision.to_i,
467
+ data_scale: elem_scale && elem_scale.to_i,
468
+ char_used: elem_char_used,
469
+ char_length: elem_char_used && elem_length && elem_length.to_i,
470
+ type_owner: elem_type_owner,
471
+ type_name: elem_type_name,
472
+ type_subname: nil,
473
+ sql_type_name: elem_type_owner && build_sql_type_name(elem_type_owner, nil, elem_type_name),
474
+ defaulted: argument_metadata[:defaulted]
475
+ }
476
+ end
477
+ else
478
+ element_metadata = {
479
+ position: 1,
480
+ data_type: "PL/SQL RECORD",
481
+ in_out: argument_metadata[:in_out],
482
+ data_length: nil,
483
+ data_precision: nil,
484
+ data_scale: nil,
485
+ char_used: "B",
486
+ char_length: 0,
487
+ type_owner: argument_metadata[:type_owner],
488
+ type_name: argument_metadata[:type_name],
489
+ type_subname: argument_metadata[:type_subname],
490
+ sql_type_name: build_sql_type_name(argument_metadata[:type_owner], argument_metadata[:type_subname], argument_metadata[:type_name]),
491
+ defaulted: argument_metadata[:defaulted]
492
+ }
493
+
494
+ if element_metadata[:type_subname] != nil
495
+ element_metadata[:fields] = get_field_definitions(element_metadata)
496
+ end
497
+ end
498
+ element_metadata
499
+ end
500
+
501
+ def get_composite_type(type_owner, type_name, type_package)
502
+ r = @schema.select_first("SELECT typecode FROM all_plsql_types WHERE owner = :owner AND type_name = :type_name AND package_name = :type_package
503
+ UNION ALL
504
+ SELECT typecode FROM all_types WHERE owner = :owner AND type_name = :type_name",
505
+ type_owner, type_name, type_package, type_owner, type_name)
506
+ typecode = r[0]
507
+ raise ArgumentError, "#{type_name} type #{build_sql_type_name(type_owner, type_package, type_name)} definition inside package is not supported as part of other type definition," <<
508
+ " use CREATE TYPE outside package" if typecode == "COLLECTION"
509
+ typecode
510
+ end
511
+
232
512
  PLSQL_COMPOSITE_TYPES = ["PL/SQL RECORD", "PL/SQL TABLE", "TABLE", "VARRAY", "REF CURSOR"].freeze
233
513
  def composite_type?(data_type) #:nodoc:
234
514
  PLSQL_COMPOSITE_TYPES.include? data_type
@@ -6,6 +6,11 @@ module PLSQL
6
6
  @dbms_output_stream = @schema.dbms_output_stream
7
7
  @skip_self = options[:skip_self]
8
8
  @self = options[:self]
9
+
10
+ if args.size == 1 && args[0].is_a?(Hash) && args[0].keys.all? { |k| k.is_a?(Symbol) }
11
+ args[0] = args[0].map { |k, v| [k.downcase, v] }.to_h
12
+ end
13
+
9
14
  @overload = get_overload_from_arguments_list(args)
10
15
  @procedure.ensure_tmp_tables_created(@overload) if @procedure.respond_to?(:ensure_tmp_tables_created)
11
16
  construct_sql(args)
data/lib/plsql/table.rb CHANGED
@@ -172,6 +172,7 @@ module PLSQL
172
172
  end
173
173
 
174
174
  table_proc = TableProcedure.new(@schema, self, :insert)
175
+ record = record.map { |k, v| [k.downcase.to_sym, v] }.to_h
175
176
  table_proc.add_insert_arguments(record)
176
177
 
177
178
  call = ProcedureCall.new(table_proc, table_proc.argument_values)
data/ruby-plsql.gemspec CHANGED
@@ -2,11 +2,12 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: ruby-plsql 0.7.1 ruby lib
5
+
6
+ # stub: ruby-plsql 0.8.0 ruby lib
6
7
 
7
8
  Gem::Specification.new do |s|
8
9
  s.name = "ruby-plsql".freeze
9
- s.version = "0.7.1"
10
+ s.version = "0.8.0"
10
11
 
11
12
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
13
  s.require_paths = ["lib".freeze]
@@ -81,34 +82,33 @@ Gem::Specification.new do |s|
81
82
  if s.respond_to? :specification_version then
82
83
  s.specification_version = 4
83
84
 
84
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
85
- s.add_development_dependency(%q<juwelier>.freeze, ["~> 2.0"])
86
- s.add_development_dependency(%q<rspec_junit_formatter>.freeze, [">= 0"])
87
- s.add_development_dependency(%q<rake>.freeze, [">= 10.0"])
88
- s.add_development_dependency(%q<rspec>.freeze, ["~> 3.1"])
89
- s.add_development_dependency(%q<activerecord>.freeze, ["~> 5.0"])
90
- s.add_development_dependency(%q<activerecord-oracle_enhanced-adapter>.freeze, ["~> 1.7"])
91
- s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
92
- s.add_development_dependency(%q<ruby-oci8>.freeze, ["~> 2.1"])
85
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new("1.2.0") then
86
+ s.add_development_dependency("juwelier".freeze, ["~> 2.0"])
87
+ s.add_development_dependency("rspec_junit_formatter".freeze, [">= 0"])
88
+ s.add_development_dependency("rake".freeze, [">= 10.0"])
89
+ s.add_development_dependency("rspec".freeze, ["~> 3.1"])
90
+ s.add_development_dependency("activerecord".freeze, ["~> 5.0"])
91
+ s.add_development_dependency("activerecord-oracle_enhanced-adapter".freeze, ["~> 1.7"])
92
+ s.add_development_dependency("simplecov".freeze, [">= 0"])
93
+ s.add_development_dependency("ruby-oci8".freeze, ["~> 2.1"])
93
94
  else
94
- s.add_dependency(%q<juwelier>.freeze, ["~> 2.0"])
95
- s.add_dependency(%q<rspec_junit_formatter>.freeze, [">= 0"])
96
- s.add_dependency(%q<rake>.freeze, [">= 10.0"])
97
- s.add_dependency(%q<rspec>.freeze, ["~> 3.1"])
98
- s.add_dependency(%q<activerecord>.freeze, ["~> 5.0"])
99
- s.add_dependency(%q<activerecord-oracle_enhanced-adapter>.freeze, ["~> 1.7"])
100
- s.add_dependency(%q<simplecov>.freeze, [">= 0"])
101
- s.add_dependency(%q<ruby-oci8>.freeze, ["~> 2.1"])
95
+ s.add_dependency("juwelier".freeze, ["~> 2.0"])
96
+ s.add_dependency("rspec_junit_formatter".freeze, [">= 0"])
97
+ s.add_dependency("rake".freeze, [">= 10.0"])
98
+ s.add_dependency("rspec".freeze, ["~> 3.1"])
99
+ s.add_dependency("activerecord".freeze, ["~> 5.0"])
100
+ s.add_dependency("activerecord-oracle_enhanced-adapter".freeze, ["~> 1.7"])
101
+ s.add_dependency("simplecov".freeze, [">= 0"])
102
+ s.add_dependency("ruby-oci8".freeze, ["~> 2.1"])
102
103
  end
103
104
  else
104
- s.add_dependency(%q<juwelier>.freeze, ["~> 2.0"])
105
- s.add_dependency(%q<rspec_junit_formatter>.freeze, [">= 0"])
106
- s.add_dependency(%q<rake>.freeze, [">= 10.0"])
107
- s.add_dependency(%q<rspec>.freeze, ["~> 3.1"])
108
- s.add_dependency(%q<activerecord>.freeze, ["~> 5.0"])
109
- s.add_dependency(%q<activerecord-oracle_enhanced-adapter>.freeze, ["~> 1.7"])
110
- s.add_dependency(%q<simplecov>.freeze, [">= 0"])
111
- s.add_dependency(%q<ruby-oci8>.freeze, ["~> 2.1"])
105
+ s.add_dependency("juwelier".freeze, ["~> 2.0"])
106
+ s.add_dependency("rspec_junit_formatter".freeze, [">= 0"])
107
+ s.add_dependency("rake".freeze, [">= 10.0"])
108
+ s.add_dependency("rspec".freeze, ["~> 3.1"])
109
+ s.add_dependency("activerecord".freeze, ["~> 5.0"])
110
+ s.add_dependency("activerecord-oracle_enhanced-adapter".freeze, ["~> 1.7"])
111
+ s.add_dependency("simplecov".freeze, [">= 0"])
112
+ s.add_dependency("ruby-oci8".freeze, ["~> 2.1"])
112
113
  end
113
114
  end
114
-
@@ -687,7 +687,7 @@ describe "Parameter type mapping /" do
687
687
  is_approved BOOLEAN
688
688
  );
689
689
 
690
- TYPE table_of_records IS TABLE OF t_employee;
690
+ TYPE table_of_records IS TABLE OF test_record.t_employee;
691
691
 
692
692
  FUNCTION test_full_name(p_employee t_employee)
693
693
  RETURN VARCHAR2;
@@ -1101,7 +1101,7 @@ describe "Parameter type mapping /" do
1101
1101
  last_name VARCHAR(50),
1102
1102
  hire_date DATE
1103
1103
  );
1104
- TYPE t_employees IS TABLE OF t_employee;
1104
+ TYPE t_employees IS TABLE OF test_collections.t_employee;
1105
1105
  FUNCTION test_employees (p_employees IN OUT t_employees)
1106
1106
  RETURN t_employees;
1107
1107
  -- these types with tables in lower level are not yet supported
@@ -1110,7 +1110,7 @@ describe "Parameter type mapping /" do
1110
1110
  first_name VARCHAR2(50),
1111
1111
  last_name VARCHAR(50),
1112
1112
  hire_date DATE,
1113
- numbers t_numbers
1113
+ numbers test_collections.t_numbers
1114
1114
  );
1115
1115
  FUNCTION test_employee2 (p_employee IN OUT t_employee2)
1116
1116
  RETURN t_employee2;
@@ -1366,7 +1366,7 @@ describe "Parameter type mapping /" do
1366
1366
  last_name VARCHAR(50),
1367
1367
  hire_date DATE
1368
1368
  );
1369
- TYPE t_employees IS TABLE OF t_employee
1369
+ TYPE t_employees IS TABLE OF test_collections.t_employee
1370
1370
  INDEX BY BINARY_INTEGER;
1371
1371
  FUNCTION test_employees (p_employees IN OUT t_employees)
1372
1372
  RETURN t_employees;
@@ -1508,6 +1508,12 @@ describe "Parameter type mapping /" do
1508
1508
  end
1509
1509
 
1510
1510
  describe "using Oracle 9.2" do
1511
+ before(:all) do
1512
+ # get actual database_version
1513
+ plsql.connect! CONNECTION_PARAMS
1514
+ skip "Skip if the actual database version is 18c or higher" if (plsql.connection.database_version <=> [18, 0, 0, 0]) >= 0
1515
+ end
1516
+
1511
1517
  before do
1512
1518
  # simulate Oracle 9.2 connection
1513
1519
  plsql(:oracle_9).connection = get_connection
@@ -2358,3 +2364,27 @@ describe "#get_argument_metadata" do
2358
2364
  end
2359
2365
  end
2360
2366
  end
2367
+
2368
+ describe "case-insensitive params" do
2369
+ before(:all) do
2370
+ plsql.connect! CONNECTION_PARAMS
2371
+ plsql.execute <<-SQL
2372
+ CREATE OR REPLACE FUNCTION test_func
2373
+ ( p_string VARCHAR2 )
2374
+ RETURN VARCHAR2
2375
+ IS
2376
+ BEGIN
2377
+ RETURN UPPER(p_string);
2378
+ END test_func;
2379
+ SQL
2380
+ end
2381
+
2382
+ after(:all) do
2383
+ plsql.execute "DROP FUNCTION test_func"
2384
+ plsql.logoff
2385
+ end
2386
+
2387
+ it "should call procedure/function with case-insensitive param names" do
2388
+ expect { plsql.test_func(p_STRING: "xxx") }.not_to raise_error
2389
+ end
2390
+ end
@@ -229,11 +229,19 @@ describe "ActiveRecord connection" do
229
229
  end
230
230
 
231
231
  it "should safely close cursors in threaded environment" do
232
- expect {
233
- t1 = Thread.new { plsql.dbms_lock.sleep(1) }.tap { |t| t.abort_on_exception = true }
234
- t2 = Thread.new { plsql.dbms_lock.sleep(2) }.tap { |t| t.abort_on_exception = true }
235
- [t2, t1].each { |t| t.join }
236
- }.not_to raise_error
232
+ if (plsql.connection.database_version <=> [18, 0, 0, 0]) >= 0
233
+ expect {
234
+ t1 = Thread.new { plsql.dbms_session.sleep(1) }.tap { |t| t.abort_on_exception = true }
235
+ t2 = Thread.new { plsql.dbms_session.sleep(2) }.tap { |t| t.abort_on_exception = true }
236
+ [t2, t1].each { |t| t.join }
237
+ }.not_to raise_error
238
+ else
239
+ expect {
240
+ t1 = Thread.new { plsql.dbms_lock.sleep(1) }.tap { |t| t.abort_on_exception = true }
241
+ t2 = Thread.new { plsql.dbms_lock.sleep(2) }.tap { |t| t.abort_on_exception = true }
242
+ [t2, t1].each { |t| t.join }
243
+ }.not_to raise_error
244
+ end
237
245
  end
238
246
 
239
247
  end if defined?(ActiveRecord)
@@ -215,6 +215,11 @@ describe "Table" do
215
215
  expect(plsql.test_employees2.all("ORDER BY employee_id")).to eq(@employees2)
216
216
  end
217
217
 
218
+ it "should insert with case-insensetive table name" do
219
+ plsql.test_employees.insert @employees.first.map { |k, v| [k.upcase.to_sym, v] }.to_h
220
+ expect(plsql.test_employees.all).to eq([@employees.first])
221
+ end
222
+
218
223
  end
219
224
 
220
225
  describe "insert values" do
data/spec/spec_helper.rb CHANGED
@@ -85,7 +85,7 @@ def get_connection(user_number = 0)
85
85
  OCI8.new(database_user, database_password, get_connection_url)
86
86
  end
87
87
  else
88
- try_to_connect(NativeException) do
88
+ try_to_connect(Java::JavaSql::SQLException) do
89
89
  java.sql.DriverManager.getConnection(get_connection_url, database_user, database_password)
90
90
  end
91
91
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-plsql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Raimonds Simanovskis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-03 00:00:00.000000000 Z
11
+ date: 2021-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: juwelier
@@ -38,6 +38,48 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: '0.81'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: '0.81'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop-performance
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop-rails
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
41
83
  - !ruby/object:Gem::Dependency
42
84
  name: rake
43
85
  requirement: !ruby/object:Gem::Requirement
@@ -132,8 +174,9 @@ extensions: []
132
174
  extra_rdoc_files:
133
175
  - README.md
134
176
  files:
135
- - ".codeclimate.yml"
136
177
  - ".github/stale.yml"
178
+ - ".github/workflows/rubocop.yml"
179
+ - ".github/workflows/test.yml"
137
180
  - ".rubocop.yml"
138
181
  - ".travis.yml"
139
182
  - ".travis/oracle/download.sh"
@@ -146,9 +189,14 @@ files:
146
189
  - Rakefile
147
190
  - VERSION
148
191
  - Vagrantfile
192
+ - ci/network/admin/tnsnames.ora
193
+ - ci/setup_accounts.sh
149
194
  - gemfiles/Gemfile.activerecord-5.0
150
195
  - gemfiles/Gemfile.activerecord-5.1
151
196
  - gemfiles/Gemfile.activerecord-5.2
197
+ - gemfiles/Gemfile.activerecord-6.0
198
+ - gemfiles/Gemfile.activerecord-6.1
199
+ - gemfiles/Gemfile.activerecord-main
152
200
  - lib/plsql/connection.rb
153
201
  - lib/plsql/helpers.rb
154
202
  - lib/plsql/jdbc_connection.rb
@@ -205,8 +253,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
205
253
  - !ruby/object:Gem::Version
206
254
  version: '0'
207
255
  requirements: []
208
- rubyforge_project:
209
- rubygems_version: 2.7.7
256
+ rubygems_version: 3.2.22
210
257
  signing_key:
211
258
  specification_version: 4
212
259
  summary: Ruby API for calling Oracle PL/SQL procedures.
data/.codeclimate.yml DELETED
@@ -1,30 +0,0 @@
1
- checks:
2
- argument-count:
3
- enabled: false
4
- complex-logic:
5
- enabled: false
6
- file-lines:
7
- enabled: false
8
- method-complexity:
9
- enabled: false
10
- method-count:
11
- enabled: false
12
- method-lines:
13
- enabled: false
14
- nested-control-flow:
15
- enabled: false
16
- return-statements:
17
- enabled: false
18
- similar-code:
19
- enabled: false
20
- identical-code:
21
- enabled: false
22
-
23
- engines:
24
- rubocop:
25
- enabled: true
26
- channel: rubocop-0-58
27
-
28
- ratings:
29
- paths:
30
- - "**.rb"