dbsketch 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +674 -0
- data/README.md +1 -0
- data/lib/dbsketch.rb +64 -0
- data/lib/dbsketch/automation/automation_error.rb +15 -0
- data/lib/dbsketch/automation/database_connection_details.rb +32 -0
- data/lib/dbsketch/automation/database_importer.rb +184 -0
- data/lib/dbsketch/automation/database_proxy.rb +78 -0
- data/lib/dbsketch/automation/table_importer.rb +114 -0
- data/lib/dbsketch/comparison/check_constraint_comparator.rb +54 -0
- data/lib/dbsketch/comparison/column_comparator.rb +65 -0
- data/lib/dbsketch/comparison/comparison_error.rb +15 -0
- data/lib/dbsketch/comparison/computed_column_comparator.rb +63 -0
- data/lib/dbsketch/comparison/database_comparator.rb +115 -0
- data/lib/dbsketch/comparison/diff.rb +37 -0
- data/lib/dbsketch/comparison/foreign_key_comparator.rb +56 -0
- data/lib/dbsketch/comparison/function_comparator.rb +56 -0
- data/lib/dbsketch/comparison/index_comparator.rb +65 -0
- data/lib/dbsketch/comparison/primary_key_comparator.rb +61 -0
- data/lib/dbsketch/comparison/procedure_comparator.rb +54 -0
- data/lib/dbsketch/comparison/table_comparator.rb +158 -0
- data/lib/dbsketch/comparison/trigger_comparator.rb +53 -0
- data/lib/dbsketch/comparison/type_comparator.rb +51 -0
- data/lib/dbsketch/comparison/unique_constraint_comparator.rb +58 -0
- data/lib/dbsketch/comparison/view_comparator.rb +54 -0
- data/lib/dbsketch/model/abstract_column.rb +25 -0
- data/lib/dbsketch/model/check_constraint.rb +23 -0
- data/lib/dbsketch/model/column.rb +35 -0
- data/lib/dbsketch/model/computed_column.rb +27 -0
- data/lib/dbsketch/model/custom_code.rb +21 -0
- data/lib/dbsketch/model/database.rb +87 -0
- data/lib/dbsketch/model/database_object.rb +71 -0
- data/lib/dbsketch/model/foreign_key.rb +29 -0
- data/lib/dbsketch/model/function.rb +23 -0
- data/lib/dbsketch/model/index.rb +40 -0
- data/lib/dbsketch/model/model_error.rb +15 -0
- data/lib/dbsketch/model/operation.rb +28 -0
- data/lib/dbsketch/model/primary_key.rb +33 -0
- data/lib/dbsketch/model/procedure.rb +18 -0
- data/lib/dbsketch/model/table.rb +171 -0
- data/lib/dbsketch/model/trigger.rb +32 -0
- data/lib/dbsketch/model/type.rb +92 -0
- data/lib/dbsketch/model/unique_constraint.rb +33 -0
- data/lib/dbsketch/model/view.rb +23 -0
- data/lib/dbsketch/rendering/meta/column_renderer.rb +76 -0
- data/lib/dbsketch/rendering/meta/database_renderer.rb +112 -0
- data/lib/dbsketch/rendering/meta/foreign_key_renderer.rb +31 -0
- data/lib/dbsketch/rendering/meta/index_renderer.rb +30 -0
- data/lib/dbsketch/rendering/meta/operation_renderer.rb +66 -0
- data/lib/dbsketch/rendering/meta/table_renderer.rb +177 -0
- data/lib/dbsketch/rendering/meta/trigger_renderer.rb +31 -0
- data/lib/dbsketch/rendering/meta/type_renderer.rb +37 -0
- data/lib/dbsketch/rendering/meta/view_renderer.rb +32 -0
- data/lib/dbsketch/rendering/sql/column_renderer.rb +75 -0
- data/lib/dbsketch/rendering/sql/database_diff_renderer.rb +94 -0
- data/lib/dbsketch/rendering/sql/database_renderer.rb +139 -0
- data/lib/dbsketch/rendering/sql/foreign_key_renderer.rb +24 -0
- data/lib/dbsketch/rendering/sql/index_renderer.rb +31 -0
- data/lib/dbsketch/rendering/sql/operation_renderer.rb +64 -0
- data/lib/dbsketch/rendering/sql/table_renderer.rb +148 -0
- data/lib/dbsketch/rendering/sql/trigger_renderer.rb +31 -0
- data/lib/dbsketch/rendering/sql/type_renderer.rb +28 -0
- data/lib/dbsketch/rendering/sql/view_renderer.rb +31 -0
- data/lib/dbsketch/version.rb +3 -0
- metadata +134 -0
@@ -0,0 +1,54 @@
|
|
1
|
+
########################################################################################################################
|
2
|
+
# Compute differences between two existing check constraint
|
3
|
+
########################################################################################################################
|
4
|
+
|
5
|
+
require_relative '../model/check_constraint'
|
6
|
+
require_relative 'comparison_error'
|
7
|
+
require_relative 'diff'
|
8
|
+
|
9
|
+
module Dbsketch
|
10
|
+
module Comparison
|
11
|
+
|
12
|
+
class CheckConstraintDiff < Diff
|
13
|
+
def initialize old_constraint, new_constraint
|
14
|
+
super old_constraint, new_constraint
|
15
|
+
end
|
16
|
+
alias :old_constraint :old_value
|
17
|
+
alias :new_constraint :new_value
|
18
|
+
|
19
|
+
def condition
|
20
|
+
### Preconditions
|
21
|
+
raise ComparisonError, "no change found" if not change?
|
22
|
+
###
|
23
|
+
Diff.new old_constraint.condition, new_constraint.condition
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
module Dbsketch
|
31
|
+
module Comparison
|
32
|
+
|
33
|
+
class CheckConstraintComparator
|
34
|
+
|
35
|
+
def are_equivalent? old_constraint, new_constraint
|
36
|
+
### Preconditions
|
37
|
+
raise ArgumentError, "old_constraint is not a Dbsketch::Model::CheckConstraint" unless nil == old_constraint or old_constraint.is_a? Dbsketch::Model::CheckConstraint
|
38
|
+
raise ArgumentError, "new_constraint is not a Dbsketch::Model::CheckConstraint" unless nil == new_constraint or new_constraint.is_a? Dbsketch::Model::CheckConstraint
|
39
|
+
###
|
40
|
+
(nil != old_constraint and nil != new_constraint) and (old_constraint.condition == new_constraint.condition)
|
41
|
+
end
|
42
|
+
|
43
|
+
def compare old_constraint, new_constraint
|
44
|
+
### Preconditions
|
45
|
+
raise ArgumentError, "old_constraint is not a Dbsketch::Model::CheckConstraint" unless nil == old_constraint or old_constraint.is_a? Dbsketch::Model::CheckConstraint
|
46
|
+
raise ArgumentError, "new_constraint is not a Dbsketch::Model::CheckConstraint" unless nil == new_constraint or new_constraint.is_a? Dbsketch::Model::CheckConstraint
|
47
|
+
###
|
48
|
+
CheckConstraintDiff.new(old_constraint, new_constraint) if not are_equivalent? old_constraint, new_constraint
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
########################################################################################################################
|
2
|
+
# Compute differences between two existing columns
|
3
|
+
########################################################################################################################
|
4
|
+
|
5
|
+
require_relative '../model/column'
|
6
|
+
require_relative 'diff'
|
7
|
+
require_relative 'type_comparator'
|
8
|
+
|
9
|
+
module Dbsketch
|
10
|
+
module Comparison
|
11
|
+
|
12
|
+
class ColumnDiff < Diff
|
13
|
+
def initialize old_column, new_column, type_comparator, options
|
14
|
+
super old_column, new_column
|
15
|
+
if change?
|
16
|
+
@type = type_comparator.compare(old_column.type, new_column.type)
|
17
|
+
@identity = Diff.new(old_column.identity, new_column.identity) if old_column.identity != new_column.identity
|
18
|
+
@default = Diff.new(old_column.default, new_column.default) if old_column.default != new_column.default
|
19
|
+
@nullable = Diff.new(old_column.nullable, new_column.nullable) if old_column.nullable != new_column.nullable
|
20
|
+
@order = Diff.new(old_column.order, new_column.order) if options[:compare_order] and old_column.order != new_column.order
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
attr_reader :type, :identity, :default, :nullable, :order
|
25
|
+
alias :old_column :old_value
|
26
|
+
alias :new_column :new_value
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
module Dbsketch
|
33
|
+
module Comparison
|
34
|
+
|
35
|
+
class ColumnComparator
|
36
|
+
def initialize options: {}
|
37
|
+
@options = { :compare_order => true }.merge options
|
38
|
+
@type_comparator = TypeComparator.new
|
39
|
+
end
|
40
|
+
|
41
|
+
def are_equivalent? old_column, new_column
|
42
|
+
### Preconditions
|
43
|
+
raise ArgumentError, "old_column is not a Dbsketch::Model::Column" unless nil == old_column or old_column.is_a? Dbsketch::Model::Column
|
44
|
+
raise ArgumentError, "new_column is not a Dbsketch::Model::Column" unless nil == new_column or new_column.is_a? Dbsketch::Model::Column
|
45
|
+
###
|
46
|
+
(nil != old_column and nil != new_column) and
|
47
|
+
@type_comparator.are_equivalent?(old_column.type, new_column.type) and
|
48
|
+
old_column.identity == new_column.identity and
|
49
|
+
old_column.default == new_column.default and
|
50
|
+
old_column.nullable == new_column.nullable and
|
51
|
+
(not @options[:compare_order] or old_column.order == new_column.order)
|
52
|
+
end
|
53
|
+
|
54
|
+
def compare old_column, new_column
|
55
|
+
### Preconditions
|
56
|
+
raise ArgumentError, "old_column is not a Dbsketch::Model::Column" unless nil == old_column or old_column.is_a? Dbsketch::Model::Column
|
57
|
+
raise ArgumentError, "new_column is not a Dbsketch::Model::Column" unless nil == new_column or new_column.is_a? Dbsketch::Model::Column
|
58
|
+
###
|
59
|
+
ColumnDiff.new(old_column, new_column, @type_comparator, @options) if not are_equivalent? old_column, new_column
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
########################################################################################################################
|
2
|
+
# Represents database comparison error
|
3
|
+
########################################################################################################################
|
4
|
+
|
5
|
+
module Dbsketch
|
6
|
+
module Comparison
|
7
|
+
|
8
|
+
class ComparisonError < StandardError
|
9
|
+
def initialize message
|
10
|
+
super(message)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
########################################################################################################################
|
2
|
+
# Compute differences between two existing computed columns
|
3
|
+
########################################################################################################################
|
4
|
+
|
5
|
+
require_relative '../model/computed_column'
|
6
|
+
require_relative 'diff'
|
7
|
+
require_relative 'type_comparator'
|
8
|
+
|
9
|
+
module Dbsketch
|
10
|
+
module Comparison
|
11
|
+
|
12
|
+
class ComputedColumnDiff < Diff
|
13
|
+
def initialize old_column, new_column, options
|
14
|
+
super old_column, new_column
|
15
|
+
if change?
|
16
|
+
@query = Diff.new(old_column.query, new_column.query) if old_column.query != new_column.query
|
17
|
+
@nullable = Diff.new(old_column.nullable, new_column.nullable) if old_column.nullable != new_column.nullable
|
18
|
+
@order = Diff.new(old_column.order, new_column.order) if options[:compare_order] and old_column.order != new_column.order
|
19
|
+
@persisted = Diff.new(old_column.persisted, new_column.persisted) if old_column.persisted != new_column.persisted
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
attr_reader :query, :nullable, :order, :persisted
|
24
|
+
alias :old_column :old_value
|
25
|
+
alias :new_column :new_value
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
module Dbsketch
|
32
|
+
module Comparison
|
33
|
+
|
34
|
+
class ComputedColumnComparator
|
35
|
+
|
36
|
+
def initialize options: {}
|
37
|
+
@options = { :compare_order => true }.merge options
|
38
|
+
end
|
39
|
+
|
40
|
+
def are_equivalent? old_column, new_column
|
41
|
+
### Preconditions
|
42
|
+
raise ArgumentError, "old_column is not a Dbsketch::Model::ComputedColumn" unless nil == old_column or old_column.is_a? Dbsketch::Model::ComputedColumn
|
43
|
+
raise ArgumentError, "new_column is not a Dbsketch::Model::ComputedColumn" unless nil == new_column or new_column.is_a? Dbsketch::Model::ComputedColumn
|
44
|
+
###
|
45
|
+
(nil != old_column and nil != new_column) and
|
46
|
+
old_column.query == new_column.query and
|
47
|
+
old_column.nullable == new_column.nullable and
|
48
|
+
old_column.persisted == new_column.persisted and
|
49
|
+
(not @options[:compare_order] or old_column.order == new_column.order)
|
50
|
+
end
|
51
|
+
|
52
|
+
def compare old_column, new_column
|
53
|
+
### Preconditions
|
54
|
+
raise ArgumentError, "old_column is not a Dbsketch::Model::ComputedColumn" unless nil == old_column or old_column.is_a? Dbsketch::Model::ComputedColumn
|
55
|
+
raise ArgumentError, "new_column is not a Dbsketch::Model::ComputedColumn" unless nil == new_column or new_column.is_a? Dbsketch::Model::ComputedColumn
|
56
|
+
###
|
57
|
+
ComputedColumnDiff.new(old_column, new_column, @options) if not are_equivalent? old_column, new_column
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
########################################################################################################################
|
2
|
+
# Database differences between two databases
|
3
|
+
########################################################################################################################
|
4
|
+
|
5
|
+
require_relative '../model/database'
|
6
|
+
require_relative 'diff'
|
7
|
+
require_relative 'index_comparator'
|
8
|
+
require_relative 'table_comparator'
|
9
|
+
require_relative 'trigger_comparator'
|
10
|
+
require_relative 'view_comparator'
|
11
|
+
|
12
|
+
module Dbsketch
|
13
|
+
module Comparison
|
14
|
+
|
15
|
+
class DatabaseDiff < Diff
|
16
|
+
def initialize(old_database, new_database, indexes, operations, tables, triggers, views)
|
17
|
+
super old_database, new_database
|
18
|
+
### Preconditions
|
19
|
+
raise ArgumentError, "old_database is not a Dbsketch::Model::Database" unless old_database.is_a? Dbsketch::Model::Database
|
20
|
+
raise ArgumentError, "new_database is not a Dbsketch::Model::Database" unless new_database.is_a? Dbsketch::Model::Database
|
21
|
+
###
|
22
|
+
@indexes = indexes
|
23
|
+
@operations = operations
|
24
|
+
@tables = tables
|
25
|
+
@triggers = triggers
|
26
|
+
@views = views
|
27
|
+
end
|
28
|
+
attr_reader :indexes, :operations, :tables, :triggers, :views
|
29
|
+
end
|
30
|
+
|
31
|
+
class DatabaseComparator
|
32
|
+
def initialize options: {}
|
33
|
+
@index_comparator = IndexComparator.new
|
34
|
+
@function_comparator = FunctionComparator.new
|
35
|
+
@procedure_comparator = ProcedureComparator.new
|
36
|
+
@table_comparator = TableComparator.new :options => options
|
37
|
+
@trigger_comparator = TriggerComparator.new
|
38
|
+
@view_comparator = ViewComparator.new
|
39
|
+
end
|
40
|
+
|
41
|
+
def are_equivalent? old_database, new_database
|
42
|
+
### Preconditions
|
43
|
+
raise ArgumentError, "old_database is not a Dbsketch::Model::Database" unless old_database.is_a? Dbsketch::Model::Database
|
44
|
+
raise ArgumentError, "new_database is not a Dbsketch::Model::Database" unless new_database.is_a? Dbsketch::Model::Database
|
45
|
+
###
|
46
|
+
indexes(old_database, new_database).empty? and operations(old_database, new_database).empty? and tables(old_database, new_database).empty? and triggers(old_database, new_database).empty? and views(old_database, new_database).empty?
|
47
|
+
end
|
48
|
+
|
49
|
+
# Returns a DatabaseDiff if tables are different, nil otherwise
|
50
|
+
def compare old_database, new_database
|
51
|
+
### Preconditions
|
52
|
+
raise ArgumentError, "old_database is not a Dbsketch::Model::Database" unless old_database.is_a? Dbsketch::Model::Database
|
53
|
+
raise ArgumentError, "new_database is not a Dbsketch::Model::Database" unless new_database.is_a? Dbsketch::Model::Database
|
54
|
+
###
|
55
|
+
DatabaseDiff.new(
|
56
|
+
old_database, new_database, indexes(old_database, new_database), operations(old_database, new_database), tables(old_database, new_database), triggers(old_database, new_database), views(old_database, new_database)
|
57
|
+
) if not are_equivalent? old_database, new_database
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def find_diffs old_database, new_database, comparator, collection
|
63
|
+
### Preconditions
|
64
|
+
raise ArgumentError, "collection is not a Symbol" unless collection.is_a? Symbol
|
65
|
+
raise ArgumentError, "collection is not a method of Dbsketch::Model::Database" unless old_database.respond_to? collection
|
66
|
+
###
|
67
|
+
diffs = old_database.method(collection).call.select { |old_item| not new_database.has_item? old_item.name }.map do |old_item|
|
68
|
+
comparator.compare(old_item, nil)
|
69
|
+
end
|
70
|
+
diffs << new_database.method(collection).call.select { |new_item| not old_database.has_item? new_item.name }.map do |new_item|
|
71
|
+
comparator.compare(nil, new_item)
|
72
|
+
end
|
73
|
+
diffs << old_database.method(collection).call.select { |old_item| new_database.has_item? old_item.name }.map do |old_item|
|
74
|
+
comparator.compare(old_item, new_database[old_item.name])
|
75
|
+
end
|
76
|
+
diffs.flatten.compact
|
77
|
+
end
|
78
|
+
|
79
|
+
def indexes old_database, new_database
|
80
|
+
find_diffs old_database, new_database, @index_comparator, :indexes
|
81
|
+
end
|
82
|
+
|
83
|
+
def operations old_database, new_database
|
84
|
+
diffs = old_database.operations.select { |old_op| not new_database.has_item? old_op.name }.map do |old_op|
|
85
|
+
(old_op.is_a? Dbsketch::Model::Function) ? @function_comparator.compare(old_op, nil) : @procedure_comparator.compare(old_op, nil)
|
86
|
+
end
|
87
|
+
diffs << new_database.operations.select { |new_op| not old_database.has_item? new_op.name }.map do |new_op|
|
88
|
+
(new_op.is_a? Dbsketch::Model::Function) ? @function_comparator.compare(nil, new_op) : @procedure_comparator.compare(nil, new_op)
|
89
|
+
end
|
90
|
+
diffs << old_database.operations.select { |old_op| new_database.has_item? old_op.name }.map do |old_op|
|
91
|
+
if old_op.class == new_database[old_op.name].class
|
92
|
+
(old_op.is_a? Dbsketch::Model::Function) ? @function_comparator.compare(old_op, new_database[old_op.name]) : @procedure_comparator.compare(old_op, new_database[old_op.name])
|
93
|
+
else
|
94
|
+
Diff.new old_op, new_database[old_op.name]
|
95
|
+
end
|
96
|
+
end
|
97
|
+
diffs.flatten.compact
|
98
|
+
end
|
99
|
+
|
100
|
+
def tables old_database, new_database
|
101
|
+
find_diffs old_database, new_database, @table_comparator, :tables
|
102
|
+
end
|
103
|
+
|
104
|
+
def triggers old_database, new_database
|
105
|
+
find_diffs old_database, new_database, @trigger_comparator, :triggers
|
106
|
+
end
|
107
|
+
|
108
|
+
def views old_database, new_database
|
109
|
+
find_diffs old_database, new_database, @view_comparator, :views
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
########################################################################################################################
|
2
|
+
# Defines difference between two values
|
3
|
+
########################################################################################################################
|
4
|
+
|
5
|
+
module Dbsketch
|
6
|
+
module Comparison
|
7
|
+
|
8
|
+
class Diff
|
9
|
+
def initialize old_value, new_value
|
10
|
+
### Preconditions
|
11
|
+
raise ArgumentError, "new_value is not different from old_value" unless new_value != old_value
|
12
|
+
###
|
13
|
+
@old_value = old_value
|
14
|
+
@new_value = new_value
|
15
|
+
end
|
16
|
+
|
17
|
+
attr_reader :old_value, :new_value
|
18
|
+
|
19
|
+
# Returns true if the diff represents the deletion of an old value
|
20
|
+
def deletion?
|
21
|
+
nil != @old_value and nil == @new_value
|
22
|
+
end
|
23
|
+
|
24
|
+
# Returns true if the diff represents a change
|
25
|
+
def change?
|
26
|
+
nil != @old_value and nil != @new_value
|
27
|
+
end
|
28
|
+
|
29
|
+
# Returns true if the diff represents the addition of a new value
|
30
|
+
def addition?
|
31
|
+
nil == @old_value and nil != @new_value
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
########################################################################################################################
|
2
|
+
# Compute differences between two existing foreign keys
|
3
|
+
########################################################################################################################
|
4
|
+
|
5
|
+
require_relative '../model/foreign_key'
|
6
|
+
require_relative 'diff'
|
7
|
+
|
8
|
+
module Dbsketch
|
9
|
+
module Comparison
|
10
|
+
|
11
|
+
class ForeignKeyDiff < Diff
|
12
|
+
def initialize old_key, new_key
|
13
|
+
super old_key, new_key
|
14
|
+
if change?
|
15
|
+
@constricted_column = Diff.new(old_key.constricted_column.name, new_key.constricted_column.name) if old_key.constricted_column.name != new_key.constricted_column.name
|
16
|
+
@referenced_table = Diff.new(old_key.referenced_table.name, new_key.referenced_table.name) if old_key.referenced_table.name != new_key.referenced_table.name
|
17
|
+
@referenced_column = Diff.new(old_key.referenced_column.name, new_key.referenced_column.name) if old_key.referenced_column.name != new_key.referenced_column.name
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
attr_reader :constricted_column, :referenced_table, :referenced_column
|
22
|
+
alias :old_key :old_value
|
23
|
+
alias :new_key :new_value
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
module Dbsketch
|
30
|
+
module Comparison
|
31
|
+
|
32
|
+
class ForeignKeyComparator
|
33
|
+
|
34
|
+
def are_equivalent? old_key, new_key
|
35
|
+
### Preconditions
|
36
|
+
raise ArgumentError, "old_key is not a Dbsketch::Model::ForeignKey" unless nil == old_key or old_key.is_a? Dbsketch::Model::ForeignKey
|
37
|
+
raise ArgumentError, "new_key is not a Dbsketch::Model::ForeignKey" unless nil == new_key or new_key.is_a? Dbsketch::Model::ForeignKey
|
38
|
+
###
|
39
|
+
(nil != old_key and nil != new_key) and
|
40
|
+
old_key.constricted_column.name == new_key.constricted_column.name and
|
41
|
+
old_key.referenced_table.name == new_key.referenced_table.name and
|
42
|
+
old_key.referenced_column.name == new_key.referenced_column.name
|
43
|
+
end
|
44
|
+
|
45
|
+
def compare old_key, new_key
|
46
|
+
### Preconditions
|
47
|
+
raise ArgumentError, "old_key is not a Dbsketch::Model::ForeignKey" unless nil == old_key or old_key.is_a? Dbsketch::Model::ForeignKey
|
48
|
+
raise ArgumentError, "new_key is not a Dbsketch::Model::ForeignKey" unless nil == new_key or new_key.is_a? Dbsketch::Model::ForeignKey
|
49
|
+
###
|
50
|
+
ForeignKeyDiff.new(old_key, new_key) if not are_equivalent? old_key, new_key
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
########################################################################################################################
|
2
|
+
# Compute differences between two functions
|
3
|
+
########################################################################################################################
|
4
|
+
|
5
|
+
require_relative '../model/function'
|
6
|
+
require_relative 'diff'
|
7
|
+
|
8
|
+
module Dbsketch
|
9
|
+
module Comparison
|
10
|
+
|
11
|
+
class FunctionDiff < Diff
|
12
|
+
def initialize old_function, new_function
|
13
|
+
super old_function, new_function
|
14
|
+
if change?
|
15
|
+
@arguments = Diff.new(old_function.arguments, new_function.arguments) if old_function.arguments != new_function.arguments
|
16
|
+
@returns = Diff.new(old_function.returns, new_function.returns) if old_function.returns != new_function.returns
|
17
|
+
@algo = Diff.new(old_function.algo, new_function.algo) if old_function.algo != new_function.algo
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
attr_reader :arguments, :returns, :algo
|
22
|
+
alias :old_function :old_value
|
23
|
+
alias :new_function :new_value
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
module Dbsketch
|
30
|
+
module Comparison
|
31
|
+
|
32
|
+
class FunctionComparator
|
33
|
+
|
34
|
+
def are_equivalent? old_function, new_function
|
35
|
+
### Preconditions
|
36
|
+
raise ArgumentError, "old_function is not a Dbsketch::Model::Function" unless nil == old_function or old_function.is_a? Dbsketch::Model::Function
|
37
|
+
raise ArgumentError, "new_function is not a Dbsketch::Model::Function" unless nil == new_function or new_function.is_a? Dbsketch::Model::Function
|
38
|
+
###
|
39
|
+
(nil != old_function and nil != new_function) and
|
40
|
+
old_function.arguments == new_function.arguments and
|
41
|
+
old_function.returns == new_function.returns and
|
42
|
+
old_function.algo == new_function.algo
|
43
|
+
end
|
44
|
+
|
45
|
+
def compare old_function, new_function
|
46
|
+
### Preconditions
|
47
|
+
raise ArgumentError, "old_function is not a Dbsketch::Model::Function" unless nil == old_function or old_function.is_a? Dbsketch::Model::Function
|
48
|
+
raise ArgumentError, "new_function is not a Dbsketch::Model::Function" unless nil == new_function or new_function.is_a? Dbsketch::Model::Function
|
49
|
+
###
|
50
|
+
FunctionDiff.new(old_function, new_function) if not are_equivalent? old_function, new_function
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|