ruby-plsql 0.5.3 → 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.
Files changed (57) hide show
  1. checksums.yaml +5 -5
  2. data/.github/stale.yml +37 -0
  3. data/.github/workflows/rubocop.yml +37 -0
  4. data/.github/workflows/test.yml +69 -0
  5. data/.rubocop.yml +147 -0
  6. data/.travis.yml +88 -0
  7. data/.travis/oracle/download.sh +15 -0
  8. data/.travis/oracle/install.sh +32 -0
  9. data/.travis/setup_accounts.sh +9 -0
  10. data/Gemfile +17 -9
  11. data/History.txt +76 -0
  12. data/README.md +29 -6
  13. data/Rakefile +31 -26
  14. data/VERSION +1 -1
  15. data/Vagrantfile +4 -4
  16. data/ci/network/admin/tnsnames.ora +7 -0
  17. data/ci/setup_accounts.sh +9 -0
  18. data/gemfiles/Gemfile.activerecord-5.0 +21 -0
  19. data/gemfiles/Gemfile.activerecord-5.1 +21 -0
  20. data/gemfiles/Gemfile.activerecord-5.2 +21 -0
  21. data/gemfiles/Gemfile.activerecord-6.0 +21 -0
  22. data/gemfiles/Gemfile.activerecord-6.1 +21 -0
  23. data/gemfiles/Gemfile.activerecord-main +21 -0
  24. data/lib/plsql/connection.rb +19 -22
  25. data/lib/plsql/helpers.rb +1 -3
  26. data/lib/plsql/jdbc_connection.rb +70 -68
  27. data/lib/plsql/oci8_patches.rb +2 -2
  28. data/lib/plsql/oci_connection.rb +62 -77
  29. data/lib/plsql/package.rb +61 -46
  30. data/lib/plsql/procedure.rb +358 -78
  31. data/lib/plsql/procedure_call.rb +508 -463
  32. data/lib/plsql/schema.rb +96 -101
  33. data/lib/plsql/sequence.rb +10 -13
  34. data/lib/plsql/sql_statements.rb +9 -11
  35. data/lib/plsql/table.rb +60 -63
  36. data/lib/plsql/type.rb +71 -76
  37. data/lib/plsql/variable.rb +90 -94
  38. data/lib/plsql/version.rb +1 -1
  39. data/lib/plsql/view.rb +16 -19
  40. data/ruby-plsql.gemspec +55 -35
  41. data/spec/plsql/connection_spec.rb +72 -66
  42. data/spec/plsql/package_spec.rb +63 -14
  43. data/spec/plsql/procedure_spec.rb +603 -261
  44. data/spec/plsql/schema_spec.rb +47 -23
  45. data/spec/plsql/sequence_spec.rb +2 -2
  46. data/spec/plsql/sql_statements_spec.rb +6 -6
  47. data/spec/plsql/table_spec.rb +84 -79
  48. data/spec/plsql/type_spec.rb +24 -30
  49. data/spec/plsql/variable_spec.rb +80 -88
  50. data/spec/plsql/version_spec.rb +4 -4
  51. data/spec/plsql/view_spec.rb +42 -42
  52. data/spec/spec_helper.rb +38 -35
  53. data/spec/support/create_arunit_user.sql +2 -0
  54. data/spec/support/custom_config.rb.sample +14 -0
  55. data/spec/support/test_db.rb +12 -13
  56. data/spec/support/unlock_and_setup_hr_user.sql +2 -0
  57. metadata +111 -34
data/spec/spec_helper.rb CHANGED
@@ -1,50 +1,50 @@
1
1
  require "rubygems"
2
2
  require "bundler"
3
3
  Bundler.setup(:default, :development)
4
- require 'simplecov'
4
+ require "simplecov"
5
5
 
6
6
  SimpleCov.configure do
7
- load_profile 'root_filter'
8
- load_profile 'test_frameworks'
7
+ load_profile "root_filter"
8
+ load_profile "test_frameworks"
9
9
  end
10
10
 
11
11
  ENV["COVERAGE"] && SimpleCov.start do
12
12
  add_filter "/.rvm/"
13
13
  end
14
14
 
15
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
16
- require 'rspec'
15
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
16
+ require "rspec"
17
17
 
18
- unless ENV['NO_ACTIVERECORD']
19
- require 'active_record'
18
+ unless ENV["NO_ACTIVERECORD"]
19
+ require "active_record"
20
20
  else
21
- puts 'Without ActiveRecord'
21
+ puts "Without ActiveRecord"
22
22
  end
23
23
 
24
- require 'ruby-plsql'
24
+ require "ruby-plsql"
25
25
 
26
26
  # Requires supporting ruby files with custom matchers and macros, etc,
27
27
  # in spec/support/ and its subdirectories.
28
- Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each {|f| require f}
28
+ Dir[File.join(File.dirname(__FILE__), "support/**/*.rb")].each { |f| require f }
29
29
 
30
- if ENV['USE_VM_DATABASE'] == 'Y'
31
- DATABASE_NAME = 'XE'
30
+ if ENV["USE_VM_DATABASE"] == "Y"
31
+ DATABASE_NAME = "XE"
32
32
  else
33
- DATABASE_NAME = ENV['DATABASE_NAME'] || 'orcl'
33
+ DATABASE_NAME = ENV["DATABASE_NAME"] || "orcl"
34
34
  end
35
35
 
36
36
  DATABASE_SERVICE_NAME = (defined?(JRUBY_VERSION) ? "/" : "") +
37
- (ENV['DATABASE_SERVICE_NAME'] || DATABASE_NAME)
38
- DATABASE_HOST = ENV['DATABASE_HOST'] || 'localhost'
39
- DATABASE_PORT = (ENV['DATABASE_PORT'] || 1521).to_i
37
+ (ENV["DATABASE_SERVICE_NAME"] || DATABASE_NAME)
38
+ DATABASE_HOST = ENV["DATABASE_HOST"] || "localhost"
39
+ DATABASE_PORT = (ENV["DATABASE_PORT"] || 1521).to_i
40
40
  DATABASE_USERS_AND_PASSWORDS = [
41
- [ENV['DATABASE_USER'] || 'hr', ENV['DATABASE_PASSWORD'] || 'hr'],
42
- [ENV['DATABASE_USER2'] || 'arunit', ENV['DATABASE_PASSWORD2'] || 'arunit']
41
+ [ENV["DATABASE_USER"] || "hr", ENV["DATABASE_PASSWORD"] || "hr"],
42
+ [ENV["DATABASE_USER2"] || "arunit", ENV["DATABASE_PASSWORD2"] || "arunit"]
43
43
  ]
44
44
  # specify which database version is used (will be verified in one test)
45
- DATABASE_VERSION = ENV['DATABASE_VERSION'] || '10.2.0.4'
45
+ DATABASE_VERSION = ENV["DATABASE_VERSION"] || "10.2.0.4"
46
46
 
47
- if ENV['USE_VM_DATABASE'] == 'Y'
47
+ if ENV["USE_VM_DATABASE"] == "Y"
48
48
  RSpec.configure do |config|
49
49
  config.before(:suite) do
50
50
  TestDb.build
@@ -58,13 +58,21 @@ if ENV['USE_VM_DATABASE'] == 'Y'
58
58
  end
59
59
  end
60
60
 
61
+ def oracle_error_class
62
+ unless defined?(JRUBY_VERSION)
63
+ OCIError
64
+ else
65
+ java.sql.SQLException
66
+ end
67
+ end
68
+
61
69
  def get_eazy_connect_url(svc_separator = "")
62
70
  "#{DATABASE_HOST}:#{DATABASE_PORT}#{svc_separator}#{DATABASE_SERVICE_NAME}"
63
71
  end
64
72
 
65
73
  def get_connection_url
66
74
  unless defined?(JRUBY_VERSION)
67
- (ENV['DATABASE_USE_TNS'] == 'NO') ? get_eazy_connect_url("/") : DATABASE_NAME
75
+ (ENV["DATABASE_USE_TNS"] == "NO") ? get_eazy_connect_url("/") : DATABASE_NAME
68
76
  else
69
77
  "jdbc:oracle:thin:@#{get_eazy_connect_url}"
70
78
  end
@@ -77,7 +85,7 @@ def get_connection(user_number = 0)
77
85
  OCI8.new(database_user, database_password, get_connection_url)
78
86
  end
79
87
  else
80
- try_to_connect(NativeException) do
88
+ try_to_connect(Java::JavaSql::SQLException) do
81
89
  java.sql.DriverManager.getConnection(get_connection_url, database_user, database_password)
82
90
  end
83
91
  end
@@ -94,25 +102,20 @@ def try_to_connect(exception)
94
102
  end
95
103
 
96
104
  CONNECTION_PARAMS = {
97
- :adapter => "oracle_enhanced",
98
- :database => DATABASE_SERVICE_NAME,
99
- :host => DATABASE_HOST,
100
- :port => DATABASE_PORT,
101
- :username => DATABASE_USERS_AND_PASSWORDS[0][0],
102
- :password => DATABASE_USERS_AND_PASSWORDS[0][1]
105
+ adapter: "oracle_enhanced",
106
+ database: DATABASE_SERVICE_NAME,
107
+ host: DATABASE_HOST,
108
+ port: DATABASE_PORT,
109
+ username: DATABASE_USERS_AND_PASSWORDS[0][0],
110
+ password: DATABASE_USERS_AND_PASSWORDS[0][1]
103
111
  }
104
112
 
105
113
  class Hash
106
114
  def except(*blacklist)
107
- self.reject {|key, value| blacklist.include?(key) }
115
+ self.reject { |key, value| blacklist.include?(key) }
108
116
  end unless method_defined?(:except)
109
117
 
110
118
  def only(*whitelist)
111
- self.reject {|key, value| !whitelist.include?(key) }
119
+ self.reject { |key, value| !whitelist.include?(key) }
112
120
  end unless method_defined?(:only)
113
121
  end
114
-
115
- # set default time zone in TZ environment variable
116
- # which will be used to set session time zone
117
- ENV['TZ'] ||= 'Europe/Riga'
118
- # ENV['TZ'] ||= 'UTC'
@@ -0,0 +1,2 @@
1
+ create user arunit identified by arunit;
2
+ grant create session to arunit;
@@ -0,0 +1,14 @@
1
+ # Template file should be copied to locale_support.rb to be automatically included by code
2
+ #
3
+
4
+ # Set Oracle Database session timezone, if not already set in env variable
5
+ # This setting needs to be in place to make sure that Oracle properly represents the timestamp format on your local machine.
6
+ # Do not use 'OS_TZ' value or fixed offset values like '05:00', for daylight saving-enabled timezones.
7
+ # See: http://docs.oracle.com/cd/E18283_01/server.112/e10729/ch4datetime.htm#CBBEEAFB
8
+ # The setting cannot be derived directly from operating system or ruby, as different timezone names are used.
9
+ ENV['ORA_SDTZ'] ||= 'Europe/Riga'
10
+ #Sets the Ruby timezone to be used, if not already set in env variable
11
+ ENV['TZ'] ||= 'Europe/Riga'
12
+ #Sets the Language, locale and encoding settings to be used by Oracle session, if not already set in env variable
13
+ ENV['NLS_LANG'] ||= 'AMERICAN_AMERICA.AL32UTF8'
14
+
@@ -1,5 +1,4 @@
1
1
  class TestDb
2
-
3
2
  DATABASE_USERS = %w{hr arunit}
4
3
 
5
4
  def self.build
@@ -11,8 +10,8 @@ class TestDb
11
10
  end
12
11
 
13
12
  def self.database_version
14
- db = self.new
15
- db.database_version
13
+ db = self.new
14
+ db.database_version
16
15
  end
17
16
 
18
17
  def connection
@@ -21,15 +20,15 @@ class TestDb
21
20
  Timeout::timeout(5) {
22
21
  if defined?(JRUBY_VERSION)
23
22
  @connection = java.sql.DriverManager.get_connection(
24
- 'jdbc:oracle:thin:@127.0.0.1:1521/XE',
25
- 'system',
26
- 'oracle'
27
- );
23
+ "jdbc:oracle:thin:@127.0.0.1:1521/XE",
24
+ "system",
25
+ "oracle"
26
+ )
28
27
  else
29
28
  @connection = OCI8.new(
30
- 'system',
31
- 'oracle',
32
- '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE)))'
29
+ "system",
30
+ "oracle",
31
+ "(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE)))"
33
32
  )
34
33
  end
35
34
  }
@@ -61,7 +60,7 @@ class TestDb
61
60
  end
62
61
 
63
62
  def database_users
64
- DATABASE_USERS.inject([]){|array, user| array << [user.upcase, user]}
63
+ DATABASE_USERS.inject([]) { |array, user| array << [user.upcase, user] }
65
64
  end
66
65
 
67
66
  def cleanup_database_users
@@ -118,14 +117,14 @@ class TestDb
118
117
  end
119
118
 
120
119
  def database_version
121
- query = 'SELECT version FROM V$INSTANCE'
120
+ query = "SELECT version FROM V$INSTANCE"
122
121
 
123
122
  if defined?(JRUBY_VERSION)
124
123
  statement = connection.create_statement
125
124
  resource = statement.execute_query(query)
126
125
 
127
126
  resource.next
128
- value = resource.get_string('VERSION')
127
+ value = resource.get_string("VERSION")
129
128
 
130
129
  resource.close
131
130
  statement.close
@@ -0,0 +1,2 @@
1
+ alter user hr identified by hr account unlock;
2
+ grant execute on dbms_lock to hr;
metadata CHANGED
@@ -1,83 +1,141 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-plsql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
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: 2015-05-07 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
- name: jeweler
14
+ name: juwelier
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.0.1
19
+ version: '2.0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 2.0.1
26
+ version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rspec
28
+ name: rspec_junit_formatter
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '3.1'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '3.1'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: activerecord
42
+ name: rubocop
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "<"
45
+ - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: 4.3.0
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:
48
59
  - - ">="
49
60
  - !ruby/object:Gem::Version
50
- version: 3.2.3
61
+ version: '0'
51
62
  type: :development
52
63
  prerelease: false
53
64
  version_requirements: !ruby/object:Gem::Requirement
54
65
  requirements:
55
- - - "<"
66
+ - - ">="
56
67
  - !ruby/object:Gem::Version
57
- version: 4.3.0
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:
58
80
  - - ">="
59
81
  - !ruby/object:Gem::Version
60
- version: 3.2.3
82
+ version: '0'
61
83
  - !ruby/object:Gem::Dependency
62
- name: activerecord-oracle_enhanced-adapter
84
+ name: rake
63
85
  requirement: !ruby/object:Gem::Requirement
64
86
  requirements:
65
- - - "<"
87
+ - - ">="
66
88
  - !ruby/object:Gem::Version
67
- version: 1.6.0
89
+ version: '10.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
68
94
  - - ">="
69
95
  - !ruby/object:Gem::Version
70
- version: 1.4.1
96
+ version: '10.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3.1'
71
104
  type: :development
72
105
  prerelease: false
73
106
  version_requirements: !ruby/object:Gem::Requirement
74
107
  requirements:
75
- - - "<"
108
+ - - "~>"
76
109
  - !ruby/object:Gem::Version
77
- version: 1.6.0
78
- - - ">="
110
+ version: '3.1'
111
+ - !ruby/object:Gem::Dependency
112
+ name: activerecord
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '5.0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '5.0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: activerecord-oracle_enhanced-adapter
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '1.7'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
79
137
  - !ruby/object:Gem::Version
80
- version: 1.4.1
138
+ version: '1.7'
81
139
  - !ruby/object:Gem::Dependency
82
140
  name: simplecov
83
141
  requirement: !ruby/object:Gem::Requirement
@@ -98,24 +156,32 @@ dependencies:
98
156
  requirements:
99
157
  - - "~>"
100
158
  - !ruby/object:Gem::Version
101
- version: 2.1.2
159
+ version: '2.1'
102
160
  type: :development
103
161
  prerelease: false
104
162
  version_requirements: !ruby/object:Gem::Requirement
105
163
  requirements:
106
164
  - - "~>"
107
165
  - !ruby/object:Gem::Version
108
- version: 2.1.2
109
- description: |
110
- ruby-plsql gem provides simple Ruby API for calling Oracle PL/SQL procedures.
111
- It could be used both for accessing Oracle PL/SQL API procedures in legacy applications
112
- as well as it could be used to create PL/SQL unit tests using Ruby testing libraries.
166
+ version: '2.1'
167
+ description: |2
168
+ ruby-plsql gem provides simple Ruby API for calling Oracle PL/SQL procedures.
169
+ It could be used both for accessing Oracle PL/SQL API procedures in legacy applications
170
+ as well as it could be used to create PL/SQL unit tests using Ruby testing libraries.
113
171
  email: raimonds.simanovskis@gmail.com
114
172
  executables: []
115
173
  extensions: []
116
174
  extra_rdoc_files:
117
175
  - README.md
118
176
  files:
177
+ - ".github/stale.yml"
178
+ - ".github/workflows/rubocop.yml"
179
+ - ".github/workflows/test.yml"
180
+ - ".rubocop.yml"
181
+ - ".travis.yml"
182
+ - ".travis/oracle/download.sh"
183
+ - ".travis/oracle/install.sh"
184
+ - ".travis/setup_accounts.sh"
119
185
  - Gemfile
120
186
  - History.txt
121
187
  - License.txt
@@ -123,6 +189,14 @@ files:
123
189
  - Rakefile
124
190
  - VERSION
125
191
  - Vagrantfile
192
+ - ci/network/admin/tnsnames.ora
193
+ - ci/setup_accounts.sh
194
+ - gemfiles/Gemfile.activerecord-5.0
195
+ - gemfiles/Gemfile.activerecord-5.1
196
+ - gemfiles/Gemfile.activerecord-5.2
197
+ - gemfiles/Gemfile.activerecord-6.0
198
+ - gemfiles/Gemfile.activerecord-6.1
199
+ - gemfiles/Gemfile.activerecord-main
126
200
  - lib/plsql/connection.rb
127
201
  - lib/plsql/helpers.rb
128
202
  - lib/plsql/jdbc_connection.rb
@@ -155,10 +229,14 @@ files:
155
229
  - spec/plsql/view_spec.rb
156
230
  - spec/spec.opts
157
231
  - spec/spec_helper.rb
232
+ - spec/support/create_arunit_user.sql
233
+ - spec/support/custom_config.rb.sample
158
234
  - spec/support/file_check_script.sh
159
235
  - spec/support/test_db.rb
236
+ - spec/support/unlock_and_setup_hr_user.sql
160
237
  homepage: http://github.com/rsim/ruby-plsql
161
- licenses: []
238
+ licenses:
239
+ - MIT
162
240
  metadata: {}
163
241
  post_install_message:
164
242
  rdoc_options: []
@@ -175,8 +253,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
175
253
  - !ruby/object:Gem::Version
176
254
  version: '0'
177
255
  requirements: []
178
- rubyforge_project:
179
- rubygems_version: 2.4.6
256
+ rubygems_version: 3.2.22
180
257
  signing_key:
181
258
  specification_version: 4
182
259
  summary: Ruby API for calling Oracle PL/SQL procedures.