pg_typecast 0.1.0 → 0.1.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.
- data/README.rdoc +3 -11
- data/Rakefile +12 -0
- data/VERSION +1 -1
- data/ext/pg_typecast.c +4 -2
- data/pg_typecast.gemspec +12 -5
- data/test/helper.rb +5 -0
- data/test/test_types.rb +43 -0
- metadata +35 -12
    
        data/README.rdoc
    CHANGED
    
    | @@ -4,19 +4,15 @@ | |
| 4 4 |  | 
| 5 5 | 
             
            == Description
         | 
| 6 6 |  | 
| 7 | 
            -
            Provides typecasting support for the pg gem. The code is extracted from | 
| 8 | 
            -
            a drop-in enhancement for users of | 
| 7 | 
            +
            Provides typecasting support for the pg gem. The code is extracted from
         | 
| 8 | 
            +
            swift (http://github.com/shanna/swift) as a drop-in enhancement for users of
         | 
| 9 | 
            +
            pg.
         | 
| 9 10 |  | 
| 10 11 | 
             
            == Dependencies
         | 
| 11 12 |  | 
| 12 13 | 
             
            * ruby   >= 1.9.1
         | 
| 13 14 | 
             
            * pg     >= 0.9.0
         | 
| 14 15 |  | 
| 15 | 
            -
            == Alternatives
         | 
| 16 | 
            -
             | 
| 17 | 
            -
            Swift (http://github.com/shanna/swift) is as fast as the pg gem with typecasting support
         | 
| 18 | 
            -
            and drivers for mysql, postgresql and db2.
         | 
| 19 | 
            -
             | 
| 20 16 | 
             
            == Caveats
         | 
| 21 17 |  | 
| 22 18 | 
             
            * This gem overrides the PGresult#each method.
         | 
| @@ -59,10 +55,6 @@ The following table illustrates the typecasting done from postgresql types to na | |
| 59 55 | 
             
                +--------------------+---------------------------+
         | 
| 60 56 |  | 
| 61 57 |  | 
| 62 | 
            -
            == TODO
         | 
| 63 | 
            -
             | 
| 64 | 
            -
            * tests.
         | 
| 65 | 
            -
             | 
| 66 58 | 
             
            == License
         | 
| 67 59 |  | 
| 68 60 | 
             
            See LICENSE.
         | 
    
        data/Rakefile
    CHANGED
    
    | @@ -13,8 +13,20 @@ begin | |
| 13 13 | 
             
                gem.files.reject!{|f| f =~ %r{\.gitignore}}
         | 
| 14 14 |  | 
| 15 15 | 
             
                gem.add_dependency 'pg', '>= 0.9.0'
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                gem.required_ruby_version = '>= 1.9.1'
         | 
| 16 18 | 
             
              end
         | 
| 17 19 | 
             
              Jeweler::GemcutterTasks.new
         | 
| 18 20 | 
             
            rescue LoadError
         | 
| 19 21 | 
             
              puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
         | 
| 20 22 | 
             
            end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            require 'rake/testtask'
         | 
| 25 | 
            +
            Rake::TestTask.new(:test) do |test|
         | 
| 26 | 
            +
              test.libs << 'lib' << 'test'
         | 
| 27 | 
            +
              test.pattern = 'test/**/test_*.rb'
         | 
| 28 | 
            +
              test.verbose = true
         | 
| 29 | 
            +
            end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            task :test    => :check_dependencies
         | 
| 32 | 
            +
            task :default => :test
         | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0.1. | 
| 1 | 
            +
            0.1.1
         | 
    
        data/ext/pg_typecast.c
    CHANGED
    
    | @@ -104,7 +104,7 @@ inline VALUE typecast(const char* data, uint64_t len, int pgtype) { | |
| 104 104 | 
             
            }
         | 
| 105 105 |  | 
| 106 106 | 
             
            VALUE result_each(VALUE self) {
         | 
| 107 | 
            -
                int r, c, rows, cols, *types;
         | 
| 107 | 
            +
                int r, c, rows, cols, *types, failed;
         | 
| 108 108 | 
             
                PGresult *res;
         | 
| 109 109 | 
             
                Data_Get_Struct(self, PGresult, res);
         | 
| 110 110 |  | 
| @@ -123,7 +123,9 @@ VALUE result_each(VALUE self) { | |
| 123 123 | 
             
                        rb_hash_aset(tuple, rb_ary_entry(fields, c),
         | 
| 124 124 | 
             
                            PQgetisnull(res, r, c) ? Qnil : typecast(PQgetvalue(res, r, c), PQgetlength(res, r, c), types[c]));
         | 
| 125 125 | 
             
                    }
         | 
| 126 | 
            -
                    rb_yield | 
| 126 | 
            +
                    rb_protect(rb_yield, tuple, &failed);
         | 
| 127 | 
            +
                    if (failed)
         | 
| 128 | 
            +
                        rb_jump_tag(failed);
         | 
| 127 129 | 
             
                }
         | 
| 128 130 |  | 
| 129 131 | 
             
                free(types);
         | 
    
        data/pg_typecast.gemspec
    CHANGED
    
    | @@ -5,11 +5,11 @@ | |
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |s|
         | 
| 7 7 | 
             
              s.name = %q{pg_typecast}
         | 
| 8 | 
            -
              s.version = "0.1. | 
| 8 | 
            +
              s.version = "0.1.1"
         | 
| 9 9 |  | 
| 10 10 | 
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 11 11 | 
             
              s.authors = ["Bharanee Rathna"]
         | 
| 12 | 
            -
              s.date = %q{2010-09- | 
| 12 | 
            +
              s.date = %q{2010-09-17}
         | 
| 13 13 | 
             
              s.description = %q{Extensions to pg gem supporting typecasting.}
         | 
| 14 14 | 
             
              s.email = ["deepfryed@gmail.com"]
         | 
| 15 15 | 
             
              s.extensions = ["ext/extconf.rb"]
         | 
| @@ -24,19 +24,26 @@ Gem::Specification.new do |s| | |
| 24 24 | 
             
                 "VERSION",
         | 
| 25 25 | 
             
                 "ext/extconf.rb",
         | 
| 26 26 | 
             
                 "ext/pg_typecast.c",
         | 
| 27 | 
            -
                 "pg_typecast.gemspec"
         | 
| 27 | 
            +
                 "pg_typecast.gemspec",
         | 
| 28 | 
            +
                 "test/helper.rb",
         | 
| 29 | 
            +
                 "test/test_types.rb"
         | 
| 28 30 | 
             
              ]
         | 
| 29 31 | 
             
              s.homepage = %q{http://github.com/deepfryed/pg_typecast}
         | 
| 30 32 | 
             
              s.rdoc_options = ["--charset=UTF-8"]
         | 
| 31 33 | 
             
              s.require_paths = ["lib"]
         | 
| 32 | 
            -
              s. | 
| 34 | 
            +
              s.required_ruby_version = Gem::Requirement.new(">= 1.9.1")
         | 
| 35 | 
            +
              s.rubygems_version = %q{1.3.7}
         | 
| 33 36 | 
             
              s.summary = %q{Extensions to pg gem supporting typecasting.}
         | 
| 37 | 
            +
              s.test_files = [
         | 
| 38 | 
            +
                "test/helper.rb",
         | 
| 39 | 
            +
                 "test/test_types.rb"
         | 
| 40 | 
            +
              ]
         | 
| 34 41 |  | 
| 35 42 | 
             
              if s.respond_to? :specification_version then
         | 
| 36 43 | 
             
                current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
         | 
| 37 44 | 
             
                s.specification_version = 3
         | 
| 38 45 |  | 
| 39 | 
            -
                if Gem::Version.new(Gem:: | 
| 46 | 
            +
                if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
         | 
| 40 47 | 
             
                  s.add_runtime_dependency(%q<pg>, [">= 0.9.0"])
         | 
| 41 48 | 
             
                else
         | 
| 42 49 | 
             
                  s.add_dependency(%q<pg>, [">= 0.9.0"])
         | 
    
        data/test/helper.rb
    ADDED
    
    
    
        data/test/test_types.rb
    ADDED
    
    | @@ -0,0 +1,43 @@ | |
| 1 | 
            +
            require_relative 'helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe 'typecasting' do
         | 
| 4 | 
            +
              before do
         | 
| 5 | 
            +
                @db = PGconn.connect 'host=127.0.0.1 dbname=test'
         | 
| 6 | 
            +
                @db.exec %q{drop table if exists users}
         | 
| 7 | 
            +
                @db.exec %q{
         | 
| 8 | 
            +
                  create table users(
         | 
| 9 | 
            +
                    id      serial,
         | 
| 10 | 
            +
                    name    text,
         | 
| 11 | 
            +
                    age     integer,
         | 
| 12 | 
            +
                    height  float,
         | 
| 13 | 
            +
                    hacker  bool,
         | 
| 14 | 
            +
                    slacker bool,
         | 
| 15 | 
            +
                    nil     text default null,
         | 
| 16 | 
            +
                    created date not null default now(),
         | 
| 17 | 
            +
                    updated timestamp with time zone not null default now()
         | 
| 18 | 
            +
                  )
         | 
| 19 | 
            +
                }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                bind = [ 'jim', 32, 178.71, true, false ]
         | 
| 22 | 
            +
                @db.exec %q{insert into users(name,age,height,hacker,slacker) values($1, $2, $3, $4, $5)}, bind
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              it 'should typecast correctly' do
         | 
| 26 | 
            +
                result = @db.exec(%q{select * from users limit 1}).first
         | 
| 27 | 
            +
                assert_kind_of Integer,    result[:id]
         | 
| 28 | 
            +
                assert_kind_of String,     result[:name]
         | 
| 29 | 
            +
                assert_kind_of Integer,    result[:age]
         | 
| 30 | 
            +
                assert_kind_of Float,      result[:height]
         | 
| 31 | 
            +
                assert_kind_of TrueClass,  result[:hacker]
         | 
| 32 | 
            +
                assert_kind_of FalseClass, result[:slacker]
         | 
| 33 | 
            +
                assert_kind_of Date,       result[:created]
         | 
| 34 | 
            +
                assert_kind_of Time,       result[:updated]
         | 
| 35 | 
            +
                assert_equal   nil,        result[:nil]
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              it 'should cascade exceptions in yield' do
         | 
| 39 | 
            +
                assert_raises(RuntimeError) do
         | 
| 40 | 
            +
                  @db.exec(%q{select * from users limit 1}).each { raise "foo" }
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
              end
         | 
| 43 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,13 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: pg_typecast
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
               | 
| 4 | 
            +
              hash: 25
         | 
| 5 | 
            +
              prerelease: false
         | 
| 6 | 
            +
              segments: 
         | 
| 7 | 
            +
              - 0
         | 
| 8 | 
            +
              - 1
         | 
| 9 | 
            +
              - 1
         | 
| 10 | 
            +
              version: 0.1.1
         | 
| 5 11 | 
             
            platform: ruby
         | 
| 6 12 | 
             
            authors: 
         | 
| 7 13 | 
             
            - Bharanee Rathna
         | 
| @@ -9,19 +15,25 @@ autorequire: | |
| 9 15 | 
             
            bindir: bin
         | 
| 10 16 | 
             
            cert_chain: []
         | 
| 11 17 |  | 
| 12 | 
            -
            date: 2010-09- | 
| 18 | 
            +
            date: 2010-09-17 00:00:00 +10:00
         | 
| 13 19 | 
             
            default_executable: 
         | 
| 14 20 | 
             
            dependencies: 
         | 
| 15 21 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 16 22 | 
             
              name: pg
         | 
| 17 | 
            -
               | 
| 18 | 
            -
               | 
| 19 | 
            -
             | 
| 23 | 
            +
              prerelease: false
         | 
| 24 | 
            +
              requirement: &id001 !ruby/object:Gem::Requirement 
         | 
| 25 | 
            +
                none: false
         | 
| 20 26 | 
             
                requirements: 
         | 
| 21 27 | 
             
                - - ">="
         | 
| 22 28 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 29 | 
            +
                    hash: 59
         | 
| 30 | 
            +
                    segments: 
         | 
| 31 | 
            +
                    - 0
         | 
| 32 | 
            +
                    - 9
         | 
| 33 | 
            +
                    - 0
         | 
| 23 34 | 
             
                    version: 0.9.0
         | 
| 24 | 
            -
             | 
| 35 | 
            +
              type: :runtime
         | 
| 36 | 
            +
              version_requirements: *id001
         | 
| 25 37 | 
             
            description: Extensions to pg gem supporting typecasting.
         | 
| 26 38 | 
             
            email: 
         | 
| 27 39 | 
             
            - deepfryed@gmail.com
         | 
| @@ -40,6 +52,8 @@ files: | |
| 40 52 | 
             
            - ext/extconf.rb
         | 
| 41 53 | 
             
            - ext/pg_typecast.c
         | 
| 42 54 | 
             
            - pg_typecast.gemspec
         | 
| 55 | 
            +
            - test/helper.rb
         | 
| 56 | 
            +
            - test/test_types.rb
         | 
| 43 57 | 
             
            has_rdoc: true
         | 
| 44 58 | 
             
            homepage: http://github.com/deepfryed/pg_typecast
         | 
| 45 59 | 
             
            licenses: []
         | 
| @@ -50,23 +64,32 @@ rdoc_options: | |
| 50 64 | 
             
            require_paths: 
         | 
| 51 65 | 
             
            - lib
         | 
| 52 66 | 
             
            required_ruby_version: !ruby/object:Gem::Requirement 
         | 
| 67 | 
            +
              none: false
         | 
| 53 68 | 
             
              requirements: 
         | 
| 54 69 | 
             
              - - ">="
         | 
| 55 70 | 
             
                - !ruby/object:Gem::Version 
         | 
| 56 | 
            -
                   | 
| 57 | 
            -
             | 
| 71 | 
            +
                  hash: 49
         | 
| 72 | 
            +
                  segments: 
         | 
| 73 | 
            +
                  - 1
         | 
| 74 | 
            +
                  - 9
         | 
| 75 | 
            +
                  - 1
         | 
| 76 | 
            +
                  version: 1.9.1
         | 
| 58 77 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement 
         | 
| 78 | 
            +
              none: false
         | 
| 59 79 | 
             
              requirements: 
         | 
| 60 80 | 
             
              - - ">="
         | 
| 61 81 | 
             
                - !ruby/object:Gem::Version 
         | 
| 82 | 
            +
                  hash: 3
         | 
| 83 | 
            +
                  segments: 
         | 
| 84 | 
            +
                  - 0
         | 
| 62 85 | 
             
                  version: "0"
         | 
| 63 | 
            -
              version: 
         | 
| 64 86 | 
             
            requirements: []
         | 
| 65 87 |  | 
| 66 88 | 
             
            rubyforge_project: 
         | 
| 67 | 
            -
            rubygems_version: 1.3. | 
| 89 | 
            +
            rubygems_version: 1.3.7
         | 
| 68 90 | 
             
            signing_key: 
         | 
| 69 91 | 
             
            specification_version: 3
         | 
| 70 92 | 
             
            summary: Extensions to pg gem supporting typecasting.
         | 
| 71 | 
            -
            test_files:  | 
| 72 | 
            -
             | 
| 93 | 
            +
            test_files: 
         | 
| 94 | 
            +
            - test/helper.rb
         | 
| 95 | 
            +
            - test/test_types.rb
         |