dbd-pg 0.3.4 → 0.3.5

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.
@@ -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.4"
52
+ VERSION = "0.3.5"
53
53
  DESCRIPTION = "PostgreSQL DBI DBD"
54
54
 
55
55
  #
@@ -338,6 +338,7 @@ class DBI::DBD::Pg::Database < DBI::BaseDatabase
338
338
  when 'time', 'timetz' then DBI::Type::Timestamp
339
339
  when 'timestamp', 'timestamptz' then DBI::Type::Timestamp
340
340
  when 'date' then DBI::Type::Timestamp
341
+ when 'decimal', 'numeric' then DBI::Type::Decimal
341
342
  when 'bytea' then DBI::DBD::Pg::Type::ByteA
342
343
  end
343
344
  end
@@ -11,7 +11,7 @@
11
11
 
12
12
  assert(cols)
13
13
  assert_kind_of(Array, cols)
14
- assert_equal(2, cols.length)
14
+ assert_equal(4, cols.length)
15
15
 
16
16
  # the first column should always be "text_field" and have the following
17
17
  # properties:
@@ -30,19 +30,41 @@
30
30
  end
31
31
 
32
32
  assert_equal(
33
- DBI::Type::Varchar,
34
- DBI::TypeUtil.type_name_to_module(cols[0]["type_name"])
33
+ DBI::Type::Varchar.object_id,
34
+ DBI::TypeUtil.type_name_to_module(cols[0]["type_name"]).object_id
35
35
  )
36
36
 
37
37
  # the second column should always be "integer_field" and have the following
38
38
  # properties:
39
39
  assert_equal("integer_field", cols[1]["name"])
40
40
  assert(cols[1]["nullable"])
41
- assert_equal(1, cols[1]["scale"])
42
- assert_equal(2, cols[1]["precision"])
41
+ assert_equal(1, cols[2]["scale"])
42
+ assert_equal(2, cols[2]["precision"])
43
43
  assert_equal(
44
- DBI::Type::Decimal,
45
- DBI::TypeUtil.type_name_to_module(cols[1]["type_name"])
44
+ DBI::Type::Integer.object_id,
45
+ DBI::TypeUtil.type_name_to_module(cols[1]["type_name"]).object_id
46
+ )
47
+
48
+ # the second column should always be "integer_field" and have the following
49
+ # properties:
50
+ assert_equal("decimal_field", cols[2]["name"])
51
+ assert(cols[2]["nullable"])
52
+ assert_equal(1, cols[2]["scale"])
53
+ assert_equal(2, cols[2]["precision"])
54
+ assert_equal(
55
+ DBI::Type::Decimal.object_id,
56
+ DBI::TypeUtil.type_name_to_module(cols[2]["type_name"]).object_id
57
+ )
58
+
59
+ # the second column should always be "numeric_field" and have the following
60
+ # properties:
61
+ assert_equal("numeric_field", cols[3]["name"])
62
+ assert(cols[3]["nullable"])
63
+ assert_equal(6, cols[3]["scale"])
64
+ assert_equal(30, cols[3]["precision"])
65
+ assert_equal(
66
+ DBI::Type::Decimal.object_id,
67
+ DBI::TypeUtil.type_name_to_module(cols[3]["type_name"]).object_id
46
68
  )
47
69
 
48
70
  # finally, we ensure that every column in the array is a ColumnInfo
@@ -127,9 +149,9 @@
127
149
  case dbtype
128
150
  when "postgresql"
129
151
  tables.reject! { |x| x =~ /^pg_/ }
130
- assert_equal %w(array_test bit_test blob_test boolean_test bytea_test field_types_test names precision_test time_test timestamp_test view_names), tables
152
+ assert_equal %w(array_test bit_test blob_test boolean_test bytea_test db_specific_types_test field_types_test names precision_test time_test timestamp_test view_names), tables
131
153
  else
132
- assert_equal %w(bit_test blob_test boolean_test field_types_test names precision_test time_test timestamp_test view_names), tables
154
+ assert_equal %w(bit_test blob_test boolean_test db_specific_types_test field_types_test names precision_test time_test timestamp_test view_names), tables
133
155
  end
134
156
  end
135
157
 
@@ -44,7 +44,7 @@
44
44
 
45
45
  assert(cols)
46
46
  assert_kind_of(Array, cols)
47
- assert_equal(2, cols.length)
47
+ assert_equal(4, cols.length)
48
48
 
49
49
  # the first column should always be "text_field" and have the following
50
50
  # properties:
@@ -61,18 +61,49 @@
61
61
  end
62
62
 
63
63
  assert_equal(
64
- DBI::Type::Varchar,
65
- DBI::TypeUtil.type_name_to_module(cols[0]["type_name"])
64
+ DBI::Type::Varchar.object_id,
65
+ DBI::TypeUtil.type_name_to_module(cols[0]["type_name"]).object_id
66
66
  )
67
67
 
68
68
  # the second column should always be "integer_field" and have the following
69
69
  # properties:
70
70
  assert_equal("integer_field", cols[1]["name"])
71
- assert_equal(1, cols[1]["scale"])
72
- assert_equal(2, cols[1]["precision"])
71
+ # if these aren't set on the field, they should not exist
72
+ # FIXME mysql does not follow this rule, neither does ODBC
73
+ if dbtype == "mysql"
74
+ assert_equal(0, cols[1]["scale"])
75
+ assert_equal(11, cols[1]["precision"])
76
+ elsif dbtype == "odbc"
77
+ assert_equal(0, cols[1]["scale"])
78
+ assert_equal(10, cols[1]["precision"])
79
+ else
80
+ assert(!cols[1]["scale"])
81
+ assert(!cols[1]["precision"])
82
+ end
83
+
84
+ assert_equal(
85
+ DBI::Type::Integer.object_id,
86
+ DBI::TypeUtil.type_name_to_module(cols[1]["type_name"]).object_id
87
+ )
88
+
89
+ # the second column should always be "integer_field" and have the following
90
+ # properties:
91
+ assert_equal("decimal_field", cols[2]["name"])
92
+ assert_equal(1, cols[2]["scale"])
93
+ assert_equal(2, cols[2]["precision"])
94
+ assert_equal(
95
+ DBI::Type::Decimal.object_id,
96
+ DBI::TypeUtil.type_name_to_module(cols[2]["type_name"]).object_id
97
+ )
98
+
99
+ # the second column should always be "numeric_field" and have the following
100
+ # properties:
101
+ assert_equal("numeric_field", cols[3]["name"])
102
+ assert_equal(6, cols[3]["scale"])
103
+ assert_equal(30, cols[3]["precision"])
73
104
  assert_equal(
74
- DBI::Type::Decimal,
75
- DBI::TypeUtil.type_name_to_module(cols[1]["type_name"])
105
+ DBI::Type::Decimal.object_id,
106
+ DBI::TypeUtil.type_name_to_module(cols[3]["type_name"]).object_id
76
107
  )
77
108
 
78
109
  cols.each { |col| assert_kind_of(DBI::ColumnInfo, col) }
@@ -25,6 +25,34 @@
25
25
  end
26
26
  end
27
27
 
28
+ def test_numeric_types
29
+ assert(@dbh.convert_types)
30
+
31
+ @sth = @dbh.prepare("insert into precision_test (text_field, integer_field, decimal_field, numeric_field) values (?, ?, ?, ?)")
32
+ assert(@sth.convert_types)
33
+ 1.step(5) do |x|
34
+ @sth.execute("poop#{x}", x, x + 0.123, x + 0.234)
35
+ end
36
+
37
+ @sth.finish
38
+
39
+ @sth = @dbh.prepare("select integer_field, decimal_field, numeric_field from precision_test")
40
+ @sth.execute
41
+ col_info = @sth.column_info
42
+ 1.step(5) do |x|
43
+ row = @sth.fetch
44
+
45
+ assert_kind_of(Integer, row[0])
46
+ assert_kind_of(BigDecimal, row[1])
47
+ assert_kind_of(BigDecimal, row[2])
48
+
49
+ # FIXME BigDecimal requires a string and some databases will pad
50
+ # decimal/numeric with constrained precision. We should account for
51
+ # this, but I'm not quite sure how yet.
52
+ end
53
+ @sth.finish
54
+ end
55
+
28
56
  # FIXME
29
57
  # Ideally, this test should be split across the DBI tests and DBD, but for
30
58
  # now testing against the DBDs really doesn't cost us anything other than
@@ -14,6 +14,8 @@ drop table bit_test;
14
14
  ---
15
15
  drop table field_types_test;
16
16
  ---
17
+ drop table db_specific_types_test;
18
+ ---
17
19
  drop table array_test;
18
20
  ---
19
21
  drop table bytea_test;
@@ -91,23 +91,6 @@ class TestDbdPostgres < DBDConfig.testbase(:postgresql)
91
91
  @sth.finish
92
92
  end
93
93
 
94
- def test_tables
95
- assert_equal(
96
- [
97
- "array_test",
98
- "bit_test",
99
- "blob_test",
100
- "boolean_test",
101
- "bytea_test",
102
- "field_types_test",
103
- "names",
104
- "precision_test",
105
- "time_test",
106
- "timestamp_test",
107
- "view_names"
108
- ], @dbh.tables.reject { |x| x =~ /^pg_/ }.sort)
109
- end
110
-
111
94
  def test_columns
112
95
  assert_equal(
113
96
  [
@@ -9,7 +9,7 @@ insert into names (name, age) values ('Jim', 30);
9
9
  ---
10
10
  insert into names (name, age) values ('Bob', 21);
11
11
  ---
12
- create table precision_test (text_field varchar(20) primary key not null, integer_field decimal(2,1));
12
+ create table precision_test (text_field varchar(20) primary key not null, integer_field integer, decimal_field decimal(2,1), numeric_field numeric(30,6));
13
13
  ---
14
14
  CREATE TABLE blob_test (name VARCHAR(30), data OID);
15
15
  ---
@@ -30,6 +30,8 @@ create table bit_test (mybit bit);
30
30
  ---
31
31
  create table field_types_test (foo integer not null primary key default 1);
32
32
  ---
33
+ create table db_specific_types_test (foo integer);
34
+ ---
33
35
  create table array_test (foo integer[], bar integer[3], baz integer[3][3], quux varchar[2]);
34
36
  ---
35
37
  create table bytea_test (foo bytea);
metadata CHANGED
@@ -1,98 +1,89 @@
1
1
  --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.4
3
+ specification_version: 1
2
4
  name: dbd-pg
3
5
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
6
+ version: 0.3.5
7
+ date: 2008-11-09 00:00:00 -08:00
8
+ summary: PostgreSQL DBI DBD
9
+ require_paths:
10
+ - lib
11
+ email: ruby-dbi-users@rubyforge.org
12
+ homepage: http://www.rubyforge.org/projects/ruby-dbi
13
+ rubyforge_project: ruby-dbi
14
+ description: PostgreSQL DBI DBD
15
+ autorequire:
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.8.0
24
+ version:
5
25
  platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
6
29
  authors:
7
30
  - Erik Hollensbe
8
31
  - Christopher Maujean
9
- autorequire:
10
- bindir: bin
11
- cert_chain: []
12
-
13
- date: 2008-09-02 00:00:00 -07:00
14
- default_executable:
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
17
- name: dbi
18
- type: :runtime
19
- version_requirement:
20
- version_requirements: !ruby/object:Gem::Requirement
21
- requirements:
22
- - - ">="
23
- - !ruby/object:Gem::Version
24
- version: 0.4.0
25
- version:
26
- - !ruby/object:Gem::Dependency
27
- name: pg
28
- type: :runtime
29
- version_requirement:
30
- version_requirements: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
34
- version: "0"
35
- version:
36
- description: PostgreSQL DBI DBD
37
- email: ruby-dbi-users@rubyforge.org
38
- executables: []
39
-
40
- extensions: []
41
-
42
- extra_rdoc_files:
43
- - README
44
- - LICENSE
45
- - ChangeLog
46
32
  files:
47
- - test/dbd/general/test_types.rb
48
33
  - test/dbd/general/test_database.rb
49
34
  - test/dbd/general/test_statement.rb
50
- - test/dbd/postgresql/test_bytea.rb
51
- - test/dbd/postgresql/test_transactions.rb
52
- - test/dbd/postgresql/test_ping.rb
53
- - test/dbd/postgresql/down.sql
35
+ - test/dbd/general/test_types.rb
36
+ - test/dbd/postgresql/test_timestamp.rb
54
37
  - test/dbd/postgresql/test_arrays.rb
55
- - test/dbd/postgresql/testdbipg.rb
56
- - test/dbd/postgresql/up.sql
57
38
  - test/dbd/postgresql/base.rb
58
- - test/dbd/postgresql/test_timestamp.rb
39
+ - test/dbd/postgresql/down.sql
40
+ - test/dbd/postgresql/test_bytea.rb
59
41
  - test/dbd/postgresql/test_async.rb
60
42
  - test/dbd/postgresql/test_blob.rb
43
+ - test/dbd/postgresql/test_transactions.rb
44
+ - test/dbd/postgresql/testdbipg.rb
45
+ - test/dbd/postgresql/up.sql
46
+ - test/dbd/postgresql/test_ping.rb
61
47
  - lib/dbd/Pg.rb
62
- - lib/dbd/pg/exec.rb
48
+ - lib/dbd/pg/database.rb
63
49
  - lib/dbd/pg/tuples.rb
50
+ - lib/dbd/pg/exec.rb
64
51
  - lib/dbd/pg/type.rb
65
- - lib/dbd/pg/database.rb
66
52
  - lib/dbd/pg/statement.rb
67
53
  - test/DBD_TESTS
68
54
  - README
69
55
  - LICENSE
70
56
  - ChangeLog
71
- has_rdoc: true
72
- homepage: http://www.rubyforge.org/projects/ruby-dbi
73
- post_install_message:
57
+ test_files:
58
+ - test/ts_dbd.rb
74
59
  rdoc_options: []
75
60
 
76
- require_paths:
77
- - lib
78
- required_ruby_version: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: 1.8.0
83
- version:
84
- required_rubygems_version: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- version: "0"
89
- version:
61
+ extra_rdoc_files:
62
+ - README
63
+ - LICENSE
64
+ - ChangeLog
65
+ executables: []
66
+
67
+ extensions: []
68
+
90
69
  requirements: []
91
70
 
92
- rubyforge_project: ruby-dbi
93
- rubygems_version: 1.2.0
94
- signing_key:
95
- specification_version: 2
96
- summary: PostgreSQL DBI DBD
97
- test_files:
98
- - test/ts_dbd.rb
71
+ dependencies:
72
+ - !ruby/object:Gem::Dependency
73
+ name: dbi
74
+ version_requirement:
75
+ version_requirements: !ruby/object:Gem::Version::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: 0.4.0
80
+ version:
81
+ - !ruby/object:Gem::Dependency
82
+ name: pg
83
+ version_requirement:
84
+ version_requirements: !ruby/object:Gem::Version::Requirement
85
+ requirements:
86
+ - - ">"
87
+ - !ruby/object:Gem::Version
88
+ version: 0.0.0
89
+ version: