fb 0.6.2 → 0.6.3
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/fb.c +30 -6
- data/test/DataTypesTestCases.rb +1 -1
- metadata +1 -1
data/fb.c
CHANGED
@@ -199,10 +199,10 @@ static VALUE fb_error_msg(ISC_STATUS *isc_status)
|
|
199
199
|
#endif
|
200
200
|
|
201
201
|
struct time_object {
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
202
|
+
struct timeval tv;
|
203
|
+
struct tm tm;
|
204
|
+
int gmt;
|
205
|
+
int tm_got;
|
206
206
|
};
|
207
207
|
|
208
208
|
#define GetTimeval(obj, tobj) \
|
@@ -210,9 +210,33 @@ struct time_object {
|
|
210
210
|
|
211
211
|
static VALUE fb_mktime(struct tm *tm, char *which)
|
212
212
|
{
|
213
|
+
#if defined(_WIN32)
|
214
|
+
if (tm->tm_year + 1900 < 1970)
|
215
|
+
{
|
216
|
+
tm->tm_year = 70;
|
217
|
+
tm->tm_mon = 0;
|
218
|
+
tm->tm_mday = 1;
|
219
|
+
tm->tm_hour = 0;
|
220
|
+
tm->tm_min = 0;
|
221
|
+
tm->tm_sec = 0;
|
222
|
+
}
|
223
|
+
#endif
|
224
|
+
#if defined(_LP64) || defined(__LP64__) || defined(__arch64__)
|
225
|
+
// No need to floor time on 64-bit Unix.
|
226
|
+
#else
|
227
|
+
if (tm->tm_year + 1900 < 1902)
|
228
|
+
{
|
229
|
+
tm->tm_year = 2;
|
230
|
+
tm->tm_mon = 0;
|
231
|
+
tm->tm_mday = 1;
|
232
|
+
tm->tm_hour = 0;
|
233
|
+
tm->tm_min = 0;
|
234
|
+
tm->tm_sec = 0;
|
235
|
+
}
|
236
|
+
#endif
|
213
237
|
return rb_funcall(
|
214
238
|
rb_cTime, rb_intern(which), 6,
|
215
|
-
INT2FIX(tm->tm_year), INT2FIX(tm->tm_mon + 1), INT2FIX(tm->tm_mday),
|
239
|
+
INT2FIX(tm->tm_year + 1900), INT2FIX(tm->tm_mon + 1), INT2FIX(tm->tm_mday),
|
216
240
|
INT2FIX(tm->tm_hour), INT2FIX(tm->tm_min), INT2FIX(tm->tm_sec));
|
217
241
|
}
|
218
242
|
|
@@ -1982,7 +2006,7 @@ static VALUE fb_cursor_fetch(struct FbCursor *fb_cursor)
|
|
1982
2006
|
|
1983
2007
|
case SQL_TYPE_TIME:
|
1984
2008
|
isc_decode_sql_time((ISC_TIME *)var->sqldata, &tms);
|
1985
|
-
tms.tm_year =
|
2009
|
+
tms.tm_year = 100;
|
1986
2010
|
tms.tm_mon = 0;
|
1987
2011
|
tms.tm_mday = 1;
|
1988
2012
|
val = fb_mktime(&tms, "utc");
|
data/test/DataTypesTestCases.rb
CHANGED
@@ -153,7 +153,7 @@ class DataTypesTestCases < Test::Unit::TestCase
|
|
153
153
|
assert_equal gen_vc10(i), row["VC10"], "VARCHAR(10)"
|
154
154
|
assert_equal gen_vc10000(i), row["VC10000"], "VARCHAR(10000)"
|
155
155
|
assert_equal gen_dt(i), row["DT"], "DATE"
|
156
|
-
|
156
|
+
assert_equal gen_tm(i).strftime("%H%M%S"), row["TM"].utc.strftime("%H%M%S"), "TIME"
|
157
157
|
assert_equal gen_ts(i), row["TS"], "TIMESTAMP"
|
158
158
|
assert_equal gen_n92(i), row["N92"], "NUMERIC"
|
159
159
|
assert_equal gen_d92(i), row["D92"], "DECIMAL"
|