db_meta 0.2.8 → 0.6.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 (49) hide show
  1. checksums.yaml +5 -5
  2. data/.ruby-version +1 -0
  3. data/.travis.yml +33 -10
  4. data/.travis/oracle/download.sh +14 -0
  5. data/.travis/oracle/install.sh +32 -0
  6. data/.travis/setup_accounts.sh +8 -0
  7. data/CHANGELOG.md +28 -0
  8. data/Gemfile +1 -1
  9. data/Gemfile.lock +48 -19
  10. data/README.md +1 -1
  11. data/Rakefile +2 -1
  12. data/db_meta.gemspec +17 -17
  13. data/docker/README.md +42 -0
  14. data/lib/db_meta.rb +10 -14
  15. data/lib/db_meta/abstract.rb +11 -21
  16. data/lib/db_meta/constant.rb +23 -25
  17. data/lib/db_meta/logger.rb +4 -7
  18. data/lib/db_meta/oracle/base.rb +9 -11
  19. data/lib/db_meta/oracle/connection.rb +3 -4
  20. data/lib/db_meta/oracle/helper.rb +7 -9
  21. data/lib/db_meta/oracle/objects.rb +45 -45
  22. data/lib/db_meta/oracle/oracle.rb +34 -30
  23. data/lib/db_meta/oracle/types/column.rb +15 -17
  24. data/lib/db_meta/oracle/types/comment.rb +2 -5
  25. data/lib/db_meta/oracle/types/constraint.rb +29 -32
  26. data/lib/db_meta/oracle/types/constraint_collection.rb +4 -6
  27. data/lib/db_meta/oracle/types/database_link.rb +4 -5
  28. data/lib/db_meta/oracle/types/function.rb +4 -5
  29. data/lib/db_meta/oracle/types/grant.rb +9 -10
  30. data/lib/db_meta/oracle/types/grant_collection.rb +4 -6
  31. data/lib/db_meta/oracle/types/index.rb +9 -11
  32. data/lib/db_meta/oracle/types/job.rb +2 -3
  33. data/lib/db_meta/oracle/types/lob.rb +2 -3
  34. data/lib/db_meta/oracle/types/materialized_view.rb +15 -18
  35. data/lib/db_meta/oracle/types/package.rb +7 -8
  36. data/lib/db_meta/oracle/types/package_body.rb +2 -3
  37. data/lib/db_meta/oracle/types/procedure.rb +4 -5
  38. data/lib/db_meta/oracle/types/queue.rb +24 -26
  39. data/lib/db_meta/oracle/types/sequence.rb +7 -8
  40. data/lib/db_meta/oracle/types/synonym.rb +6 -7
  41. data/lib/db_meta/oracle/types/synonym_collection.rb +4 -6
  42. data/lib/db_meta/oracle/types/table.rb +32 -35
  43. data/lib/db_meta/oracle/types/table_data_collection.rb +24 -19
  44. data/lib/db_meta/oracle/types/trigger.rb +12 -14
  45. data/lib/db_meta/oracle/types/type.rb +6 -7
  46. data/lib/db_meta/oracle/types/type_body.rb +2 -3
  47. data/lib/db_meta/oracle/types/view.rb +12 -14
  48. data/lib/db_meta/version.rb +1 -1
  49. metadata +32 -14
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 56bd65700cec09cc7cf900708e91a26752b220db
4
- data.tar.gz: 0bb7774663e51946eb87946e66bca8d85d718ece
2
+ SHA256:
3
+ metadata.gz: 15ba346b7adfd29486405934fbcf9a9b3166c84ce31d2f315373612433deae0b
4
+ data.tar.gz: 9b0a4b086abe2ccd1ee5a7408dca92295541970b1967a4785e079b6507c1faa6
5
5
  SHA512:
6
- metadata.gz: 6b64c011d2e2202c0baec17651bee7a74de79e45b136bf6ab6f8eab4735701212f6cb8dd906a7f14fa11f92032b0b6d42d07ffe4ddd18621465e88dfde40ba94
7
- data.tar.gz: 88f488bb0144bf2ac6105a7badd33e0bbf2d1699558bf0dba15c0a9b71445b6dfd71490908c7441a44a1748bbcbc3c794712ac9f78f19326693c2faf1b004e7e
6
+ metadata.gz: 57113101c36ddee6999ad2d50c3492fc06436813c77d5a772c5253b721c7c006e781ffc655e4f9a884918645c0b9bc7eaad67773ce1bea9bd77b282200f2ae46
7
+ data.tar.gz: 13392b5c053f2b07039693c6421f6f2eab05490ad5e6b3a1117e000901959894131513f037d5751fceb16620488dfd48349fe2c020620d6334007cd4e1d3ed4a
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.6.6
data/.travis.yml CHANGED
@@ -1,12 +1,35 @@
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
+
1
30
  language: ruby
2
- os:
3
- - linux
4
- - osx
5
- osx_image: xcode9.1
6
31
  rvm:
7
- - 2.4.2
8
- - 2.4.1
9
- - 2.3.1
10
- - 2.1.5
11
- before_install:
12
- - gem install bundler --version '~> 1.16.0'
32
+ - 3.0.0
33
+ - 2.7.2
34
+ - 2.6.6
35
+ - 2.5.8
@@ -0,0 +1,14 @@
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}"
@@ -0,0 +1,32 @@
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
@@ -0,0 +1,8 @@
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/CHANGELOG.md CHANGED
@@ -1,3 +1,31 @@
1
+ ## [0.6.0] - 2021-02-23
2
+
3
+ ### Changed
4
+ - Escape "'" and ";" for clob multiline strings (supports empty lines)
5
+
6
+ ## [0.5.0] - 2021-02-22
7
+
8
+ ### Changed
9
+ - Update gem dependencies
10
+ - Number of thread settings
11
+ - Ruby style guide applied through standradrb gem
12
+
13
+ ## [0.4.0] - 2020-02-28
14
+
15
+ ### Changed
16
+ - Update of gem dependencies
17
+
18
+ ## [0.3.1] - 2019-06-19
19
+
20
+ ### Changed
21
+ - Extract table data when primary key spans over multiple columns
22
+ - Update bundler
23
+
24
+ ## [0.3.0] - 2018-08-17
25
+
26
+ ### Changed
27
+ - Update license
28
+
1
29
  ## [0.2.7] - 2018-08-17
2
30
 
3
31
  ### Added
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in db_meta.gemspec
4
4
  gemspec
data/Gemfile.lock CHANGED
@@ -1,37 +1,66 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- db_meta (0.2.8)
4
+ db_meta (0.6.0)
5
5
  ruby-oci8 (~> 2.2)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- diff-lcs (1.3)
11
- rake (12.3.0)
12
- rspec (3.7.0)
13
- rspec-core (~> 3.7.0)
14
- rspec-expectations (~> 3.7.0)
15
- rspec-mocks (~> 3.7.0)
16
- rspec-core (3.7.0)
17
- rspec-support (~> 3.7.0)
18
- rspec-expectations (3.7.0)
10
+ ast (2.4.2)
11
+ diff-lcs (1.4.4)
12
+ parallel (1.20.1)
13
+ parser (3.0.0.0)
14
+ ast (~> 2.4.1)
15
+ rainbow (3.0.0)
16
+ rake (13.0.3)
17
+ regexp_parser (2.0.3)
18
+ rexml (3.2.4)
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)
19
26
  diff-lcs (>= 1.2.0, < 2.0)
20
- rspec-support (~> 3.7.0)
21
- rspec-mocks (3.7.0)
27
+ rspec-support (~> 3.10.0)
28
+ rspec-mocks (3.10.2)
22
29
  diff-lcs (>= 1.2.0, < 2.0)
23
- rspec-support (~> 3.7.0)
24
- rspec-support (3.7.0)
25
- ruby-oci8 (2.2.5.1)
30
+ rspec-support (~> 3.10.0)
31
+ rspec-support (3.10.2)
32
+ rubocop (1.10.0)
33
+ parallel (~> 1.10)
34
+ parser (>= 3.0.0.0)
35
+ rainbow (>= 2.2.2, < 4.0)
36
+ regexp_parser (>= 1.8, < 3.0)
37
+ rexml
38
+ rubocop-ast (>= 1.2.0, < 2.0)
39
+ ruby-progressbar (~> 1.7)
40
+ unicode-display_width (>= 1.4.0, < 3.0)
41
+ rubocop-ast (1.4.1)
42
+ parser (>= 2.7.1.5)
43
+ rubocop-performance (1.9.2)
44
+ rubocop (>= 0.90.0, < 2.0)
45
+ rubocop-ast (>= 0.4.0)
46
+ ruby-oci8 (2.2.9)
47
+ ruby-progressbar (1.11.0)
48
+ standard (0.13.0)
49
+ rubocop (= 1.10.0)
50
+ rubocop-performance (= 1.9.2)
51
+ standardrb (1.0.0)
52
+ standard
53
+ unicode-display_width (2.0.0)
26
54
 
27
55
  PLATFORMS
28
56
  ruby
29
57
 
30
58
  DEPENDENCIES
31
- bundler (~> 1.16)
59
+ bundler (~> 2.1)
32
60
  db_meta!
33
- rake (~> 12.3)
34
- rspec (~> 3.7)
61
+ rake (~> 13.0)
62
+ rspec (~> 3.10)
63
+ standardrb (~> 1.0)
35
64
 
36
65
  BUNDLED WITH
37
- 1.16.1
66
+ 2.1.4
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/db_meta.svg)](https://badge.fury.io/rb/db_meta)
2
- [![Dependency Status](https://gemnasium.com/badges/github.com/thomis/db_meta.svg)](https://gemnasium.com/github.com/thomis/db_meta)
2
+ [![Build Status](https://travis-ci.org/thomis/db_meta.svg?branch=master)](https://travis-ci.org/thomis/db_meta)
3
3
 
4
4
  # Welcome to db_meta
5
5
  Database meta and core data extraction.
data/Rakefile CHANGED
@@ -1,6 +1,7 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
+ require "standard/rake"
3
4
 
4
5
  RSpec::Core::RakeTask.new(:spec)
5
6
 
6
- task :default => :spec
7
+ task default: [:spec, :standard]
data/db_meta.gemspec CHANGED
@@ -1,27 +1,27 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path("../lib", __FILE__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'db_meta/version'
3
+ require "db_meta/version"
5
4
 
6
5
  Gem::Specification.new do |spec|
7
- spec.name = "db_meta"
8
- spec.version = DbMeta::VERSION
9
- spec.license = 'MIT'
10
- spec.authors = ["Thomi"]
11
- spec.email = ["thomas.steiner@ikey.ch"]
6
+ spec.name = "db_meta"
7
+ spec.version = DbMeta::VERSION
8
+ spec.license = "Apache-2.0"
9
+ spec.authors = ["Thomi"]
10
+ spec.email = ["thomas.steiner@ikey.ch"]
12
11
 
13
- spec.summary = %q{Database meta and core data extraction}
14
- spec.description = %q{Database meta and core data extraction.}
15
- spec.homepage = "https://github.com/thomis/db_meta"
12
+ spec.summary = "Database meta and core data extraction"
13
+ spec.description = "Database meta and core data extraction."
14
+ spec.homepage = "https://github.com/thomis/db_meta"
16
15
 
17
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = "exe"
19
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.bindir = "exe"
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
19
  spec.require_paths = ["lib"]
21
20
 
22
- spec.add_development_dependency "bundler", "~> 1.16"
23
- spec.add_development_dependency "rake", "~> 12.3"
24
- spec.add_development_dependency "rspec", "~> 3.7"
21
+ spec.add_development_dependency "bundler", "~> 2.1"
22
+ spec.add_development_dependency "rake", "~> 13.0"
23
+ spec.add_development_dependency "rspec", "~> 3.10"
24
+ spec.add_development_dependency "standardrb", "~> 1.0"
25
25
 
26
26
  spec.add_dependency "ruby-oci8", "~> 2.2"
27
27
  end
data/docker/README.md ADDED
@@ -0,0 +1,42 @@
1
+ Deliver Oracle Database 18c Express Edition in Containers
2
+ Read here https://blogs.oracle.com/oraclemagazine/deliver-oracle-database-18c-express-edition-in-containers
3
+
4
+ -- clone repo
5
+ git clone https://github.com/oracle/docker-images.git
6
+
7
+ -- download installation binary
8
+ Download one zip file for xe edition from here: https://www.oracle.com/technical-resources/
9
+ Copy zip file to docker-images/OracleDatabase/SingleInstance/dockerfiles/18.4.0 folder
10
+
11
+ -- build image
12
+ ./buildDockerImage.sh -v 18.4.0 -x
13
+
14
+ -- create a container
15
+ docker run --name dbmeta \
16
+ -d \
17
+ -p 51521:1521 \
18
+ -p 55500:5500 \
19
+ -e ORACLE_PWD=secure \
20
+ -e ORACLE_CHARACTERSET=AL32UTF8 \
21
+ oracle/database:18.4.0-xe
22
+
23
+
24
+ -- connect as sysdba
25
+ sqlplus sys/secure@dbmeta as sysdba
26
+
27
+ -- create user guest
28
+ CREATE USER guest identified by guest;
29
+
30
+ ALTER USER guest quota unlimited on users;
31
+
32
+ -- grant privs
33
+ GRANT create session TO guest;
34
+ GRANT create table TO guest;
35
+ GRANT create view TO guest;
36
+ GRANT create any trigger TO guest;
37
+ GRANT create any procedure TO guest;
38
+ GRANT create sequence TO guest;
39
+ GRANT create synonym TO guest;
40
+
41
+
42
+ Status : Failure -Test failed: no ocijdbc19 in java.library.path: [/Users/steinth6/Library/Java/Extensions, /Library/Java/Extensions, /Network/Library/Java/Extensions, /System/Library/Java/Extensions, /usr/lib/java, .]
data/lib/db_meta.rb CHANGED
@@ -1,25 +1,23 @@
1
- require_relative 'db_meta/version'
2
- require_relative 'db_meta/constant'
3
- require_relative 'db_meta/logger'
1
+ require_relative "db_meta/version"
2
+ require_relative "db_meta/constant"
3
+ require_relative "db_meta/logger"
4
4
 
5
- require_relative 'db_meta/abstract'
6
- require_relative 'db_meta/oracle/oracle'
5
+ require_relative "db_meta/abstract"
6
+ require_relative "db_meta/oracle/oracle"
7
7
 
8
- Log = Logger.new(STDOUT)
8
+ Log = Logger.new($stdout)
9
9
 
10
10
  module DbMeta
11
-
12
11
  DATABASE_TYPES = [:oracle]
13
12
 
14
13
  class DbMeta
15
-
16
- def initialize(args={})
14
+ def initialize(args = {})
17
15
  @database_type = args[:database_type] || DATABASE_TYPES[0]
18
- raise "allowed database types are [#{DATABASE_TYPES.join(', ')}], but provided was [#{@database_type}]" unless DATABASE_TYPES.include?(@database_type)
16
+ raise "allowed database types are [#{DATABASE_TYPES.join(", ")}], but provided was [#{@database_type}]" unless DATABASE_TYPES.include?(@database_type)
19
17
  @abstract = Abstract.from_type(@database_type, args)
20
18
  end
21
19
 
22
- def fetch(args={})
20
+ def fetch(args = {})
23
21
  Log.info("Fetching...")
24
22
  @abstract.fetch(args)
25
23
  Log.info("Fetch completed")
@@ -27,14 +25,12 @@ module DbMeta
27
25
  Log.error(e.to_s)
28
26
  end
29
27
 
30
- def extract(args={})
28
+ def extract(args = {})
31
29
  Log.info("Extracting...")
32
30
  @abstract.extract(args)
33
31
  Log.info("Extraction completed")
34
32
  rescue => e
35
33
  Log.error(e.to_s)
36
34
  end
37
-
38
35
  end
39
-
40
36
  end
@@ -1,19 +1,17 @@
1
1
  module DbMeta
2
-
3
2
  class Abstract
4
-
5
3
  TYPES = {}
6
4
 
7
5
  def self.register_type(type)
8
6
  TYPES[type] = self
9
7
  end
10
8
 
11
- def self.from_type(type, args={})
12
- raise "Abstract type [#{type}] is unknown" unless TYPES.keys.include?(type)
9
+ def self.from_type(type, args = {})
10
+ raise "Abstract type [#{type}] is unknown" unless TYPES.key?(type)
13
11
  TYPES[type].new(args)
14
12
  end
15
13
 
16
- def initialize(args={})
14
+ def initialize(args = {})
17
15
  @username = args[:username]
18
16
  @password = args[:password]
19
17
  @instance = args[:instance]
@@ -24,27 +22,19 @@ module DbMeta
24
22
  @objects = []
25
23
  @invalid_objects = Hash.new([])
26
24
 
27
- @base_folder = args[:base_folder] || File.expand_path(File.join(Dir.pwd,"/#{@username}@#{@instance}"))
25
+ @base_folder = args[:base_folder] || File.expand_path(File.join(Dir.pwd, "/#{@username}@#{@instance}"))
28
26
 
29
- raise 'username is mandatory, pass a username argument during initialization' if @username.nil?
30
- raise 'password is mandatory, pass a password argument during initialization' if @password.nil?
31
- raise 'instance is mandatory, pass a instance argument during initialization' if @instance.nil?
27
+ raise "username is mandatory, pass a username argument during initialization" if @username.nil?
28
+ raise "password is mandatory, pass a password argument during initialization" if @password.nil?
29
+ raise "instance is mandatory, pass a instance argument during initialization" if @instance.nil?
32
30
  end
33
31
 
34
- def fetch(args={})
35
- raise 'Needs to be implemented in derived class'
32
+ def fetch(args = {})
33
+ raise "Needs to be implemented in derived class"
36
34
  end
37
35
 
38
- def extract(args={})
39
- raise 'Needs to be implemented in derived class'
36
+ def extract(args = {})
37
+ raise "Needs to be implemented in derived class"
40
38
  end
41
-
42
39
  end
43
-
44
40
  end
45
-
46
-
47
-
48
-
49
-
50
-