ruby-plsql 0.7.1 → 0.8.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.
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"