db_meta 0.3.1 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
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 +27 -0
  8. data/Gemfile +1 -1
  9. data/Gemfile.lock +49 -19
  10. data/README.md +1 -0
  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 +12 -15
  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 +22 -18
  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 +31 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: d3a4bc994bc7e13b2d6f1ef6085cddbdadd56597
4
- data.tar.gz: 76ad2b266cdadaa3a8c6433ec2ce2ad1b61e785e
2
+ SHA256:
3
+ metadata.gz: 3974d1aa49030e05e6cecea974839d1c4bf4db427b14a54eaebaf3a1df005430
4
+ data.tar.gz: 3a0ad946e5d8ef48a1fbde4cfa858f0fc6d8e4f2fc064cf05e68a9cb065939d2
5
5
  SHA512:
6
- metadata.gz: 3d5f378884644c61f712d7cf455fa0718ce9569c931095d2cb612903d9f7ec933302737095847c44ad16dc697507b2fd58cb3c8ae90dc875d5c970dc024ab758
7
- data.tar.gz: 21aac021c769d859cd269967c0e89afdf81c483947868d441ca4b510ff9a6574fa7ab0592ef33a48d3b655fe481be26a38784d36b9e3f5615a4323130916dea3
6
+ metadata.gz: eabe5000a8906b427aa55bb96c46ddd390bebcd7344ff56f38cbdd7a5fa6f5a5cb419c9dad85a985e7b18315020502f47f3202f36ab308013b812a0d9161e1f2
7
+ data.tar.gz: ea8a858a59c2957343f4154e2de9a94198c48445c0d3cc3aef96e0716ec138852160bcbc2a276e53dacd0e78d2d770d0154a6e3b99331434409d54caeba27295
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,30 @@
1
+ ## [0.6.2] - 2021-06-29
2
+
3
+ ### Changed
4
+ - Fix check when column.comment is nil
5
+
6
+ ## [0.6.1] - 2021-05-01
7
+
8
+ ### Changed
9
+ - Update gem dependencies
10
+
11
+ ## [0.6.0] - 2021-02-23
12
+
13
+ ### Changed
14
+ - Escape "'" and ";" for clob multiline strings (supports empty lines)
15
+
16
+ ## [0.5.0] - 2021-02-22
17
+
18
+ ### Changed
19
+ - Update gem dependencies
20
+ - Number of thread settings
21
+ - Ruby style guide applied through standradrb gem
22
+
23
+ ## [0.4.0] - 2020-02-28
24
+
25
+ ### Changed
26
+ - Update of gem dependencies
27
+
1
28
  ## [0.3.1] - 2019-06-19
2
29
 
3
30
  ### Changed
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,67 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- db_meta (0.3.1)
4
+ db_meta (0.6.2)
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.1.0)
14
+ ast (~> 2.4.1)
15
+ rainbow (3.0.0)
16
+ rake (13.0.3)
17
+ regexp_parser (2.1.1)
18
+ 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)
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.7)
30
+ rspec-support (~> 3.10.0)
31
+ rspec-support (3.10.2)
32
+ rubocop (1.12.1)
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.10.1)
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 (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)
26
54
 
27
55
  PLATFORMS
28
56
  ruby
57
+ x86_64-darwin-18
29
58
 
30
59
  DEPENDENCIES
31
- bundler (~> 2.0)
60
+ bundler (~> 2.1)
32
61
  db_meta!
33
- rake (~> 12.3)
34
- rspec (~> 3.7)
62
+ rake (~> 13.0)
63
+ rspec (~> 3.10)
64
+ standardrb (~> 1.0)
35
65
 
36
66
  BUNDLED WITH
37
- 2.0.1
67
+ 2.2.18
data/README.md CHANGED
@@ -1,4 +1,5 @@
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
3
 
3
4
  # Welcome to db_meta
4
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 = 'Apache-2.0'
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", "~> 2.0"
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,40 +1,37 @@
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")
26
24
  rescue => e
27
- Log.error(e.to_s)
25
+ Log.error(e.backtrace.join("\n"))
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)
34
+ Log.error(e.backtrace.join("\n"))
36
35
  end
37
-
38
36
  end
39
-
40
37
  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
-