pg_data_encoder 0.0.5 → 0.0.6
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 +7 -2
- data/lib/pg_data_encoder/version.rb +1 -1
- data/spec/fixtures/date.dat +0 -0
- data/spec/fixtures/date2.dat +0 -0
- data/spec/fixtures/date2000.dat +0 -0
- data/spec/verify_data_formats_spec.rb +36 -0
- metadata +8 -2
data/README.md
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
require 'tempfile'
|
2
2
|
require 'stringio'
|
3
3
|
module PgDataEncoder
|
4
|
-
|
4
|
+
POSTGRES_EPOCH_TIME = (Time.utc(2000,1,1).to_f * 1_000_000).to_i
|
5
|
+
|
5
6
|
class EncodeForCopy
|
6
7
|
def initialize(options = {})
|
7
8
|
@options = options
|
@@ -127,7 +128,11 @@ module PgDataEncoder
|
|
127
128
|
io.write([hash_io.pos].pack("N")) # assumed identifier for hstore column
|
128
129
|
io.write(hash_io.string)
|
129
130
|
when Time
|
130
|
-
buf = [(field.to_f * 1_000_000 -
|
131
|
+
buf = [(field.to_f * 1_000_000 - POSTGRES_EPOCH_TIME).to_i].pack("L!>")
|
132
|
+
io.write([buf.bytesize].pack("N"))
|
133
|
+
io.write(buf)
|
134
|
+
when Date
|
135
|
+
buf = [(field - Date.new(2000,1,1)).to_i].pack("N")
|
131
136
|
io.write([buf.bytesize].pack("N"))
|
132
137
|
io.write(buf)
|
133
138
|
else
|
Binary file
|
Binary file
|
Binary file
|
@@ -123,6 +123,42 @@ describe "generating data" do
|
|
123
123
|
str.should == existing_data
|
124
124
|
end
|
125
125
|
|
126
|
+
it 'should encode date data correctly' do
|
127
|
+
encoder = PgDataEncoder::EncodeForCopy.new
|
128
|
+
encoder.add [Date.parse("1900-12-03")]
|
129
|
+
encoder.close
|
130
|
+
io = encoder.get_io
|
131
|
+
existing_data = filedata("date.dat")
|
132
|
+
str = io.read
|
133
|
+
io.class.name.should == "StringIO"
|
134
|
+
str.force_encoding("ASCII-8BIT")
|
135
|
+
str.should == existing_data
|
136
|
+
end
|
137
|
+
|
138
|
+
it 'should encode date data correctly for years > 2000' do
|
139
|
+
encoder = PgDataEncoder::EncodeForCopy.new
|
140
|
+
encoder.add [Date.parse("2033-01-12")]
|
141
|
+
encoder.close
|
142
|
+
io = encoder.get_io
|
143
|
+
existing_data = filedata("date2000.dat")
|
144
|
+
str = io.read
|
145
|
+
io.class.name.should == "StringIO"
|
146
|
+
str.force_encoding("ASCII-8BIT")
|
147
|
+
str.should == existing_data
|
148
|
+
end
|
149
|
+
|
150
|
+
it 'should encode date data correctly in the 70s' do
|
151
|
+
encoder = PgDataEncoder::EncodeForCopy.new
|
152
|
+
encoder.add [Date.parse("1971-12-11")]
|
153
|
+
encoder.close
|
154
|
+
io = encoder.get_io
|
155
|
+
existing_data = filedata("date2.dat")
|
156
|
+
str = io.read
|
157
|
+
io.class.name.should == "StringIO"
|
158
|
+
str.force_encoding("ASCII-8BIT")
|
159
|
+
str.should == existing_data
|
160
|
+
end
|
161
|
+
|
126
162
|
it 'should encode timestamp data correctly' do
|
127
163
|
encoder = PgDataEncoder::EncodeForCopy.new
|
128
164
|
encoder.add [Time.parse("2013-06-11 15:03:54.62605 UTC")]
|
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.6
|
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: 2013-10-
|
12
|
+
date: 2013-10-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -70,6 +70,9 @@ files:
|
|
70
70
|
- spec/fixtures/array_with_two2.dat
|
71
71
|
- spec/fixtures/big_str_array.dat
|
72
72
|
- spec/fixtures/big_str_array2.dat
|
73
|
+
- spec/fixtures/date.dat
|
74
|
+
- spec/fixtures/date2.dat
|
75
|
+
- spec/fixtures/date2000.dat
|
73
76
|
- spec/fixtures/falseclass.dat
|
74
77
|
- spec/fixtures/float.dat
|
75
78
|
- spec/fixtures/intarray.dat
|
@@ -115,6 +118,9 @@ test_files:
|
|
115
118
|
- spec/fixtures/array_with_two2.dat
|
116
119
|
- spec/fixtures/big_str_array.dat
|
117
120
|
- spec/fixtures/big_str_array2.dat
|
121
|
+
- spec/fixtures/date.dat
|
122
|
+
- spec/fixtures/date2.dat
|
123
|
+
- spec/fixtures/date2000.dat
|
118
124
|
- spec/fixtures/falseclass.dat
|
119
125
|
- spec/fixtures/float.dat
|
120
126
|
- spec/fixtures/intarray.dat
|