mysql2 0.3.4 → 0.3.5
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.md +3 -0
- data/ext/mysql2/result.c +17 -4
- data/lib/mysql2/version.rb +1 -1
- data/spec/mysql2/result_spec.rb +12 -3
- metadata +3 -3
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.3.5 (June 15th, 2011)
|
4
|
+
* bug fix for Time/DateTime usage depending on 32/64bit Ruby
|
5
|
+
|
3
6
|
## 0.3.4 (June 15th, 2011)
|
4
7
|
* fix a long standing bug where a signal would interrupt rb_thread_select and put the connection in a permanently broken state
|
5
8
|
* turn on casting in the ActiveRecord again, users can disable it if they need to for performance reasons
|
data/ext/mysql2/result.c
CHANGED
@@ -4,13 +4,26 @@
|
|
4
4
|
static rb_encoding *binaryEncoding;
|
5
5
|
#endif
|
6
6
|
|
7
|
-
#
|
7
|
+
#if SIZEOF_INT < SIZEOF_LONG
|
8
|
+
/**
|
9
|
+
* on 64bit platforms we can handle dates way outside 2038-01-19T03:14:07
|
10
|
+
* because of how I'm performing the math below, this will allow a maximum
|
11
|
+
* timestamp of 9846-12-12T11:5999:59
|
12
|
+
*/
|
13
|
+
#define MYSQL2_MAX_YEAR 9999
|
14
|
+
#else
|
15
|
+
/**
|
16
|
+
* on 32bit platforms the maximum date the Time class can handle is 2038-01-19T03:14:07
|
17
|
+
* 2082 = 2038+1+19+3+14+7
|
18
|
+
*/
|
19
|
+
#define MYSQL2_MAX_YEAR 2082
|
20
|
+
#endif
|
8
21
|
|
9
22
|
#ifdef NEGATIVE_TIME_T
|
10
|
-
|
23
|
+
/* 1901-12-13 20:45:52 UTC : The oldest time in 32-bit signed time_t. */
|
11
24
|
#define MYSQL2_MIN_YEAR 1902
|
12
25
|
#else
|
13
|
-
|
26
|
+
/* 1970-01-01 00:00:00 UTC : The Unix epoch - the oldest time in portable time_t. */
|
14
27
|
#define MYSQL2_MIN_YEAR 1970
|
15
28
|
#endif
|
16
29
|
|
@@ -240,7 +253,7 @@ static VALUE rb_mysql_result_fetch_row(VALUE self, ID db_timezone, ID app_timezo
|
|
240
253
|
rb_raise(cMysql2Error, "Invalid date: %s", row[i]);
|
241
254
|
val = Qnil;
|
242
255
|
} else {
|
243
|
-
if (year < MYSQL2_MIN_YEAR || year+month+day > MYSQL2_MAX_YEAR) { // use DateTime instead
|
256
|
+
if (year < MYSQL2_MIN_YEAR || year+month+day+hour+min+sec > MYSQL2_MAX_YEAR) { // use DateTime instead
|
244
257
|
VALUE offset = INT2NUM(0);
|
245
258
|
if (db_timezone == intern_local) {
|
246
259
|
offset = rb_funcall(cMysql2Client, intern_local_offset, 0);
|
data/lib/mysql2/version.rb
CHANGED
data/spec/mysql2/result_spec.rb
CHANGED
@@ -189,9 +189,18 @@ describe Mysql2::Result do
|
|
189
189
|
r.first['test'].class.should eql(DateTime)
|
190
190
|
end
|
191
191
|
|
192
|
-
|
193
|
-
|
194
|
-
|
192
|
+
if 1.size == 4 # 32bit
|
193
|
+
it "should return DateTime when timestamp is > 2038-01-19T03:14:07" do
|
194
|
+
# 2038-01-19T03:14:07 is the max for 32bit Ruby 1.8
|
195
|
+
r = @client.query("SELECT CAST('2038-01-19 03:14:08' AS DATETIME) as test")
|
196
|
+
r.first['test'].class.should eql(DateTime)
|
197
|
+
end
|
198
|
+
elsif 1.size == 8 # 64bit
|
199
|
+
it "should return Time when timestamp is > 2038-01-19T03:14:07" do
|
200
|
+
# 2038-01-19 03:14:07 is the max for 32bit Ruby 1.8
|
201
|
+
r = @client.query("SELECT CAST('2038-01-19 03:14:08' AS DATETIME) as test")
|
202
|
+
r.first['test'].class.should eql(Time)
|
203
|
+
end
|
195
204
|
end
|
196
205
|
|
197
206
|
it "should return Time for a TIMESTAMP value when within the supported range" do
|
metadata
CHANGED