Пример #1
0
boolean OCI_BindFree
(
    OCI_Bind *bnd
)
{
    boolean res = TRUE;

    OCI_CHECK(NULL == bnd, FALSE)

    if (OCI_BAM_INTERNAL == bnd->stmt->bind_alloc_mode)
    {
        if (bnd->is_array)
        {
            res = OCI_ArrayFreeFromHandles(bnd->input);
        }
        else
        {
            switch (bnd->type)
            {
                case OCI_CDT_NUMERIC:
                case OCI_CDT_TEXT:
                {
                    OCI_MemFree(bnd->input);
                    
                    if (bnd->alloc)
                    {
                        OCI_FREE(bnd->buffer.data)
                    }  
                    break;
                }
                default:
                {
                    OCI_FreeObjectFromType(bnd->input, bnd->type);
                }
            }
        }
    }
    else
    {
        if (bnd->alloc)
Пример #2
0
boolean OCI_ArrayClose
(
    OCI_Array *arr
)
{
    unsigned int i;

    OCI_CHECK(NULL == arr, FALSE)

    if ( (OCI_CDT_NUMERIC != arr->elem_type ) &&
         (OCI_CDT_TEXT    != arr->elem_type ) && 
         (OCI_CDT_RAW     != arr->elem_type ) )
    {
        /* Cleanup OCILIB Objects */

        for (i = 0; i < arr->nb_elem; i++)
        {
            OCI_FreeObjectFromType(arr->tab_obj[i], arr->elem_type);
        }
    }

    /* free OCI descriptors */

    if (OCI_UNKNOWN != arr->handle_type)
    {
        OCI_DescriptorArrayFree
        (
            (dvoid **) arr->mem_handle,
            (ub4     ) arr->handle_type,
            (ub4     ) arr->nb_elem
        );
    }

    OCI_FREE(arr->mem_handle)
    OCI_FREE(arr->mem_struct)
    OCI_FREE(arr->tab_obj)

    return TRUE;
}