Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
/*
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;
}