do_postgres 0.10.2 → 0.10.3

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.
@@ -1,3 +1,7 @@
1
+ ## 0.10.3 2011-01-30
2
+ * Reworked transactions
3
+ * Fix a DST bug that could cause datetimes in the wrong timezone
4
+
1
5
  ## 0.10.2 2010-05-19
2
6
  * Make Encoding.default_internal aware
3
7
  * Rework logging for making callbacks possible
data/Rakefile CHANGED
@@ -11,7 +11,7 @@ JRUBY = RUBY_PLATFORM =~ /java/
11
11
  IRONRUBY = defined?(RUBY_ENGINE) && RUBY_ENGINE == 'ironruby'
12
12
  WINDOWS = Gem.win_platform? || (JRUBY && ENV_JAVA['os.name'] =~ /windows/i)
13
13
  SUDO = WINDOWS ? '' : ('sudo' unless ENV['SUDOLESS'])
14
- BINARY_VERSION = '8.3.10'
14
+ BINARY_VERSION = '8.3.13'
15
15
 
16
16
  CLEAN.include(%w[ {tmp,pkg}/ **/*.{o,so,bundle,jar,log,a,gem,dSYM,obj,pdb,exp,DS_Store,rbc,db} ext/do_postgres/Makefile ext-java/target ])
17
17
 
@@ -38,7 +38,7 @@ begin
38
38
  gem.add_dependency 'data_objects', DataObjects::Postgres::VERSION
39
39
 
40
40
  gem.add_development_dependency 'bacon', '~>1.1'
41
- gem.add_development_dependency 'rake-compiler', '~>0.7'
41
+ gem.add_development_dependency 'rake-compiler', '= 0.7.0'
42
42
 
43
43
  gem.has_rdoc = false
44
44
  gem.rubyforge_project = 'dorb'
@@ -201,10 +201,10 @@ static VALUE parse_date_time(const char *date) {
201
201
  do_int64 num, den;
202
202
 
203
203
  long int gmt_offset;
204
- int is_dst;
204
+ int dst_adjustment;
205
205
 
206
206
  time_t rawtime;
207
- struct tm * timeinfo;
207
+ struct tm timeinfo;
208
208
 
209
209
  int tokens_read, max_tokens;
210
210
 
@@ -234,22 +234,50 @@ static VALUE parse_date_time(const char *date) {
234
234
  }
235
235
  // We read the Date and Time, default to the current locale's offset
236
236
 
237
+ tzset();
238
+
237
239
  // Get localtime
238
240
  time(&rawtime);
239
- timeinfo = localtime(&rawtime);
241
+ #ifdef HAVE_LOCALTIME_R
242
+ localtime_r(&rawtime, &timeinfo);
243
+ #else
244
+ // Thread unsafe, this is used on Windows...
245
+ timeinfo = *localtime(&rawtime);
246
+ #endif
240
247
 
241
- is_dst = timeinfo->tm_isdst * 3600;
248
+ timeinfo.tm_sec = sec;
249
+ timeinfo.tm_min = min;
250
+ timeinfo.tm_hour = hour;
251
+ timeinfo.tm_mday = day;
252
+ timeinfo.tm_mon = month;
253
+ timeinfo.tm_year = year - 1900;
254
+ timeinfo.tm_isdst = -1;
255
+
256
+ // Update tm_isdst
257
+ mktime(&timeinfo);
258
+
259
+ if (timeinfo.tm_isdst) {
260
+ dst_adjustment = 3600;
261
+ } else {
262
+ dst_adjustment = 0;
263
+ }
242
264
 
265
+ #ifdef HAVE_GMTIME_R
243
266
  // Reset to GM Time
244
- timeinfo = gmtime(&rawtime);
267
+ gmtime_r(&rawtime, &timeinfo);
268
+ #else
269
+ // Same as for localtime_r above
270
+ timeinfo = *gmtime(&rawtime);
271
+ #endif
245
272
 
246
- gmt_offset = mktime(timeinfo) - rawtime;
273
+ gmt_offset = rawtime - mktime(&timeinfo);
247
274
 
248
- if ( is_dst > 0 )
249
- gmt_offset -= is_dst;
275
+ if (dst_adjustment) {
276
+ gmt_offset += dst_adjustment;
277
+ }
250
278
 
251
- hour_offset = -((int)gmt_offset / 3600);
252
- minute_offset = -((int)gmt_offset % 3600 / 60);
279
+ hour_offset = ((int)gmt_offset / 3600);
280
+ minute_offset = ((int)gmt_offset % 3600 / 60);
253
281
 
254
282
  } else {
255
283
  // Something went terribly wrong
@@ -820,7 +848,11 @@ static VALUE cCommand_execute_non_query(int argc, VALUE *argv[], VALUE self) {
820
848
  status = PQresultStatus(response);
821
849
 
822
850
  if ( status == PGRES_TUPLES_OK ) {
823
- insert_id = INT2NUM(atoi(PQgetvalue(response, 0, 0)));
851
+ if (PQgetlength(response, 0, 0) == 0) {
852
+ insert_id = Qnil;
853
+ } else {
854
+ insert_id = INT2NUM(atoi(PQgetvalue(response, 0, 0)));
855
+ }
824
856
  affected_rows = INT2NUM(atoi(PQcmdTuples(response)));
825
857
  }
826
858
  else if ( status == PGRES_COMMAND_OK ) {
@@ -984,6 +1016,7 @@ static VALUE cReader_field_count(VALUE self) {
984
1016
 
985
1017
  void Init_do_postgres() {
986
1018
  rb_require("date");
1019
+ rb_require("rational");
987
1020
  rb_require("bigdecimal");
988
1021
  rb_require("data_objects");
989
1022
 
@@ -20,13 +20,13 @@ def have_build_env
20
20
  have_header('catalog/pg_type.h')
21
21
  end
22
22
 
23
- $CFLAGS << '-UENABLE_NLS -DHAVE_GETTIMEOFDAY -DHAVE_CRYPT' if RUBY_PLATFORM =~ /mswin|mingw/
23
+ $CFLAGS << ' -UENABLE_NLS -DHAVE_GETTIMEOFDAY -DHAVE_CRYPT' if RUBY_PLATFORM =~ /mswin|mingw/
24
24
 
25
25
  dir_config('pgsql-server', config_value('includedir-server'), config_value('libdir'))
26
26
  dir_config('pgsql-client', config_value('includedir'), config_value('libdir'))
27
27
  dir_config('pgsql-win32') if RUBY_PLATFORM =~ /mswin|mingw/
28
28
 
29
- desired_functions = %w(PQsetClientEncoding pg_encoding_to_char PQfreemem)
29
+ desired_functions = %w(localtime_r gmtime_r PQsetClientEncoding pg_encoding_to_char PQfreemem)
30
30
  compat_functions = %w(PQescapeString PQexecParams)
31
31
 
32
32
  if have_build_env
@@ -1,5 +1,5 @@
1
1
  module DataObjects
2
2
  module Postgres
3
- VERSION = '0.10.2'
3
+ VERSION = '0.10.3'
4
4
  end
5
5
  end
@@ -19,16 +19,22 @@ describe DataObjects::Postgres::Connection do
19
19
  # FIXME: behaves_like 'a Connection with JDBC URL support' if JRUBY
20
20
 
21
21
  describe 'byte array quoting' do
22
+ # There are two possible byte array quotings available: hex or escape.
23
+ # The default changed from escape to hex in version 9, so these specs
24
+ # check for either.
25
+ #
26
+ # http://developer.postgresql.org/pgdocs/postgres/datatype-binary.html
27
+ # http://developer.postgresql.org/pgdocs/postgres/release-9-0.html (E.3.2.3.)
22
28
  it 'should properly escape non-printable ASCII characters' do
23
- @connection.quote_byte_array("\001").should.match(/'\\?\\001'/)
29
+ ["'\\001'", "'\\x01'"].should.include @connection.quote_byte_array("\001")
24
30
  end
25
31
 
26
32
  it 'should properly escape bytes with the high bit set' do
27
- @connection.quote_byte_array("\210").should.match(/'\\?\\210'/)
33
+ ["'\\210'", "'\\x88'"].should.include @connection.quote_byte_array("\210")
28
34
  end
29
35
 
30
36
  it 'should not escape printable ASCII characters' do
31
- @connection.quote_byte_array("a").should == "'a'"
37
+ ["'a'", "'\\x61'"].should.include @connection.quote_byte_array("a")
32
38
  end
33
39
  end
34
40
  end
@@ -0,0 +1,8 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
4
+ require 'data_objects/spec/error/sql_error_spec'
5
+
6
+ describe 'DataObjects::Postgres raising SQLError' do
7
+ behaves_like 'raising a SQLError'
8
+ end
@@ -139,6 +139,10 @@ module DataObjectsSpecHelpers
139
139
  update widgets set release_timestamp = NULL where id = 9
140
140
  EOF
141
141
 
142
+ conn.create_command(<<-EOF).execute_non_query
143
+ update widgets set release_datetime = '2008-07-14 00:31:12' where id = 10
144
+ EOF
145
+
142
146
  conn.close
143
147
 
144
148
  end
@@ -73,7 +73,7 @@ begin
73
73
  ext.classpath = '../do_jdbc/lib/do_jdbc_internal.jar'
74
74
  ext.java_compiling do |gem|
75
75
  gem.add_dependency 'jdbc-postgres', '>=8.2'
76
- gem.add_dependency 'do_jdbc', '0.10.2'
76
+ gem.add_dependency 'do_jdbc', '0.10.3'
77
77
  end
78
78
  end
79
79
  rescue LoadError
@@ -3,7 +3,7 @@ task :build_all do
3
3
  `rake clean`
4
4
  `rake build`
5
5
  `rake java gem`
6
- `rake cross native gem RUBY_CC_VERSION=1.8.6:1.9.1`
6
+ `rake cross native gem RUBY_CC_VERSION=1.8.7:1.9.2`
7
7
  end
8
8
 
9
9
  desc 'Release all gems (native, binaries for JRuby and Windows)'
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: do_postgres
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 49
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 10
8
- - 2
9
- version: 0.10.2
9
+ - 3
10
+ version: 0.10.3
10
11
  platform: ruby
11
12
  authors:
12
13
  - Dirkjan Bussink
@@ -14,30 +15,34 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-05-19 00:00:00 +02:00
18
+ date: 2011-01-30 00:00:00 +01:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
22
  name: data_objects
22
23
  prerelease: false
23
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
24
26
  requirements:
25
27
  - - "="
26
28
  - !ruby/object:Gem::Version
29
+ hash: 49
27
30
  segments:
28
31
  - 0
29
32
  - 10
30
- - 2
31
- version: 0.10.2
33
+ - 3
34
+ version: 0.10.3
32
35
  type: :runtime
33
36
  version_requirements: *id001
34
37
  - !ruby/object:Gem::Dependency
35
38
  name: bacon
36
39
  prerelease: false
37
40
  requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
38
42
  requirements:
39
43
  - - ~>
40
44
  - !ruby/object:Gem::Version
45
+ hash: 13
41
46
  segments:
42
47
  - 1
43
48
  - 1
@@ -48,13 +53,16 @@ dependencies:
48
53
  name: rake-compiler
49
54
  prerelease: false
50
55
  requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
51
57
  requirements:
52
- - - ~>
58
+ - - "="
53
59
  - !ruby/object:Gem::Version
60
+ hash: 3
54
61
  segments:
55
62
  - 0
56
63
  - 7
57
- version: "0.7"
64
+ - 0
65
+ version: 0.7.0
58
66
  type: :development
59
67
  version_requirements: *id003
60
68
  description: Implements the DataObjects API for PostgreSQL
@@ -84,6 +92,7 @@ files:
84
92
  - spec/command_spec.rb
85
93
  - spec/connection_spec.rb
86
94
  - spec/encoding_spec.rb
95
+ - spec/error/sql_error_spec.rb
87
96
  - spec/reader_spec.rb
88
97
  - spec/result_spec.rb
89
98
  - spec/spec_helper.rb
@@ -115,23 +124,27 @@ rdoc_options:
115
124
  require_paths:
116
125
  - lib
117
126
  required_ruby_version: !ruby/object:Gem::Requirement
127
+ none: false
118
128
  requirements:
119
129
  - - ">="
120
130
  - !ruby/object:Gem::Version
131
+ hash: 3
121
132
  segments:
122
133
  - 0
123
134
  version: "0"
124
135
  required_rubygems_version: !ruby/object:Gem::Requirement
136
+ none: false
125
137
  requirements:
126
138
  - - ">="
127
139
  - !ruby/object:Gem::Version
140
+ hash: 3
128
141
  segments:
129
142
  - 0
130
143
  version: "0"
131
144
  requirements: []
132
145
 
133
146
  rubyforge_project: dorb
134
- rubygems_version: 1.3.6
147
+ rubygems_version: 1.3.7
135
148
  signing_key:
136
149
  specification_version: 3
137
150
  summary: DataObjects PostgreSQL Driver
@@ -139,6 +152,7 @@ test_files:
139
152
  - spec/command_spec.rb
140
153
  - spec/connection_spec.rb
141
154
  - spec/encoding_spec.rb
155
+ - spec/error/sql_error_spec.rb
142
156
  - spec/reader_spec.rb
143
157
  - spec/result_spec.rb
144
158
  - spec/spec_helper.rb