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,65 @@
|
|
1
|
+
########################################################################################################################
|
2
|
+
# Compute differences between two indexes
|
3
|
+
########################################################################################################################
|
4
|
+
|
5
|
+
require_relative '../model/index'
|
6
|
+
require_relative 'diff'
|
7
|
+
|
8
|
+
module Dbsketch
|
9
|
+
module Comparison
|
10
|
+
|
11
|
+
class IndexDiff < Diff
|
12
|
+
def initialize old_index, new_index, columns
|
13
|
+
super old_index, new_index
|
14
|
+
if change?
|
15
|
+
@target = Diff.new(old_index.target, new_index.target) if old_index.target.name != new_index.target.name
|
16
|
+
@columns = columns
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
attr_reader :target, :columns
|
21
|
+
alias :old_index :old_value
|
22
|
+
alias :new_index :new_value
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
module Dbsketch
|
29
|
+
module Comparison
|
30
|
+
|
31
|
+
class IndexComparator
|
32
|
+
|
33
|
+
def are_equivalent? old_index, new_index
|
34
|
+
### Preconditions
|
35
|
+
raise ArgumentError, "old_index is not a Dbsketch::Model::Index" unless nil == old_index or old_index.is_a? Dbsketch::Model::Index
|
36
|
+
raise ArgumentError, "new_index is not a Dbsketch::Model::Index" unless nil == new_index or new_index.is_a? Dbsketch::Model::Index
|
37
|
+
###
|
38
|
+
(nil != old_index and nil != new_index) and
|
39
|
+
old_index.target.name == new_index.target.name and
|
40
|
+
columns(old_index, new_index).empty?
|
41
|
+
end
|
42
|
+
|
43
|
+
def compare old_index, new_index
|
44
|
+
### Preconditions
|
45
|
+
raise ArgumentError, "old_index is not a Dbsketch::Model::Index" unless nil == old_index or old_index.is_a? Dbsketch::Model::Index
|
46
|
+
raise ArgumentError, "new_index is not a Dbsketch::Model::Index" unless nil == new_index or new_index.is_a? Dbsketch::Model::Index
|
47
|
+
###
|
48
|
+
IndexDiff.new(old_index, new_index, columns(old_index, new_index)) if not are_equivalent? old_index, new_index
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def columns old_index, new_index
|
54
|
+
diffs = []
|
55
|
+
if nil != old_index and nil != new_index
|
56
|
+
diffs << old_index.columns.select { |old_i| not new_index.has_column? old_i.name }.map { |old_i| Diff.new old_i.name, nil }
|
57
|
+
diffs << new_index.columns.select { |new_i| not old_index.has_column? new_i.name }.map { |new_i| Diff.new nil, new_i.name }
|
58
|
+
end
|
59
|
+
diffs.flatten.compact
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
########################################################################################################################
|
2
|
+
# Database differences between two primary keys
|
3
|
+
########################################################################################################################
|
4
|
+
|
5
|
+
require_relative '../model/primary_key'
|
6
|
+
require_relative 'diff'
|
7
|
+
|
8
|
+
module Dbsketch
|
9
|
+
module Comparison
|
10
|
+
|
11
|
+
class PrimaryKeyDiff < Diff
|
12
|
+
def initialize old_key, new_key, columns
|
13
|
+
super old_key, new_key
|
14
|
+
### Preconditions
|
15
|
+
columns.each_with_index { |column, index| raise ArgumentError, "columns[#{index}] is not a Dbsketch::Comparison::Diff" unless column.is_a? Dbsketch::Comparison::Diff }
|
16
|
+
###
|
17
|
+
if change?
|
18
|
+
@name = Diff.new(old_key.name, new_key.name) if old_key.name != new_key.name
|
19
|
+
end
|
20
|
+
@columns = columns
|
21
|
+
end
|
22
|
+
|
23
|
+
attr_reader :name, :columns
|
24
|
+
alias :old_key :old_value
|
25
|
+
alias :new_key :new_value
|
26
|
+
end
|
27
|
+
|
28
|
+
class PrimaryKeyComparator
|
29
|
+
|
30
|
+
def are_equivalent? old_key, new_key
|
31
|
+
### Preconditions
|
32
|
+
raise ArgumentError, "old_key is not a Dbsketch::Model::PrimaryKey" unless nil == old_key or old_key.is_a? Dbsketch::Model::PrimaryKey
|
33
|
+
raise ArgumentError, "new_key is not a Dbsketch::Model::PrimaryKey" unless nil == new_key or new_key.is_a? Dbsketch::Model::PrimaryKey
|
34
|
+
###
|
35
|
+
(nil == old_key and nil == new_key) or (nil != old_key and nil != new_key and old_key.name == new_key.name and columns(old_key, new_key).empty?)
|
36
|
+
end
|
37
|
+
|
38
|
+
# Returns a PrimaryKeyDiff if tables are different, nil otherwise
|
39
|
+
def compare old_key, new_key
|
40
|
+
### Preconditions
|
41
|
+
raise ArgumentError, "old_key is not a Dbsketch::Model::PrimaryKey" unless nil == old_key or old_key.is_a? Dbsketch::Model::PrimaryKey
|
42
|
+
raise ArgumentError, "new_key is not a Dbsketch::Model::PrimaryKey" unless nil == new_key or new_key.is_a? Dbsketch::Model::PrimaryKey
|
43
|
+
###
|
44
|
+
PrimaryKeyDiff.new(old_key, new_key, columns(old_key, new_key)) if not are_equivalent? old_key, new_key
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def columns old_key, new_key
|
50
|
+
diffs = []
|
51
|
+
if nil != old_key and nil != new_key
|
52
|
+
diffs << old_key.columns.select { |old_k| not new_key.has_column? old_k.name }.map { |old_k| Diff.new old_k.name, nil }
|
53
|
+
diffs << new_key.columns.select { |new_k| not old_key.has_column? new_k.name }.map { |new_k| Diff.new nil, new_k.name }
|
54
|
+
end
|
55
|
+
diffs.flatten.compact
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
########################################################################################################################
|
2
|
+
# Compute differences between two procedures
|
3
|
+
########################################################################################################################
|
4
|
+
|
5
|
+
require_relative '../model/procedure'
|
6
|
+
require_relative 'diff'
|
7
|
+
|
8
|
+
module Dbsketch
|
9
|
+
module Comparison
|
10
|
+
|
11
|
+
class ProcedureDiff < Diff
|
12
|
+
def initialize old_procedure, new_procedure
|
13
|
+
super old_procedure, new_procedure
|
14
|
+
if change?
|
15
|
+
@arguments = Diff.new(old_procedure.arguments, new_procedure.arguments) if old_procedure.arguments != new_procedure.arguments
|
16
|
+
@algo = Diff.new(old_procedure.algo, new_procedure.algo) if old_procedure.algo != new_procedure.algo
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
attr_reader :arguments, :algo
|
21
|
+
alias :old_procedure :old_value
|
22
|
+
alias :new_procedure :new_value
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
module Dbsketch
|
29
|
+
module Comparison
|
30
|
+
|
31
|
+
class ProcedureComparator
|
32
|
+
|
33
|
+
def are_equivalent? old_procedure, new_procedure
|
34
|
+
### Preconditions
|
35
|
+
raise ArgumentError, "old_procedure is not a Dbsketch::Model::Procedure" unless nil == old_procedure or old_procedure.is_a? Dbsketch::Model::Procedure
|
36
|
+
raise ArgumentError, "new_procedure is not a Dbsketch::Model::Procedure" unless nil == new_procedure or new_procedure.is_a? Dbsketch::Model::Procedure
|
37
|
+
###
|
38
|
+
(nil != old_procedure and nil != new_procedure) and
|
39
|
+
old_procedure.arguments == new_procedure.arguments and
|
40
|
+
old_procedure.algo == new_procedure.algo
|
41
|
+
end
|
42
|
+
|
43
|
+
def compare old_procedure, new_procedure
|
44
|
+
### Preconditions
|
45
|
+
raise ArgumentError, "old_procedure is not a Dbsketch::Model::Procedure" unless nil == old_procedure or old_procedure.is_a? Dbsketch::Model::Procedure
|
46
|
+
raise ArgumentError, "new_procedure is not a Dbsketch::Model::Procedure" unless nil == new_procedure or new_procedure.is_a? Dbsketch::Model::Procedure
|
47
|
+
###
|
48
|
+
ProcedureDiff.new(old_procedure, new_procedure) if not are_equivalent? old_procedure, new_procedure
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,158 @@
|
|
1
|
+
########################################################################################################################
|
2
|
+
# Database differences between two existing columns
|
3
|
+
########################################################################################################################
|
4
|
+
|
5
|
+
require_relative '../model/table'
|
6
|
+
require_relative 'diff'
|
7
|
+
require_relative 'check_constraint_comparator'
|
8
|
+
require_relative 'column_comparator'
|
9
|
+
require_relative 'computed_column_comparator'
|
10
|
+
require_relative 'foreign_key_comparator'
|
11
|
+
require_relative 'primary_key_comparator'
|
12
|
+
require_relative 'unique_constraint_comparator'
|
13
|
+
|
14
|
+
module Dbsketch
|
15
|
+
module Comparison
|
16
|
+
|
17
|
+
class TableDiff < Diff
|
18
|
+
def initialize(old_table, new_table, columns, primary_key, check_constraints, foreign_keys, unique_constraints)
|
19
|
+
super old_table, new_table
|
20
|
+
### Preconditions
|
21
|
+
raise ArgumentError, "old_table is not a Dbsketch::Model::Table" unless nil == old_table or old_table.is_a? Dbsketch::Model::Table
|
22
|
+
raise ArgumentError, "new_table is not a Dbsketch::Model::Table" unless nil == new_table or new_table.is_a? Dbsketch::Model::Table
|
23
|
+
check_constraints.each_with_index { |diff, index| raise ArgumentError, "check_constraints[#{index}] is not a Dbsketch::Comparison::CheckConstraintDiff" unless diff.is_a? Dbsketch::Comparison::CheckConstraintDiff }
|
24
|
+
###
|
25
|
+
@columns = columns
|
26
|
+
@primary_key = primary_key
|
27
|
+
@check_constraints = check_constraints
|
28
|
+
@foreign_keys = foreign_keys
|
29
|
+
@unique_constraints = unique_constraints
|
30
|
+
end
|
31
|
+
|
32
|
+
attr_reader :columns, :primary_key, :check_constraints, :foreign_keys, :unique_constraints
|
33
|
+
alias :old_table :old_value
|
34
|
+
alias :new_table :new_value
|
35
|
+
end
|
36
|
+
|
37
|
+
class TableComparator
|
38
|
+
def initialize column_comparator: nil, options: {}
|
39
|
+
### Preconditions
|
40
|
+
raise ArgumentError, "column_comparator is not a Dbsketch::Comparison::ColumnComparator" unless nil == column_comparator or column_comparator.is_a? Dbsketch::Comparison::ColumnComparator
|
41
|
+
###
|
42
|
+
@check_constraint_comparator = CheckConstraintComparator.new
|
43
|
+
@column_comparator = (nil == column_comparator ? ColumnComparator.new(:options => options) : column_comparator)
|
44
|
+
@computed_column_comparator = ComputedColumnComparator.new
|
45
|
+
@foreign_key_comparator = ForeignKeyComparator.new
|
46
|
+
@primary_key_comparator = PrimaryKeyComparator.new
|
47
|
+
@unique_constraint_comparator = UniqueConstraintComparator.new
|
48
|
+
end
|
49
|
+
|
50
|
+
def are_equivalent? old_table, new_table
|
51
|
+
### Preconditions
|
52
|
+
raise ArgumentError, "old_table is not a Dbsketch::Model::Table" unless nil == old_table or old_table.is_a? Dbsketch::Model::Table
|
53
|
+
raise ArgumentError, "new_table is not a Dbsketch::Model::Table" unless nil == new_table or new_table.is_a? Dbsketch::Model::Table
|
54
|
+
###
|
55
|
+
(nil != old_table and nil != new_table) and
|
56
|
+
columns(old_table, new_table).empty? and
|
57
|
+
@primary_key_comparator.are_equivalent?(old_table.primary_key, new_table.primary_key) and
|
58
|
+
check_constraints(old_table, new_table).empty? and
|
59
|
+
foreign_keys(old_table, new_table).empty? and
|
60
|
+
unique_constraints(old_table, new_table).empty?
|
61
|
+
end
|
62
|
+
|
63
|
+
# Returns a TableDiff if tables are different, nil otherwise
|
64
|
+
def compare old_table, new_table
|
65
|
+
### Preconditions
|
66
|
+
raise ArgumentError, "old_table is not a Dbsketch::Model::Table" unless nil == old_table or old_table.is_a? Dbsketch::Model::Table
|
67
|
+
raise ArgumentError, "new_table is not a Dbsketch::Model::Table" unless nil == new_table or new_table.is_a? Dbsketch::Model::Table
|
68
|
+
###
|
69
|
+
if not are_equivalent? old_table, new_table
|
70
|
+
primary_key_diff = @primary_key_comparator.compare(old_table.primary_key, new_table.primary_key) if nil != old_table and nil != new_table
|
71
|
+
TableDiff.new(
|
72
|
+
old_table, new_table,
|
73
|
+
columns(old_table, new_table),
|
74
|
+
primary_key_diff,
|
75
|
+
check_constraints(old_table, new_table),
|
76
|
+
foreign_keys(old_table, new_table),
|
77
|
+
unique_constraints(old_table, new_table)
|
78
|
+
)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
private
|
83
|
+
|
84
|
+
def columns old_table, new_table
|
85
|
+
diffs = []
|
86
|
+
if nil != old_table and nil != new_table
|
87
|
+
diffs = old_table.columns.select { |old_c| not new_table.has_column? old_c.name }.map do |old_c|
|
88
|
+
(old_c.is_a? Dbsketch::Model::Column) ? @column_comparator.compare(old_c, nil) : @computed_column_comparator.compare(old_c, nil)
|
89
|
+
end
|
90
|
+
diffs << new_table.columns.select { |new_c| not old_table.has_column? new_c.name }.map do |new_c|
|
91
|
+
(new_c.is_a? Dbsketch::Model::Column) ? @column_comparator.compare(nil, new_c) : @computed_column_comparator.compare(nil, new_c)
|
92
|
+
end
|
93
|
+
diffs << old_table.columns.select { |old_c| new_table.has_column? old_c.name }.map do |old_c|
|
94
|
+
if old_c.class == new_table[old_c.name].class
|
95
|
+
(old_c.is_a? Dbsketch::Model::Column) ? @column_comparator.compare(old_c, new_table[old_c.name]) : @computed_column_comparator.compare(old_c, new_table[old_c.name])
|
96
|
+
else
|
97
|
+
Diff.new old_c, new_table[old_c.name]
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
diffs.flatten.compact
|
102
|
+
end
|
103
|
+
|
104
|
+
def check_constraints old_table, new_table
|
105
|
+
diffs = []
|
106
|
+
if nil != old_table and nil != new_table
|
107
|
+
diffs = old_table.check_constraints.map do |old_c|
|
108
|
+
if new_table.has_check_constraint? old_c.name
|
109
|
+
@check_constraint_comparator.compare(old_c, new_table.check_constraint(old_c.name))
|
110
|
+
else
|
111
|
+
@check_constraint_comparator.compare(old_c, nil)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
diffs << new_table.check_constraints.select { |new_c| not old_table.has_check_constraint? new_c.name }.map do |new_c|
|
115
|
+
@check_constraint_comparator.compare(nil, new_c)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
diffs.flatten.compact
|
119
|
+
end
|
120
|
+
|
121
|
+
def foreign_keys old_table, new_table
|
122
|
+
diffs = []
|
123
|
+
if nil != old_table and nil != new_table
|
124
|
+
diffs = old_table.foreign_keys.map do |old_k|
|
125
|
+
if new_table.has_foreign_key? old_k.name
|
126
|
+
@foreign_key_comparator.compare(old_k, new_table.foreign_key(old_k.name))
|
127
|
+
else
|
128
|
+
@foreign_key_comparator.compare(old_k, nil)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
diffs << new_table.foreign_keys.select { |new_k| not old_table.has_foreign_key? new_k.name }.map do |new_k|
|
132
|
+
@foreign_key_comparator.compare(nil, new_k)
|
133
|
+
end
|
134
|
+
end
|
135
|
+
diffs.flatten.compact
|
136
|
+
end
|
137
|
+
|
138
|
+
def unique_constraints old_table, new_table
|
139
|
+
diffs = []
|
140
|
+
if nil != old_table and nil != new_table
|
141
|
+
diffs = old_table.unique_constraints.map do |old_c|
|
142
|
+
if new_table.has_unique_constraint? old_c.name
|
143
|
+
@unique_constraint_comparator.compare(old_c, new_table.unique_constraint(old_c.name))
|
144
|
+
else
|
145
|
+
@unique_constraint_comparator.compare(old_c, nil)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
diffs << new_table.unique_constraints.select { |new_c| not old_table.has_unique_constraint? new_c.name }.map do |new_c|
|
149
|
+
@unique_constraint_comparator.compare(nil, new_c)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
diffs.flatten.compact
|
153
|
+
end
|
154
|
+
|
155
|
+
end
|
156
|
+
|
157
|
+
end
|
158
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
########################################################################################################################
|
2
|
+
# Compute differences between two triggers
|
3
|
+
########################################################################################################################
|
4
|
+
|
5
|
+
require_relative '../model/trigger'
|
6
|
+
require_relative 'comparison_error'
|
7
|
+
require_relative 'diff'
|
8
|
+
|
9
|
+
module Dbsketch
|
10
|
+
module Comparison
|
11
|
+
|
12
|
+
class TriggerDiff < Diff
|
13
|
+
def initialize old_trigger, new_trigger
|
14
|
+
super old_trigger, new_trigger
|
15
|
+
if change?
|
16
|
+
@target = Diff.new(old_trigger.target.name, new_trigger.target.name) if old_trigger.target.name != new_trigger.target.name
|
17
|
+
@activation_time = Diff.new(old_trigger.activation_time, new_trigger.activation_time) if old_trigger.activation_time != new_trigger.activation_time
|
18
|
+
@algo = Diff.new(old_trigger.algo, new_trigger.algo) if old_trigger.algo != new_trigger.algo
|
19
|
+
end
|
20
|
+
end
|
21
|
+
attr_reader :target, :activation_time, :algo
|
22
|
+
alias :old_trigger :old_value
|
23
|
+
alias :new_trigger :new_value
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
module Dbsketch
|
30
|
+
module Comparison
|
31
|
+
|
32
|
+
class TriggerComparator
|
33
|
+
|
34
|
+
def are_equivalent? old_trigger, new_trigger
|
35
|
+
### Preconditions
|
36
|
+
raise ArgumentError, "old_trigger is not a Dbsketch::Model::Trigger" unless nil == old_trigger or old_trigger.is_a? Dbsketch::Model::Trigger
|
37
|
+
raise ArgumentError, "new_trigger is not a Dbsketch::Model::Trigger" unless nil == new_trigger or new_trigger.is_a? Dbsketch::Model::Trigger
|
38
|
+
###
|
39
|
+
(nil != old_trigger and nil != new_trigger) and (old_trigger.target.name == new_trigger.target.name) and (old_trigger.activation_time == new_trigger.activation_time) and (old_trigger.algo == new_trigger.algo)
|
40
|
+
end
|
41
|
+
|
42
|
+
def compare old_trigger, new_trigger
|
43
|
+
### Preconditions
|
44
|
+
raise ArgumentError, "old_trigger is not a Dbsketch::Model::Trigger" unless nil == old_trigger or old_trigger.is_a? Dbsketch::Model::Trigger
|
45
|
+
raise ArgumentError, "new_trigger is not a Dbsketch::Model::Trigger" unless nil == new_trigger or new_trigger.is_a? Dbsketch::Model::Trigger
|
46
|
+
###
|
47
|
+
TriggerDiff.new(old_trigger, new_trigger) if not are_equivalent? old_trigger, new_trigger
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
########################################################################################################################
|
2
|
+
# Compute differences between two types
|
3
|
+
########################################################################################################################
|
4
|
+
|
5
|
+
require_relative '../model/type'
|
6
|
+
require_relative 'diff'
|
7
|
+
|
8
|
+
module Dbsketch
|
9
|
+
module Comparison
|
10
|
+
|
11
|
+
class TypeDiff < Diff
|
12
|
+
def initialize old_type, new_type
|
13
|
+
### Preconditions
|
14
|
+
raise ArgumentError, "old_type is not a Dbsketch::Model::Type" unless old_type.is_a? Dbsketch::Model::Type
|
15
|
+
raise ArgumentError, "new_type is not a Dbsketch::Model::Type" unless new_type.is_a? Dbsketch::Model::Type
|
16
|
+
###
|
17
|
+
super old_type, new_type
|
18
|
+
@sql_type = Diff.new(old_type.sql_type, new_type.sql_type) if (old_type.sql_type != new_type.sql_type)
|
19
|
+
@sizes = Diff.new(old_type.sizes, new_type.sizes) if (old_type.sizes != new_type.sizes)
|
20
|
+
end
|
21
|
+
attr_reader :sql_type, :sizes
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
module Dbsketch
|
28
|
+
module Comparison
|
29
|
+
|
30
|
+
class TypeComparator
|
31
|
+
|
32
|
+
def are_equivalent? old_type, new_type
|
33
|
+
### Preconditions
|
34
|
+
raise ArgumentError, "old_type is not a Dbsketch::Model::Type" unless old_type.is_a? Dbsketch::Model::Type
|
35
|
+
raise ArgumentError, "new_type is not a Dbsketch::Model::Type" unless new_type.is_a? Dbsketch::Model::Type
|
36
|
+
###
|
37
|
+
(old_type.sql_type == new_type.sql_type) and (old_type.sizes == new_type.sizes)
|
38
|
+
end
|
39
|
+
|
40
|
+
def compare old_type, new_type
|
41
|
+
### Preconditions
|
42
|
+
raise ArgumentError, "old_type is not a Dbsketch::Model::Type" unless old_type.is_a? Dbsketch::Model::Type
|
43
|
+
raise ArgumentError, "new_type is not a Dbsketch::Model::Type" unless new_type.is_a? Dbsketch::Model::Type
|
44
|
+
###
|
45
|
+
TypeDiff.new(old_type, new_type) if not are_equivalent? old_type, new_type
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|