flattendb 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|