dbsketch 0.0.1
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 +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
|