The current memory duration

Many of the DataBlade® API constructor functions assign the current memory duration to the DataBlade API data type structures that they allocate.

The following table shows the DataBlade API data type structures that are allocated with the current memory duration.

Table 1. DataBlade API data type structures with the current memory duration
DataBlade API data type structure DataBlade API constructor function DataBlade API destructor function
Collection descriptor (MI_COLL_DESC) mi_collection_open(), mi_collection_open_with_options() mi_collection_close()
Collection (MI_COLLECTION) mi_collection_copy(), mi_collection_create(), mi_streamread_collection() mi_collection_free()
Error descriptor (MI_ERROR_DESC) mi_error_desc_copy() mi_error_desc_destroy()
LO handle (MI_LO_HANDLE) mi_get_lo_handle(), mi_lo_copy(), mi_lo_create(), mi_lo_expand(), mi_lo_from_file(), mi_lo_from_string() mi_lo_delete_immediate(), mi_lo_release()
LO-specification structure (MI_LO_SPEC) mi_lo_spec_init() mi_lo_spec_free()
LO-status structure (MI_LO_STAT) mi_lo_stat() mi_lo_stat_free()

MI_LO_LIST

mi_lo_lolist_create() None
Row descriptor (MI_ROW_DESC) mi_row_desc_create() mi_row_desc_free()
Row structure (MI_ROW) mi_row_create(), mi_streamread_row() mi_row_free()
Stream descriptor (MI_STREAM) mi_stream_init(), mi_stream_open_fio(), mi_stream_open_mi_lvarchar(), mi_stream_open_str() mi_stream_close()
User memory mi_alloc(), mi_zalloc() mi_free()
Varying-length structure (mi_lvarchar, mi_sendrecv, mi_impexp, mi_impexpbin) mi_new_var(), mi_streamread_lvarchar(), mi_string_to_lvarchar(), mi_var_copy() mi_var_free()
To change the memory duration of a DataBlade API data type structure, call the mi_switch_mem_duration() function with the desired duration before the DataBlade API function call that allocates the object. For more information, see Change the memory duration.
Important: All the DataBlade API functions in DataBlade API data type structures with the current memory duration allocate structures with the current memory duration. If you switch the current memory duration, you affect not only explicit allocations you make with mi_alloc() or mi_zalloc() but the memory allocations that all these DataBlade API constructor functions do as well.