do_mysql 0.10.8-java → 0.10.9-java

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,9 @@
1
+ ## 0.10.9 2012-08-13
2
+
3
+ * Handle bigint insert id's
4
+ * Add handling for invalid date and datetimes with value 0000-00-00
5
+ * Handle empty database names for connecting to the default database
6
+
1
7
  ## 0.10.8 2012-02-10
2
8
 
3
9
  * Ruby 1.9.3 compatibility on Windows
data/Rakefile CHANGED
@@ -15,7 +15,7 @@ JRUBY = RUBY_PLATFORM =~ /java/
15
15
  IRONRUBY = defined?(RUBY_ENGINE) && RUBY_ENGINE == 'ironruby'
16
16
  WINDOWS = Gem.win_platform? || (JRUBY && ENV_JAVA['os.name'] =~ /windows/i)
17
17
  SUDO = WINDOWS ? '' : ('sudo' unless ENV['SUDOLESS'])
18
- BINARY_VERSION = '5.1.60'
18
+ BINARY_VERSION = '5.1.65'
19
19
 
20
20
  CLEAN.include(%w[ {tmp,pkg}/ **/*.{o,so,bundle,jar,log,a,gem,dSYM,obj,pdb,exp,DS_Store,rbc,db} ext/do_mysql/Makefile ext-java/target ])
21
21
 
@@ -185,6 +185,10 @@ VALUE data_objects_parse_date(const char *date) {
185
185
  return Qnil;
186
186
  }
187
187
 
188
+ if(!year && !month && !day) {
189
+ return Qnil;
190
+ }
191
+
188
192
  return rb_funcall(rb_cDate, ID_NEW, 3, INT2NUM(year), INT2NUM(month), INT2NUM(day));
189
193
  }
190
194
 
@@ -237,6 +241,10 @@ VALUE data_objects_parse_date_time(const char *date) {
237
241
  fmt_datetime = strchr(date, '.') ? _fmt_datetime_tz_subsec : _fmt_datetime_tz_normal;
238
242
  tokens_read = sscanf(date, fmt_datetime, &year, &month, &day, &hour, &min, &sec, &hour_offset, &minute_offset);
239
243
 
244
+ if(!year && !month && !day && !hour && !min && !sec) {
245
+ return Qnil;
246
+ }
247
+
240
248
  switch (tokens_read) {
241
249
  case 8:
242
250
  minute_offset *= hour_offset < 0 ? -1 : 1;
@@ -228,7 +228,7 @@ void do_mysql_full_connect(VALUE self, MYSQL *db) {
228
228
  }
229
229
 
230
230
  if (!database || !*database) {
231
- rb_raise(eConnectionError, "Database must be specified");
231
+ database = NULL;
232
232
  }
233
233
 
234
234
  VALUE r_query = rb_iv_get(self, "@query");
@@ -489,7 +489,7 @@ VALUE do_mysql_cCommand_execute_non_query(int argc, VALUE *argv, VALUE self) {
489
489
  return Qnil;
490
490
  }
491
491
 
492
- return rb_funcall(cMysqlResult, ID_NEW, 3, self, INT2NUM(affected_rows), insert_id == 0 ? Qnil : INT2NUM(insert_id));
492
+ return rb_funcall(cMysqlResult, ID_NEW, 3, self, INT2NUM(affected_rows), insert_id == 0 ? Qnil : ULL2NUM(insert_id));
493
493
  }
494
494
 
495
495
  VALUE do_mysql_cCommand_execute_reader(int argc, VALUE *argv, VALUE self) {
@@ -11,7 +11,7 @@ if RUBY_PLATFORM =~ /java/
11
11
 
12
12
  begin
13
13
  java.lang.Thread.currentThread.getContextClassLoader().loadClass(DataObjects::Mysql::JDBC_DRIVER, true)
14
- rescue
14
+ rescue java.lang.ClassNotFoundException
15
15
  require 'jdbc/mysql' # the JDBC driver, packaged as a gem
16
16
  end
17
17
 
Binary file
@@ -1,5 +1,5 @@
1
1
  module DataObjects
2
2
  module Mysql
3
- VERSION = '0.10.8'
3
+ VERSION = '0.10.9'
4
4
  end
5
5
  end
@@ -18,6 +18,7 @@ describe DataObjects::Mysql::Connection do
18
18
 
19
19
  it_should_behave_like 'a Connection'
20
20
  it_should_behave_like 'a Connection with authentication support'
21
+ it_should_behave_like 'a Connection allowing default database'
21
22
  it_should_behave_like 'a Connection with JDBC URL support' if JRUBY
22
23
  it_should_behave_like 'a Connection with SSL support' unless JRUBY
23
24
  it_should_behave_like 'a Connection via JDNI' if JRUBY
@@ -15,3 +15,29 @@ describe DataObjects::Mysql::Result do
15
15
  it_should_behave_like 'a Result which returns inserted key with sequences'
16
16
  it_should_behave_like 'a Result which returns nil without sequences'
17
17
  end
18
+
19
+ describe DataObjects::Mysql::Result do
20
+
21
+ describe 'insert_id' do
22
+
23
+ before do
24
+ setup_test_environment
25
+ @connection = DataObjects::Connection.new(CONFIG.uri)
26
+ # set the sequence to a value larger than SQL integer
27
+ command = @connection.create_command('INSERT INTO stuff (id, value) VALUES (?,?)')
28
+ command.execute_non_query(3_000_000_000, 'cow')
29
+ # use the sequence to generate an id
30
+ command = @connection.create_command('INSERT INTO stuff (value) VALUES (?)')
31
+ @result = command.execute_non_query('monkey')
32
+ end
33
+
34
+ after do
35
+ @connection.close
36
+ end
37
+
38
+ it 'should return the bigint id' do
39
+ @result.insert_id.should == 3_000_000_001
40
+ end
41
+
42
+ end
43
+ end
@@ -45,7 +45,7 @@ CONFIG.ssl = SSLHelpers.query(:ca_cert, :client_cert, :client_key)
45
45
 
46
46
  CONFIG.driver = 'mysql'
47
47
  CONFIG.jdbc_driver = DataObjects::Mysql.const_get('JDBC_DRIVER') rescue nil
48
- CONFIG.uri = ENV["DO_MYSQL_SPEC_URI"] || "#{CONFIG.scheme}://#{CONFIG.user_info}#{CONFIG.host}:#{CONFIG.port}#{CONFIG.database}"
48
+ CONFIG.uri = ENV["DO_MYSQL_SPEC_URI"] || "#{CONFIG.scheme}://#{CONFIG.user_info}#{CONFIG.host}:#{CONFIG.port}#{CONFIG.database}?zeroDateTimeBehavior=convertToNull"
49
49
  CONFIG.jdbc_uri = "jdbc:#{CONFIG.uri}"
50
50
  CONFIG.sleep = "SELECT sleep(1)"
51
51
 
@@ -62,6 +62,10 @@ module DataObjectsSpecHelpers
62
62
  DROP TABLE IF EXISTS `users`
63
63
  EOF
64
64
 
65
+ conn.create_command(<<-EOF).execute_non_query
66
+ DROP TABLE IF EXISTS `stuff`
67
+ EOF
68
+
65
69
  conn.create_command(<<-EOF).execute_non_query
66
70
  DROP TABLE IF EXISTS `widgets`
67
71
  EOF
@@ -82,6 +86,14 @@ module DataObjectsSpecHelpers
82
86
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
83
87
  EOF
84
88
 
89
+ conn.create_command(<<-EOF).execute_non_query
90
+ CREATE TABLE `stuff` (
91
+ `id` bigint NOT NULL auto_increment,
92
+ `value` varchar(50) NULL,
93
+ PRIMARY KEY (`id`)
94
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
95
+ EOF
96
+
85
97
  conn.create_command(<<-EOF).execute_non_query
86
98
  CREATE TABLE `widgets` (
87
99
  `id` int(11) NOT NULL auto_increment,
@@ -6,4 +6,30 @@ require 'data_objects/spec/shared/typecast/date_spec'
6
6
  describe 'DataObjects::Mysql with Date' do
7
7
  it_should_behave_like 'supporting Date'
8
8
  it_should_behave_like 'supporting Date autocasting'
9
+
10
+ describe 'reading 0000-00-00' do
11
+
12
+ before do
13
+ @connection = DataObjects::Connection.new(CONFIG.uri)
14
+
15
+ @connection.create_command("SET SESSION sql_mode = 'ALLOW_INVALID_DATES'").execute_non_query
16
+ @connection.create_command("INSERT INTO widgets (release_date) VALUES ('')").execute_non_query
17
+
18
+ @command = @connection.create_command("SELECT release_date FROM widgets WHERE release_date = '0000-00-00'")
19
+ @reader = @command.execute_reader
20
+ @reader.next!
21
+ @values = @reader.values
22
+ end
23
+
24
+ after do
25
+ @reader.close
26
+ @connection.close
27
+ end
28
+
29
+ it 'should return the number of created rows' do
30
+ @values.first.should be_nil
31
+ end
32
+
33
+ end
34
+
9
35
  end
@@ -6,4 +6,30 @@ require 'data_objects/spec/shared/typecast/datetime_spec'
6
6
  describe 'DataObjects::Mysql with DateTime' do
7
7
  it_should_behave_like 'supporting DateTime'
8
8
  it_should_behave_like 'supporting DateTime autocasting'
9
+
10
+ describe 'reading 0000-00-00 00:00:00' do
11
+
12
+ before do
13
+ @connection = DataObjects::Connection.new(CONFIG.uri)
14
+
15
+ @connection.create_command("SET SESSION sql_mode = 'ALLOW_INVALID_DATES'").execute_non_query
16
+ @connection.create_command("INSERT INTO widgets (release_datetime) VALUES ('')").execute_non_query
17
+
18
+ @command = @connection.create_command("SELECT release_datetime FROM widgets WHERE release_datetime = '0000-00-00 00:00:00'")
19
+ @reader = @command.execute_reader
20
+ @reader.next!
21
+ @values = @reader.values
22
+ end
23
+
24
+ after do
25
+ @reader.close
26
+ @connection.close
27
+ end
28
+
29
+ it 'should return the number of created rows' do
30
+ @values.first.should be_nil
31
+ end
32
+
33
+ end
34
+
9
35
  end
@@ -56,7 +56,7 @@ begin
56
56
  ext.classpath = '../do_jdbc/lib/do_jdbc_internal.jar'
57
57
  ext.java_compiling do |gem|
58
58
  gem.add_dependency 'jdbc-mysql', '>=5.0.4'
59
- gem.add_dependency 'do_jdbc', '0.10.8'
59
+ gem.add_dependency 'do_jdbc', '0.10.9'
60
60
  end
61
61
  end
62
62
  rescue LoadError
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: do_mysql
3
3
  version: !ruby/object:Gem::Version
4
- hash: 39
5
- prerelease:
4
+ prerelease: false
6
5
  segments:
7
6
  - 0
8
7
  - 10
9
- - 8
10
- version: 0.10.8
8
+ - 9
9
+ version: 0.10.9
11
10
  platform: java
12
11
  authors:
13
12
  - Dirkjan Bussink
@@ -15,85 +14,76 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2011-03-29 00:00:00 Z
17
+ date: 2011-03-29 00:00:00 +02:00
18
+ default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
+ prerelease: false
22
+ type: :runtime
23
+ name: data_objects
21
24
  version_requirements: &id001 !ruby/object:Gem::Requirement
22
- none: false
23
25
  requirements:
24
26
  - - "="
25
27
  - !ruby/object:Gem::Version
26
- hash: 39
27
28
  segments:
28
29
  - 0
29
30
  - 10
30
- - 8
31
- version: 0.10.8
32
- name: data_objects
33
- prerelease: false
34
- type: :runtime
31
+ - 9
32
+ version: 0.10.9
35
33
  requirement: *id001
36
34
  - !ruby/object:Gem::Dependency
35
+ prerelease: false
36
+ type: :development
37
+ name: rspec
37
38
  version_requirements: &id002 !ruby/object:Gem::Requirement
38
- none: false
39
39
  requirements:
40
40
  - - ~>
41
41
  - !ruby/object:Gem::Version
42
- hash: 9
43
42
  segments:
44
43
  - 2
45
44
  - 5
46
45
  version: "2.5"
47
- name: rspec
48
- prerelease: false
49
- type: :development
50
46
  requirement: *id002
51
47
  - !ruby/object:Gem::Dependency
48
+ prerelease: false
49
+ type: :development
50
+ name: rake-compiler
52
51
  version_requirements: &id003 !ruby/object:Gem::Requirement
53
- none: false
54
52
  requirements:
55
53
  - - ~>
56
54
  - !ruby/object:Gem::Version
57
- hash: 5
58
55
  segments:
59
56
  - 0
60
57
  - 7
61
58
  version: "0.7"
62
- name: rake-compiler
63
- prerelease: false
64
- type: :development
65
59
  requirement: *id003
66
60
  - !ruby/object:Gem::Dependency
61
+ prerelease: false
62
+ type: :runtime
63
+ name: jdbc-mysql
67
64
  version_requirements: &id004 !ruby/object:Gem::Requirement
68
- none: false
69
65
  requirements:
70
66
  - - ">="
71
67
  - !ruby/object:Gem::Version
72
- hash: 63
73
68
  segments:
74
69
  - 5
75
70
  - 0
76
71
  - 4
77
72
  version: 5.0.4
78
- name: jdbc-mysql
79
- prerelease: false
80
- type: :runtime
81
73
  requirement: *id004
82
74
  - !ruby/object:Gem::Dependency
75
+ prerelease: false
76
+ type: :runtime
77
+ name: do_jdbc
83
78
  version_requirements: &id005 !ruby/object:Gem::Requirement
84
- none: false
85
79
  requirements:
86
80
  - - "="
87
81
  - !ruby/object:Gem::Version
88
- hash: 39
89
82
  segments:
90
83
  - 0
91
84
  - 10
92
- - 8
93
- version: 0.10.8
94
- name: do_jdbc
95
- prerelease: false
96
- type: :runtime
85
+ - 9
86
+ version: 0.10.9
97
87
  requirement: *id005
98
88
  description: Implements the DataObjects API for MySQL
99
89
  email: d.bussink@gmail.com
@@ -148,6 +138,7 @@ files:
148
138
  - tasks/spec.rake
149
139
  - tasks/ssl.rake
150
140
  - lib/do_mysql/do_mysql.jar
141
+ has_rdoc: true
151
142
  homepage:
152
143
  licenses: []
153
144
 
@@ -157,27 +148,23 @@ rdoc_options: []
157
148
  require_paths:
158
149
  - lib
159
150
  required_ruby_version: !ruby/object:Gem::Requirement
160
- none: false
161
151
  requirements:
162
152
  - - ">="
163
153
  - !ruby/object:Gem::Version
164
- hash: 3
165
154
  segments:
166
155
  - 0
167
156
  version: "0"
168
157
  required_rubygems_version: !ruby/object:Gem::Requirement
169
- none: false
170
158
  requirements:
171
159
  - - ">="
172
160
  - !ruby/object:Gem::Version
173
- hash: 3
174
161
  segments:
175
162
  - 0
176
163
  version: "0"
177
164
  requirements: []
178
165
 
179
166
  rubyforge_project: dorb
180
- rubygems_version: 1.8.14
167
+ rubygems_version: 1.3.6
181
168
  signing_key:
182
169
  specification_version: 3
183
170
  summary: DataObjects MySQL Driver