mirror of
https://github.com/mariadb-corporation/mariadb-connector-python.git
synced 2025-07-28 06:40:03 +00:00
Moved Objects from c to python code
Indicator, BINARY, NUMBER, STRING and DATE objects were moved to python code
This commit is contained in:
@ -93,15 +93,6 @@ int clock_gettime(int dummy, struct timespec *ct);
|
|||||||
/* Magic constant for checking dynamic columns */
|
/* Magic constant for checking dynamic columns */
|
||||||
#define PYTHON_DYNCOL_VALUE 0xA378BD8E
|
#define PYTHON_DYNCOL_VALUE 0xA378BD8E
|
||||||
|
|
||||||
enum enum_dataapi_groups
|
|
||||||
{
|
|
||||||
DBAPI_NUMBER= 1,
|
|
||||||
DBAPI_STRING,
|
|
||||||
DBAPI_DATETIME,
|
|
||||||
DBAPI_BINARY,
|
|
||||||
DBAPI_ROWID
|
|
||||||
};
|
|
||||||
|
|
||||||
enum enum_extended_field_type
|
enum enum_extended_field_type
|
||||||
{
|
{
|
||||||
EXT_TYPE_NONE=0,
|
EXT_TYPE_NONE=0,
|
||||||
@ -210,7 +201,7 @@ typedef struct mrdb_pool{
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
enum enum_field_types type;
|
enum enum_field_types type;
|
||||||
PyObject *Value;
|
PyObject *Value;
|
||||||
char indicator;
|
uint8_t indicator;
|
||||||
} Mariadb_Value;
|
} Mariadb_Value;
|
||||||
|
|
||||||
/* Parameter info for cursor.executemany()
|
/* Parameter info for cursor.executemany()
|
||||||
@ -233,11 +224,6 @@ typedef struct {
|
|||||||
MYSQL_TIME tm;
|
MYSQL_TIME tm;
|
||||||
} MrdbParamValue;
|
} MrdbParamValue;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
PyObject_HEAD
|
|
||||||
enum enum_indicator_type indicator;
|
|
||||||
} MrdbIndicator;
|
|
||||||
|
|
||||||
/* PEP-249: Cursor object */
|
/* PEP-249: Cursor object */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PyObject_HEAD
|
PyObject_HEAD
|
||||||
@ -281,12 +267,6 @@ typedef struct
|
|||||||
PyObject_HEAD
|
PyObject_HEAD
|
||||||
} Mariadb_Fieldinfo;
|
} Mariadb_Fieldinfo;
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
PyObject_HEAD
|
|
||||||
int32_t *types;
|
|
||||||
} Mariadb_DBAPIType;
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
ps_field_fetch_func func;
|
ps_field_fetch_func func;
|
||||||
int pack_len;
|
int pack_len;
|
||||||
@ -314,10 +294,8 @@ extern PyObject *decimal_module,
|
|||||||
/* Object types */
|
/* Object types */
|
||||||
extern PyTypeObject MrdbPool_Type;
|
extern PyTypeObject MrdbPool_Type;
|
||||||
extern PyTypeObject Mariadb_Fieldinfo_Type;
|
extern PyTypeObject Mariadb_Fieldinfo_Type;
|
||||||
extern PyTypeObject MrdbIndicator_Type;
|
|
||||||
extern PyTypeObject MrdbConnection_Type;
|
extern PyTypeObject MrdbConnection_Type;
|
||||||
extern PyTypeObject MrdbCursor_Type;
|
extern PyTypeObject MrdbCursor_Type;
|
||||||
extern PyTypeObject Mariadb_DBAPIType_Type;
|
|
||||||
|
|
||||||
int Mariadb_traverse(PyObject *self,
|
int Mariadb_traverse(PyObject *self,
|
||||||
visitproc visit,
|
visitproc visit,
|
||||||
@ -333,15 +311,6 @@ mariadb_throw_exception(void *handle,
|
|||||||
|
|
||||||
enum enum_extended_field_type mariadb_extended_field_type(const MYSQL_FIELD *field);
|
enum enum_extended_field_type mariadb_extended_field_type(const MYSQL_FIELD *field);
|
||||||
|
|
||||||
PyObject *
|
|
||||||
MrdbIndicator_Object(uint32_t type);
|
|
||||||
|
|
||||||
long
|
|
||||||
MrdbIndicator_AsLong(PyObject *v);
|
|
||||||
|
|
||||||
PyObject *
|
|
||||||
Mariadb_DBAPIType_Object(uint32_t type);
|
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
MrdbConnection_affected_rows(MrdbConnection *self);
|
MrdbConnection_affected_rows(MrdbConnection *self);
|
||||||
|
|
||||||
@ -468,7 +437,7 @@ if ((obj)->thread_state)\
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define MrdbIndicator_Check(a)\
|
#define MrdbIndicator_Check(a)\
|
||||||
(Py_TYPE((a)) == &MrdbIndicator_Type)
|
(PyObject_HasAttrString(a, "indicator"))
|
||||||
|
|
||||||
#define MARIADB_CHECK_CONNECTION(connection, ret)\
|
#define MARIADB_CHECK_CONNECTION(connection, ret)\
|
||||||
if (!(connection) || !(connection)->mysql)\
|
if (!(connection) || !(connection)->mysql)\
|
||||||
|
@ -8,10 +8,8 @@ Minimum supported Python version is 3.6
|
|||||||
'''
|
'''
|
||||||
|
|
||||||
from ._mariadb import (
|
from ._mariadb import (
|
||||||
BINARY,
|
|
||||||
Binary,
|
Binary,
|
||||||
ConnectionPool,
|
ConnectionPool,
|
||||||
DATETIME,
|
|
||||||
DataError,
|
DataError,
|
||||||
DatabaseError,
|
DatabaseError,
|
||||||
Date,
|
Date,
|
||||||
@ -20,13 +18,10 @@ from ._mariadb import (
|
|||||||
IntegrityError,
|
IntegrityError,
|
||||||
InterfaceError,
|
InterfaceError,
|
||||||
InternalError,
|
InternalError,
|
||||||
NUMBER,
|
|
||||||
NotSupportedError,
|
NotSupportedError,
|
||||||
OperationalError,
|
OperationalError,
|
||||||
PoolError,
|
PoolError,
|
||||||
ProgrammingError,
|
ProgrammingError,
|
||||||
ROWID,
|
|
||||||
STRING,
|
|
||||||
Time,
|
Time,
|
||||||
TimeFromTicks,
|
TimeFromTicks,
|
||||||
Timestamp,
|
Timestamp,
|
||||||
@ -35,14 +30,53 @@ from ._mariadb import (
|
|||||||
_CONNECTION_POOLS,
|
_CONNECTION_POOLS,
|
||||||
__version__,
|
__version__,
|
||||||
__version_info__,
|
__version_info__,
|
||||||
apilevel,
|
|
||||||
paramstyle,
|
|
||||||
threadsafety,
|
|
||||||
connect,
|
connect,
|
||||||
fieldinfo,
|
fieldinfo,
|
||||||
mariadbapi_version,
|
mariadbapi_version,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
apilevel = '2.0'
|
||||||
|
paramstyle = 'qmark'
|
||||||
|
threadsafety = True
|
||||||
|
|
||||||
|
from mariadb.constants import FIELD_TYPE
|
||||||
|
|
||||||
|
class DbApiType(frozenset):
|
||||||
|
|
||||||
|
def __eq__(self, field_type):
|
||||||
|
if (isinstance(field_type, DbApiType)):
|
||||||
|
return not self.difference(field_type)
|
||||||
|
return field_type in self
|
||||||
|
|
||||||
|
BINARY = DbApiType([FIELD_TYPE.GEOMETRY,
|
||||||
|
FIELD_TYPE.LONG_BLOB,
|
||||||
|
FIELD_TYPE.MEDIUM_BLOB,
|
||||||
|
FIELD_TYPE.TINY_BLOB,
|
||||||
|
FIELD_TYPE.BLOB])
|
||||||
|
|
||||||
|
STRING = DbApiType([FIELD_TYPE.ENUM,
|
||||||
|
FIELD_TYPE.JSON,
|
||||||
|
FIELD_TYPE.STRING,
|
||||||
|
FIELD_TYPE.VARCHAR,
|
||||||
|
FIELD_TYPE.VAR_STRING])
|
||||||
|
|
||||||
|
NUMBER = DbApiType([FIELD_TYPE.DECIMAL,
|
||||||
|
FIELD_TYPE.DOUBLE,
|
||||||
|
FIELD_TYPE.FLOAT,
|
||||||
|
FIELD_TYPE.INT24,
|
||||||
|
FIELD_TYPE.LONG,
|
||||||
|
FIELD_TYPE.LONGLONG,
|
||||||
|
FIELD_TYPE.NEWDECIMAL,
|
||||||
|
FIELD_TYPE.SHORT,
|
||||||
|
FIELD_TYPE.TINY,
|
||||||
|
FIELD_TYPE.YEAR])
|
||||||
|
|
||||||
|
DATE = DbApiType([FIELD_TYPE.DATE])
|
||||||
|
TIME = DbApiType([FIELD_TYPE.TIME])
|
||||||
|
DATETIME = TIMESTAMP = DbApiType([FIELD_TYPE.DATETIME,
|
||||||
|
FIELD_TYPE.TIMESTAMP])
|
||||||
|
ROWID = DbApiType()
|
||||||
|
|
||||||
'''
|
'''
|
||||||
test attribute
|
test attribute
|
||||||
'''
|
'''
|
||||||
|
@ -4,10 +4,14 @@ MariaDB indicator variables
|
|||||||
Indicator values are used in executemany() method of cursor class to
|
Indicator values are used in executemany() method of cursor class to
|
||||||
indicate special values.
|
indicate special values.
|
||||||
'''
|
'''
|
||||||
|
class MrdbIndicator():
|
||||||
|
indicator= 0
|
||||||
|
|
||||||
import mariadb._mariadb as m
|
def __init__(self, indicator):
|
||||||
|
self.indicator = indicator
|
||||||
|
|
||||||
|
NULL = MrdbIndicator(1)
|
||||||
|
DEFAULT = MrdbIndicator(2)
|
||||||
|
IGNORE = MrdbIndicator(3)
|
||||||
|
IGNORE_ROW = MrdbIndicator(4)
|
||||||
|
|
||||||
NULL = m.indicator_null
|
|
||||||
DEFAULT = m.indicator_default
|
|
||||||
IGNORE = m.indicator_ignore
|
|
||||||
IGNORE_ROW = m.indicator_row
|
|
||||||
|
@ -1 +1,9 @@
|
|||||||
__all__ = ["CLIENT", "INDICATOR", "CURSOR", "FIELD_TYPE"]
|
class FOO():
|
||||||
|
|
||||||
|
def __init__(self, indicator):
|
||||||
|
self.indicator = indicator
|
||||||
|
|
||||||
|
FOO_NULL = FOO(1)
|
||||||
|
FOO_DEFAULT = FOO(2)
|
||||||
|
|
||||||
|
__all__ = ["CLIENT", "CURSOR", "FIELD_TYPE", "INDICATOR"]
|
||||||
|
@ -28,7 +28,8 @@ extern int codecs_datetime_init(void);
|
|||||||
|
|
||||||
PyObject *cnx_pool= NULL;
|
PyObject *cnx_pool= NULL;
|
||||||
PyObject *decimal_module= NULL,
|
PyObject *decimal_module= NULL,
|
||||||
*decimal_type= NULL;
|
*decimal_type= NULL,
|
||||||
|
*indicator_module= NULL;
|
||||||
extern uint16_t max_pool_size;
|
extern uint16_t max_pool_size;
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -177,24 +178,12 @@ PyMODINIT_FUNC PyInit__mariadb(void)
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_TYPE(&MrdbIndicator_Type) = &PyType_Type;
|
|
||||||
if (PyType_Ready(&MrdbIndicator_Type) == -1)
|
|
||||||
{
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
Py_TYPE(&Mariadb_Fieldinfo_Type) = &PyType_Type;
|
Py_TYPE(&Mariadb_Fieldinfo_Type) = &PyType_Type;
|
||||||
if (PyType_Ready(&Mariadb_Fieldinfo_Type) == -1)
|
if (PyType_Ready(&Mariadb_Fieldinfo_Type) == -1)
|
||||||
{
|
{
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_TYPE(&Mariadb_DBAPIType_Type) = &PyType_Type;
|
|
||||||
if (PyType_Ready(&Mariadb_DBAPIType_Type) == -1)
|
|
||||||
{
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* PEP-396: Module version numbers */
|
/* PEP-396: Module version numbers */
|
||||||
PyModule_AddObject(module, "__version__",
|
PyModule_AddObject(module, "__version__",
|
||||||
PyUnicode_FromString(PY_MARIADB_VERSION));
|
PyUnicode_FromString(PY_MARIADB_VERSION));
|
||||||
@ -269,26 +258,6 @@ PyMODINIT_FUNC PyInit__mariadb(void)
|
|||||||
PyModule_AddObject(module, "ConnectionPool", (PyObject *)&MrdbPool_Type);
|
PyModule_AddObject(module, "ConnectionPool", (PyObject *)&MrdbPool_Type);
|
||||||
PyModule_AddObject(module, "_CONNECTION_POOLS", cnx_pool);
|
PyModule_AddObject(module, "_CONNECTION_POOLS", cnx_pool);
|
||||||
|
|
||||||
PyModule_AddObject(module, "indicator_null",
|
|
||||||
MrdbIndicator_Object(STMT_INDICATOR_NULL));
|
|
||||||
PyModule_AddObject(module, "indicator_default",
|
|
||||||
MrdbIndicator_Object(STMT_INDICATOR_DEFAULT));
|
|
||||||
PyModule_AddObject(module, "indicator_ignore",
|
|
||||||
MrdbIndicator_Object(STMT_INDICATOR_IGNORE));
|
|
||||||
PyModule_AddObject(module, "indicator_row",
|
|
||||||
MrdbIndicator_Object(STMT_INDICATOR_IGNORE_ROW));
|
|
||||||
|
|
||||||
PyModule_AddObject(module, "NUMBER",
|
|
||||||
Mariadb_DBAPIType_Object(DBAPI_NUMBER));
|
|
||||||
PyModule_AddObject(module, "BINARY",
|
|
||||||
Mariadb_DBAPIType_Object(DBAPI_BINARY));
|
|
||||||
PyModule_AddObject(module, "STRING",
|
|
||||||
Mariadb_DBAPIType_Object(DBAPI_STRING));
|
|
||||||
PyModule_AddObject(module, "DATETIME",
|
|
||||||
Mariadb_DBAPIType_Object(DBAPI_DATETIME));
|
|
||||||
PyModule_AddObject(module, "ROWID",
|
|
||||||
Mariadb_DBAPIType_Object(DBAPI_ROWID));
|
|
||||||
|
|
||||||
Py_INCREF(&Mariadb_Fieldinfo_Type);
|
Py_INCREF(&Mariadb_Fieldinfo_Type);
|
||||||
PyModule_AddObject(module, "fieldinfo",
|
PyModule_AddObject(module, "fieldinfo",
|
||||||
(PyObject *)&Mariadb_Fieldinfo_Type);
|
(PyObject *)&Mariadb_Fieldinfo_Type);
|
||||||
|
@ -24,6 +24,11 @@
|
|||||||
#define IS_DECIMAL_TYPE(type) \
|
#define IS_DECIMAL_TYPE(type) \
|
||||||
((type) == MYSQL_TYPE_NEWDECIMAL || (type) == MYSQL_TYPE_DOUBLE || (type) == MYSQL_TYPE_FLOAT)
|
((type) == MYSQL_TYPE_NEWDECIMAL || (type) == MYSQL_TYPE_DOUBLE || (type) == MYSQL_TYPE_FLOAT)
|
||||||
|
|
||||||
|
long MrdbIndicator_AsLong(PyObject *column)
|
||||||
|
{
|
||||||
|
PyObject *pyLong= PyObject_GetAttrString(column, "indicator");
|
||||||
|
return PyLong_AsLong(pyLong);
|
||||||
|
}
|
||||||
|
|
||||||
int codecs_datetime_init(void)
|
int codecs_datetime_init(void)
|
||||||
{
|
{
|
||||||
@ -982,7 +987,7 @@ mariadb_get_parameter(MrdbCursor *self,
|
|||||||
mysql_get_server_info(self->stmt->mysql));
|
mysql_get_server_info(self->stmt->mysql));
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
param->indicator= (char)MrdbIndicator_AsLong(column);
|
param->indicator= (uint8_t)MrdbIndicator_AsLong(column);
|
||||||
param->value= NULL; /* you can't have both indicator and value */
|
param->value= NULL; /* you can't have both indicator and value */
|
||||||
} else if (column == Py_None) {
|
} else if (column == Py_None) {
|
||||||
param->value= NULL;
|
param->value= NULL;
|
||||||
|
@ -722,6 +722,7 @@ MrdbConnection_rollback(MrdbConnection *self)
|
|||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
PyObject *
|
PyObject *
|
||||||
Mariadb_DBAPIType_Object(uint32_t type)
|
Mariadb_DBAPIType_Object(uint32_t type)
|
||||||
{
|
{
|
||||||
@ -730,7 +731,7 @@ Mariadb_DBAPIType_Object(uint32_t type)
|
|||||||
types);
|
types);
|
||||||
Py_DECREF(types);
|
Py_DECREF(types);
|
||||||
return number;
|
return number;
|
||||||
}
|
} */
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
MrdbConnection_xid(MrdbConnection *self, PyObject *args)
|
MrdbConnection_xid(MrdbConnection *self, PyObject *args)
|
||||||
|
@ -1,217 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
Copyright (C) 2018-2020 Georg Richter and MariaDB Corporation AB
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Library General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
|
||||||
License along with this library; if not see <http://www.gnu.org/licenses>
|
|
||||||
or write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin St., Fifth Floor, Boston, MA 02110, USA
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
#include <mariadb_python.h>
|
|
||||||
|
|
||||||
int32_t numeric_field_types[]= {
|
|
||||||
MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY, MYSQL_TYPE_SHORT,
|
|
||||||
MYSQL_TYPE_LONG, MYSQL_TYPE_INT24, MYSQL_TYPE_FLOAT,
|
|
||||||
MYSQL_TYPE_DOUBLE, MYSQL_TYPE_LONGLONG, MYSQL_TYPE_YEAR,
|
|
||||||
MYSQL_TYPE_NEWDECIMAL,
|
|
||||||
-1 /* always last */
|
|
||||||
};
|
|
||||||
|
|
||||||
int32_t string_field_types[]= {
|
|
||||||
MYSQL_TYPE_VARCHAR, MYSQL_TYPE_JSON, MYSQL_TYPE_STRING,
|
|
||||||
MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_ENUM,
|
|
||||||
-1 /* always last */
|
|
||||||
};
|
|
||||||
|
|
||||||
int32_t binary_field_types[]= {
|
|
||||||
MYSQL_TYPE_TINY_BLOB, MYSQL_TYPE_MEDIUM_BLOB,
|
|
||||||
MYSQL_TYPE_BLOB, MYSQL_TYPE_LONG_BLOB, MYSQL_TYPE_GEOMETRY,
|
|
||||||
-1 /* always last */
|
|
||||||
};
|
|
||||||
|
|
||||||
int32_t datetime_field_types[]= {
|
|
||||||
MYSQL_TYPE_TIMESTAMP, MYSQL_TYPE_DATE, MYSQL_TYPE_TIME,
|
|
||||||
MYSQL_TYPE_DATETIME,
|
|
||||||
-1 /* always last */
|
|
||||||
};
|
|
||||||
|
|
||||||
int32_t rowid_field_types[]= {-1};
|
|
||||||
|
|
||||||
static void
|
|
||||||
Mariadb_DBAPIType_dealloc(Mariadb_DBAPIType *self);
|
|
||||||
|
|
||||||
static PyMethodDef
|
|
||||||
Mariadb_DBAPIType_Methods[] =
|
|
||||||
{
|
|
||||||
{NULL} /* always last */
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct PyMemberDef
|
|
||||||
Mariadb_DBAPIType_Members[] =
|
|
||||||
{
|
|
||||||
{NULL}
|
|
||||||
};
|
|
||||||
|
|
||||||
static void
|
|
||||||
Mariadb_DBAPIType_dealloc(Mariadb_DBAPIType *self)
|
|
||||||
{
|
|
||||||
Py_TYPE(self)->tp_free((PyObject*)self);
|
|
||||||
}
|
|
||||||
|
|
||||||
static PyObject *
|
|
||||||
Mariadb_DBAPIType_richcompare(Mariadb_DBAPIType *self,
|
|
||||||
PyObject *type,
|
|
||||||
int op)
|
|
||||||
{
|
|
||||||
PyObject *res= NULL;
|
|
||||||
|
|
||||||
if (Py_TYPE(type) != &PyLong_Type)
|
|
||||||
{
|
|
||||||
res= Py_NotImplemented;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
switch(op) {
|
|
||||||
case Py_EQ:
|
|
||||||
case Py_NE:
|
|
||||||
{
|
|
||||||
int32_t val, i= 0;
|
|
||||||
val= (uint32_t)PyLong_AsLong(type);
|
|
||||||
|
|
||||||
while (self->types[i] != -1) {
|
|
||||||
if (self->types[i] == val) {
|
|
||||||
res= (op == Py_EQ) ? Py_True : Py_False;
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
res= (op == Py_EQ) ? Py_False : Py_True;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
res= Py_NotImplemented;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
end:
|
|
||||||
Py_INCREF(res);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
int Mariadb_DBAPIType_initialize(Mariadb_DBAPIType *self,
|
|
||||||
PyObject *args,
|
|
||||||
PyObject *kwargs);
|
|
||||||
|
|
||||||
PyTypeObject Mariadb_DBAPIType_Type =
|
|
||||||
{
|
|
||||||
PyVarObject_HEAD_INIT(NULL, 0)
|
|
||||||
"dbapitype",
|
|
||||||
sizeof(Mariadb_DBAPIType),
|
|
||||||
0,
|
|
||||||
(destructor)Mariadb_DBAPIType_dealloc, /* tp_dealloc */
|
|
||||||
0, /*tp_print*/
|
|
||||||
0, /* tp_getattr */
|
|
||||||
0, /* tp_setattr */
|
|
||||||
0, /*tp_compare*/
|
|
||||||
0, /* tp_repr */
|
|
||||||
|
|
||||||
/* Method suites for standard classes */
|
|
||||||
|
|
||||||
0, /* (PyNumberMethods *) tp_as_number */
|
|
||||||
0, /* (PySequenceMethods *) tp_as_sequence */
|
|
||||||
0, /* (PyMappingMethods *) tp_as_mapping */
|
|
||||||
|
|
||||||
/* More standard operations (here for binary compatibility) */
|
|
||||||
|
|
||||||
0, /* (hashfunc) tp_hash */
|
|
||||||
0, /* (ternaryfunc) tp_call */
|
|
||||||
0, /* (reprfunc) tp_str */
|
|
||||||
0, /* tp_getattro */
|
|
||||||
0, /* tp_setattro */
|
|
||||||
|
|
||||||
/* Functions to access object as input/output buffer */
|
|
||||||
0, /* (PyBufferProcs *) tp_as_buffer */
|
|
||||||
|
|
||||||
/* (tp_flags) Flags to define presence of optional/expanded features */
|
|
||||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE,
|
|
||||||
0, /* tp_doc Documentation string */
|
|
||||||
|
|
||||||
/* call function for all accessible objects */
|
|
||||||
(traverseproc)Mariadb_traverse,/* tp_traverse */
|
|
||||||
|
|
||||||
/* delete references to contained objects */
|
|
||||||
0, /* tp_clear */
|
|
||||||
|
|
||||||
/* rich comparisons */
|
|
||||||
(richcmpfunc)Mariadb_DBAPIType_richcompare,
|
|
||||||
|
|
||||||
/* weak reference enabler */
|
|
||||||
0, /* (long) tp_weaklistoffset */
|
|
||||||
|
|
||||||
/* Iterators */
|
|
||||||
0, /* (getiterfunc) tp_iter */
|
|
||||||
0, /* (iternextfunc) tp_iternext */
|
|
||||||
|
|
||||||
/* Attribute descriptor and subclassing stuff */
|
|
||||||
(struct PyMethodDef *)Mariadb_DBAPIType_Methods, /* tp_methods */
|
|
||||||
(struct PyMemberDef *)Mariadb_DBAPIType_Members, /* tp_members */
|
|
||||||
0, /* (struct getsetlist *) tp_getset; */
|
|
||||||
0, /* (struct _typeobject *) tp_base; */
|
|
||||||
0, /* (PyObject *) tp_dict */
|
|
||||||
0, /* (descrgetfunc) tp_descr_get */
|
|
||||||
0, /* (descrsetfunc) tp_descr_set */
|
|
||||||
0, /* (long) tp_dictoffset */
|
|
||||||
(initproc)Mariadb_DBAPIType_initialize, /* (initproc)p_init */
|
|
||||||
PyType_GenericAlloc, //NULL, /* tp_alloc */
|
|
||||||
PyType_GenericNew, //NULL, /* tp_new */
|
|
||||||
0, /* tp_free Low-level free-memory routine */
|
|
||||||
0, /* (PyObject *) tp_bases */
|
|
||||||
0, /* (PyObject *) tp_mro method resolution order */
|
|
||||||
0, /* (PyObject *) tp_defined */
|
|
||||||
};
|
|
||||||
|
|
||||||
static int
|
|
||||||
Mariadb_DBAPIType_initialize(Mariadb_DBAPIType *self,
|
|
||||||
PyObject *args,
|
|
||||||
PyObject *kwargs)
|
|
||||||
|
|
||||||
{
|
|
||||||
uint32_t group=0;
|
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "I", &group))
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch(group) {
|
|
||||||
case DBAPI_NUMBER:
|
|
||||||
self->types= numeric_field_types;
|
|
||||||
return 0;
|
|
||||||
case DBAPI_STRING:
|
|
||||||
self->types= string_field_types;
|
|
||||||
return 0;
|
|
||||||
case DBAPI_BINARY:
|
|
||||||
self->types= binary_field_types;
|
|
||||||
return 0;
|
|
||||||
case DBAPI_DATETIME:
|
|
||||||
self->types= datetime_field_types;
|
|
||||||
return 0;
|
|
||||||
case DBAPI_ROWID:
|
|
||||||
self->types= rowid_field_types;
|
|
||||||
return 0;
|
|
||||||
default:
|
|
||||||
mariadb_throw_exception(NULL, Mariadb_InterfaceError, 0,
|
|
||||||
"Invalid DBAPI type");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,169 +0,0 @@
|
|||||||
/******************************************************************************
|
|
||||||
Copyright (C) 2018-2020 Georg Richter and MariaDB Corporation AB
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Library General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
|
||||||
License along with this library; if not see <http://www.gnu.org/licenses>
|
|
||||||
or write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin St., Fifth Floor, Boston, MA 02110, USA
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
#include <mariadb_python.h>
|
|
||||||
|
|
||||||
static void
|
|
||||||
MrdbIndicator_dealloc(MrdbIndicator *self);
|
|
||||||
|
|
||||||
/* todo: move documentation to include/docs */
|
|
||||||
static char MrdbIndicator_documentation[] =
|
|
||||||
"Returns a MariaDB indicator object";
|
|
||||||
|
|
||||||
static PyMethodDef
|
|
||||||
MrdbIndicator_Methods[] =
|
|
||||||
{
|
|
||||||
{NULL} /* always last */
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct PyMemberDef
|
|
||||||
MrdbIndicator_Members[] =
|
|
||||||
{
|
|
||||||
{NULL} /* always last */
|
|
||||||
};
|
|
||||||
|
|
||||||
static void
|
|
||||||
MrdbIndicator_dealloc(MrdbIndicator *self)
|
|
||||||
{
|
|
||||||
Py_TYPE(self)->tp_free((PyObject*)self);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
MrdbIndicator_initialize(MrdbIndicator *self,
|
|
||||||
PyObject *args,
|
|
||||||
PyObject *kwargs)
|
|
||||||
{
|
|
||||||
int indicator;
|
|
||||||
PyObject *obj;
|
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "O!", &PyLong_Type, &obj))
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
indicator= PyLong_AsLong(obj);
|
|
||||||
|
|
||||||
/* check if indicator is in range */
|
|
||||||
if (indicator < STMT_INDICATOR_NULL ||
|
|
||||||
indicator > STMT_INDICATOR_IGNORE_ROW)
|
|
||||||
{
|
|
||||||
mariadb_throw_exception(NULL, Mariadb_InterfaceError, 0,
|
|
||||||
"Invalid indicator value");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
self->indicator= indicator;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
MrdbIndicator_traverse(MrdbIndicator *self,
|
|
||||||
visitproc visit,
|
|
||||||
void *arg)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
PyTypeObject
|
|
||||||
MrdbIndicator_Type =
|
|
||||||
{
|
|
||||||
PyVarObject_HEAD_INIT(NULL, 0)
|
|
||||||
"mariadb.indicator",
|
|
||||||
sizeof(MrdbIndicator),
|
|
||||||
0,
|
|
||||||
(destructor)MrdbIndicator_dealloc, /* tp_dealloc */
|
|
||||||
0, /*tp_print*/
|
|
||||||
0, /* tp_getattr */
|
|
||||||
0, /* tp_setattr */
|
|
||||||
0, /*tp_compare*/
|
|
||||||
0, /* tp_repr */
|
|
||||||
|
|
||||||
/* Method suites for standard classes */
|
|
||||||
|
|
||||||
0, /* (PyNumberMethods *) tp_as_number */
|
|
||||||
0, /* (PySequenceMethods *) tp_as_sequence */
|
|
||||||
0, /* (PyMappingMethods *) tp_as_mapping */
|
|
||||||
|
|
||||||
/* More standard operations (here for binary compatibility) */
|
|
||||||
|
|
||||||
0, /* (hashfunc) tp_hash */
|
|
||||||
0, /* (ternaryfunc) tp_call */
|
|
||||||
0, /* (reprfunc) tp_str */
|
|
||||||
0, /* tp_getattro */
|
|
||||||
0, /* tp_setattro */
|
|
||||||
|
|
||||||
/* Functions to access object as input/output buffer */
|
|
||||||
0, /* (PyBufferProcs *) tp_as_buffer */
|
|
||||||
|
|
||||||
/* (tp_flags) Flags to define presence of optional/expanded features */
|
|
||||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE,
|
|
||||||
MrdbIndicator_documentation, /* tp_doc Documentation string */
|
|
||||||
|
|
||||||
/* call function for all accessible objects */
|
|
||||||
(traverseproc)MrdbIndicator_traverse,/* tp_traverse */
|
|
||||||
|
|
||||||
/* delete references to contained objects */
|
|
||||||
0, /* tp_clear */
|
|
||||||
|
|
||||||
/* rich comparisons */
|
|
||||||
0, /* (richcmpfunc) tp_richcompare */
|
|
||||||
|
|
||||||
/* weak reference enabler */
|
|
||||||
0, /* (long) tp_weaklistoffset */
|
|
||||||
|
|
||||||
/* Iterators */
|
|
||||||
0, /* (getiterfunc) tp_iter */
|
|
||||||
0, /* (iternextfunc) tp_iternext */
|
|
||||||
|
|
||||||
/* Attribute descriptor and subclassing stuff */
|
|
||||||
(struct PyMethodDef *)MrdbIndicator_Methods, /* tp_methods */
|
|
||||||
(struct PyMemberDef *)MrdbIndicator_Members, /* tp_members */
|
|
||||||
0, /* (struct getsetlist *) tp_getset; */
|
|
||||||
0, /* (struct _typeobject *) tp_base; */
|
|
||||||
0, /* (PyObject *) tp_dict */
|
|
||||||
0, /* (descrgetfunc) tp_descr_get */
|
|
||||||
0, /* (descrsetfunc) tp_descr_set */
|
|
||||||
0, /* (long) tp_dictoffset */
|
|
||||||
(initproc)MrdbIndicator_initialize,/* tp_init */
|
|
||||||
PyType_GenericAlloc, //NULL, /* tp_alloc */
|
|
||||||
PyType_GenericNew, //NULL, /* tp_new */
|
|
||||||
NULL, /* tp_free Low-level free-memory routine */
|
|
||||||
0, /* (PyObject *) tp_bases */
|
|
||||||
0, /* (PyObject *) tp_mro method resolution order */
|
|
||||||
0, /* (PyObject *) tp_defined */
|
|
||||||
};
|
|
||||||
|
|
||||||
PyObject *
|
|
||||||
MrdbIndicator_Object(uint32_t type)
|
|
||||||
{
|
|
||||||
PyObject *types= Py_BuildValue("(I)", (uint32_t)type);
|
|
||||||
PyObject *number= PyObject_CallObject((PyObject *)&MrdbIndicator_Type,
|
|
||||||
types);
|
|
||||||
Py_DECREF(types);
|
|
||||||
return number;
|
|
||||||
}
|
|
||||||
|
|
||||||
long
|
|
||||||
MrdbIndicator_AsLong(PyObject *v)
|
|
||||||
{
|
|
||||||
if (!MrdbIndicator_Check(v))
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return (long)((MrdbIndicator *)v)->indicator;
|
|
||||||
}
|
|
7
setup.py
7
setup.py
@ -80,8 +80,7 @@ setup(name='mariadb',
|
|||||||
'mariadb/mariadb_exception.c', 'mariadb/mariadb_cursor.c',
|
'mariadb/mariadb_exception.c', 'mariadb/mariadb_cursor.c',
|
||||||
'mariadb/mariadb_codecs.c', 'mariadb/mariadb_field.c',
|
'mariadb/mariadb_codecs.c', 'mariadb/mariadb_field.c',
|
||||||
'mariadb/mariadb_parser.c',
|
'mariadb/mariadb_parser.c',
|
||||||
'mariadb/mariadb_pooling.c',
|
'mariadb/mariadb_pooling.c'],
|
||||||
'mariadb/mariadb_dbapitype.c', 'mariadb/mariadb_indicator.c'],
|
|
||||||
define_macros= define_macros,
|
define_macros= define_macros,
|
||||||
include_dirs=cfg.includes,
|
include_dirs=cfg.includes,
|
||||||
library_dirs=cfg.lib_dirs,
|
library_dirs=cfg.lib_dirs,
|
||||||
@ -90,6 +89,6 @@ setup(name='mariadb',
|
|||||||
extra_link_args = cfg.extra_link_args,
|
extra_link_args = cfg.extra_link_args,
|
||||||
extra_objects= cfg.extra_objects
|
extra_objects= cfg.extra_objects
|
||||||
)],
|
)],
|
||||||
py_modules=['mariadb.__init__', 'mariadb.constants.CLIENT', 'mariadb.constants.INDICATOR', 'mariadb.constants.CURSOR',
|
py_modules=['mariadb.__init__', 'mariadb.constants.CLIENT', 'mariadb.constants.CURSOR',
|
||||||
'mariadb.constants.FIELD_TYPE'],
|
'mariadb.constants.FIELD_TYPE', 'mariadb.constants.INDICATOR'],
|
||||||
)
|
)
|
||||||
|
Reference in New Issue
Block a user