flattendb 0.2.0 → 0.2.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 +4 -4
- data/README +4 -4
- data/Rakefile +3 -6
- data/lib/flattendb/base.rb +1 -1
- data/lib/flattendb/cli.rb +2 -2
- data/lib/flattendb/types/mdb.rb +1 -1
- data/lib/flattendb/types/mysql.rb +43 -31
- data/lib/flattendb/version.rb +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0bf6ce4e0242288394dd70d6c06f3fbc921d86f2
|
4
|
+
data.tar.gz: e068b6f84762dc9f170ab9c5c5eafff15de9677a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f012835b0b2d5f587d8686669d081641a247a045621eae3eb218136f9867d06eac3549b3ed12eb4d434d2321026550891319a632102614b68130a1808531239b
|
7
|
+
data.tar.gz: 9d1044499a8af06a52d295c8097cea45ee0c541b5753a2f8a4fa95d0a8208f478ee72917c0ef55bde9e502fe99ecc2a42b2dafd14b82ffc1216e25ba6359165d
|
data/README
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
== VERSION
|
4
4
|
|
5
|
-
This documentation refers to flattendb version 0.2.
|
5
|
+
This documentation refers to flattendb version 0.2.1
|
6
6
|
|
7
7
|
|
8
8
|
== DESCRIPTION
|
@@ -13,9 +13,9 @@ TODO: well, the description... ;-)
|
|
13
13
|
== LINKS
|
14
14
|
|
15
15
|
<b></b>
|
16
|
-
Documentation::
|
17
|
-
Source code::
|
18
|
-
|
16
|
+
Documentation:: http://blackwinter.github.com/flattendb
|
17
|
+
Source code:: http://github.com/blackwinter/flattendb
|
18
|
+
RubyGem:: http://rubygems.org/gems/flattendb
|
19
19
|
|
20
20
|
|
21
21
|
== AUTHORS
|
data/Rakefile
CHANGED
@@ -4,17 +4,14 @@ begin
|
|
4
4
|
require 'hen'
|
5
5
|
|
6
6
|
Hen.lay! {{
|
7
|
-
:rubyforge => {
|
8
|
-
:project => %q{prometheus},
|
9
|
-
:package => %q{flattendb}
|
10
|
-
},
|
11
|
-
|
12
7
|
:gem => {
|
8
|
+
:name => %q{flattendb},
|
13
9
|
:version => FlattenDB::VERSION,
|
14
10
|
:summary => %q{Flatten relational databases.},
|
15
11
|
:author => %q{Jens Wille},
|
16
12
|
:email => %q{jens.wille@gmail.com},
|
17
|
-
:
|
13
|
+
:homepage => :blackwinter,
|
14
|
+
:dependencies => %w[builder highline libxml-ruby] << ['ruby-nuggets', '>= 0.9.2']
|
18
15
|
}
|
19
16
|
}}
|
20
17
|
rescue LoadError => err
|
data/lib/flattendb/base.rb
CHANGED
@@ -76,7 +76,7 @@ module FlattenDB
|
|
76
76
|
config = options.select { |k, _| k.is_a?(String) }
|
77
77
|
raise ArgumentError, "can't have more than one primary (root) table" if config.size > 1
|
78
78
|
|
79
|
-
|
79
|
+
@root, @config = config.keys.first, config.values.first
|
80
80
|
|
81
81
|
@input, @output = options.values_at(:input, :output)
|
82
82
|
end
|
data/lib/flattendb/cli.rb
CHANGED
@@ -28,12 +28,12 @@
|
|
28
28
|
###############################################################################
|
29
29
|
#++
|
30
30
|
|
31
|
-
require 'nuggets/
|
31
|
+
require 'nuggets/cli'
|
32
32
|
require 'flattendb'
|
33
33
|
|
34
34
|
module FlattenDB
|
35
35
|
|
36
|
-
class CLI < ::
|
36
|
+
class CLI < ::Nuggets::CLI
|
37
37
|
|
38
38
|
TYPES = {
|
39
39
|
:mysql => {
|
data/lib/flattendb/types/mdb.rb
CHANGED
@@ -29,7 +29,7 @@
|
|
29
29
|
#++
|
30
30
|
|
31
31
|
require 'libxml'
|
32
|
-
require 'nuggets/
|
32
|
+
require 'nuggets/mysql'
|
33
33
|
require 'flattendb'
|
34
34
|
|
35
35
|
module FlattenDB
|
@@ -51,7 +51,7 @@ module FlattenDB
|
|
51
51
|
[send("parse_#{type}", tables) || 'root', tables]
|
52
52
|
end
|
53
53
|
|
54
|
-
def flatten!(options = {}
|
54
|
+
def flatten!(options = {})
|
55
55
|
flatten_tables!(tables, root, config)
|
56
56
|
self
|
57
57
|
end
|
@@ -63,13 +63,10 @@ module FlattenDB
|
|
63
63
|
|
64
64
|
if tables.size > 1
|
65
65
|
builder.tag!(name) {
|
66
|
-
tables.sort.each { |table, rows|
|
67
|
-
table_to_xml(table, rows, builder)
|
68
|
-
}
|
66
|
+
tables.sort.each { |table, rows| table_to_xml(table, rows, builder) }
|
69
67
|
}
|
70
68
|
else
|
71
|
-
(
|
72
|
-
table_to_xml(name, rows, builder)
|
69
|
+
table_to_xml(name, tables.values.first, builder)
|
73
70
|
end
|
74
71
|
|
75
72
|
self
|
@@ -101,7 +98,7 @@ module FlattenDB
|
|
101
98
|
def parse_sql(tables)
|
102
99
|
name = nil
|
103
100
|
|
104
|
-
|
101
|
+
Nuggets::MySQL::Parser.parse(input) { |event, *args|
|
105
102
|
case event
|
106
103
|
when :use
|
107
104
|
raise 'dump file contains more than one database' if name
|
@@ -130,28 +127,48 @@ module FlattenDB
|
|
130
127
|
when Array
|
131
128
|
inject_foreign(tables, primary_table, foreign_table, *spec)
|
132
129
|
when Hash
|
133
|
-
|
130
|
+
unless spec.has_key?(JOIN_KEY)
|
131
|
+
raise ArgumentError,
|
132
|
+
"invalid join table spec, #{JOIN_KEY.inspect} missing"
|
133
|
+
end
|
134
134
|
|
135
|
-
join_key_spec = spec.delete(JOIN_KEY)
|
135
|
+
unless (join_key_spec = spec.delete(JOIN_KEY)).is_a?(Hash)
|
136
|
+
join_key_spec = { foreign_table => join_key_spec }
|
137
|
+
end
|
136
138
|
|
137
|
-
|
138
|
-
flatten_tables!(
|
139
|
+
foreign_tables = Marshal.load(Marshal.dump(tables))
|
140
|
+
flatten_tables!(foreign_tables, foreign_table, spec)
|
139
141
|
|
140
|
-
|
142
|
+
join_key_spec.each { |foreign_table_name, join_key|
|
141
143
|
local_key, foreign_key = join_key
|
142
144
|
|
143
|
-
inject_foreign(
|
145
|
+
inject_foreign(
|
146
|
+
tables, primary_table, foreign_table,
|
147
|
+
local_key, foreign_key || local_key,
|
148
|
+
foreign_tables, foreign_table_name
|
149
|
+
)
|
144
150
|
}
|
145
151
|
else
|
146
|
-
raise ArgumentError,
|
152
|
+
raise ArgumentError,
|
153
|
+
"don't know how to handle spec of type #{spec.class}"
|
147
154
|
end
|
148
155
|
} if config
|
149
156
|
|
150
157
|
tables.delete_if { |table, _| table != primary_table }
|
151
158
|
end
|
152
159
|
|
153
|
-
def inject_foreign(
|
154
|
-
|
160
|
+
def inject_foreign(
|
161
|
+
tables, primary_table, foreign_table,
|
162
|
+
local_key, foreign_key = local_key,
|
163
|
+
foreign_tables = tables, foreign_table_name = foreign_table
|
164
|
+
)
|
165
|
+
unless tables.has_key?(primary_table)
|
166
|
+
raise ArgumentError, "no such primary table: #{primary_table}"
|
167
|
+
end
|
168
|
+
|
169
|
+
unless foreign_tables.has_key?(foreign_table)
|
170
|
+
raise ArgumentError, "no such foreign table: #{foreign_table}"
|
171
|
+
end
|
155
172
|
|
156
173
|
foreign_rows = Hash.new { |h, k| h[k] = [] }
|
157
174
|
|
@@ -169,32 +186,27 @@ module FlattenDB
|
|
169
186
|
|
170
187
|
def table_to_xml(table, rows, builder)
|
171
188
|
builder.tag!(table) {
|
172
|
-
rows.each { |row|
|
173
|
-
row_to_xml('row', row, builder)
|
174
|
-
} if rows
|
189
|
+
rows.each { |row| row_to_xml('row', row, builder) } if rows
|
175
190
|
}
|
176
191
|
end
|
177
192
|
|
178
193
|
def row_to_xml(name, row, builder)
|
179
194
|
builder.tag!(name) {
|
180
|
-
row.sort.each { |field,
|
181
|
-
field_to_xml(field, content, builder)
|
182
|
-
}
|
195
|
+
row.sort.each { |field, value| field_to_xml(field, value, builder) }
|
183
196
|
}
|
184
197
|
end
|
185
198
|
|
186
|
-
def field_to_xml(field,
|
187
|
-
case
|
199
|
+
def field_to_xml(field, value, builder)
|
200
|
+
case value
|
188
201
|
when String, Numeric, true, false, nil
|
189
|
-
builder.tag!(column_to_element(field),
|
202
|
+
builder.tag!(column_to_element(field), value)
|
190
203
|
when Array
|
191
|
-
|
192
|
-
field_to_xml(field, item, builder)
|
193
|
-
}
|
204
|
+
value.each { |item| field_to_xml(field, item, builder) }
|
194
205
|
when Hash
|
195
|
-
row_to_xml(field,
|
206
|
+
row_to_xml(field, value, builder)
|
196
207
|
else
|
197
|
-
raise ArgumentError,
|
208
|
+
raise ArgumentError,
|
209
|
+
"don't know how to handle value of type #{value.class}"
|
198
210
|
end
|
199
211
|
end
|
200
212
|
|
data/lib/flattendb/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flattendb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jens Wille
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-04-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: builder
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.9.
|
61
|
+
version: 0.9.2
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.9.
|
68
|
+
version: 0.9.2
|
69
69
|
description: Flatten relational databases.
|
70
70
|
email: jens.wille@gmail.com
|
71
71
|
executables:
|
@@ -96,7 +96,7 @@ files:
|
|
96
96
|
- example/mysql-sample.sql
|
97
97
|
- example/mysql-sample.xml
|
98
98
|
- example/mysql-sample2flat.yaml
|
99
|
-
homepage: http://
|
99
|
+
homepage: http://github.com/blackwinter/flattendb
|
100
100
|
licenses: []
|
101
101
|
metadata: {}
|
102
102
|
post_install_message:
|
@@ -106,7 +106,7 @@ rdoc_options:
|
|
106
106
|
- --line-numbers
|
107
107
|
- --all
|
108
108
|
- --title
|
109
|
-
- flattendb Application documentation (v0.2.
|
109
|
+
- flattendb Application documentation (v0.2.1)
|
110
110
|
- --main
|
111
111
|
- README
|
112
112
|
require_paths:
|
@@ -122,7 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
122
|
- !ruby/object:Gem::Version
|
123
123
|
version: '0'
|
124
124
|
requirements: []
|
125
|
-
rubyforge_project:
|
125
|
+
rubyforge_project:
|
126
126
|
rubygems_version: 2.0.3
|
127
127
|
signing_key:
|
128
128
|
specification_version: 4
|