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: 
         
     |