db_meta 0.4.0 → 0.5.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 +5 -5
- data/.ruby-version +1 -0
- data/.travis.yml +33 -10
- data/.travis/oracle/download.sh +14 -0
- data/.travis/oracle/install.sh +32 -0
- data/.travis/setup_accounts.sh +8 -0
- data/CHANGELOG.md +7 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +45 -16
- data/README.md +1 -0
- data/Rakefile +2 -1
- data/db_meta.gemspec +15 -15
- data/docker/README.md +42 -0
- data/lib/db_meta.rb +10 -14
- data/lib/db_meta/abstract.rb +11 -21
- data/lib/db_meta/constant.rb +23 -25
- data/lib/db_meta/logger.rb +4 -7
- data/lib/db_meta/oracle/base.rb +9 -11
- data/lib/db_meta/oracle/connection.rb +3 -4
- data/lib/db_meta/oracle/helper.rb +7 -9
- data/lib/db_meta/oracle/objects.rb +45 -45
- data/lib/db_meta/oracle/oracle.rb +34 -30
- data/lib/db_meta/oracle/types/column.rb +15 -17
- data/lib/db_meta/oracle/types/comment.rb +2 -5
- data/lib/db_meta/oracle/types/constraint.rb +29 -32
- data/lib/db_meta/oracle/types/constraint_collection.rb +4 -6
- data/lib/db_meta/oracle/types/database_link.rb +4 -5
- data/lib/db_meta/oracle/types/function.rb +4 -5
- data/lib/db_meta/oracle/types/grant.rb +9 -10
- data/lib/db_meta/oracle/types/grant_collection.rb +4 -6
- data/lib/db_meta/oracle/types/index.rb +9 -11
- data/lib/db_meta/oracle/types/job.rb +2 -3
- data/lib/db_meta/oracle/types/lob.rb +2 -3
- data/lib/db_meta/oracle/types/materialized_view.rb +15 -18
- data/lib/db_meta/oracle/types/package.rb +7 -8
- data/lib/db_meta/oracle/types/package_body.rb +2 -3
- data/lib/db_meta/oracle/types/procedure.rb +4 -5
- data/lib/db_meta/oracle/types/queue.rb +24 -26
- data/lib/db_meta/oracle/types/sequence.rb +7 -8
- data/lib/db_meta/oracle/types/synonym.rb +6 -7
- data/lib/db_meta/oracle/types/synonym_collection.rb +4 -6
- data/lib/db_meta/oracle/types/table.rb +31 -34
- data/lib/db_meta/oracle/types/table_data_collection.rb +22 -18
- data/lib/db_meta/oracle/types/trigger.rb +12 -14
- data/lib/db_meta/oracle/types/type.rb +6 -7
- data/lib/db_meta/oracle/types/type_body.rb +2 -3
- data/lib/db_meta/oracle/types/view.rb +12 -14
- data/lib/db_meta/version.rb +1 -1
- metadata +27 -9
@@ -1,9 +1,9 @@
|
|
1
1
|
module DbMeta
|
2
2
|
module Oracle
|
3
3
|
class Job < Base
|
4
|
-
register_type(
|
4
|
+
register_type("JOB")
|
5
5
|
|
6
|
-
def initialize(args={})
|
6
|
+
def initialize(args = {})
|
7
7
|
super(args)
|
8
8
|
@extract_type = :embedded
|
9
9
|
end
|
@@ -11,7 +11,6 @@ module DbMeta
|
|
11
11
|
def system_object?
|
12
12
|
true
|
13
13
|
end
|
14
|
-
|
15
14
|
end
|
16
15
|
end
|
17
16
|
end
|
@@ -1,27 +1,27 @@
|
|
1
1
|
module DbMeta
|
2
2
|
module Oracle
|
3
3
|
class MaterializedView < Base
|
4
|
-
register_type(
|
4
|
+
register_type("MATERIALIZED VIEW")
|
5
5
|
|
6
6
|
attr_reader :query, :build_mode, :refresh_mode, :refresh_method, :interval, :next_date, :rewrite_enabled, :columns
|
7
7
|
|
8
|
-
def fetch(args={})
|
8
|
+
def fetch(args = {})
|
9
9
|
connection = Connection.instance.get
|
10
10
|
|
11
11
|
cursor = connection.exec("select * from user_mviews where mview_name = '#{@name}'")
|
12
12
|
cursor.fetch_hash do |item|
|
13
|
-
@query = item[
|
14
|
-
@build_mode = item[
|
15
|
-
@refresh_mode = item[
|
16
|
-
@refresh_method = item[
|
17
|
-
@rewrite_enabled = item[
|
13
|
+
@query = item["QUERY"]
|
14
|
+
@build_mode = item["BUILD_MODE"]
|
15
|
+
@refresh_mode = item["REFRESH_MODE"]
|
16
|
+
@refresh_method = item["REFRESH_METHOD"]
|
17
|
+
@rewrite_enabled = item["REWRITE_ENABLED"] == "Y" ? "ENABLE" : "DISABLE"
|
18
18
|
end
|
19
19
|
cursor.close
|
20
20
|
|
21
21
|
cursor = connection.exec("select * from user_refresh where rname = '#{@name}'")
|
22
22
|
cursor.fetch_hash do |item|
|
23
|
-
@interval = item[
|
24
|
-
@next_date = item[
|
23
|
+
@interval = item["INTERVAL"]
|
24
|
+
@next_date = item["NEXT_DATE"]
|
25
25
|
end
|
26
26
|
cursor.close
|
27
27
|
|
@@ -30,36 +30,33 @@ module DbMeta
|
|
30
30
|
# comments on materialized views
|
31
31
|
cursor = connection.exec("select * from user_mview_comments where mview_name = '#{@name}'")
|
32
32
|
cursor.fetch_hash do |item|
|
33
|
-
@comment = item[
|
33
|
+
@comment = item["COMMENTS"]
|
34
34
|
end
|
35
35
|
cursor.close
|
36
|
-
|
37
36
|
ensure
|
38
37
|
connection.logoff
|
39
38
|
end
|
40
39
|
|
41
|
-
|
42
|
-
def extract(args={})
|
40
|
+
def extract(args = {})
|
43
41
|
buffer = [block(@name)]
|
44
|
-
buffer << "CREATE MATERIALIZED VIEW #{@name}(#{@columns.map{ |c| c.name}.join(
|
42
|
+
buffer << "CREATE MATERIALIZED VIEW #{@name}(#{@columns.map { |c| c.name }.join(", ")})"
|
45
43
|
buffer << "BUILD #{@build_mode}"
|
46
44
|
buffer << "REFRESH #{@refresh_method} ON #{@refresh_mode}"
|
47
45
|
buffer << "START WITH TO_DATE('#{@next_date}') NEXT #{@interval}" if @interval
|
48
46
|
buffer << "#{@rewrite_enabled} QUERY REWRITE"
|
49
|
-
buffer <<
|
47
|
+
buffer << "AS"
|
50
48
|
buffer << @query
|
51
|
-
buffer <<
|
49
|
+
buffer << "/"
|
52
50
|
buffer << nil
|
53
51
|
|
54
52
|
# materialized view comments
|
55
53
|
if @comment
|
56
|
-
buffer << "COMMENT ON MATERIALIZED VIEW #{@name} IS '#{@comment.gsub("'","''")}';"
|
54
|
+
buffer << "COMMENT ON MATERIALIZED VIEW #{@name} IS '#{@comment.gsub("'", "''")}';"
|
57
55
|
buffer << nil
|
58
56
|
end
|
59
57
|
|
60
58
|
buffer.join("\n")
|
61
59
|
end
|
62
|
-
|
63
60
|
end
|
64
61
|
end
|
65
62
|
end
|
@@ -1,14 +1,14 @@
|
|
1
1
|
module DbMeta
|
2
2
|
module Oracle
|
3
3
|
class Package < Base
|
4
|
-
register_type(
|
4
|
+
register_type("PACKAGE")
|
5
5
|
|
6
6
|
attr_reader :header, :body
|
7
7
|
|
8
8
|
def fetch
|
9
9
|
@header = ""
|
10
10
|
cursor = Connection.instance.get.exec("select text from user_source where type = 'PACKAGE' and name = '#{@name}' order by line")
|
11
|
-
while row = cursor.fetch
|
11
|
+
while (row = cursor.fetch)
|
12
12
|
@header << row[0].to_s
|
13
13
|
end
|
14
14
|
cursor.close
|
@@ -16,27 +16,26 @@ module DbMeta
|
|
16
16
|
@body = ""
|
17
17
|
connection = Connection.instance.get
|
18
18
|
cursor = connection.exec("select text from user_source where type = 'PACKAGE BODY' and name = '#{@name}' order by line")
|
19
|
-
while row = cursor.fetch
|
19
|
+
while (row = cursor.fetch)
|
20
20
|
@body << row[0].to_s
|
21
21
|
end
|
22
22
|
cursor.close
|
23
23
|
ensure
|
24
|
-
|
24
|
+
connection.logoff
|
25
25
|
end
|
26
26
|
|
27
|
-
def extract(args={})
|
27
|
+
def extract(args = {})
|
28
28
|
buffer = [block(@name)]
|
29
29
|
buffer << "CREATE OR REPLACE #{@header.strip}"
|
30
|
-
buffer <<
|
30
|
+
buffer << "/"
|
31
31
|
buffer << nil
|
32
32
|
|
33
33
|
buffer << "CREATE OR REPLACE #{@body.strip}"
|
34
|
-
buffer <<
|
34
|
+
buffer << "/"
|
35
35
|
buffer << nil
|
36
36
|
|
37
37
|
buffer.join("\n")
|
38
38
|
end
|
39
|
-
|
40
39
|
end
|
41
40
|
end
|
42
41
|
end
|
@@ -1,13 +1,12 @@
|
|
1
1
|
module DbMeta
|
2
2
|
module Oracle
|
3
3
|
class PackageBody < Base
|
4
|
-
register_type(
|
4
|
+
register_type("PACKAGE BODY")
|
5
5
|
|
6
|
-
def initialize(args={})
|
6
|
+
def initialize(args = {})
|
7
7
|
super(args)
|
8
8
|
@extract_type = :embedded
|
9
9
|
end
|
10
|
-
|
11
10
|
end
|
12
11
|
end
|
13
12
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module DbMeta
|
2
2
|
module Oracle
|
3
3
|
class Procedure < Base
|
4
|
-
register_type(
|
4
|
+
register_type("PROCEDURE")
|
5
5
|
|
6
6
|
attr_reader :source
|
7
7
|
|
@@ -9,7 +9,7 @@ module DbMeta
|
|
9
9
|
@source = ""
|
10
10
|
connection = Connection.instance.get
|
11
11
|
cursor = connection.exec("select text from user_source where type = 'PROCEDURE' and name = '#{@name}' order by line")
|
12
|
-
while row = cursor.fetch
|
12
|
+
while (row = cursor.fetch)
|
13
13
|
@source << row[0].to_s
|
14
14
|
end
|
15
15
|
cursor.close
|
@@ -17,14 +17,13 @@ module DbMeta
|
|
17
17
|
connection.logoff
|
18
18
|
end
|
19
19
|
|
20
|
-
def extract(args={})
|
20
|
+
def extract(args = {})
|
21
21
|
buffer = [block(@name)]
|
22
22
|
buffer << "create or replace #{@source.strip}"
|
23
|
-
buffer <<
|
23
|
+
buffer << "/"
|
24
24
|
buffer << nil
|
25
25
|
buffer.join("\n")
|
26
26
|
end
|
27
|
-
|
28
27
|
end
|
29
28
|
end
|
30
29
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module DbMeta
|
2
2
|
module Oracle
|
3
3
|
class Queue < Base
|
4
|
-
register_type(
|
4
|
+
register_type("QUEUE")
|
5
5
|
|
6
6
|
attr_reader :queue_table, :queue_type, :max_retries, :retry_delay, :payload_type, :sort_order, :compatible
|
7
7
|
|
@@ -9,63 +9,62 @@ module DbMeta
|
|
9
9
|
connection = Connection.instance.get
|
10
10
|
cursor = connection.exec("select * from user_queues where name = '#{@name}'")
|
11
11
|
cursor.fetch_hash do |row|
|
12
|
-
@queue_table = row[
|
13
|
-
@queue_type = row[
|
14
|
-
@max_retries = row[
|
15
|
-
@retry_delay = row[
|
12
|
+
@queue_table = row["QUEUE_TABLE"]
|
13
|
+
@queue_type = row["QUEUE_TYPE"]
|
14
|
+
@max_retries = row["MAX_RETRIES"].to_i
|
15
|
+
@retry_delay = row["RETRY_DELAY"].to_f
|
16
16
|
end
|
17
17
|
cursor.close
|
18
18
|
|
19
19
|
cursor = connection.exec("select * from user_queue_tables where queue_table = '#{@queue_table}'")
|
20
20
|
cursor.fetch_hash do |row|
|
21
|
-
@payload_type = row[
|
22
|
-
@sort_order = row[
|
23
|
-
@compatible = row[
|
21
|
+
@payload_type = row["OBJECT_TYPE"]
|
22
|
+
@sort_order = row["SORT_ORDER"]
|
23
|
+
@compatible = row["COMPATIBLE"]
|
24
24
|
end
|
25
25
|
cursor.close
|
26
|
-
|
27
26
|
ensure
|
28
|
-
|
27
|
+
connection.logoff
|
29
28
|
end
|
30
29
|
|
31
|
-
def extract(args={})
|
30
|
+
def extract(args = {})
|
32
31
|
buffer = [block(@name)]
|
33
32
|
|
34
|
-
buffer <<
|
35
|
-
buffer <<
|
33
|
+
buffer << "begin"
|
34
|
+
buffer << " dbms_aqadm.create_queue_table("
|
36
35
|
buffer << " queue_table => '#{@queue_table}',"
|
37
36
|
buffer << " queue_payload_type => '#{@payload_type}',"
|
38
37
|
buffer << " sort_list => '#{sort_order_translated}',"
|
39
38
|
buffer << " compatible => '#{@compatible}'"
|
40
|
-
buffer <<
|
41
|
-
buffer <<
|
42
|
-
buffer <<
|
39
|
+
buffer << " );"
|
40
|
+
buffer << "end;"
|
41
|
+
buffer << "/"
|
43
42
|
buffer << nil
|
44
43
|
|
45
|
-
buffer <<
|
46
|
-
buffer <<
|
44
|
+
buffer << "begin"
|
45
|
+
buffer << " dbms_aqadm.create_queue("
|
47
46
|
buffer << " queue_name => '#{@name}',"
|
48
47
|
buffer << " queue_table => '#{@queue_table}',"
|
49
48
|
buffer << " max_retries => #{@max_retries},"
|
50
49
|
buffer << " retry_delay => #{@retry_delay}"
|
51
|
-
buffer <<
|
50
|
+
buffer << " );"
|
52
51
|
buffer << " dbms_aqadm.start_queue('#{@name}');"
|
53
52
|
buffer << " dbms_aqadm.start_queue('AQ$_#{@queue_table}_E', false, true);"
|
54
|
-
buffer <<
|
55
|
-
buffer <<
|
53
|
+
buffer << "end;"
|
54
|
+
buffer << "/"
|
56
55
|
buffer << nil
|
57
56
|
buffer.join("\n")
|
58
57
|
end
|
59
58
|
|
60
59
|
def ddl_drop
|
61
60
|
buffer = []
|
62
|
-
buffer <<
|
61
|
+
buffer << "begin"
|
63
62
|
buffer << " dbms_aqadm.stop_queue('#{@name}');"
|
64
63
|
buffer << " dbms_aqadm.stop_queue('AQ$_#{@queue_table}_E');"
|
65
64
|
buffer << " dbms_aqadm.drop_queue(queue_name => '#{@name}');"
|
66
65
|
buffer << " dbms_aqadm.drop_queue_table(queue_table => '#{@queue_table}', force => true);"
|
67
|
-
buffer <<
|
68
|
-
buffer <<
|
66
|
+
buffer << "end;"
|
67
|
+
buffer << "/"
|
69
68
|
buffer.join("\n")
|
70
69
|
end
|
71
70
|
|
@@ -73,9 +72,8 @@ module DbMeta
|
|
73
72
|
|
74
73
|
def sort_order_translated
|
75
74
|
# ENQUEUE_TIME => ENQ_TIME, seems to be inconsistent from Oracle
|
76
|
-
@sort_order.gsub(
|
75
|
+
@sort_order.gsub("ENQUEUE_TIME", "ENQ_TIME")
|
77
76
|
end
|
78
|
-
|
79
77
|
end
|
80
78
|
end
|
81
79
|
end
|
@@ -1,14 +1,14 @@
|
|
1
1
|
module DbMeta
|
2
2
|
module Oracle
|
3
3
|
class Sequence < Base
|
4
|
-
register_type(
|
4
|
+
register_type("SEQUENCE")
|
5
5
|
|
6
6
|
attr_reader :min_value, :max_value, :increment_by, :cycle_flag, :order_flag, :cache_size, :last_number
|
7
7
|
|
8
8
|
def fetch
|
9
9
|
connection = Connection.instance.get
|
10
10
|
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
|
-
while row = cursor.fetch
|
11
|
+
while (row = cursor.fetch)
|
12
12
|
@min_value = row[0].to_i
|
13
13
|
@max_value = row[1].to_i
|
14
14
|
@increment_by = row[2].to_i
|
@@ -22,20 +22,19 @@ module DbMeta
|
|
22
22
|
connection.logoff
|
23
23
|
end
|
24
24
|
|
25
|
-
def extract(args={})
|
25
|
+
def extract(args = {})
|
26
26
|
buffer = [block(@name)]
|
27
27
|
buffer << "CREATE SEQUENCE #{@name}"
|
28
28
|
buffer << " START WITH #{@last_number}"
|
29
29
|
buffer << " MAXVALUE #{@max_value}"
|
30
30
|
buffer << " MINVALUE #{@min_value}"
|
31
|
-
buffer << (@cycle_flag ==
|
32
|
-
buffer << (@cache_size == 0 ?
|
33
|
-
buffer << (@order_flag ==
|
34
|
-
buffer <<
|
31
|
+
buffer << (@cycle_flag == "N" ? " NOCYCLE" : " CYCLE")
|
32
|
+
buffer << (@cache_size == 0 ? " NOCACHE" : " CACHE #{@cache_size}")
|
33
|
+
buffer << (@order_flag == "N" ? " NOORDER" : " ORDER")
|
34
|
+
buffer << ";"
|
35
35
|
buffer << nil
|
36
36
|
buffer.join("\n")
|
37
37
|
end
|
38
|
-
|
39
38
|
end
|
40
39
|
end
|
41
40
|
end
|
@@ -1,20 +1,20 @@
|
|
1
1
|
module DbMeta
|
2
2
|
module Oracle
|
3
3
|
class Synonym < Base
|
4
|
-
register_type(
|
4
|
+
register_type("SYNONYM")
|
5
5
|
|
6
6
|
attr_reader :table_owner, :table_name, :db_link
|
7
7
|
|
8
|
-
def initialize(args={})
|
8
|
+
def initialize(args = {})
|
9
9
|
super(args)
|
10
10
|
|
11
11
|
@extract_type = :merged
|
12
12
|
end
|
13
13
|
|
14
|
-
def fetch(args={})
|
14
|
+
def fetch(args = {})
|
15
15
|
connection = Connection.instance.get
|
16
16
|
cursor = connection.exec("select table_owner, table_name, db_link from user_synonyms where synonym_name = '#{@name}'")
|
17
|
-
while row = cursor.fetch
|
17
|
+
while (row = cursor.fetch)
|
18
18
|
@table_owner = row[0].to_s
|
19
19
|
@table_name = row[1].to_s
|
20
20
|
@db_link = row[2].to_s
|
@@ -24,11 +24,11 @@ module DbMeta
|
|
24
24
|
connection.logoff
|
25
25
|
end
|
26
26
|
|
27
|
-
def extract(args={})
|
27
|
+
def extract(args = {})
|
28
28
|
line = ""
|
29
29
|
line << "CREATE OR REPLACE SYNONYM #{@name} FOR "
|
30
30
|
line << "#{@table_owner}." if @table_owner.size > 0
|
31
|
-
line <<
|
31
|
+
line << @table_name.to_s
|
32
32
|
line << "@#{@db_link}" if @db_link.size > 0
|
33
33
|
line << ";"
|
34
34
|
|
@@ -36,7 +36,6 @@ module DbMeta
|
|
36
36
|
buffer << line
|
37
37
|
buffer.join("\n")
|
38
38
|
end
|
39
|
-
|
40
39
|
end
|
41
40
|
end
|
42
41
|
end
|
@@ -5,7 +5,7 @@ module DbMeta
|
|
5
5
|
|
6
6
|
attr_reader :name, :type, :status, :extract_type, :collection
|
7
7
|
|
8
|
-
def initialize(args={})
|
8
|
+
def initialize(args = {})
|
9
9
|
@name = args[:name]
|
10
10
|
@type = args[:type]
|
11
11
|
@status = :valid
|
@@ -21,22 +21,20 @@ module DbMeta
|
|
21
21
|
@collection << object
|
22
22
|
end
|
23
23
|
|
24
|
-
def extract(args={})
|
24
|
+
def extract(args = {})
|
25
25
|
buffer = [block(@name)]
|
26
|
-
buffer << @collection.map{ |o| o.extract(args) }
|
26
|
+
buffer << @collection.map { |o| o.extract(args) }
|
27
27
|
buffer << nil
|
28
28
|
buffer.join("\n")
|
29
29
|
end
|
30
30
|
|
31
31
|
def ddl_drop
|
32
|
-
@collection.reverse_each.map{ |o| o.ddl_drop }.join("\n")
|
32
|
+
@collection.reverse_each.map { |o| o.ddl_drop }.join("\n")
|
33
33
|
end
|
34
34
|
|
35
35
|
def system_object?
|
36
36
|
false
|
37
37
|
end
|
38
|
-
|
39
38
|
end
|
40
|
-
|
41
39
|
end
|
42
40
|
end
|