do_mysql 0.10.8 → 0.10.9

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,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
 
@@ -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: ruby
12
11
  authors:
13
12
  - Dirkjan Bussink
@@ -15,33 +14,30 @@ 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
21
  name: data_objects
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
24
  requirements:
26
25
  - - "="
27
26
  - !ruby/object:Gem::Version
28
- hash: 39
29
27
  segments:
30
28
  - 0
31
29
  - 10
32
- - 8
33
- version: 0.10.8
30
+ - 9
31
+ version: 0.10.9
34
32
  type: :runtime
35
33
  version_requirements: *id001
36
34
  - !ruby/object:Gem::Dependency
37
35
  name: rspec
38
36
  prerelease: false
39
37
  requirement: &id002 !ruby/object:Gem::Requirement
40
- none: false
41
38
  requirements:
42
39
  - - ~>
43
40
  - !ruby/object:Gem::Version
44
- hash: 9
45
41
  segments:
46
42
  - 2
47
43
  - 5
@@ -52,11 +48,9 @@ dependencies:
52
48
  name: rake-compiler
53
49
  prerelease: false
54
50
  requirement: &id003 !ruby/object:Gem::Requirement
55
- none: false
56
51
  requirements:
57
52
  - - ~>
58
53
  - !ruby/object:Gem::Version
59
- hash: 5
60
54
  segments:
61
55
  - 0
62
56
  - 7
@@ -115,6 +109,7 @@ files:
115
109
  - tasks/retrieve.rake
116
110
  - tasks/spec.rake
117
111
  - tasks/ssl.rake
112
+ has_rdoc: true
118
113
  homepage:
119
114
  licenses: []
120
115
 
@@ -124,27 +119,23 @@ rdoc_options: []
124
119
  require_paths:
125
120
  - lib
126
121
  required_ruby_version: !ruby/object:Gem::Requirement
127
- none: false
128
122
  requirements:
129
123
  - - ">="
130
124
  - !ruby/object:Gem::Version
131
- hash: 3
132
125
  segments:
133
126
  - 0
134
127
  version: "0"
135
128
  required_rubygems_version: !ruby/object:Gem::Requirement
136
- none: false
137
129
  requirements:
138
130
  - - ">="
139
131
  - !ruby/object:Gem::Version
140
- hash: 3
141
132
  segments:
142
133
  - 0
143
134
  version: "0"
144
135
  requirements: []
145
136
 
146
137
  rubyforge_project: dorb
147
- rubygems_version: 1.8.14
138
+ rubygems_version: 1.3.6
148
139
  signing_key:
149
140
  specification_version: 3
150
141
  summary: DataObjects MySQL Driver