pg_data_encoder 0.0.7 → 0.0.9
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.
- data/README.md +1 -0
- data/lib/pg_data_encoder/encode_for_copy.rb +23 -11
- data/lib/pg_data_encoder/version.rb +1 -1
- data/spec/fixtures/uuid.dat +0 -0
- data/spec/verify_data_formats_spec.rb +13 -0
- metadata +4 -2
data/README.md
CHANGED
@@ -13,8 +13,8 @@ module PgDataEncoder
|
|
13
13
|
def add(row)
|
14
14
|
setup_io if !@io
|
15
15
|
@io.write([row.size].pack("n"))
|
16
|
-
row.
|
17
|
-
encode_field(@io, col)
|
16
|
+
row.each_with_index {|col, index|
|
17
|
+
encode_field(@io, col, index)
|
18
18
|
}
|
19
19
|
end
|
20
20
|
|
@@ -53,7 +53,8 @@ module PgDataEncoder
|
|
53
53
|
@io.write([0,0].pack("NN"))
|
54
54
|
end
|
55
55
|
|
56
|
-
def encode_field(io, field, depth=0)
|
56
|
+
def encode_field(io, field, index, depth=0)
|
57
|
+
|
57
58
|
case field
|
58
59
|
when Integer
|
59
60
|
buf = [field].pack("N")
|
@@ -74,11 +75,19 @@ module PgDataEncoder
|
|
74
75
|
when nil
|
75
76
|
io.write([-1].pack("N"))
|
76
77
|
when String
|
77
|
-
|
78
|
-
|
79
|
-
|
78
|
+
if @options[:column_types] && @options[:column_types][index] == :uuid
|
79
|
+
io.write([16].pack("N"))
|
80
|
+
c = [field.gsub(/-/, "")].pack('H*')
|
81
|
+
io.write(c)
|
82
|
+
else
|
83
|
+
buf = field.encode("UTF-8")
|
84
|
+
io.write([buf.bytesize].pack("N"))
|
85
|
+
io.write(buf)
|
86
|
+
end
|
80
87
|
when Array
|
81
88
|
array_io = StringIO.new
|
89
|
+
field.compact!
|
90
|
+
completed = false
|
82
91
|
case field[0]
|
83
92
|
when String
|
84
93
|
array_io.write([1].pack("N")) # unknown
|
@@ -108,14 +117,17 @@ module PgDataEncoder
|
|
108
117
|
array_io.write(buf)
|
109
118
|
|
110
119
|
}
|
120
|
+
when nil
|
121
|
+
io.write([-1].pack("N"))
|
122
|
+
completed = true
|
111
123
|
else
|
112
124
|
raise Exception.new("Arrays support int or string only")
|
113
125
|
end
|
114
126
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
127
|
+
if !completed
|
128
|
+
io.write([array_io.pos].pack("N"))
|
129
|
+
io.write(array_io.string)
|
130
|
+
end
|
119
131
|
when Hash
|
120
132
|
raise Exception.new("Hash's can't contain hashes") if depth > 0
|
121
133
|
hash_io = StringIO.new
|
@@ -125,7 +137,7 @@ module PgDataEncoder
|
|
125
137
|
buf = key.to_s.encode("UTF-8")
|
126
138
|
hash_io.write([buf.bytesize].pack("N"))
|
127
139
|
hash_io.write(buf.to_s)
|
128
|
-
encode_field(hash_io, val.nil? ? val : val.to_s, depth + 1)
|
140
|
+
encode_field(hash_io, val.nil? ? val : val.to_s, index, depth + 1)
|
129
141
|
}
|
130
142
|
io.write([hash_io.pos].pack("N")) # assumed identifier for hstore column
|
131
143
|
io.write(hash_io.string)
|
Binary file
|
@@ -211,4 +211,17 @@ describe "generating data" do
|
|
211
211
|
str.should == existing_data
|
212
212
|
end
|
213
213
|
|
214
|
+
it 'should encode uuid correctly from tempfile' do
|
215
|
+
encoder = PgDataEncoder::EncodeForCopy.new(:use_tempfile => true, column_types: {0 => :uuid})
|
216
|
+
encoder.add ['e876eef5-a116-4a27-b71f-bac4a1dcd20e']
|
217
|
+
encoder.close
|
218
|
+
io = encoder.get_io
|
219
|
+
existing_data = filedata("uuid.dat")
|
220
|
+
str = io.read
|
221
|
+
io.class.name.should == "Tempfile"
|
222
|
+
str.force_encoding("ASCII-8BIT")
|
223
|
+
#File.open("spec/fixtures/output.dat", "w:ASCII-8BIT") {|out| out.write(str) }
|
224
|
+
str.should == existing_data
|
225
|
+
end
|
226
|
+
|
214
227
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg_data_encoder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-01-
|
12
|
+
date: 2014-01-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -81,6 +81,7 @@ files:
|
|
81
81
|
- spec/fixtures/output.dat
|
82
82
|
- spec/fixtures/timestamp.dat
|
83
83
|
- spec/fixtures/trueclass.dat
|
84
|
+
- spec/fixtures/uuid.dat
|
84
85
|
- spec/spec_helper.rb
|
85
86
|
- spec/verify_data_formats_spec.rb
|
86
87
|
homepage: https://github.com/pbrumm/pg_data_encoder
|
@@ -129,6 +130,7 @@ test_files:
|
|
129
130
|
- spec/fixtures/output.dat
|
130
131
|
- spec/fixtures/timestamp.dat
|
131
132
|
- spec/fixtures/trueclass.dat
|
133
|
+
- spec/fixtures/uuid.dat
|
132
134
|
- spec/spec_helper.rb
|
133
135
|
- spec/verify_data_formats_spec.rb
|
134
136
|
has_rdoc:
|