| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- //-----------------------------------------------------------------------------
- // BooleanVar.c
- // Defines the routines for handling boolean variables (only available after
- // Oracle 12.1).
- //-----------------------------------------------------------------------------
- //-----------------------------------------------------------------------------
- // Data types
- //-----------------------------------------------------------------------------
- typedef struct {
- Variable_HEAD
- int *data;
- } udt_BooleanVar;
- //-----------------------------------------------------------------------------
- // Declaration of variable functions.
- //-----------------------------------------------------------------------------
- static int BooleanVar_SetValue(udt_BooleanVar*, unsigned, PyObject*);
- static PyObject *BooleanVar_GetValue(udt_BooleanVar*, unsigned);
- //-----------------------------------------------------------------------------
- // Python type declaration
- //-----------------------------------------------------------------------------
- static PyTypeObject g_BooleanVarType = {
- PyVarObject_HEAD_INIT(NULL, 0)
- "cx_Oracle.BOOLEAN", // tp_name
- sizeof(udt_BooleanVar), // tp_basicsize
- 0, // tp_itemsize
- 0, // tp_dealloc
- 0, // tp_print
- 0, // tp_getattr
- 0, // tp_setattr
- 0, // tp_compare
- 0, // tp_repr
- 0, // tp_as_number
- 0, // tp_as_sequence
- 0, // tp_as_mapping
- 0, // tp_hash
- 0, // tp_call
- 0, // tp_str
- 0, // tp_getattro
- 0, // tp_setattro
- 0, // tp_as_buffer
- Py_TPFLAGS_DEFAULT, // tp_flags
- 0 // tp_doc
- };
- //-----------------------------------------------------------------------------
- // variable type declarations
- //-----------------------------------------------------------------------------
- static udt_VariableType vt_Boolean = {
- (InitializeProc) NULL,
- (FinalizeProc) NULL,
- (PreDefineProc) NULL,
- (PostDefineProc) NULL,
- (PreFetchProc) NULL,
- (IsNullProc) NULL,
- (SetValueProc) BooleanVar_SetValue,
- (GetValueProc) BooleanVar_GetValue,
- (GetBufferSizeProc) NULL,
- &g_BooleanVarType, // Python type
- SQLT_BOL, // Oracle type
- SQLCS_IMPLICIT, // charset form
- sizeof(int), // element length
- 0, // is character data
- 0, // is variable length
- 1, // can be copied
- 0 // can be in array
- };
- //-----------------------------------------------------------------------------
- // BooleanVar_GetValue()
- // Returns the value stored at the given array position.
- //-----------------------------------------------------------------------------
- static PyObject *BooleanVar_GetValue(
- udt_BooleanVar *var, // variable to determine value for
- unsigned pos) // array position
- {
- int integerValue;
- PyObject *value;
- integerValue = var->data[pos];
- value = (integerValue) ? Py_True : Py_False;
- Py_INCREF(value);
- return value;
- }
- //-----------------------------------------------------------------------------
- // BooleanVar_SetValue()
- // Set the value of the variable at the given array position.
- //-----------------------------------------------------------------------------
- static int BooleanVar_SetValue(
- udt_BooleanVar *var, // variable to set value for
- unsigned pos, // array position to set
- PyObject *value) // value to set
- {
- var->data[pos] = (value == Py_True);
- return 0;
- }
|