ruby-plsql 0.5.3 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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.