OCIInterval *oci8_set_ociinterval_ds(OCIInterval *intvl, VALUE val) { sb4 day; sb4 hour; sb4 minute; sb4 sec; sb4 fsec; Check_Type(val, T_ARRAY); if (RARRAY_LEN(val) != 5) { rb_raise(rb_eRuntimeError, "invalid array size %ld", RARRAY_LEN(val)); } day = NUM2INT(RARRAY_PTR(val)[0]); hour = NUM2INT(RARRAY_PTR(val)[1]); minute = NUM2INT(RARRAY_PTR(val)[2]); sec = NUM2INT(RARRAY_PTR(val)[3]); fsec = NUM2INT(RARRAY_PTR(val)[4]); if (oracle_client_version >= ORAVERNUM(9, 2, 0, 3, 0)) { chkerr(OCIIntervalSetDaySecond(oci8_envhp, oci8_errhp, day, hour, minute, sec, fsec, intvl)); } else { /* Workaround for Bug 2227982 */ char buf[64]; const char *sign = ""; if (day == 0) { if (hour < 0) { sign = "-"; hour = -hour; } else if (minute < 0) { sign = "-"; minute = -minute; } else if (sec < 0) { sign = "-"; sec = -sec; } else if (fsec < 0) { sign = "-"; fsec = -fsec; } } sprintf(buf, "%s%d %02d:%02d:%02d.%09d", sign, day, hour, minute, sec, fsec); chkerr(OCIIntervalFromText(oci8_envhp, oci8_errhp, (text*)buf, strlen(buf), intvl)); } return intvl; }
OCIInterval *oci8_set_ociinterval_ds(OCIInterval *intvl, VALUE val) { sb4 day; sb4 hour; sb4 minute; sb4 sec; sb4 fsec; Check_Type(val, T_ARRAY); if (RARRAY_LEN(val) != 5) { rb_raise(rb_eRuntimeError, "invalid array size %ld", RARRAY_LEN(val)); } day = NUM2INT(RARRAY_AREF(val, 0)); hour = NUM2INT(RARRAY_AREF(val, 1)); minute = NUM2INT(RARRAY_AREF(val, 2)); sec = NUM2INT(RARRAY_AREF(val, 3)); fsec = NUM2INT(RARRAY_AREF(val, 4)); chkerr(OCIIntervalSetDaySecond(oci8_envhp, oci8_errhp, day, hour, minute, sec, fsec, intvl)); return intvl; }
/* boolean OCI_API OCI_IntervalSetDaySecond(OCI_Interval *itv, int day,int hour, int min, int sec, int fsec) { return OCI_IntervalSetDaySecond2(&OCILib, itv, day, hour, min, sec, fsec); } */ boolean OCI_API OCI_IntervalSetDaySecond2(OCI_Library *pOCILib, OCI_Interval *itv, int day,int hour, int min, int sec, int fsec, ExceptionSink* xsink) { boolean res = TRUE; OCI_CHECK_PTR(pOCILib, OCI_IPC_INTERVAL, itv, FALSE); OCI_CHECK_INTERVAL_ENABLED(pOCILib, itv->con, FALSE, xsink); #if OCI_VERSION_COMPILE >= OCI_9_0 OCI_CALL4Q ( pOCILib, res, itv->err, itv->con, OCIIntervalSetDaySecond((dvoid *) pOCILib->env, itv->err, (sb4) day, (sb4) hour, (sb4) min, (sb4) sec, (sb4) fsec, itv->handle), xsink ) #else OCI_NOT_USED(day); OCI_NOT_USED(hour); OCI_NOT_USED(min); OCI_NOT_USED(sec); OCI_NOT_USED(fsec); #endif OCI_RESULT(pOCILib, res); return res; }