diff -ur interbase/extconf.rb interbase-/extconf.rb --- interbase/extconf.rb Thu May 13 00:19:36 1999 +++ interbase-/extconf.rb Wed Sep 29 20:49:26 2004 @@ -1,5 +1,5 @@ require 'mkmf' - -have_library("gdslib", "isc_attach_database") or - have_library("gds", "isc_attach_database") +# ruby extconf.rb --with-opt-dir=e:/Firebird +have_library("fbclient_ms") and +have_func("isc_attach_database",["ibase.h"]) and create_makefile("interbase") diff -ur interbase/interbase.c interbase-/interbase.c --- interbase/interbase.c Tue Aug 21 17:35:41 2001 +++ interbase-/interbase.c Wed Sep 29 20:41:50 2004 @@ -848,6 +848,16 @@ free(curs); } +struct time_object { + struct timeval tv; + struct tm tm; + int gmt; + int tm_got; +}; + +#define GetTimeval(obj, tobj) \ + Data_Get_Struct(obj, struct time_object, tobj) + static void set_inputparams(curs, argc, argv) struct IBcurs *curs; @@ -873,6 +883,7 @@ char blob_info[16]; char *p; ISC_LONG length; + struct time_object *tobj; Data_Get_Struct(curs->conn, struct IBconn, conn); @@ -988,14 +999,31 @@ offset += alignment; break; -#if 0 - case SQL_DATE : + case SQL_TIMESTAMP : + offset = ALIGN(offset, alignment); + var->sqldata = (char *)(paramts + offset); + GetTimeval(obj, tobj); + isc_encode_timestamp(&tobj->tm, (ISC_TIMESTAMP *)var->sqldata); + offset += alignment; + break; + + case SQL_TYPE_TIME : + offset = ALIGN(offset, alignment); + var->sqldata = (char *)(paramts + offset); + GetTimeval(obj, tobj); + isc_encode_sql_time(&tobj->tm, (unsigned int *)var->sqldata); + offset += alignment; + break; + + case SQL_TYPE_DATE : offset = ALIGN(offset, alignment); var->sqldata = (char *)(paramts + offset); - isc_encode_date(tm, (ISC_QUAD*)var->sqldata); + GetTimeval(obj, tobj); + isc_encode_sql_date(&tobj->tm, (int *)var->sqldata); offset += alignment; break; +#if 0 case SQL_ARRAY : /* Not supported now offset = ALIGN(offset, alignment); @@ -1308,8 +1336,22 @@ val = rb_float_new(*(double*)var->sqldata); break; - case SQL_DATE: - isc_decode_date((ISC_QUAD*)var->sqldata, &tms); + case SQL_TIMESTAMP: + isc_decode_timestamp((ISC_TIMESTAMP *)var->sqldata, &tms); + t = mktime(&tms); + if (t < 0) t = 0; + val = rb_time_new(t, 0); + break; + + case SQL_TYPE_TIME: + isc_decode_sql_time((unsigned int *)var->sqldata, &tms); + t = mktime(&tms); + if (t < 0) t = 0; + val = rb_time_new(t, 0); + break; + + case SQL_TYPE_DATE: + isc_decode_sql_date((int *)var->sqldata, &tms); t = mktime(&tms); if (t < 0) t = 0; val = rb_time_new(t, 0); @@ -1401,7 +1443,7 @@ if (!transact) trans_start(Qnil, 0, 0); /* Prepare query */ - isc_dsql_prepare(isc_status, &transact, &curs->stmt, 0, sql, 1, o_sqlda); + isc_dsql_prepare(isc_status, &transact, &curs->stmt, 0, sql, SQL_DIALECT_CURRENT, o_sqlda); ib_error_check(); /* Get the statement type */