-
Notifications
You must be signed in to change notification settings - Fork 1
/
BooleanVar.c
99 lines (87 loc) · 4.1 KB
/
BooleanVar.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
//-----------------------------------------------------------------------------
// BooleanVar.c
// Defines the routines for handling boolean variables (only available after
// Oracle 12.1).
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// Data types
//-----------------------------------------------------------------------------
typedef struct {
Variable_HEAD
boolean *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,
(PostBindProc) 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(boolean), // 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
{
return OracleBooleanToPythonBoolean(&var->data[pos]);
}
//-----------------------------------------------------------------------------
// 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
{
return PythonBooleanToOracleBoolean(value, &var->data[pos]);
}