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.
- data/ChangeLog.markdown +6 -0
- data/Rakefile +1 -1
- data/ext/do_mysql/do_common.c +8 -0
- data/ext/do_mysql/do_mysql.c +2 -2
- data/lib/do_mysql.rb +1 -1
- data/lib/do_mysql/version.rb +1 -1
- data/spec/connection_spec.rb +1 -0
- data/spec/result_spec.rb +26 -0
- data/spec/spec_helper.rb +13 -1
- data/spec/typecast/date_spec.rb +26 -0
- data/spec/typecast/datetime_spec.rb +26 -0
- data/tasks/compile.rake +1 -1
- metadata +9 -18
data/ChangeLog.markdown
CHANGED
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.
|
|
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
|
|
data/ext/do_mysql/do_common.c
CHANGED
|
@@ -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;
|
data/ext/do_mysql/do_mysql.c
CHANGED
|
@@ -228,7 +228,7 @@ void do_mysql_full_connect(VALUE self, MYSQL *db) {
|
|
|
228
228
|
}
|
|
229
229
|
|
|
230
230
|
if (!database || !*database) {
|
|
231
|
-
|
|
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 :
|
|
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) {
|
data/lib/do_mysql.rb
CHANGED
|
@@ -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
|
|
data/lib/do_mysql/version.rb
CHANGED
data/spec/connection_spec.rb
CHANGED
|
@@ -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
|
data/spec/result_spec.rb
CHANGED
|
@@ -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
|
data/spec/spec_helper.rb
CHANGED
|
@@ -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,
|
data/spec/typecast/date_spec.rb
CHANGED
|
@@ -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
|
data/tasks/compile.rake
CHANGED
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
|
-
|
|
5
|
-
prerelease:
|
|
4
|
+
prerelease: false
|
|
6
5
|
segments:
|
|
7
6
|
- 0
|
|
8
7
|
- 10
|
|
9
|
-
-
|
|
10
|
-
version: 0.10.
|
|
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
|
|
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
|
-
-
|
|
33
|
-
version: 0.10.
|
|
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.
|
|
138
|
+
rubygems_version: 1.3.6
|
|
148
139
|
signing_key:
|
|
149
140
|
specification_version: 3
|
|
150
141
|
summary: DataObjects MySQL Driver
|