db_meta 0.6.2 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3974d1aa49030e05e6cecea974839d1c4bf4db427b14a54eaebaf3a1df005430
4
- data.tar.gz: 3a0ad946e5d8ef48a1fbde4cfa858f0fc6d8e4f2fc064cf05e68a9cb065939d2
3
+ metadata.gz: 50da1c6c39b57c147425e4983c1a43f3c7eb1e3273ad2ea7d1357e3b86092612
4
+ data.tar.gz: b809cad32b8316b442ccfa6ed0dfa4d56c862ed8fced2f56a19c2e2ec7befa11
5
5
  SHA512:
6
- metadata.gz: eabe5000a8906b427aa55bb96c46ddd390bebcd7344ff56f38cbdd7a5fa6f5a5cb419c9dad85a985e7b18315020502f47f3202f36ab308013b812a0d9161e1f2
7
- data.tar.gz: ea8a858a59c2957343f4154e2de9a94198c48445c0d3cc3aef96e0716ec138852160bcbc2a276e53dacd0e78d2d770d0154a6e3b99331434409d54caeba27295
6
+ metadata.gz: 99f55bbd8d9454b0e259273a750af9a945c3a19c3a8c874d09aabfe6e5a2367e1e67f74ac33ce7b09db08aa745a022bfb67a0a88c2b6dc90376c9d35f4f8039f
7
+ data.tar.gz: f904eba74c746851cb576bd71df26265e245d7128debccc3a199bb6371abbd996a4e0c1508b8760d07eaf8fa79afc92c487e99ae448e6280bf2ea33b9caeeb62
@@ -0,0 +1,9 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "bundler"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
7
+ day: "saturday"
8
+ time: "04:00"
9
+ timezone: "Europe/Zurich"
@@ -0,0 +1,46 @@
1
+ name: cd
2
+
3
+ on:
4
+ workflow_dispatch:
5
+
6
+ jobs:
7
+
8
+ build:
9
+ runs-on: ubuntu-latest
10
+ env:
11
+ ORACLE_HOME: /opt/instantclient_21_7
12
+ LD_LIBRARY_PATH: /opt/instantclient_21_7
13
+ OCI_DIR: /opt/instantclient_21_7
14
+ NLS_LANG: AMERICAN_AMERICA.AL32UTF8
15
+
16
+ steps:
17
+ - name: Checkout current code
18
+ uses: actions/checkout@v3
19
+
20
+ - name: Install Oracle instant client
21
+ run: |
22
+ mkdir -p /opt && cd /opt
23
+ curl https://download.oracle.com/otn_software/linux/instantclient/217000/instantclient-basic-linux.x64-21.7.0.0.0dbru.zip --output instantclient.zip
24
+ curl https://download.oracle.com/otn_software/linux/instantclient/217000/instantclient-sdk-linux.x64-21.7.0.0.0dbru.zip --output instantclient_sdk.zip
25
+ unzip instantclient.zip
26
+ unzip instantclient_sdk.zip
27
+
28
+ - name: Set up Ruby
29
+ uses: ruby/setup-ruby@v1
30
+ with:
31
+ ruby-version: '3.1'
32
+ bundler: latest
33
+ bundler-cache: true
34
+ cache-version: 1
35
+
36
+ - name: Push to Rubygems
37
+ env:
38
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
39
+ run: |
40
+ git config --global user.email "thomas.steiner@ikey.ch"
41
+ git config --global user.name "thomis"
42
+ mkdir ~/.gem
43
+ echo -e "---\n:rubygems_api_key: ${{ secrets.RUBYGEMS_API_KEY }}" > ~/.gem/credentials
44
+ chmod 600 ~/.gem/credentials
45
+ bundle exec rake release
46
+ rm ~/.gem/credentials
@@ -0,0 +1,65 @@
1
+ name: ci
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - "*"
7
+
8
+ pull_request:
9
+ branches:
10
+ - "*"
11
+
12
+ schedule:
13
+ - cron: 0 2 * * 1,3,5,6
14
+
15
+ # Allows you to run this workflow manually from the Actions tab
16
+ workflow_dispatch:
17
+
18
+ jobs:
19
+ build:
20
+ runs-on: ubuntu-latest
21
+ env:
22
+ CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
23
+ ORACLE_HOME: /opt/instantclient_21_7
24
+ LD_LIBRARY_PATH: /opt/instantclient_21_7
25
+ OCI_DIR: /opt/instantclient_21_7
26
+ NLS_LANG: AMERICAN_AMERICA.AL32UTF8
27
+
28
+ strategy:
29
+ fail-fast: false
30
+ matrix:
31
+ ruby: [ '3.2', '3.1', '3.0', '2.7', '2.6']
32
+
33
+ name: Ruby ${{ matrix.ruby }}
34
+ steps:
35
+ - uses: actions/checkout@v3
36
+
37
+ - name: Install Oracle instant client
38
+ run: |
39
+ mkdir -p /opt && cd /opt
40
+ curl https://download.oracle.com/otn_software/linux/instantclient/217000/instantclient-basic-linux.x64-21.7.0.0.0dbru.zip --output instantclient.zip
41
+ curl https://download.oracle.com/otn_software/linux/instantclient/217000/instantclient-sdk-linux.x64-21.7.0.0.0dbru.zip --output instantclient_sdk.zip
42
+ unzip instantclient.zip
43
+ unzip instantclient_sdk.zip
44
+
45
+ - name: Set up Ruby
46
+ uses: ruby/setup-ruby@v1
47
+ with:
48
+ ruby-version: ${{ matrix.ruby }}
49
+ bundler: latest
50
+ bundler-cache: true
51
+ cache-version: 3
52
+
53
+ - name: Code Climate setup test reporter
54
+ run: |
55
+ curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
56
+ chmod +x ./cc-test-reporter
57
+ ./cc-test-reporter before-build
58
+
59
+ - name: Run default task
60
+ run: |
61
+ bundle exec rake
62
+
63
+ - name: Code Climate publish test coverage
64
+ run: |
65
+ ./cc-test-reporter after-build
data/CHANGELOG.md CHANGED
@@ -1,8 +1,28 @@
1
+ ## [0.7.0] - 2022-11-20
2
+
3
+ ### Added
4
+ - Use GitHub actions
5
+ - Use Ruby style guide and linter
6
+ - Use Dependabot to keep dependencies up to date
7
+ - Use test coverage
8
+ - Have more rspec tests
9
+ - Update dependencies
10
+
11
+ ### Changed
12
+ - Remove travis integration
13
+ - Update depenencies
14
+ - Fix rspec tests
15
+
1
16
  ## [0.6.2] - 2021-06-29
2
17
 
3
18
  ### Changed
4
19
  - Fix check when column.comment is nil
5
20
 
21
+ ## [0.6.2] - 2021-07-21
22
+
23
+ ### Changed
24
+ - Update ruby versions to test
25
+
6
26
  ## [0.6.1] - 2021-05-01
7
27
 
8
28
  ### Changed
data/Gemfile.lock CHANGED
@@ -1,67 +1,75 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- db_meta (0.6.2)
4
+ db_meta (0.7.0)
5
5
  ruby-oci8 (~> 2.2)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
10
  ast (2.4.2)
11
- diff-lcs (1.4.4)
12
- parallel (1.20.1)
13
- parser (3.0.1.0)
11
+ diff-lcs (1.5.0)
12
+ docile (1.4.0)
13
+ json (2.6.2)
14
+ parallel (1.22.1)
15
+ parser (3.1.2.1)
14
16
  ast (~> 2.4.1)
15
- rainbow (3.0.0)
16
- rake (13.0.3)
17
- regexp_parser (2.1.1)
17
+ rainbow (3.1.1)
18
+ rake (13.0.6)
19
+ regexp_parser (2.6.1)
18
20
  rexml (3.2.5)
19
- rspec (3.10.0)
20
- rspec-core (~> 3.10.0)
21
- rspec-expectations (~> 3.10.0)
22
- rspec-mocks (~> 3.10.0)
23
- rspec-core (3.10.1)
24
- rspec-support (~> 3.10.0)
25
- rspec-expectations (3.10.1)
21
+ rspec (3.12.0)
22
+ rspec-core (~> 3.12.0)
23
+ rspec-expectations (~> 3.12.0)
24
+ rspec-mocks (~> 3.12.0)
25
+ rspec-core (3.12.0)
26
+ rspec-support (~> 3.12.0)
27
+ rspec-expectations (3.12.0)
26
28
  diff-lcs (>= 1.2.0, < 2.0)
27
- rspec-support (~> 3.10.0)
28
- rspec-mocks (3.10.2)
29
+ rspec-support (~> 3.12.0)
30
+ rspec-mocks (3.12.0)
29
31
  diff-lcs (>= 1.2.0, < 2.0)
30
- rspec-support (~> 3.10.0)
31
- rspec-support (3.10.2)
32
- rubocop (1.12.1)
32
+ rspec-support (~> 3.12.0)
33
+ rspec-support (3.12.0)
34
+ rubocop (1.39.0)
35
+ json (~> 2.3)
33
36
  parallel (~> 1.10)
34
- parser (>= 3.0.0.0)
37
+ parser (>= 3.1.2.1)
35
38
  rainbow (>= 2.2.2, < 4.0)
36
39
  regexp_parser (>= 1.8, < 3.0)
37
- rexml
38
- rubocop-ast (>= 1.2.0, < 2.0)
40
+ rexml (>= 3.2.5, < 4.0)
41
+ rubocop-ast (>= 1.23.0, < 2.0)
39
42
  ruby-progressbar (~> 1.7)
40
43
  unicode-display_width (>= 1.4.0, < 3.0)
41
- rubocop-ast (1.4.1)
42
- parser (>= 2.7.1.5)
43
- rubocop-performance (1.10.1)
44
- rubocop (>= 0.90.0, < 2.0)
44
+ rubocop-ast (1.23.0)
45
+ parser (>= 3.1.1.0)
46
+ rubocop-performance (1.15.0)
47
+ rubocop (>= 1.7.0, < 2.0)
45
48
  rubocop-ast (>= 0.4.0)
46
- ruby-oci8 (2.2.9)
49
+ ruby-oci8 (2.2.11)
47
50
  ruby-progressbar (1.11.0)
48
- standard (1.0.5)
49
- rubocop (= 1.12.1)
50
- rubocop-performance (= 1.10.1)
51
- standardrb (1.0.0)
52
- standard
53
- unicode-display_width (2.0.0)
51
+ simplecov (0.21.2)
52
+ docile (~> 1.1)
53
+ simplecov-html (~> 0.11)
54
+ simplecov_json_formatter (~> 0.1)
55
+ simplecov-html (0.12.3)
56
+ simplecov_json_formatter (0.1.4)
57
+ standard (1.18.0)
58
+ rubocop (= 1.39.0)
59
+ rubocop-performance (= 1.15.0)
60
+ unicode-display_width (2.3.0)
54
61
 
55
62
  PLATFORMS
56
63
  ruby
57
64
  x86_64-darwin-18
58
65
 
59
66
  DEPENDENCIES
60
- bundler (~> 2.1)
67
+ bundler (~> 2.3)
61
68
  db_meta!
62
69
  rake (~> 13.0)
63
- rspec (~> 3.10)
64
- standardrb (~> 1.0)
70
+ rspec (~> 3.12)
71
+ simplecov (~> 0.21)
72
+ standard (~> 1.18)
65
73
 
66
74
  BUNDLED WITH
67
- 2.2.18
75
+ 2.3.19
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/db_meta.svg)](https://badge.fury.io/rb/db_meta)
2
- [![Build Status](https://travis-ci.org/thomis/db_meta.svg?branch=master)](https://travis-ci.org/thomis/db_meta)
2
+ [![Maintainability](https://api.codeclimate.com/v1/badges/ffd17b164da909c5c172/maintainability)](https://codeclimate.com/github/thomis/db_meta/maintainability)
3
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/ffd17b164da909c5c172/test_coverage)](https://codeclimate.com/github/thomis/db_meta/test_coverage)
4
+ [![ci](https://github.com/thomis/db_meta/actions/workflows/ci.yml/badge.svg)](https://github.com/thomis/db_meta/actions/workflows/ci.yml)
3
5
 
4
6
  # Welcome to db_meta
5
7
  Database meta and core data extraction.
@@ -44,6 +46,15 @@ meta.extract
44
46
  - Function based Indexes
45
47
  - more to come...
46
48
 
49
+ ## Supported Ruby Versions
50
+
51
+ Currently supported and tested ruby versions are:
52
+
53
+ - 3.1
54
+ - 3.0
55
+ - 2.7
56
+ - 2.6 (EOL 31 Mar 2022)
57
+
47
58
  ## Planned Features
48
59
  - Storage and tablespace clause
49
60
 
data/Rakefile CHANGED
@@ -2,6 +2,7 @@ require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
3
  require "standard/rake"
4
4
 
5
- RSpec::Core::RakeTask.new(:spec)
5
+ t = RSpec::Core::RakeTask.new(:spec)
6
+ t.verbose = false
6
7
 
7
8
  task default: [:spec, :standard]
data/db_meta.gemspec CHANGED
@@ -18,10 +18,11 @@ Gem::Specification.new do |spec|
18
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_development_dependency "bundler", "~> 2.1"
21
+ spec.add_development_dependency "bundler", "~> 2.3"
22
22
  spec.add_development_dependency "rake", "~> 13.0"
23
- spec.add_development_dependency "rspec", "~> 3.10"
24
- spec.add_development_dependency "standardrb", "~> 1.0"
23
+ spec.add_development_dependency "rspec", "~> 3.12"
24
+ spec.add_development_dependency "standard", "~> 1.18"
25
+ spec.add_development_dependency "simplecov", "~> 0.21"
25
26
 
26
27
  spec.add_dependency "ruby-oci8", "~> 2.2"
27
28
  end
@@ -31,7 +31,7 @@ module DbMeta
31
31
 
32
32
  @extract_type = :default # :default, :embedded, :merged
33
33
 
34
- @system_object = @name =~ /\$/i # true if there is a '$' in the object name
34
+ @system_object = /\$/i.match?(@name) # true if there is a '$' in the object name
35
35
  end
36
36
 
37
37
  def fetch
@@ -12,9 +12,7 @@ module DbMeta
12
12
 
13
13
  def write_buffer_to_file(buffer, file)
14
14
  buffer = buffer.join("\n") if buffer.is_a?(Array)
15
- File.open(file.downcase.tr(" ", "_"), "w") do |output|
16
- output.write(buffer)
17
- end
15
+ File.write(file.downcase.tr(" ", "_"), buffer)
18
16
  end
19
17
 
20
18
  def remove_folder(folder)
@@ -3,9 +3,6 @@ module DbMeta
3
3
  class Column
4
4
  attr_accessor :name, :type, :data_length, :data_precision, :data_scale, :nullable, :data_default, :comment
5
5
 
6
- def initialize(args = {})
7
- end
8
-
9
6
  def extract
10
7
  buffer = ("%-30s" % @name).to_s
11
8
  buffer << " #{convert_type}"
@@ -47,20 +44,20 @@ module DbMeta
47
44
 
48
45
  def convert_type
49
46
  case @type
50
- when "FLOAT"
51
- buffer = @type.to_s
52
- buffer << "(#{@data_precision})" unless @data_precision == 0
53
- buffer
54
- when "NUMBER"
55
- buffer = @type.to_s
56
- buffer << "(#{@data_precision}" unless @data_precision == 0
57
- buffer << ",#{@data_scale}" unless @data_scale == 0
58
- buffer << ")" if buffer.include?("(")
59
- buffer
60
- when /CHAR|RAW/
61
- "#{@type}(#{@data_length} BYTE)"
62
- else
63
- @type
47
+ when "FLOAT"
48
+ buffer = @type.to_s
49
+ buffer << "(#{@data_precision})" unless @data_precision == 0
50
+ buffer
51
+ when "NUMBER"
52
+ buffer = @type.to_s
53
+ buffer << "(#{@data_precision}" unless @data_precision == 0
54
+ buffer << ",#{@data_scale}" unless @data_scale == 0
55
+ buffer << ")" if buffer.include?("(")
56
+ buffer
57
+ when /CHAR|RAW/
58
+ "#{@type}(#{@data_length} BYTE)"
59
+ else
60
+ @type
64
61
  end
65
62
  end
66
63
  end
@@ -46,13 +46,13 @@ module DbMeta
46
46
  buffer << " CONSTRAINT #{@name}"
47
47
 
48
48
  case @constraint_type
49
- when "CHECK"
50
- buffer << " #{@constraint_type} (#{@search_condition})"
51
- when "FOREIGN KEY"
52
- buffer << " #{@constraint_type} (#{@columns.join(", ")})"
53
- buffer << " REFERENCES #{@referential_constraint.table_name} (#{@referential_constraint.columns.join(", ")})"
54
- else
55
- buffer << " #{@constraint_type} (#{@columns.join(", ")})"
49
+ when "CHECK"
50
+ buffer << " #{@constraint_type} (#{@search_condition})"
51
+ when "FOREIGN KEY"
52
+ buffer << " #{@constraint_type} (#{@columns.join(", ")})"
53
+ buffer << " REFERENCES #{@referential_constraint.table_name} (#{@referential_constraint.columns.join(", ")})"
54
+ else
55
+ buffer << " #{@constraint_type} (#{@columns.join(", ")})"
56
56
  end
57
57
 
58
58
  buffer << " ON DELETE CASCADE" if @delete_rule == "CASCADE"
@@ -73,14 +73,14 @@ module DbMeta
73
73
 
74
74
  def translate_constraint_type(type)
75
75
  case type
76
- when "P"
77
- "PRIMARY KEY"
78
- when "U"
79
- "UNIQUE"
80
- when "C"
81
- "CHECK"
82
- when "R"
83
- "FOREIGN KEY"
76
+ when "P"
77
+ "PRIMARY KEY"
78
+ when "U"
79
+ "UNIQUE"
80
+ when "C"
81
+ "CHECK"
82
+ when "R"
83
+ "FOREIGN KEY"
84
84
  end
85
85
  end
86
86
  end
@@ -6,7 +6,8 @@ module DbMeta
6
6
  attr_reader :username, :password, :host
7
7
 
8
8
  def fetch(args = {})
9
- connection = Connection.instance.get
9
+ connection_class = args[:connection_class] || Connection
10
+ connection = connection_class.instance.get
10
11
  cursor = connection.exec("select username, password, host from user_db_links where db_link = '#{@name}'")
11
12
  while (row = cursor.fetch)
12
13
  @username = row[0].to_s
@@ -5,9 +5,10 @@ module DbMeta
5
5
 
6
6
  attr_reader :source
7
7
 
8
- def fetch
8
+ def fetch(args = {})
9
9
  @source = ""
10
- connection = Connection.instance.get
10
+ connection_class = args[:connection_class] || Connection
11
+ connection = connection_class.instance.get
11
12
  cursor = connection.exec("select text from user_source where type = 'FUNCTION' and name = '#{@name}' order by line")
12
13
  while (row = cursor.fetch)
13
14
  @source << row[0].to_s
@@ -11,8 +11,10 @@ module DbMeta
11
11
  end
12
12
 
13
13
  def fetch(args = {})
14
+ connection_class = args[:connection_class] || Connection
14
15
  # definition is comma seperated in the name to prevent re-fetching table for every grant
15
16
  @grantee, @owner, @table_name, @grantor, @privilege, @grantable = @name.split(",")
17
+ @external_grant = @grantor != connection_class.instance.username.upcase
16
18
  end
17
19
 
18
20
  def extract(args = {})
@@ -33,7 +35,7 @@ module DbMeta
33
35
  end
34
36
 
35
37
  def external_grant?
36
- @grantee == Connection.instance.username.upcase
38
+ @external_grant
37
39
  end
38
40
 
39
41
  def sort_value
@@ -13,7 +13,8 @@ module DbMeta
13
13
  end
14
14
 
15
15
  def fetch(args = {})
16
- connection = Connection.instance.get
16
+ connection_class = args[:connection_class] || Connection
17
+ connection = connection_class.instance.get
17
18
  cursor = connection.exec("select index_type, table_name, uniqueness, tablespace_name from user_indexes where index_name = '#{@name}'")
18
19
  while (row = cursor.fetch)
19
20
  @index_type = row[0].to_s
@@ -42,7 +43,7 @@ module DbMeta
42
43
  end
43
44
 
44
45
  def extract(args = {})
45
- "CREATE#{@uniqueness == "UNIQUE" ? " UNIQUE" : nil} INDEX #{@name} ON #{@table_name}(#{@columns.join(", ")});"
46
+ "CREATE#{(@uniqueness == "UNIQUE") ? " UNIQUE" : nil} INDEX #{@name} ON #{@table_name}(#{@columns.join(", ")});"
46
47
  end
47
48
  end
48
49
  end
@@ -14,7 +14,7 @@ module DbMeta
14
14
  @build_mode = item["BUILD_MODE"]
15
15
  @refresh_mode = item["REFRESH_MODE"]
16
16
  @refresh_method = item["REFRESH_METHOD"]
17
- @rewrite_enabled = item["REWRITE_ENABLED"] == "Y" ? "ENABLE" : "DISABLE"
17
+ @rewrite_enabled = (item["REWRITE_ENABLED"] == "Y") ? "ENABLE" : "DISABLE"
18
18
  end
19
19
  cursor.close
20
20
 
@@ -5,9 +5,10 @@ module DbMeta
5
5
 
6
6
  attr_reader :source
7
7
 
8
- def fetch
8
+ def fetch(args = {})
9
9
  @source = ""
10
- connection = Connection.instance.get
10
+ connection_class = args[:connection_class] || Connection
11
+ connection = connection_class.instance.get
11
12
  cursor = connection.exec("select text from user_source where type = 'PROCEDURE' and name = '#{@name}' order by line")
12
13
  while (row = cursor.fetch)
13
14
  @source << row[0].to_s
@@ -5,8 +5,9 @@ module DbMeta
5
5
 
6
6
  attr_reader :min_value, :max_value, :increment_by, :cycle_flag, :order_flag, :cache_size, :last_number
7
7
 
8
- def fetch
9
- connection = Connection.instance.get
8
+ def fetch(args = {})
9
+ connection_class = args[:connection_class] || Connection
10
+ connection = connection_class.instance.get
10
11
  cursor = connection.exec("select to_char(min_value), to_char(max_value), to_char(increment_by), cycle_flag, order_flag, to_char(cache_size), to_char(last_number) from user_sequences where sequence_name = '#{@name}'")
11
12
  while (row = cursor.fetch)
12
13
  @min_value = row[0].to_i
@@ -28,9 +29,9 @@ module DbMeta
28
29
  buffer << " START WITH #{@last_number}"
29
30
  buffer << " MAXVALUE #{@max_value}"
30
31
  buffer << " MINVALUE #{@min_value}"
31
- buffer << (@cycle_flag == "N" ? " NOCYCLE" : " CYCLE")
32
- buffer << (@cache_size == 0 ? " NOCACHE" : " CACHE #{@cache_size}")
33
- buffer << (@order_flag == "N" ? " NOORDER" : " ORDER")
32
+ buffer << ((@cycle_flag == "N") ? " NOCYCLE" : " CYCLE")
33
+ buffer << ((@cache_size == 0) ? " NOCACHE" : " CACHE #{@cache_size}")
34
+ buffer << ((@order_flag == "N") ? " NOORDER" : " ORDER")
34
35
  buffer << ";"
35
36
  buffer << nil
36
37
  buffer.join("\n")
@@ -12,7 +12,8 @@ module DbMeta
12
12
  end
13
13
 
14
14
  def fetch(args = {})
15
- connection = Connection.instance.get
15
+ connection_class = args[:connection_class] || Connection
16
+ connection = connection_class.instance.get
16
17
  cursor = connection.exec("select table_owner, table_name, db_link from user_synonyms where synonym_name = '#{@name}'")
17
18
  while (row = cursor.fetch)
18
19
  @table_owner = row[0].to_s
@@ -30,8 +30,8 @@ module DbMeta
30
30
  connection = Connection.instance.get
31
31
  cursor = connection.exec("select temporary, cache, iot_type, duration from user_tables where table_name = '#{@name}'")
32
32
  while (row = cursor.fetch)
33
- @temporary = row[0].to_s.strip == "Y" ? "GLOBAL TEMPORARY" : nil
34
- @cache = row[1].to_s.strip == "Y" ? "CACHE" : "NOCACHE"
33
+ @temporary = (row[0].to_s.strip == "Y") ? "GLOBAL TEMPORARY" : nil
34
+ @cache = (row[1].to_s.strip == "Y") ? "CACHE" : "NOCACHE"
35
35
  @iot_type = row[2].to_s
36
36
  @duration = row[3].to_s
37
37
  end
@@ -130,12 +130,12 @@ module DbMeta
130
130
 
131
131
  def translate_duration
132
132
  case @duration
133
- when "SYS$TRANSACTION"
134
- "ON COMMIT DELETE ROWS"
135
- when "SYS$SESSION"
136
- "ON COMMIT PRESERVE ROWS"
137
- else
138
- "-- table duration definition [#{@duration}] is unknown and may need code adaptations"
133
+ when "SYS$TRANSACTION"
134
+ "ON COMMIT DELETE ROWS"
135
+ when "SYS$SESSION"
136
+ "ON COMMIT PRESERVE ROWS"
137
+ else
138
+ "-- table duration definition [#{@duration}] is unknown and may need code adaptations"
139
139
  end
140
140
  end
141
141
  end
@@ -68,23 +68,23 @@ module DbMeta
68
68
  end
69
69
 
70
70
  buffer << case name_type_map[key]
71
- when /varchar|char/i
72
- "'#{value.gsub("'", "''")}'"
73
- when /clob/i
74
- m = []
75
- d = value.read
76
- d.chars.each_slice(2000).map(&:join).each do |item|
77
- m << "to_clob('#{item.gsub("'", "''").gsub(";", "' || CHR(59) || '")}')"
78
- end
79
- m.join(" || ")
80
- when /date/i
81
- "to_date('#{value.strftime("%Y-%m-%d %H:%M:%S")}','YYYY-MM-DD HH24:MI:SS')"
82
- when /timestamp/i
83
- "to_timezone('#{value.strftime("%Y-%m-%d %H:%M:%S %Z")}','YYYY-MM-DD HH24:MI:SS.FF TZD')"
84
- when /raw/i
85
- "'#{value}'"
86
- else
87
- value.to_s
71
+ when /varchar|char/i
72
+ "'#{value.gsub("'", "''")}'"
73
+ when /clob/i
74
+ m = []
75
+ d = value.read
76
+ d.chars.each_slice(2000).map(&:join).each do |item|
77
+ m << "to_clob('#{item.gsub("'", "''").gsub(";", "' || CHR(59) || '")}')"
78
+ end
79
+ m.join(" || ")
80
+ when /date/i
81
+ "to_date('#{value.strftime("%Y-%m-%d %H:%M:%S")}','YYYY-MM-DD HH24:MI:SS')"
82
+ when /timestamp/i
83
+ "to_timezone('#{value.strftime("%Y-%m-%d %H:%M:%S %Z")}','YYYY-MM-DD HH24:MI:SS.FF TZD')"
84
+ when /raw/i
85
+ "'#{value}'"
86
+ else
87
+ value.to_s
88
88
  end
89
89
  end
90
90
 
@@ -11,8 +11,9 @@ module DbMeta
11
11
  @extract_type = :embedded
12
12
  end
13
13
 
14
- def fetch
15
- connection = Connection.instance.get
14
+ def fetch(args = {})
15
+ connection_class = args[:connection_class] || Connection
16
+ connection = connection_class.instance.get
16
17
  cursor = connection.exec("select trigger_type, triggering_event, table_name, referencing_names, description, trigger_body from user_triggers where trigger_name = '#{@name}'")
17
18
  while (row = cursor.fetch)
18
19
  @trigger_type = row[0].to_s
@@ -49,12 +50,12 @@ module DbMeta
49
50
  @for_each = "FOR EACH ROW" if /each row/i.match?(@trigger_type)
50
51
 
51
52
  case @trigger_type
52
- when /before/i
53
- @trigger_type = "BEFORE"
54
- when /after/i
55
- @trigger_type = "AFTER"
56
- when /instead of/i
57
- @for_each = "FOR EACH ROW"
53
+ when /before/i
54
+ @trigger_type = "BEFORE"
55
+ when /after/i
56
+ @trigger_type = "AFTER"
57
+ when /instead of/i
58
+ @for_each = "FOR EACH ROW"
58
59
  end
59
60
  end
60
61
  end
@@ -1,3 +1,3 @@
1
1
  module DbMeta
2
- VERSION = "0.6.2"
2
+ VERSION = "0.7.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: db_meta
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomi
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-06-29 00:00:00.000000000 Z
11
+ date: 2022-11-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.1'
19
+ version: '2.3'
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.1'
26
+ version: '2.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,28 +44,42 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.10'
47
+ version: '3.12'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '3.10'
54
+ version: '3.12'
55
55
  - !ruby/object:Gem::Dependency
56
- name: standardrb
56
+ name: standard
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '1.0'
61
+ version: '1.18'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '1.0'
68
+ version: '1.18'
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.21'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.21'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: ruby-oci8
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -87,13 +101,12 @@ executables: []
87
101
  extensions: []
88
102
  extra_rdoc_files: []
89
103
  files:
104
+ - ".github/dependabot.yml"
105
+ - ".github/workflows/cd.yml"
106
+ - ".github/workflows/ci.yml"
90
107
  - ".gitignore"
91
108
  - ".rspec"
92
109
  - ".ruby-version"
93
- - ".travis.yml"
94
- - ".travis/oracle/download.sh"
95
- - ".travis/oracle/install.sh"
96
- - ".travis/setup_accounts.sh"
97
110
  - CHANGELOG.md
98
111
  - Gemfile
99
112
  - Gemfile.lock
@@ -145,7 +158,7 @@ homepage: https://github.com/thomis/db_meta
145
158
  licenses:
146
159
  - Apache-2.0
147
160
  metadata: {}
148
- post_install_message:
161
+ post_install_message:
149
162
  rdoc_options: []
150
163
  require_paths:
151
164
  - lib
@@ -160,8 +173,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
160
173
  - !ruby/object:Gem::Version
161
174
  version: '0'
162
175
  requirements: []
163
- rubygems_version: 3.2.17
164
- signing_key:
176
+ rubygems_version: 3.3.7
177
+ signing_key:
165
178
  specification_version: 4
166
179
  summary: Database meta and core data extraction
167
180
  test_files: []
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env bash
2
-
3
- cd "$(dirname "$(readlink -f "$0")")"
4
-
5
- deb_file=oracle-xe_11.2.0-1.0_amd64.deb
6
-
7
- git clone https://github.com/wnameless/docker-oracle-xe-11g.git
8
-
9
- cd docker-oracle-xe-11g/assets &&
10
- cat "${deb_file}aa" "${deb_file}ab" "${deb_file}ac" > "${deb_file}"
11
-
12
- pwd
13
-
14
- ls -lAh "${deb_file}"
@@ -1,32 +0,0 @@
1
- #!/usr/bin/env bash
2
-
3
- [ -n "$ORACLE_FILE" ] || { echo "Missing ORACLE_FILE environment variable!"; exit 1; }
4
- [ -n "$ORACLE_HOME" ] || { echo "Missing ORACLE_HOME environment variable!"; exit 1; }
5
-
6
- cd "$(dirname "$(readlink -f "$0")")"
7
-
8
- ORACLE_DEB=docker-oracle-xe-11g/assets/oracle-xe_11.2.0-1.0_amd64.deb
9
-
10
- sudo apt-get -qq update
11
- sudo apt-get --no-install-recommends -qq install bc libaio1
12
-
13
- df -B1 /dev/shm | awk 'END { if ($1 != "shmfs" && $1 != "tmpfs" || $2 < 2147483648) exit 1 }' ||
14
- ( sudo rm -r /dev/shm && sudo mkdir /dev/shm && sudo mount -t tmpfs shmfs -o size=2G /dev/shm )
15
-
16
- test -f /sbin/chkconfig ||
17
- ( echo '#!/bin/sh' | sudo tee /sbin/chkconfig > /dev/null && sudo chmod u+x /sbin/chkconfig )
18
-
19
- test -d /var/lock/subsys || sudo mkdir /var/lock/subsys
20
-
21
- sudo dpkg -i "${ORACLE_DEB}"
22
-
23
- echo 'OS_AUTHENT_PREFIX=""' | sudo tee -a "$ORACLE_HOME/config/scripts/init.ora" > /dev/null
24
- echo 'disk_asynch_io=false' | sudo tee -a "$ORACLE_HOME/config/scripts/init.ora" > /dev/null
25
- sudo usermod -aG dba $USER
26
-
27
- ( echo ; echo ; echo travis ; echo travis ; echo n ) | sudo AWK='/usr/bin/awk' /etc/init.d/oracle-xe configure
28
-
29
- "$ORACLE_HOME/bin/sqlplus" -L -S / AS SYSDBA <<SQL
30
- CREATE USER $USER IDENTIFIED EXTERNALLY;
31
- GRANT CONNECT, RESOURCE TO $USER;
32
- SQL
@@ -1,8 +0,0 @@
1
- #!/bin/bash
2
-
3
- set -ev
4
-
5
- "$ORACLE_HOME/bin/sqlplus" -L -S / AS SYSDBA <<SQL
6
- @@spec/support/unlock_and_setup_hr_user.sql
7
- exit
8
- SQL
data/.travis.yml DELETED
@@ -1,35 +0,0 @@
1
- sudo: required
2
-
3
- env:
4
- global:
5
- - ORACLE_COOKIE=sqldev
6
- - ORACLE_FILE=oracle11g/xe/oracle-xe-11.2.0-1.0.x86_64.rpm.zip
7
- - ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe
8
- - NLS_LANG=AMERICAN_AMERICA.AL32UTF8
9
- - ORACLE_BASE=/u01/app/oracle
10
- - LD_LIBRARY_PATH=$ORACLE_HOME/lib
11
- - PATH=$PATH:$ORACLE_HOME/jdbc/lib
12
- - DATABASE_VERSION=11.2.0.2
13
- - ORACLE_SID=XE
14
- - DATABASE_NAME=XE
15
- - ORA_SDTZ='Europe/London' # Needed as a client parameter
16
- - TZ='Europe/London' # Needed as a DB Server parameter
17
-
18
- before_install:
19
- - chmod +x .travis/oracle/download.sh
20
- - chmod +x .travis/oracle/install.sh
21
- - chmod +x .travis/setup_accounts.sh
22
- - gem install bundler --version '~> 2.1.4'
23
-
24
- install:
25
- - .travis/oracle/download.sh
26
- - .travis/oracle/install.sh
27
- - .travis/setup_accounts.sh
28
- - bundle install
29
-
30
- language: ruby
31
- rvm:
32
- - 3.0.0
33
- - 2.7.2
34
- - 2.6.6
35
- - 2.5.8