OCI_HashTable * OCI_API OCI_HashCreate ( unsigned int size, unsigned int type ) { OCI_HashTable *table = NULL; OCI_LIB_CALL_ENTER(OCI_HashTable*, table) OCI_CHECK_ENUM_VALUE(NULL, NULL, type, HashTypeValues, OTEXT("Hash type")); /* allocate table structure */ table = (OCI_HashTable *) OCI_MemAlloc(OCI_IPC_HASHTABLE, sizeof(*table), (size_t) 1, TRUE); /* set up attributes and allocate internal array of hash entry pointers */ if (table) { table->type = type; table->size = 0; table->count = 0; table->items = (OCI_HashEntry **) OCI_MemAlloc(OCI_IPC_HASHENTRY_ARRAY, sizeof(*table->items), (size_t) size, TRUE); if (table->items) { table->size = size; call_status = TRUE; } } if (call_status) { call_retval = table; } else if (table) { OCI_HashFree(table); } OCI_LIB_CALL_EXIT() }
boolean OCI_API OCI_QueueDrop ( OCI_Connection *con, const otext *queue_name ) { OCI_Statement *st = NULL; OCI_LIB_CALL_ENTER(boolean, FALSE) OCI_CHECK_PTR(OCI_IPC_CONNECTION, con) OCI_CHECK_PTR(OCI_IPC_STRING, queue_name) st = OCI_StatementCreate(con); if (st) { call_status = OCI_Prepare ( st, OTEXT("BEGIN ") OTEXT(" DBMS_AQADM.DROP_QUEUE ") OTEXT(" (") OTEXT(" queue_name => :queue_name ") OTEXT(" ); ") OTEXT("END; ") ); call_status = call_status && OCI_BindString(st, OTEXT(":queue_name"), (otext *) queue_name, 0); call_status = call_status && OCI_Execute(st); OCI_StatementFree(st); } call_retval = call_status; OCI_LIB_CALL_EXIT() }
boolean OCI_API OCI_QueueCreate ( OCI_Connection *con, const otext *queue_name, const otext *queue_table, unsigned int queue_type, unsigned int max_retries, unsigned int retry_delay, unsigned int retention_time, boolean dependency_tracking, const otext *comment ) { OCI_Statement *st = NULL; OCI_LIB_CALL_ENTER(boolean, FALSE) OCI_CHECK_PTR(OCI_IPC_CONNECTION, con) OCI_CHECK_PTR(OCI_IPC_STRING, queue_name) OCI_CHECK_PTR(OCI_IPC_STRING, queue_table) OCI_CHECK_ENUM_VALUE(con, NULL, queue_type, QueueTypeValues, OTEXT("Queue type")) st = OCI_StatementCreate(con); if (st) { call_status = OCI_Prepare ( st, OTEXT("DECLARE ") OTEXT(" v_dependency_tracking BOOLEAN := FALSE; ") OTEXT("BEGIN ") OTEXT(" IF (:dependency_tracking = 1) then ") OTEXT(" v_dependency_tracking := TRUE; ") OTEXT(" END IF; ") OTEXT(" DBMS_AQADM.CREATE_QUEUE ") OTEXT(" (") OTEXT(" queue_name => :queue_name, ") OTEXT(" queue_table => :queue_table, ") OTEXT(" queue_type => :queue_type, ") OTEXT(" max_retries => :max_retries, ") OTEXT(" retry_delay => :retry_delay, ") OTEXT(" retention_time => :retention_time, ") OTEXT(" dependency_tracking => v_dependency_tracking, ") OTEXT(" comment => :comment ") OTEXT(" ); ") OTEXT("END; ") ); call_status = call_status && OCI_BindString(st, OTEXT(":queue_name"), (otext *) queue_name, 0); call_status = call_status && OCI_BindString(st, OTEXT(":queue_table"), (otext *) queue_table, 0); call_status = call_status && OCI_BindUnsignedInt(st, OTEXT(":queue_type"), &queue_type); call_status = call_status && OCI_BindUnsignedInt(st, OTEXT(":max_retries"), &max_retries); call_status = call_status && OCI_BindUnsignedInt(st, OTEXT(":retry_delay"), &retry_delay); call_status = call_status && OCI_BindUnsignedInt(st, OTEXT(":retention_time"), &retention_time); call_status = call_status && OCI_BindInt(st, OTEXT(":dependency_tracking"), &dependency_tracking); call_status = call_status && OCI_BindString(st, OTEXT(":comment"), (otext *) (comment ? comment : OCI_STRING_EMPTY), 0); call_status = call_status && OCI_Execute(st); OCI_StatementFree(st); } call_retval = call_status; OCI_LIB_CALL_EXIT() }
boolean OCI_API OCI_QueueTableDrop ( OCI_Connection *con, const otext *queue_table, boolean force ) { OCI_Statement *st = NULL; OCI_LIB_CALL_ENTER(boolean, FALSE) OCI_CHECK_PTR(OCI_IPC_CONNECTION, con) OCI_CHECK_PTR(OCI_IPC_STRING, queue_table) st = OCI_StatementCreate(con); if (st) { call_status = OCI_Prepare ( st, OTEXT("DECLARE ") OTEXT(" v_force BOOLEAN := FALSE; ") OTEXT("BEGIN ") OTEXT(" IF (:force = 1) then ") OTEXT(" v_force := TRUE; ") OTEXT(" END IF; ") OTEXT(" DBMS_AQADM.DROP_QUEUE_TABLE ") OTEXT(" (") OTEXT(" queue_table => :queue_table, ") OTEXT(" force => v_force ") OTEXT(" ); ") OTEXT("END; ") ); call_status = call_status && OCI_BindString(st, OTEXT(":queue_table"), (otext *)queue_table, 0); call_status = call_status && OCI_BindInt(st, OTEXT(":force"), &force); call_status = call_status && OCI_Execute(st); OCI_StatementFree(st); } call_retval = call_status; OCI_LIB_CALL_EXIT() }
boolean OCI_API OCI_QueueTableAlter ( OCI_Connection *con, const otext *queue_table, const otext *comment, unsigned int primary_instance, unsigned int secondary_instance ) { OCI_Statement *st = NULL; OCI_LIB_CALL_ENTER(boolean, FALSE) OCI_CHECK_PTR(OCI_IPC_CONNECTION, con) OCI_CHECK_PTR(OCI_IPC_STRING, queue_table) st = OCI_StatementCreate(con); if (st) { call_status = OCI_Prepare ( st, OTEXT("BEGIN ") OTEXT(" DBMS_AQADM.ALTER_QUEUE_TABLE ") OTEXT(" (") OTEXT(" queue_table => :queue_table, ") OTEXT(" comment => :comment, ") OTEXT(" primary_instance => :primary_instance, ") OTEXT(" secondary_instance => :secondary_instance ") OTEXT(" ); ") OTEXT("END; ") ); call_status = call_status && OCI_BindString(st, OTEXT(":queue_table"), (otext *) queue_table, 0); call_status = call_status && OCI_BindString(st, OTEXT(":comment"), (otext *) (comment ? comment: OCI_STRING_EMPTY), 0); call_status = call_status && OCI_BindUnsignedInt(st, OTEXT(":primary_instance"), &primary_instance); call_status = call_status && OCI_BindUnsignedInt(st, OTEXT(":secondary_instance"), &secondary_instance); call_status = call_status && OCI_Execute(st); OCI_StatementFree(st); } call_retval = call_status; OCI_LIB_CALL_EXIT() }
boolean OCI_API OCI_QueueTableCreate ( OCI_Connection *con, const otext *queue_table, const otext *queue_payload_type, const otext *storage_clause, const otext *sort_list, boolean multiple_consumers, unsigned int message_grouping, const otext *comment, unsigned int primary_instance, unsigned int secondary_instance, const otext *compatible ) { OCI_Statement *st = NULL; OCI_LIB_CALL_ENTER(boolean, FALSE) OCI_CHECK_PTR(OCI_IPC_CONNECTION, con) OCI_CHECK_PTR(OCI_IPC_STRING, queue_table) OCI_CHECK_PTR(OCI_IPC_STRING, queue_payload_type) OCI_CHECK_ENUM_VALUE(con, NULL, message_grouping, GroupingModeValues, OTEXT("Grouping mode")) st = OCI_StatementCreate(con); if (st) { call_status = OCI_Prepare ( st, OTEXT("DECLARE ") OTEXT(" v_multiple_consumers BOOLEAN := FALSE; ") OTEXT("BEGIN ") OTEXT(" IF (:multiple_consumers = 1) then ") OTEXT(" v_multiple_consumers := TRUE; ") OTEXT(" END IF; ") OTEXT(" DBMS_AQADM.CREATE_QUEUE_TABLE ") OTEXT(" (") OTEXT(" queue_table => :queue_table, ") OTEXT(" queue_payload_type => :queue_payload_type, ") OTEXT(" storage_clause => :storage_clause, ") OTEXT(" sort_list => :sort_list, ") OTEXT(" multiple_consumers => v_multiple_consumers, ") OTEXT(" message_grouping => :message_grouping, ") OTEXT(" comment => :comment, ") OTEXT(" primary_instance => :primary_instance, ") OTEXT(" secondary_instance => :secondary_instance, ") OTEXT(" compatible => :compatible") OTEXT(" ); ") OTEXT("END; ") ); call_status = call_status && OCI_BindString(st, OTEXT(":queue_table"), (otext *) queue_table, 0); call_status = call_status && OCI_BindString(st, OTEXT(":queue_payload_type"), (otext *) queue_payload_type, 0); call_status = call_status && OCI_BindString(st, OTEXT(":storage_clause"), (otext *) (storage_clause ? storage_clause : OCI_STRING_EMPTY), 0); call_status = call_status && OCI_BindString(st, OTEXT(":sort_list"), (otext *) (sort_list ? sort_list : OCI_STRING_EMPTY), 0); call_status = call_status && OCI_BindInt(st, OTEXT(":multiple_consumers"), &multiple_consumers); call_status = call_status && OCI_BindUnsignedInt(st, OTEXT(":message_grouping"), &message_grouping); call_status = call_status && OCI_BindString(st, OTEXT(":comment"), (otext *)( comment ? comment : OCI_STRING_EMPTY), 0); call_status = call_status && OCI_BindUnsignedInt(st, OTEXT(":primary_instance"), &primary_instance); call_status = call_status && OCI_BindUnsignedInt(st, OTEXT(":secondary_instance"), &secondary_instance); call_status = call_status && OCI_BindString(st, OTEXT(":compatible"), (otext *) (compatible ? compatible : OCI_STRING_EMPTY), 0); call_status = call_status && OCI_Execute(st); OCI_StatementFree(st); } call_retval = call_status; OCI_LIB_CALL_EXIT() }
boolean OCI_API OCI_QueueStop ( OCI_Connection *con, const otext *queue_name, boolean enqueue, boolean dequeue, boolean wait ) { OCI_Statement *st = NULL; OCI_LIB_CALL_ENTER(boolean, FALSE) OCI_CHECK_PTR(OCI_IPC_CONNECTION, con) OCI_CHECK_PTR(OCI_IPC_STRING, queue_name) st = OCI_StatementCreate(con); if (st) { call_status = OCI_Prepare ( st, OTEXT("DECLARE ") OTEXT(" v_enqueue BOOLEAN := FALSE; ") OTEXT(" v_dequeue BOOLEAN := FALSE; ") OTEXT(" v_wait BOOLEAN := FALSE; ") OTEXT("BEGIN ") OTEXT(" IF (:enqueue = 1) then ") OTEXT(" v_enqueue := TRUE; ") OTEXT(" END IF; ") OTEXT(" IF (:dequeue = 1) then ") OTEXT(" v_dequeue := TRUE; ") OTEXT(" END IF; ") OTEXT(" IF (:wait = 1) then ") OTEXT(" v_wait := TRUE; ") OTEXT(" END IF; ") OTEXT(" DBMS_AQADM.STOP_QUEUE ") OTEXT(" (") OTEXT(" queue_name => :queue_name, ") OTEXT(" enqueue => v_enqueue, ") OTEXT(" dequeue => v_dequeue, ") OTEXT(" wait => v_wait ") OTEXT(" ); ") OTEXT("END; ") ); call_status = call_status && OCI_BindString(st, OTEXT(":queue_name"), (otext *) queue_name, 0); call_status = call_status && OCI_BindInt(st, OTEXT(":enqueue"), &enqueue); call_status = call_status && OCI_BindInt(st, OTEXT(":dequeue"), &dequeue); call_status = call_status && OCI_BindInt(st, OTEXT(":wait"), &wait); call_status = call_status && OCI_Execute(st); OCI_StatementFree(st); } call_retval = call_status; OCI_LIB_CALL_EXIT() }
boolean OCI_API OCI_QueueAlter ( OCI_Connection *con, const otext *queue_name, unsigned int max_retries, unsigned int retry_delay, unsigned int retention_time, const otext *comment ) { OCI_Statement *st = NULL; OCI_LIB_CALL_ENTER(boolean, FALSE) OCI_CHECK_PTR(OCI_IPC_CONNECTION, con) OCI_CHECK_PTR(OCI_IPC_STRING, queue_name) st = OCI_StatementCreate(con); if (st) { call_status = OCI_Prepare ( st, OTEXT("BEGIN ") OTEXT(" DBMS_AQADM.ALTER_QUEUE ") OTEXT(" (") OTEXT(" queue_name => :queue_name, ") OTEXT(" max_retries => :max_retries, ") OTEXT(" retry_delay => :retry_delay, ") OTEXT(" retention_time => :retention_time, ") OTEXT(" comment => :comment ") OTEXT(" ); ") OTEXT("END; ") ); call_status = call_status && OCI_BindString(st, OTEXT(":queue_name"), (otext *) queue_name, 0); call_status = call_status && OCI_BindUnsignedInt(st, OTEXT(":max_retries"), &max_retries); call_status = call_status && OCI_BindUnsignedInt(st, OTEXT(":retry_delay"), &retry_delay); call_status = call_status && OCI_BindUnsignedInt(st, OTEXT(":retention_time"), &retention_time); call_status = call_status && OCI_BindString(st, OTEXT(":comment"), (otext *) (comment ? comment : OCI_STRING_EMPTY), 0); call_status = call_status && OCI_Execute(st); OCI_StatementFree(st); } call_retval = call_status; OCI_LIB_CALL_EXIT() }
boolean OCI_API OCI_QueueTablePurge ( OCI_Connection *con, const otext *queue_table, const otext *purge_condition, boolean block, unsigned int delivery_mode ) { OCI_LIB_CALL_ENTER(boolean, FALSE) OCI_CHECK_PTR(OCI_IPC_CONNECTION, con) OCI_CHECK_PTR(OCI_IPC_STRING, queue_table) OCI_CHECK_ENUM_VALUE(con, NULL, delivery_mode, DeliveryModeValues, OTEXT("Delivery mode")) if (con->ver_num >= OCI_10_1) { OCI_Statement *st = NULL; st = OCI_StatementCreate(con); if (st) { call_status = OCI_Prepare ( st, OTEXT("DECLARE ") OTEXT(" v_purge_options DBMS_AQADM.AQ$_PURGE_OPTIONS_T; ") OTEXT(" v_block BOOLEAN := FALSE; ")
* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "ocilib_internal.h" /* ********************************************************************************************* * * STRINGS MESSAGES * ********************************************************************************************* */ static otext * OCILib_TypeNames[OCI_IPC_COUNT] = { OTEXT("Oracle memory"), OTEXT("boolean pointer"), OTEXT("generic pointer"), OTEXT("short pointer"), OTEXT("int pointer"), OTEXT("big_int pointer"), OTEXT("double pointer"), OTEXT("float pointer"), OTEXT("string pointer"), OTEXT("function callback"), OTEXT("Error handle"), OTEXT("TypeInfo handle"), OTEXT("Connection handle"), OTEXT("Pool handle"),
#include "ocilib_internal.h" /* ********************************************************************************************* * * PRIVATE FUNCTIONS * ********************************************************************************************* */ typedef struct MagicNumber { unsigned char number[3]; otext* name; } MagicNumber; static MagicNumber MagicNumbers[] = { { { 2, 255, 101 }, OTEXT("~") }, { { 1, 0, 0 }, OTEXT("-~") } }; #define OCI_MAGIC_NUMBER_COUNT 2 #define OCI_NUMBER_OPERATION(func) \ \ OCINumber src_num = { {0} }; \ \ OCI_CALL_ENTER(boolean, FALSE) \ OCI_CALL_CHECK_PTR(OCI_IPC_NUMBER, number) \ OCI_CALL_CONTEXT_SET_FROM_OBJ(number) \ \ OCI_STATUS = OCI_NumberSetNativeValue(number->con, &src_num, \