ruby-postgres 0.7.1.2005.11.24 → 0.7.1.2005.11.26
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/Contributors +1 -1
- data/postgres.c +33 -15
- data/ruby-postgres.gemspec +1 -1
- data/test.rb +45 -0
- metadata +3 -2
    
        data/Contributors
    CHANGED
    
    
    
        data/postgres.c
    CHANGED
    
    | @@ -75,9 +75,13 @@ static VALUE rb_ePGError; | |
| 75 75 | 
             
            static VALUE rb_cPGlarge; 
         | 
| 76 76 | 
             
            static VALUE rb_cPGrow;
         | 
| 77 77 |  | 
| 78 | 
            +
            static VALUE pgconn_lastval _((VALUE));
         | 
| 79 | 
            +
             | 
| 78 80 | 
             
            static VALUE pgresult_result_with_clear _((VALUE));
         | 
| 79 81 | 
             
            static VALUE pgresult_new _((PGresult*));
         | 
| 80 82 |  | 
| 83 | 
            +
            static int translate_results = 1;
         | 
| 84 | 
            +
             | 
| 81 85 | 
             
            /* Large Object support */
         | 
| 82 86 | 
             
            typedef struct pglarge_object
         | 
| 83 87 | 
             
            {
         | 
| @@ -168,10 +172,22 @@ pgconn_connect(argc, argv, self) | |
| 168 172 | 
             
                    rb_raise(rb_ePGError, StringValuePtr(message));
         | 
| 169 173 | 
             
                }
         | 
| 170 174 |  | 
| 175 | 
            +
                if (PQserverVersion(conn) >= 80100) {
         | 
| 176 | 
            +
                    rb_define_singleton_method(self, "lastval", pgconn_lastval, 0);
         | 
| 177 | 
            +
                }
         | 
| 178 | 
            +
             | 
| 171 179 | 
             
                Data_Set_Struct(self, conn);
         | 
| 172 180 | 
             
                return self;
         | 
| 173 181 | 
             
            }
         | 
| 174 182 |  | 
| 183 | 
            +
            static VALUE
         | 
| 184 | 
            +
            pgconn_s_translate_results_set(self, fact)
         | 
| 185 | 
            +
                VALUE self, fact;
         | 
| 186 | 
            +
            {
         | 
| 187 | 
            +
                translate_results = (fact == Qfalse || fact == Qnil) ? 0 : 1;
         | 
| 188 | 
            +
                return Qnil;
         | 
| 189 | 
            +
            }
         | 
| 190 | 
            +
             | 
| 175 191 | 
             
            /*
         | 
| 176 192 | 
             
             * See #new.
         | 
| 177 193 | 
             
             */
         | 
| @@ -223,7 +239,7 @@ pgconn_s_format(self, obj) | |
| 223 239 | 
             
                  return result;
         | 
| 224 240 |  | 
| 225 241 | 
             
                default:
         | 
| 226 | 
            -
                  if ( | 
| 242 | 
            +
                  if (CLASS_OF(obj) == rb_cBigDecimal) {
         | 
| 227 243 | 
             
                      return rb_funcall(obj, rb_intern("to_s"), 1, rb_str_new2("F"));
         | 
| 228 244 | 
             
                  }
         | 
| 229 245 | 
             
                  else if (rb_block_given_p()) {
         | 
| @@ -393,7 +409,6 @@ pgconn_s_unescape_bytea(self, obj) | |
| 393 409 | 
             
                return ret;
         | 
| 394 410 | 
             
            }
         | 
| 395 411 |  | 
| 396 | 
            -
            #ifndef HAVE_RB_DEFINE_ALLOC_FUNC
         | 
| 397 412 | 
             
            /*
         | 
| 398 413 | 
             
             * call-seq:
         | 
| 399 414 | 
             
             *     PGconn.connect(host,  port, options, tty, dbname, login, passwd)  =>  conn
         | 
| @@ -410,6 +425,7 @@ pgconn_s_unescape_bytea(self, obj) | |
| 410 425 | 
             
             *  
         | 
| 411 426 | 
             
             *  On failure, it raises a PGError exception.
         | 
| 412 427 | 
             
             */
         | 
| 428 | 
            +
            #ifndef HAVE_RB_DEFINE_ALLOC_FUNC
         | 
| 413 429 | 
             
            static VALUE
         | 
| 414 430 | 
             
            pgconn_s_new(argc, argv, klass)
         | 
| 415 431 | 
             
                int argc;
         | 
| @@ -422,9 +438,6 @@ pgconn_s_new(argc, argv, klass) | |
| 422 438 | 
             
            }
         | 
| 423 439 | 
             
            #endif
         | 
| 424 440 |  | 
| 425 | 
            -
            /*
         | 
| 426 | 
            -
             * See #new.
         | 
| 427 | 
            -
             */
         | 
| 428 441 | 
             
            static VALUE
         | 
| 429 442 | 
             
            pgconn_init(argc, argv, self)
         | 
| 430 443 | 
             
                int argc;
         | 
| @@ -441,7 +454,7 @@ get_pgconn(obj) | |
| 441 454 | 
             
                PGconn *conn;
         | 
| 442 455 |  | 
| 443 456 | 
             
                Data_Get_Struct(obj, PGconn, conn);
         | 
| 444 | 
            -
                if (conn ==  | 
| 457 | 
            +
                if (conn == NULL) rb_raise(rb_ePGError, "closed connection");
         | 
| 445 458 | 
             
                return conn;
         | 
| 446 459 | 
             
            }
         | 
| 447 460 |  | 
| @@ -1079,8 +1092,6 @@ pgconn_lastval(obj) | |
| 1079 1092 | 
             
                PGresult *result;
         | 
| 1080 1093 | 
             
                VALUE lastval, error;
         | 
| 1081 1094 |  | 
| 1082 | 
            -
                if (PQserverVersion(conn) < 80100) return Qnil;
         | 
| 1083 | 
            -
             | 
| 1084 1095 | 
             
                result = PQexec(conn, "select lastval()");
         | 
| 1085 1096 | 
             
                if (!result) rb_raise(rb_ePGError, PQerrorMessage(conn));
         | 
| 1086 1097 |  | 
| @@ -1146,11 +1157,11 @@ free_pgresult(ptr) | |
| 1146 1157 | 
             
            #define SCALE_MASK 0xffff
         | 
| 1147 1158 |  | 
| 1148 1159 | 
             
            static int
         | 
| 1149 | 
            -
             | 
| 1160 | 
            +
            has_numeric_scale(typmod)
         | 
| 1150 1161 | 
             
                int typmod;
         | 
| 1151 1162 | 
             
            {
         | 
| 1152 | 
            -
                if ( | 
| 1153 | 
            -
                return typmod & SCALE_MASK;
         | 
| 1163 | 
            +
                if (typmod == -1) return 1;
         | 
| 1164 | 
            +
                return (typmod - VARHDRSZ) & SCALE_MASK;
         | 
| 1154 1165 | 
             
            }
         | 
| 1155 1166 |  | 
| 1156 1167 | 
             
            #define PARSE(klass, string) rb_funcall(klass, rb_intern("parse"), 1, rb_tainted_str_new2(string));
         | 
| @@ -1161,11 +1172,18 @@ fetch_pgresult(result, row, column) | |
| 1161 1172 | 
             
                int row;
         | 
| 1162 1173 | 
             
                int column;
         | 
| 1163 1174 | 
             
            {
         | 
| 1175 | 
            +
                char* string;
         | 
| 1176 | 
            +
             | 
| 1164 1177 | 
             
                if (PQgetisnull(result, row, column)) {
         | 
| 1165 1178 | 
             
                    return Qnil;
         | 
| 1166 1179 | 
             
                }
         | 
| 1167 1180 |  | 
| 1168 | 
            -
                 | 
| 1181 | 
            +
                string = PQgetvalue(result, row, column);
         | 
| 1182 | 
            +
             | 
| 1183 | 
            +
                if (!translate_results) {
         | 
| 1184 | 
            +
                    return rb_tainted_str_new2(string);
         | 
| 1185 | 
            +
                }
         | 
| 1186 | 
            +
             | 
| 1169 1187 | 
             
                switch (PQftype(result, column)) {
         | 
| 1170 1188 |  | 
| 1171 1189 | 
             
                case BOOLOID:
         | 
| @@ -1175,7 +1193,7 @@ fetch_pgresult(result, row, column) | |
| 1175 1193 | 
             
                  return pgconn_s_unescape_bytea(NULL, rb_tainted_str_new2(string));
         | 
| 1176 1194 |  | 
| 1177 1195 | 
             
                case NUMERICOID:
         | 
| 1178 | 
            -
                  if ( | 
| 1196 | 
            +
                  if (has_numeric_scale(PQfmod(result, column))) {
         | 
| 1179 1197 | 
             
                      return rb_funcall(rb_cBigDecimal, rb_intern("new"), 1, rb_tainted_str_new2(string));
         | 
| 1180 1198 | 
             
                  }
         | 
| 1181 1199 | 
             
                  /* when scale == 0 return inum */
         | 
| @@ -1726,7 +1744,7 @@ get_pglarge(obj) | |
| 1726 1744 | 
             
            {
         | 
| 1727 1745 | 
             
                PGlarge *pglarge;
         | 
| 1728 1746 | 
             
                Data_Get_Struct(obj, PGlarge, pglarge);
         | 
| 1729 | 
            -
                if (pglarge ==  | 
| 1747 | 
            +
                if (pglarge == NULL) rb_raise(rb_ePGError, "invalid large object");
         | 
| 1730 1748 | 
             
                return pglarge;
         | 
| 1731 1749 | 
             
            }
         | 
| 1732 1750 |  | 
| @@ -2337,6 +2355,7 @@ Init_postgres() | |
| 2337 2355 | 
             
                rb_define_singleton_method(rb_cPGconn, "quote", pgconn_s_quote, 1);
         | 
| 2338 2356 | 
             
                rb_define_singleton_method(rb_cPGconn, "escape_bytea", pgconn_s_escape_bytea, 1);
         | 
| 2339 2357 | 
             
                rb_define_singleton_method(rb_cPGconn, "unescape_bytea", pgconn_s_unescape_bytea, 1);
         | 
| 2358 | 
            +
                rb_define_singleton_method(rb_cPGconn, "translate_results=", pgconn_s_translate_results_set, 1);
         | 
| 2340 2359 |  | 
| 2341 2360 | 
             
                rb_define_const(rb_cPGconn, "CONNECTION_OK", INT2FIX(CONNECTION_OK));
         | 
| 2342 2361 | 
             
                rb_define_const(rb_cPGconn, "CONNECTION_BAD", INT2FIX(CONNECTION_BAD));
         | 
| @@ -2368,7 +2387,6 @@ Init_postgres() | |
| 2368 2387 | 
             
                rb_define_method(rb_cPGconn, "transaction_status", pgconn_transaction_status, 0);
         | 
| 2369 2388 | 
             
                rb_define_method(rb_cPGconn, "protocol_version", pgconn_protocol_version, 0);
         | 
| 2370 2389 | 
             
                rb_define_method(rb_cPGconn, "server_version", pgconn_server_version, 0);
         | 
| 2371 | 
            -
                rb_define_method(rb_cPGconn, "lastval", pgconn_lastval, 0);
         | 
| 2372 2390 |  | 
| 2373 2391 | 
             
            #ifdef HAVE_PQSETCLIENTENCODING
         | 
| 2374 2392 | 
             
                rb_define_method(rb_cPGconn, "client_encoding", pgconn_client_encoding, 0);
         | 
    
        data/ruby-postgres.gemspec
    CHANGED
    
    | @@ -14,7 +14,7 @@ SPEC = Gem::Specification.new do |s| | |
| 14 14 | 
             
              s.require_path      = '.'
         | 
| 15 15 | 
             
              s.autorequire       = 'postgres'
         | 
| 16 16 |  | 
| 17 | 
            -
              if File.exists? 'postgres.so' and PLATFORM =~ /mingw/
         | 
| 17 | 
            +
              if File.exists? 'postgres.so' and PLATFORM =~ /mingw|mswin/
         | 
| 18 18 | 
             
                s.platform        = Gem::Platform::WIN32
         | 
| 19 19 | 
             
              else
         | 
| 20 20 | 
             
                s.platform        = Gem::Platform::RUBY
         | 
    
        data/test.rb
    ADDED
    
    | @@ -0,0 +1,45 @@ | |
| 1 | 
            +
            require 'postgres'
         | 
| 2 | 
            +
            require 'date'
         | 
| 3 | 
            +
            require 'test/unit'
         | 
| 4 | 
            +
            class TC_MyTest < Test::Unit::TestCase
         | 
| 5 | 
            +
              def setup
         | 
| 6 | 
            +
                @conn = PGconn.new('dbname' => 'template1')
         | 
| 7 | 
            +
              end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              def test_conversion
         | 
| 10 | 
            +
                query = <<-EOT
         | 
| 11 | 
            +
            select true as true_value,
         | 
| 12 | 
            +
                   false as false_value,
         | 
| 13 | 
            +
                   '12345\\\\111\\\\000\\\\111TEST'::bytea as bytea_value,
         | 
| 14 | 
            +
                   '2005-11-30'::date as date_value,
         | 
| 15 | 
            +
                   '12:00:00'::time as time_value,
         | 
| 16 | 
            +
                   now() as date_time_value,
         | 
| 17 | 
            +
                   1.5::float as float_value,
         | 
| 18 | 
            +
                   12345.5678::numeric as numeric_value,
         | 
| 19 | 
            +
                   1234.56::numeric(10) as numeric_10_value,
         | 
| 20 | 
            +
                   12345.12345::numeric(10,5) as numeric_10_5_value
         | 
| 21 | 
            +
            EOT
         | 
| 22 | 
            +
                res = @conn.exec(query)
         | 
| 23 | 
            +
                assert_equal(res.num_tuples, 1)
         | 
| 24 | 
            +
                assert_equal(res.num_fields, 10)
         | 
| 25 | 
            +
                tuple = res.result[0]
         | 
| 26 | 
            +
                puts tuple
         | 
| 27 | 
            +
                assert_equal(true, tuple['true_value'])
         | 
| 28 | 
            +
                assert_equal(false, tuple['false_value'])
         | 
| 29 | 
            +
                assert_equal("12345\111\000\111TEST", tuple['bytea_value'])
         | 
| 30 | 
            +
                puts PGconn.escape_bytea(tuple['bytea_value'])
         | 
| 31 | 
            +
                assert_equal("12345I\\\\000ITEST", PGconn.escape_bytea(tuple['bytea_value']))
         | 
| 32 | 
            +
                assert_equal(Date.parse('2005-11-30'), tuple['date_value'])
         | 
| 33 | 
            +
                puts tuple['date_value']
         | 
| 34 | 
            +
                assert_kind_of(Time, tuple['time_value'])
         | 
| 35 | 
            +
                puts tuple['time_value']
         | 
| 36 | 
            +
                assert_kind_of(DateTime, tuple['date_time_value'])
         | 
| 37 | 
            +
                puts tuple['date_time_value']
         | 
| 38 | 
            +
                assert_equal(1.5, tuple['float_value'])
         | 
| 39 | 
            +
                puts PGconn.quote(tuple['numeric_value'])
         | 
| 40 | 
            +
                assert_equal(BigDecimal("12345.5678"), tuple['numeric_value'])
         | 
| 41 | 
            +
                assert_equal(1235, tuple['numeric_10_value'])
         | 
| 42 | 
            +
                assert_kind_of(Integer, tuple['numeric_10_value'])
         | 
| 43 | 
            +
                assert_equal(BigDecimal("12345.12345"), tuple['numeric_10_5_value'])
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -3,8 +3,8 @@ rubygems_version: 0.8.11 | |
| 3 3 | 
             
            specification_version: 1
         | 
| 4 4 | 
             
            name: ruby-postgres
         | 
| 5 5 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 6 | 
            -
              version: 0.7.1.2005.11. | 
| 7 | 
            -
            date: 2005-11- | 
| 6 | 
            +
              version: 0.7.1.2005.11.26
         | 
| 7 | 
            +
            date: 2005-11-26 00:00:00 -06:00
         | 
| 8 8 | 
             
            summary: Ruby extension for PostgreSQL database coordination
         | 
| 9 9 | 
             
            require_paths: 
         | 
| 10 10 | 
             
            - .
         | 
| @@ -30,6 +30,7 @@ authors: | |
| 30 30 | 
             
            files: 
         | 
| 31 31 | 
             
            - sample
         | 
| 32 32 | 
             
            - Contributors
         | 
| 33 | 
            +
            - test.rb
         | 
| 33 34 | 
             
            - ruby-postgres.gemspec
         | 
| 34 35 | 
             
            - ChangeLog
         | 
| 35 36 | 
             
            - libpq-compat.c
         |