dbd-pg 0.3.5 → 0.3.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/lib/dbd/Pg.rb +6 -4
- data/lib/dbd/pg/statement.rb +1 -4
- data/test/DBD_TESTS +2 -0
- data/test/dbd/general/test_database.rb +12 -0
- data/test/dbd/general/test_statement.rb +46 -0
- data/test/dbd/general/test_types.rb +2 -2
- data/test/dbd/postgresql/base.rb +0 -1
- data/test/dbd/postgresql/base.rb.new +32 -0
- data/test/dbd/postgresql/test_arrays.rb +2 -2
- data/test/dbd/postgresql/test_blob.rb +1 -1
- data/test/dbd/postgresql/test_ping.rb +1 -1
- data/test/dbd/postgresql/testdbipg.rb +5 -5
- data/test/ts_dbd.rb +14 -1
- metadata +3 -2
    
        data/lib/dbd/Pg.rb
    CHANGED
    
    | @@ -49,7 +49,7 @@ module DBI | |
| 49 49 | 
             
                    # Only things that extend DBI's results are documented.
         | 
| 50 50 | 
             
                    #
         | 
| 51 51 | 
             
                    module Pg
         | 
| 52 | 
            -
                        VERSION          = "0.3. | 
| 52 | 
            +
                        VERSION          = "0.3.6"
         | 
| 53 53 | 
             
                        DESCRIPTION      = "PostgreSQL DBI DBD"
         | 
| 54 54 |  | 
| 55 55 | 
             
                        #
         | 
| @@ -172,9 +172,11 @@ pg = DBI::DBD::Pg | |
| 172 172 | 
             
            DBI::TypeUtil.register_conversion(pg.driver_name) do |obj|
         | 
| 173 173 | 
             
                newobj = case obj
         | 
| 174 174 | 
             
                         when ::DateTime
         | 
| 175 | 
            -
                             obj.strftime("%m | 
| 176 | 
            -
                         when ::Time | 
| 177 | 
            -
                             ::DateTime.parse(obj.to_s).strftime("% | 
| 175 | 
            +
                             obj.strftime("%Y-%m-%dT%H:%M:%S.%N")
         | 
| 176 | 
            +
                         when ::Time
         | 
| 177 | 
            +
                             ::DateTime.parse(obj.to_s).strftime("%H:%M:%S.%N")
         | 
| 178 | 
            +
                         when ::Date
         | 
| 179 | 
            +
                             obj.strftime("%Y-%m-%d")
         | 
| 178 180 | 
             
                         when ::Array
         | 
| 179 181 | 
             
                             pg.generate_array(obj)
         | 
| 180 182 | 
             
                         when DBI::DBD::Pg::Type::ByteA
         | 
    
        data/lib/dbd/pg/statement.rb
    CHANGED
    
    | @@ -125,10 +125,7 @@ class DBI::DBD::Pg::Statement < DBI::BaseStatement | |
| 125 125 | 
             
                # finish the statement at a lower level
         | 
| 126 126 | 
             
                def internal_finish
         | 
| 127 127 | 
             
                    @result.finish if @result
         | 
| 128 | 
            -
                     | 
| 129 | 
            -
                    if statement_exists.num_tuples > 0
         | 
| 130 | 
            -
                        @db._exec("DEALLOCATE \"#{@stmt_name}\"")
         | 
| 131 | 
            -
                    end
         | 
| 128 | 
            +
                    @db._exec("DEALLOCATE \"#{@stmt_name}\"") if @prepared rescue nil
         | 
| 132 129 | 
             
                end
         | 
| 133 130 |  | 
| 134 131 | 
             
                # prepare the statement at a lower level.
         | 
    
        data/test/DBD_TESTS
    CHANGED
    
    | @@ -2,6 +2,8 @@ | |
| 2 2 | 
             
            Using DBD tests
         | 
| 3 3 | 
             
            ================================================================================
         | 
| 4 4 |  | 
| 5 | 
            +
            Before you do anything, read the TESTING file.
         | 
| 6 | 
            +
             | 
| 5 7 | 
             
            Create a YAML file named .ruby-dbi.test-config.yaml in your home directory.
         | 
| 6 8 |  | 
| 7 9 | 
             
            This file is a hash of keys that determine what you want to test and how you
         | 
| @@ -1,4 +1,15 @@ | |
| 1 1 | 
             
            @class = Class.new(DBDConfig.testbase(DBDConfig.current_dbtype)) do
         | 
| 2 | 
            +
             | 
| 3 | 
            +
                def test_empty_query
         | 
| 4 | 
            +
                    ["", " ", "\t"].each do |str|
         | 
| 5 | 
            +
                        [:do, :prepare, :execute, :select_one, :select_all].each do |call|
         | 
| 6 | 
            +
                            assert_raises(DBI::InterfaceError) do
         | 
| 7 | 
            +
                                @dbh.send(call, str)
         | 
| 8 | 
            +
                            end
         | 
| 9 | 
            +
                        end
         | 
| 10 | 
            +
                    end
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
             | 
| 2 13 | 
             
                def test_ping
         | 
| 3 14 | 
             
                    assert @dbh.ping
         | 
| 4 15 | 
             
                    # XXX if it isn't obvious, this should be tested better. Not sure what
         | 
| @@ -40,6 +51,7 @@ | |
| 40 51 | 
             
                        assert(cols[1]["nullable"])
         | 
| 41 52 | 
             
                        assert_equal(1, cols[2]["scale"])
         | 
| 42 53 | 
             
                        assert_equal(2, cols[2]["precision"])
         | 
| 54 | 
            +
                        
         | 
| 43 55 | 
             
                        assert_equal(
         | 
| 44 56 | 
             
                            DBI::Type::Integer.object_id, 
         | 
| 45 57 | 
             
                            DBI::TypeUtil.type_name_to_module(cols[1]["type_name"]).object_id
         | 
| @@ -1,4 +1,50 @@ | |
| 1 1 | 
             
            @class = Class.new(DBDConfig.testbase(DBDConfig.current_dbtype)) do
         | 
| 2 | 
            +
               
         | 
| 3 | 
            +
                def prep_status_statement
         | 
| 4 | 
            +
                    @sth.finish if (@sth and !@sth.finished?)
         | 
| 5 | 
            +
                    @sth = @dbh.prepare("select * from names order by age")
         | 
| 6 | 
            +
                    @sth.raise_error = true
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                def test_status
         | 
| 10 | 
            +
                    names_rc = 3
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                    [:fetch, :fetch_hash, :each, :fetch_all].each do |call|
         | 
| 13 | 
            +
                        assert_raise(DBI::InterfaceError, DBI::NotSupportedError) do
         | 
| 14 | 
            +
                            prep_status_statement
         | 
| 15 | 
            +
                            @sth.send(call)
         | 
| 16 | 
            +
                        end
         | 
| 17 | 
            +
                    end
         | 
| 18 | 
            +
                    
         | 
| 19 | 
            +
                    # for these next three, it doesn't really matter what the args are, it should fail
         | 
| 20 | 
            +
                    assert_raises(DBI::InterfaceError, DBI::NotSupportedError) do
         | 
| 21 | 
            +
                        prep_status_statement
         | 
| 22 | 
            +
                        @sth.fetch_many(1) 
         | 
| 23 | 
            +
                    end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    assert_raises(DBI::InterfaceError, DBI::NotSupportedError) do
         | 
| 26 | 
            +
                        prep_status_statement
         | 
| 27 | 
            +
                        @sth.fetch_scroll(0, 0)
         | 
| 28 | 
            +
                    end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                    assert_raises(DBI::InterfaceError, DBI::NotSupportedError) do
         | 
| 31 | 
            +
                        prep_status_statement
         | 
| 32 | 
            +
                        @sth.each { |x| }
         | 
| 33 | 
            +
                    end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                    assert_raises(DBI::InterfaceError) do
         | 
| 36 | 
            +
                        prep_status_statement
         | 
| 37 | 
            +
                        @sth.execute
         | 
| 38 | 
            +
                        2.times { @sth.fetch_all }
         | 
| 39 | 
            +
                    end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                    assert_raises(DBI::InterfaceError) do
         | 
| 42 | 
            +
                        prep_status_statement
         | 
| 43 | 
            +
                        @sth.execute
         | 
| 44 | 
            +
                        # XXX fetch_many won't know it can't fetch anything until the third time around.
         | 
| 45 | 
            +
                        3.times { @sth.fetch_many(names_rc) }
         | 
| 46 | 
            +
                    end
         | 
| 47 | 
            +
                end
         | 
| 2 48 |  | 
| 3 49 | 
             
                def test_execute
         | 
| 4 50 | 
             
                    assert_nothing_raised do
         | 
| @@ -90,9 +90,9 @@ | |
| 90 90 | 
             
                    @sth = @dbh.prepare("select name, age from names order by age")
         | 
| 91 91 |  | 
| 92 92 | 
             
                    # can't bind_coltype before execute
         | 
| 93 | 
            -
                     | 
| 93 | 
            +
                    assert_raises(DBI::InterfaceError) { @sth.bind_coltype(1, DBI::Type::Float) }
         | 
| 94 94 | 
             
                    # can't index < 1
         | 
| 95 | 
            -
                     | 
| 95 | 
            +
                    assert_raises(DBI::InterfaceError) { @sth.bind_coltype(0, DBI::Type::Float) }
         | 
| 96 96 | 
             
                end
         | 
| 97 97 |  | 
| 98 98 | 
             
                def test_noconv
         | 
    
        data/test/dbd/postgresql/base.rb
    CHANGED
    
    
| @@ -0,0 +1,32 @@ | |
| 1 | 
            +
            require 'test/unit'
         | 
| 2 | 
            +
            require 'fileutils'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            DBDConfig.set_testbase(:postgresql, Class.new(Test::Unit::TestCase) do
         | 
| 5 | 
            +
                    
         | 
| 6 | 
            +
                    def dbtype
         | 
| 7 | 
            +
                        "postgresql"
         | 
| 8 | 
            +
                    end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                    def test_base
         | 
| 11 | 
            +
                        assert_equal(@dbh.driver_name, "Pg")
         | 
| 12 | 
            +
                        assert_kind_of(DBI::DBD::Pg::Database, @dbh.instance_variable_get(:@handle))
         | 
| 13 | 
            +
                    end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    def set_base_dbh
         | 
| 16 | 
            +
                        config = DBDConfig.get_config['postgresql']
         | 
| 17 | 
            +
                        @dbh = DBI.connect("dbi:Pg:#{config['dbname']}", config['username'], config['password'])
         | 
| 18 | 
            +
                    end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                    def setup
         | 
| 21 | 
            +
                        set_base_dbh
         | 
| 22 | 
            +
                        DBDConfig.inject_sql(@dbh, dbtype, "dbd/postgresql/up.sql")
         | 
| 23 | 
            +
                    end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    def teardown
         | 
| 26 | 
            +
                        @sth.finish if @sth && !@sth.finished?
         | 
| 27 | 
            +
                        config = DBDConfig.get_config['postgresql']
         | 
| 28 | 
            +
                        DBDConfig.inject_sql(@dbh, dbtype, "dbd/postgresql/down.sql")
         | 
| 29 | 
            +
                        @dbh.disconnect
         | 
| 30 | 
            +
                    end
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
            )
         | 
| @@ -138,11 +138,11 @@ class TestPostgresArray < DBDConfig.testbase(:postgresql) | |
| 138 138 | 
             
                        sth.execute('{1,2,3}')
         | 
| 139 139 | 
             
                    end
         | 
| 140 140 |  | 
| 141 | 
            -
                     | 
| 141 | 
            +
                    assert_raises(DBI::ProgrammingError) do
         | 
| 142 142 | 
             
                        sth.execute('{{1,2,3,4}, {1,2,3}}')
         | 
| 143 143 | 
             
                    end
         | 
| 144 144 |  | 
| 145 | 
            -
                     | 
| 145 | 
            +
                    assert_raises(DBI::ProgrammingError) do
         | 
| 146 146 | 
             
                        sth.execute('{{1,2,3}, {1,2,3,4}}')
         | 
| 147 147 | 
             
                    end
         | 
| 148 148 |  | 
| @@ -25,7 +25,7 @@ class TestPostgresBlob < DBDConfig.testbase(:postgresql) | |
| 25 25 | 
             
                        index += 1
         | 
| 26 26 | 
             
                        assert_equal DATA, @dbh.func(:blob_read, data, DATA.length)
         | 
| 27 27 | 
             
                        @dbh.func(:blob_export, data, '/tmp/pg_dbi_read_test')
         | 
| 28 | 
            -
                        assert_equal DATA, File. | 
| 28 | 
            +
                        assert_equal DATA, File.read('/tmp/pg_dbi_read_test')
         | 
| 29 29 | 
             
                    end
         | 
| 30 30 |  | 
| 31 31 | 
             
                    assert_equal 3, index
         | 
| @@ -50,7 +50,7 @@ class TestDbdPostgres < DBDConfig.testbase(:postgresql) | |
| 50 50 | 
             
                def test_binding
         | 
| 51 51 | 
             
                    assert(@dbh["pg_native_binding"])
         | 
| 52 52 |  | 
| 53 | 
            -
                     | 
| 53 | 
            +
                    assert_raises(DBI::ProgrammingError) do
         | 
| 54 54 | 
             
                        @sth = @dbh.prepare("select * from names where age IS NOT ?")
         | 
| 55 55 | 
             
                        @sth.execute("NULL")
         | 
| 56 56 | 
             
                        @sth.finish
         | 
| @@ -153,15 +153,15 @@ class TestDbdPostgres < DBDConfig.testbase(:postgresql) | |
| 153 153 |  | 
| 154 154 | 
             
              def test_connect_errors
         | 
| 155 155 | 
             
                dbd = nil
         | 
| 156 | 
            -
                ex =  | 
| 156 | 
            +
                ex = assert_raises(DBI::OperationalError) {
         | 
| 157 157 | 
             
                  dbd = DBI::DBD::Pg::Database.new('rubytest:1234', 'jim', nil, {})
         | 
| 158 158 | 
             
                }
         | 
| 159 | 
            -
                ex =  | 
| 159 | 
            +
                ex = assert_raises(DBI::OperationalError) {
         | 
| 160 160 | 
             
                  dbd = DBI::DBD::Pg::Database.new('bad_db_name', 'jim', nil, {})
         | 
| 161 161 | 
             
                }
         | 
| 162 162 |  | 
| 163 163 | 
             
                # this corresponds to the test_parse_url_expected_errors test in tc_dbi.rb
         | 
| 164 | 
            -
                 | 
| 164 | 
            +
                assert_raises(DBI::InterfaceError) do
         | 
| 165 165 | 
             
                    DBI.connect("dbi:Pg").disconnect
         | 
| 166 166 | 
             
                end
         | 
| 167 167 |  | 
| @@ -197,7 +197,7 @@ class TestDbdPostgres < DBDConfig.testbase(:postgresql) | |
| 197 197 |  | 
| 198 198 | 
             
              def test_bad_command
         | 
| 199 199 | 
             
                dbd = get_dbd
         | 
| 200 | 
            -
                 | 
| 200 | 
            +
                assert_raises(DBI::ProgrammingError) {
         | 
| 201 201 | 
             
                  dbd.do("INSERT INTO bad_table (name, age) VALUES('Dave', 12)")
         | 
| 202 202 | 
             
                }
         | 
| 203 203 | 
             
              ensure
         | 
    
        data/test/ts_dbd.rb
    CHANGED
    
    | @@ -1,3 +1,5 @@ | |
| 1 | 
            +
            require 'rubygems'
         | 
| 2 | 
            +
            gem 'test-unit'
         | 
| 1 3 | 
             
            # figure out what tests to run
         | 
| 2 4 | 
             
            require 'yaml'
         | 
| 3 5 | 
             
            require 'test/unit/testsuite'
         | 
| @@ -17,6 +19,16 @@ module Test::Unit::Assertions | |
| 17 19 | 
             
                end
         | 
| 18 20 | 
             
            end
         | 
| 19 21 |  | 
| 22 | 
            +
            class Class
         | 
| 23 | 
            +
                def name=(klass_name)
         | 
| 24 | 
            +
                    @name = klass_name
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                def name
         | 
| 28 | 
            +
                    return @name || super
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
            end
         | 
| 31 | 
            +
             | 
| 20 32 | 
             
            module DBDConfig
         | 
| 21 33 | 
             
                @testbase = { }
         | 
| 22 34 | 
             
                @current_dbtype = nil
         | 
| @@ -68,6 +80,7 @@ module DBDConfig | |
| 68 80 |  | 
| 69 81 | 
             
                def self.set_testbase(klass_name, klass)
         | 
| 70 82 | 
             
                    @testbase[klass_name] = klass
         | 
| 83 | 
            +
                    klass.name = klass_name.to_s
         | 
| 71 84 | 
             
                end
         | 
| 72 85 |  | 
| 73 86 | 
             
                def self.suite
         | 
| @@ -110,7 +123,7 @@ if __FILE__ == $0 | |
| 110 123 | 
             
                        Dir["dbd/#{dbtype}/test*.rb"].each { |file| require file }
         | 
| 111 124 | 
             
                        # run the general tests
         | 
| 112 125 | 
             
                        DBDConfig.current_dbtype = dbtype.to_sym
         | 
| 113 | 
            -
                        Dir["dbd/general/test*.rb"].each { |file| load file; DBDConfig.suite << @class }
         | 
| 126 | 
            +
                        Dir["dbd/general/test*.rb"].each { |file| load file; @class.name = file; DBDConfig.suite << @class }
         | 
| 114 127 | 
             
                    end
         | 
| 115 128 | 
             
                elsif !config["dbtypes"]
         | 
| 116 129 | 
             
                    warn "Please see test/DBD_TESTS for information on configuring DBD tests."
         | 
    
        metadata
    CHANGED
    
    | @@ -3,8 +3,8 @@ rubygems_version: 0.9.4 | |
| 3 3 | 
             
            specification_version: 1
         | 
| 4 4 | 
             
            name: dbd-pg
         | 
| 5 5 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 6 | 
            -
              version: 0.3. | 
| 7 | 
            -
            date: 2008-11- | 
| 6 | 
            +
              version: 0.3.6
         | 
| 7 | 
            +
            date: 2008-11-28 00:00:00 -08:00
         | 
| 8 8 | 
             
            summary: PostgreSQL DBI DBD
         | 
| 9 9 | 
             
            require_paths: 
         | 
| 10 10 | 
             
            - lib
         | 
| @@ -41,6 +41,7 @@ files: | |
| 41 41 | 
             
            - test/dbd/postgresql/test_async.rb
         | 
| 42 42 | 
             
            - test/dbd/postgresql/test_blob.rb
         | 
| 43 43 | 
             
            - test/dbd/postgresql/test_transactions.rb
         | 
| 44 | 
            +
            - test/dbd/postgresql/base.rb.new
         | 
| 44 45 | 
             
            - test/dbd/postgresql/testdbipg.rb
         | 
| 45 46 | 
             
            - test/dbd/postgresql/up.sql
         | 
| 46 47 | 
             
            - test/dbd/postgresql/test_ping.rb
         |