do_postgres 0.9.10.1 → 0.9.11

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,2 +1,8 @@
1
+ == 0.9.11 2009-01-19
2
+ * Improvements
3
+ * Ruby 1.9 support
4
+ * Fixes
5
+ * Fix build issue on certain platforms introduces with 0.9.10
6
+
1
7
  == 0.9.9 2008-11-27
2
8
  * No changes since 0.9.8
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2007 Yehuda Katz
1
+ Copyright (c) 2007, 2008, 2009 Yehuda Katz, Dirkjan Bussink
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/Manifest.txt CHANGED
@@ -4,7 +4,6 @@ LICENSE
4
4
  Manifest.txt
5
5
  README.txt
6
6
  Rakefile
7
- TODO
8
7
  autobuild.rb
9
8
  buildfile
10
9
  ext-java/src/main/java/DoPostgresExtService.java
data/Rakefile CHANGED
@@ -9,8 +9,8 @@ JRUBY = RUBY_PLATFORM =~ /java/
9
9
  WINDOWS = Gem.win_platform?
10
10
  SUDO = (WINDOWS || JRUBY) ? '' : ('sudo' unless ENV['SUDOLESS'])
11
11
 
12
- AUTHOR = "Bernerd Schaefer"
13
- EMAIL = "bj.schaefer@gmail.com"
12
+ AUTHOR = "Dirkjan Bussink"
13
+ EMAIL = "d.bussink@gmail.com"
14
14
  GEM_NAME = "do_postgres"
15
15
  GEM_VERSION = DataObjects::Postgres::VERSION
16
16
  GEM_DEPENDENCIES = if JRUBY
@@ -18,32 +18,54 @@ GEM_DEPENDENCIES = if JRUBY
18
18
  else
19
19
  [["data_objects", GEM_VERSION]]
20
20
  end
21
- GEM_CLEAN = ['**/*.{o,so,bundle,log,a,gem,dSYM,obj,pdb,lib,def,exp,DS_Store}', 'ext/Makefile']
22
- GEM_EXTRAS = { :has_rdoc => false, :extensions => 'ext/do_postgres_ext/extconf.rb' }
21
+ GEM_CLEAN = ['**/*.{o,so,bundle,jar,log,a,gem,dSYM,obj,pdb,lib,def,exp,DS_Store}',
22
+ 'ext/Makefile', 'ext-java/target']
23
+ GEM_EXTRAS = if JRUBY
24
+ {
25
+ :has_rdoc => false,
26
+ :platform => 'java'
27
+ }
28
+ else
29
+ {
30
+ :has_rdoc => false,
31
+ :extensions => 'ext/do_postgres_ext/extconf.rb'
32
+ }
33
+ end
23
34
 
24
35
  PROJECT_NAME = "dorb"
25
36
  PROJECT_URL = "http://rubyforge.org/projects/dorb"
26
- PROJECT_DESCRIPTION = PROJECT_SUMMARY = "A DataObject.rb driver for MySQL"
37
+ PROJECT_DESCRIPTION = PROJECT_SUMMARY = "A DataObject.rb driver for PostgreSQL"
27
38
 
28
- JAVA_DRIVER = true
29
39
 
30
40
  # RCov is run by default, except on the JRuby platform, or if NO_RCOV env is true
31
41
  RUN_RCOV = JRUBY ? false : (ENV.has_key?('NO_RCOV') ? ENV['NO_RCOV'] != 'true' : true)
32
42
 
33
43
  if (tasks_dir = ROOT.parent + 'tasks').directory?
34
44
  require tasks_dir + 'hoe'
45
+ require tasks_dir + 'ext_helper_java'
46
+
47
+ setup_java_extension "#{GEM_NAME}_ext", HOE.spec
48
+ end
49
+
50
+ if JRUBY
51
+ HOE.spec.files += ['lib/do_postgres_ext.jar']
52
+ HOE.spec.require_paths = Dir['lib']
35
53
  end
36
54
 
37
55
  # compile the extension
38
- begin
39
- gem('rake-compiler')
40
- require 'rake/extensiontask'
41
- Rake::ExtensionTask.new('do_postgres_ext', HOE.spec)
42
- rescue LoadError
43
- warn "To cross-compile, install rake-compiler (gem install rake-compiler)"
44
- if tasks_dir.directory?
45
- require tasks_dir + 'ext_helper'
46
- setup_extension('do_postgres_ext', HOE.spec)
56
+ if JRUBY
57
+ Rake::Task['compile:jruby'].invoke
58
+ else
59
+ begin
60
+ gem('rake-compiler')
61
+ require 'rake/extensiontask'
62
+ Rake::ExtensionTask.new('do_postgres_ext', HOE.spec)
63
+ rescue LoadError
64
+ warn "To cross-compile, install rake-compiler (gem install rake-compiler)"
65
+ if tasks_dir.directory?
66
+ require tasks_dir + 'ext_helper'
67
+ setup_c_extension('do_postgres_ext', HOE.spec)
68
+ end
47
69
  end
48
70
  end
49
71
 
@@ -68,7 +90,7 @@ desc 'Run specifications'
68
90
  Spec::Rake::SpecTask.new(:spec) do |t|
69
91
  t.spec_opts << '--format' << 'specdoc' << '--colour'
70
92
  t.spec_opts << '--loadby' << 'random'
71
- t.spec_files = Pathname.glob(ENV['FILES'] || 'spec/**/*_spec.rb')
93
+ t.spec_files = Pathname.glob(ENV['FILES'] || 'spec/**/*_spec.rb').map { |f| f.to_s }
72
94
 
73
95
  begin
74
96
  t.rcov = RUN_RCOV
data/buildfile CHANGED
@@ -1,26 +1,27 @@
1
- # Apache Buildr buildfile for do_derby
1
+ # Apache Buildr buildfile for do_postgres
2
2
  # see http://incubator.apache.org/buildr/ for more information on Apache Buildr
3
3
  require 'buildr'
4
4
  require 'pathname'
5
5
 
6
6
  VERSION_NUMBER = '1.0'
7
7
  JDBC_SUPPORT = ['data_objects:jdbc:jar:1.0']
8
+ TARGET_DIR = 'pkg/classes'
8
9
  repositories.remote << 'http://www.ibiblio.org/maven2/'
9
10
 
10
11
  define 'do_postgres' do
11
12
  project.version = VERSION_NUMBER
12
13
  project.group = 'data_objects.rb'
13
14
 
14
- manifest['Copyright'] = 'Alex Coles (C) 2008'
15
+ manifest['Copyright'] = 'Alex Coles (C) 2008-2009'
15
16
 
16
17
  compile.using :target => '1.5', :lint => 'all', :deprecation => 'true'
17
18
 
18
19
  define 'ext-java' do
19
- package :jar
20
+ package(:jar).clean.include(TARGET_DIR)
20
21
 
21
22
  jdbc_support_jar = file('../../do_jdbc/lib/do_jdbc_internal.jar')
22
23
  jdbc_support = artifact('data_objects:jdbc:jar:1.0').from(jdbc_support_jar)
23
24
 
24
- compile.with JDBC_SUPPORT
25
+ compile.into(TARGET_DIR).with(JDBC_SUPPORT)
25
26
  end
26
27
  end
@@ -10,9 +10,10 @@
10
10
  #undef PACKAGE_TARNAME
11
11
  #undef PACKAGE_VERSION
12
12
  #include <ruby.h>
13
- #include <version.h>
14
13
  #include <string.h>
15
14
  #include <math.h>
15
+ #include <ctype.h>
16
+ #include <time.h>
16
17
 
17
18
  #define ID_CONST_GET rb_intern("const_get")
18
19
  #define ID_PATH rb_intern("path")
@@ -50,6 +51,7 @@ static ID ID_LOGGER;
50
51
  static ID ID_DEBUG;
51
52
  static ID ID_LEVEL;
52
53
  static ID ID_TO_S;
54
+ static ID ID_RATIONAL;
53
55
 
54
56
  static VALUE mDO;
55
57
  static VALUE cDO_Quoting;
@@ -60,7 +62,6 @@ static VALUE cDO_Reader;
60
62
 
61
63
  static VALUE rb_cDate;
62
64
  static VALUE rb_cDateTime;
63
- static VALUE rb_cRational;
64
65
  static VALUE rb_cBigDecimal;
65
66
 
66
67
  static VALUE mPostgres;
@@ -148,7 +149,7 @@ static VALUE parse_date(const char *date) {
148
149
 
149
150
  // Math from Date.jd_to_ajd
150
151
  ajd = jd * 2 - 1;
151
- rational = rb_funcall(rb_cRational, rb_intern("new!"), 2, INT2NUM(ajd), INT2NUM(2));
152
+ rational = rb_funcall(rb_mKernel, ID_RATIONAL, 2, INT2NUM(ajd), INT2NUM(2));
152
153
 
153
154
  return rb_funcall(rb_cDate, ID_NEW_DATE, 3, rational, INT2NUM(0), INT2NUM(2299161));
154
155
  }
@@ -157,7 +158,7 @@ static VALUE parse_date(const char *date) {
157
158
  static VALUE seconds_to_offset(do_int64 num) {
158
159
  do_int64 den = 86400;
159
160
  reduce(&num, &den);
160
- return rb_funcall(rb_cRational, rb_intern("new!"), 2, rb_ll2inum(num), rb_ll2inum(den));
161
+ return rb_funcall(rb_mKernel, ID_RATIONAL, 2, rb_ll2inum(num), rb_ll2inum(den));
161
162
  }
162
163
 
163
164
  static VALUE timezone_to_offset(int hour_offset, int minute_offset) {
@@ -251,7 +252,7 @@ static VALUE parse_date_time(const char *date) {
251
252
 
252
253
  reduce(&num, &den);
253
254
 
254
- ajd = rb_funcall(rb_cRational, rb_intern("new!"), 2, rb_ull2inum(num), rb_ull2inum(den));
255
+ ajd = rb_funcall(rb_mKernel, ID_RATIONAL, 2, rb_ull2inum(num), rb_ull2inum(den));
255
256
  offset = timezone_to_offset(hour_offset, minute_offset);
256
257
 
257
258
  return rb_funcall(rb_cDateTime, ID_NEW_DATE, 3, ajd, offset, INT2NUM(2299161));
@@ -315,10 +316,10 @@ static VALUE infer_ruby_type(Oid type) {
315
316
  return rb_str_new2(ruby_type);
316
317
  }
317
318
 
318
- static VALUE typecast(char *value, long length, char *type) {
319
+ static VALUE typecast(char *value, long length, const char *type) {
319
320
 
320
321
  if ( strcmp(type, "Class") == 0) {
321
- return rb_funcall(mDO, rb_intern("find_const"), 1, TAINTED_STRING(value, length));
322
+ return rb_funcall(rb_cObject, rb_intern("full_const_get"), 1, TAINTED_STRING(value, length));
322
323
  } else if ( strcmp(type, "Integer") == 0 || strcmp(type, "Fixnum") == 0 || strcmp(type, "Bignum") == 0 ) {
323
324
  return rb_cstr2inum(value, 10);
324
325
  } else if ( strcmp(type, "Float") == 0 ) {
@@ -458,7 +459,7 @@ static VALUE cConnection_initialize(VALUE self, VALUE uri) {
458
459
  PGconn *db;
459
460
 
460
461
  r_host = rb_funcall(uri, rb_intern("host"), 0);
461
- if ( Qnil != r_host && "localhost" != StringValuePtr(r_host) ) {
462
+ if ( Qnil != r_host ) {
462
463
  host = StringValuePtr(r_host);
463
464
  }
464
465
 
@@ -632,7 +633,7 @@ static VALUE cCommand_execute_reader(int argc, VALUE *argv[], VALUE self) {
632
633
  field_names = rb_ary_new();
633
634
  field_types = rb_iv_get(self, "@field_types");
634
635
 
635
- if ( field_types == Qnil || RARRAY(field_types)->len == 0 ) {
636
+ if ( field_types == Qnil || RARRAY_LEN(field_types) == 0 ) {
636
637
  field_types = rb_ary_new();
637
638
  infer_types = 1;
638
639
  }
@@ -677,7 +678,7 @@ static VALUE cReader_next(VALUE self) {
677
678
  int i;
678
679
  int position;
679
680
 
680
- char *type = "";
681
+ const char *type;
681
682
 
682
683
  VALUE array = rb_ary_new();
683
684
  VALUE field_types, ruby_type;
@@ -693,7 +694,7 @@ static VALUE cReader_next(VALUE self) {
693
694
  }
694
695
 
695
696
  for ( i = 0; i < field_count; i++ ) {
696
- ruby_type = RARRAY(field_types)->ptr[i];
697
+ ruby_type = RARRAY_PTR(field_types)[i];
697
698
 
698
699
  if ( TYPE(ruby_type) == T_STRING ) {
699
700
  type = StringValuePtr(ruby_type);
@@ -735,6 +736,13 @@ static VALUE cReader_fields(VALUE self) {
735
736
  return rb_iv_get(self, "@fields");
736
737
  }
737
738
 
739
+ static VALUE cReader_field_count(VALUE self) {
740
+ return rb_iv_get(self, "@field_count");
741
+ }
742
+ static VALUE cReader_row_count(VALUE self) {
743
+ return rb_iv_get(self, "@row_count");
744
+ }
745
+
738
746
  void Init_do_postgres_ext() {
739
747
  rb_require("date");
740
748
  rb_require("bigdecimal");
@@ -743,16 +751,20 @@ void Init_do_postgres_ext() {
743
751
  rb_cDate = CONST_GET(rb_mKernel, "Date");
744
752
  rb_cDateTime = CONST_GET(rb_mKernel, "DateTime");
745
753
  rb_cTime = CONST_GET(rb_mKernel, "Time");
746
- rb_cRational = CONST_GET(rb_mKernel, "Rational");
747
754
  rb_cBigDecimal = CONST_GET(rb_mKernel, "BigDecimal");
748
755
 
749
756
  rb_funcall(rb_mKernel, rb_intern("require"), 1, rb_str_new2("data_objects"));
750
757
 
751
- ID_NEW_DATE = RUBY_VERSION_CODE < 186 ? rb_intern("new0") : rb_intern("new!");
758
+ #ifdef RUBY_LESS_THAN_186
759
+ ID_NEW_DATE = rb_intern("new0");
760
+ #else
761
+ ID_NEW_DATE = rb_intern("new!");
762
+ #endif
752
763
  ID_LOGGER = rb_intern("logger");
753
764
  ID_DEBUG = rb_intern("debug");
754
765
  ID_LEVEL = rb_intern("level");
755
766
  ID_TO_S = rb_intern("to_s");
767
+ ID_RATIONAL = rb_intern("Rational");
756
768
 
757
769
  // Get references to the DataObjects module and its classes
758
770
  mDO = CONST_GET(rb_mKernel, "DataObjects");
@@ -784,5 +796,7 @@ void Init_do_postgres_ext() {
784
796
  rb_define_method(cReader, "next!", cReader_next, 0);
785
797
  rb_define_method(cReader, "values", cReader_values, 0);
786
798
  rb_define_method(cReader, "fields", cReader_fields, 0);
799
+ rb_define_method(cReader, "row_count", cReader_row_count, 0);
800
+ rb_define_method(cReader, "field_count", cReader_field_count, 0);
787
801
 
788
802
  }
@@ -28,8 +28,8 @@ def have_build_env
28
28
  have_header('catalog/pg_type.h')
29
29
  end
30
30
 
31
- dir_config('pgsql', config_value('includedir-server'), config_value('libdir'))
32
- dir_config('pgsql', config_value('includedir'), config_value('libdir'))
31
+ dir_config('pgsql-server', config_value('includedir-server'), config_value('libdir'))
32
+ dir_config('pgsql-client', config_value('includedir'), config_value('libdir'))
33
33
 
34
34
  required_libraries = []
35
35
  desired_functions = %w(PQsetClientEncoding pg_encoding_to_char PQfreemem)
@@ -39,6 +39,11 @@ if have_build_env
39
39
  required_libraries.each(&method(:have_library))
40
40
  desired_functions.each(&method(:have_func))
41
41
  $CFLAGS << ' -Wall ' unless RUBY_PLATFORM =~ /mswin/
42
+
43
+ if RUBY_VERSION < '1.8.6'
44
+ $CFLAGS << ' -DRUBY_LESS_THAN_186'
45
+ end
46
+
42
47
  create_makefile("do_postgres_ext")
43
48
  else
44
49
  puts 'Could not find PostgreSQL build environment (libraries & headers): Makefile not created'
data/lib/do_postgres.rb CHANGED
@@ -7,7 +7,7 @@ if RUBY_PLATFORM =~ /java/
7
7
  require 'jdbc/postgres' # the JDBC driver, packaged as a gem
8
8
  end
9
9
 
10
- require File.expand_path(File.join(File.dirname(__FILE__), 'do_postgres_ext'))
10
+ require 'do_postgres_ext'
11
11
  require File.expand_path(File.join(File.dirname(__FILE__), 'do_postgres', 'version'))
12
12
  require File.expand_path(File.join(File.dirname(__FILE__), 'do_postgres', 'transaction'))
13
13
 
@@ -23,6 +23,13 @@ if RUBY_PLATFORM =~ /java/
23
23
  def self.pool_size
24
24
  20
25
25
  end
26
+
27
+ def character_set
28
+ # JDBC API does not provide an easy way to get the current character set
29
+ # For now, we code the character_set used as utf8
30
+ "utf8"
31
+ end
32
+
26
33
  end
27
34
  end
28
35
  end
@@ -1,5 +1,5 @@
1
1
  module DataObjects
2
2
  module Postgres
3
- VERSION = "0.9.10.1"
3
+ VERSION = "0.9.11"
4
4
  end
5
5
  end
@@ -25,6 +25,7 @@ describe "DataObjects::Postgres::Connection" do
25
25
  end
26
26
 
27
27
  it "should be able to send queries asynchronously in parallel" do
28
+ pending "Asynchronous queries behaving oddly in JRuby" if JRUBY
28
29
  threads = []
29
30
 
30
31
  start = Time.now
@@ -129,18 +130,38 @@ describe "DataObjects::Postgres::Reader" do
129
130
  lambda { command.execute_reader }.should raise_error
130
131
  end
131
132
 
132
- it "should open and close a reader" do
133
+ it "should open and close a reader with given types of columns" do
134
+ command = @connection.create_command("SELECT id, name FROM users LIMIT 3")
135
+ command.set_types [Integer, String ]
136
+ reader = command.execute_reader
137
+ reader.close.should == true
138
+ end
139
+
140
+ it "should open and close a reader without given types of columns" do
133
141
  command = @connection.create_command("SELECT * FROM users LIMIT 3")
134
- command.set_types [Integer, String]
135
142
  reader = command.execute_reader
143
+ reader.close.should == true
144
+ end
145
+
146
+ it "should raise error on wrong number of columns calling set_types" do
147
+ pending "C-extension does not raise an error on encountering wrong number of columns" unless JRUBY
148
+ command = @connection.create_command("SELECT * FROM users LIMIT 3")
149
+ command.set_types [Integer, String]
150
+ lambda { reader = command.execute_reader }.should raise_error
151
+ end
152
+
153
+ it "should return proper number of rows and fields using row_count and field_count" do
154
+ pending "do_jdbc doesn't return correctly row_count at the moment" if JRUBY
155
+ command = @connection.create_command("SELECT id, name, registered, money FROM users ORDER BY id DESC LIMIT 3")
156
+ reader = command.execute_reader
157
+ reader.field_count.should == 4
158
+ reader.row_count.should == 3
136
159
  reader.close
137
160
  end
138
161
 
139
162
  it "should typecast a value from the postgres type" do
140
163
  command = @connection.create_command("SELECT id, name, registered, money FROM users ORDER BY id DESC LIMIT 3")
141
164
  reader = command.execute_reader
142
- reader.send(:instance_variable_get, "@field_count").should == 4
143
- reader.send(:instance_variable_get, "@row_count").should == 3
144
165
  while ( reader.next!)
145
166
  reader.values[0].should be_a_kind_of(Integer)
146
167
  reader.values[1].should be_a_kind_of(String)
@@ -167,6 +188,16 @@ describe "DataObjects::Postgres::Reader" do
167
188
  end
168
189
  end
169
190
 
191
+ it "should return nil when the time is 0" do
192
+ pending "We need to introduce something like Proxy for typeasting where each SQL type will have _rules_ of casting" if JRUBY
193
+ pending "Fix zero representation of Time in PostgreSQL" unless JRUBY
194
+ id = insert("INSERT INTO users (name, fired_at) VALUES ('James', '0000-00-00')")
195
+ select("SELECT fired_at FROM users WHERE id = ?", [Time], id) do |reader|
196
+ reader.values.last.should be_nil
197
+ end
198
+ exec("DELETE FROM users WHERE id = ?", id)
199
+ end
200
+
170
201
  it "should not convert empty strings to null" do
171
202
  id = insert("INSERT INTO users (name) VALUES ('')")
172
203
  select("SELECT name FROM users WHERE id = ?", [String], id) do |reader|
@@ -191,11 +222,19 @@ describe "DataObjects::Postgres::Reader" do
191
222
  end
192
223
  end
193
224
 
225
+ it "should return DateTimes using the current locale's Time Zone" do
226
+ date = DateTime.now
227
+ id = insert("INSERT INTO users (name, created_at) VALUES (?, ?)", 'Sam', date)
228
+ select("SELECT created_at FROM users WHERE id = ?", [DateTime], id) do |reader|
229
+ reader.values.last.to_s.should == date.to_s
230
+ end
231
+ exec("DELETE FROM users WHERE id = ?", id)
232
+ end
233
+
194
234
  it "should typecast a timestamp field" do
195
235
  command = @connection.create_command("SELECT created_at FROM users WHERE created_at is not null LIMIT 1")
196
236
  reader = command.execute_reader
197
237
  reader.next!
198
- dt = reader.values[0]
199
238
  reader.values[0].should be_a_kind_of(DateTime)
200
239
 
201
240
  command = @connection.create_command("SELECT created_at::date as date FROM users WHERE created_at is not null LIMIT 1")
@@ -18,7 +18,7 @@ describe DataObjects::Postgres::Command do
18
18
  @mock_logger = mock('MockLogger', :level => 0)
19
19
  DataObjects::Postgres.should_receive(:logger).and_return(@mock_logger)
20
20
  @mock_logger.should_receive(:debug).with(/\([\d.]+\) SELECT \* FROM users/)
21
- command.execute_reader
21
+ command.execute_reader.close
22
22
  end
23
23
 
24
24
  it "shouldn't log reader queries when the level isn't Debug (0)" do
@@ -26,7 +26,7 @@ describe DataObjects::Postgres::Command do
26
26
  @mock_logger = mock('MockLogger', :level => 1)
27
27
  DataObjects::Postgres.should_receive(:logger).and_return(@mock_logger)
28
28
  @mock_logger.should_not_receive(:debug)
29
- command.execute_reader
29
+ command.execute_reader.close
30
30
  end
31
31
  end
32
32
 
@@ -35,7 +35,9 @@ describe DataObjects::Postgres::Command do
35
35
  command = @connection.create_command("INSERT INTO users (name) VALUES (?)")
36
36
  @mock_logger = mock('MockLogger', :level => 0)
37
37
  DataObjects::Postgres.should_receive(:logger).and_return(@mock_logger)
38
- @mock_logger.should_receive(:debug).with(/\([\d.]+\) INSERT INTO users \(name\) VALUES \('Blah'\)/)
38
+ # NOTE: debug string on JRuby does not insert quotation marks
39
+ # on MRI, value is quoted
40
+ @mock_logger.should_receive(:debug).with(/\([\d.]+\) INSERT INTO users \(name\) VALUES \((\'?)Blah(\'?)\)/)
39
41
  command.execute_non_query('Blah')
40
42
  end
41
43
 
@@ -1,23 +1,25 @@
1
1
  require 'pathname'
2
2
  require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
3
3
 
4
- describe DataObjects::Postgres::Command do
4
+ unless JRUBY
5
+ describe DataObjects::Postgres::Command do
5
6
 
6
- before(:each) do
7
- @connection = DataObjects::Connection.new(DO_POSTGRES_SPEC_URI)
8
- @command = @connection.create_command("INSERT INTO users (name) VALUES (?)")
9
- end
7
+ before(:each) do
8
+ @connection = DataObjects::Connection.new(DO_POSTGRES_SPEC_URI)
9
+ @command = @connection.create_command("INSERT INTO users (name) VALUES (?)")
10
+ end
10
11
 
11
- after(:each) do
12
- @connection.close
13
- end
12
+ after(:each) do
13
+ @connection.close
14
+ end
14
15
 
15
- it "should properly quote a string" do
16
- @command.quote_string("O'Hare").should == "'O''Hare'"
17
- @command.quote_string("Willy O'Hare & Johnny O'Toole").should == "'Willy O''Hare & Johnny O''Toole'"
18
- @command.quote_string("Billy\\Bob").should == "'Billy\\Bob'"
19
- @command.quote_string("The\\Backslasher\\Rises\\Again").should == "'The\\Backslasher\\Rises\\Again'"
20
- @command.quote_string("Scott \"The Rage\" Bauer").should == "'Scott \"The Rage\" Bauer'"
21
- end
16
+ it "should properly quote a string" do
17
+ @command.quote_string("O'Hare").should == "'O''Hare'"
18
+ @command.quote_string("Willy O'Hare & Johnny O'Toole").should == "'Willy O''Hare & Johnny O''Toole'"
19
+ @command.quote_string("Billy\\Bob").should == "'Billy\\Bob'"
20
+ @command.quote_string("The\\Backslasher\\Rises\\Again").should == "'The\\Backslasher\\Rises\\Again'"
21
+ @command.quote_string("Scott \"The Rage\" Bauer").should == "'Scott \"The Rage\" Bauer'"
22
+ end
22
23
 
24
+ end
23
25
  end
@@ -6,7 +6,7 @@ describe "DataObjects::Postgres::Reader" do
6
6
 
7
7
  before :all do
8
8
  @connection = ensure_users_table_and_return_connection
9
- Time.now.to_s.match(/\w{3} \w{3} \d{2} \d{2}:\d{2}:\d{2} ([-+]\d{2})(\d{2})/)
9
+ Time.now.to_s.match(/([-+]\d{2})(\d{2})/)
10
10
  @connection.create_command("SET SESSION TIME ZONE INTERVAL '#{$1}:#{$2}' HOUR TO MINUTE").execute_non_query
11
11
  @connection.create_command("INSERT INTO users (name) VALUES ('Test')").execute_non_query
12
12
  @connection.create_command("INSERT INTO users (name) VALUES ('Test')").execute_non_query
@@ -20,22 +20,27 @@ describe "DataObjects::Postgres::Reader" do
20
20
  it "should return DateTimes using the current locale's Time Zone for TIMESTAMP WITHOUT TIME ZONE fields" do
21
21
  date = DateTime.now
22
22
  id = insert("INSERT INTO users (name, created_at) VALUES (?, ?)", 'Sam', date)
23
+
23
24
  select("SELECT created_at FROM users WHERE id = ?", [DateTime], id) do |reader|
24
25
  reader.values.last.to_s.should == date.to_s
25
26
  end
27
+
26
28
  exec("DELETE FROM users WHERE id = ?", id)
27
29
  end
28
30
 
29
31
  it "should return DateTimes using the current locale's Time Zone TIMESTAMP WITH TIME ZONE fields" do
30
32
  date = DateTime.now
31
33
  id = insert("INSERT INTO users (name, fired_at) VALUES (?, ?)", 'Sam', date)
34
+
32
35
  select("SELECT fired_at FROM users WHERE id = ?", [DateTime], id) do |reader|
33
36
  reader.values.last.to_s.should == date.to_s
34
37
  end
38
+
35
39
  exec("DELETE FROM users WHERE id = ?", id)
36
40
  end
37
41
 
38
42
  it "should return DateTimes using the current locale's Time Zone if they were inserted using a different timezone" do
43
+ pending "We don't support non-local date input yet"
39
44
  now = DateTime.now
40
45
  dates = [
41
46
  now,
data/spec/spec_helper.rb CHANGED
@@ -29,7 +29,7 @@ require 'do_postgres'
29
29
  log_path = File.expand_path(File.join(File.dirname(__FILE__), '..', 'log', 'do.log'))
30
30
  FileUtils.mkdir_p(File.dirname(log_path))
31
31
 
32
- DataObjects::Postgres.logger = DataObjects::Logger.new(log_path, 0)
32
+ DataObjects::Postgres.logger = DataObjects::Logger.new(log_path, :debug)
33
33
 
34
34
  POSTGRES = OpenStruct.new
35
35
  POSTGRES.user = ENV['DO_PG_USER'] || 'postgres'
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: do_postgres
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.10.1
4
+ version: 0.9.11
5
5
  platform: ruby
6
6
  authors:
7
- - Bernerd Schaefer
7
+ - Dirkjan Bussink
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-01-05 00:00:00 +01:00
12
+ date: 2009-01-19 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - "="
22
22
  - !ruby/object:Gem::Version
23
- version: 0.9.10.1
23
+ version: 0.9.11
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: hoe
@@ -32,9 +32,9 @@ dependencies:
32
32
  - !ruby/object:Gem::Version
33
33
  version: 1.8.2
34
34
  version:
35
- description: A DataObject.rb driver for MySQL
35
+ description: A DataObject.rb driver for PostgreSQL
36
36
  email:
37
- - bj.schaefer@gmail.com
37
+ - d.bussink@gmail.com
38
38
  executables: []
39
39
 
40
40
  extensions:
@@ -51,7 +51,6 @@ files:
51
51
  - Manifest.txt
52
52
  - README.txt
53
53
  - Rakefile
54
- - TODO
55
54
  - autobuild.rb
56
55
  - buildfile
57
56
  - ext-java/src/main/java/DoPostgresExtService.java
@@ -97,6 +96,6 @@ rubyforge_project: dorb
97
96
  rubygems_version: 1.3.1
98
97
  signing_key:
99
98
  specification_version: 2
100
- summary: A DataObject.rb driver for MySQL
99
+ summary: A DataObject.rb driver for PostgreSQL
101
100
  test_files: []
102
101
 
data/TODO DELETED
@@ -1,4 +0,0 @@
1
- TODO
2
- ====
3
-
4
- * Add JDBC-based version of this driver.