static int convertTo_QDate(PyObject *sipPy,void **sipCppPtrV,int *sipIsErr,PyObject *sipTransferObj) { QDate **sipCppPtr = reinterpret_cast<QDate **>(sipCppPtrV); #line 39 "C:\\Users\\marcus\\Downloads\\PyQt-gpl-5.4\\PyQt-gpl-5.4\\sip/QtCore/qdatetime.sip" if (!PyDateTimeAPI) PyDateTime_IMPORT; // Allow a Python date object whenever a QDate is expected. if (sipIsErr == NULL) return (PyDate_Check(sipPy) || sipCanConvertToType(sipPy, sipType_QDate, SIP_NO_CONVERTORS)); if (PyDate_Check(sipPy)) { *sipCppPtr = new QDate(PyDateTime_GET_YEAR(sipPy), PyDateTime_GET_MONTH(sipPy), PyDateTime_GET_DAY(sipPy)); return sipGetState(sipTransferObj); } *sipCppPtr = reinterpret_cast<QDate *>(sipConvertToType(sipPy, sipType_QDate, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); return 0; #line 1308 "C:\\Users\\marcus\\Downloads\\PyQt-gpl-5.4\\PyQt-gpl-5.4\\QtCore/sipQtCoreQDate.cpp" }
static PyObject * cal_Collect(PyObject *self, PyObject *args) { JsonObject *json; BongoCalObject *cal; GArray *occs; PyObject *dtstart; PyObject *dtend; const char *tzid; BongoCalTime start; BongoCalTime end; if (!PyArg_ParseTuple(args, "OOOs", &json, &dtstart, &dtend, &tzid)) { PyErr_SetString(PyExc_TypeError, "Collect() takes 4 arguments"); return NULL; } if (!dtstart || !dtend) { PyErr_SetString(PyExc_TypeError, "Collect() requires a start and end time"); return NULL; } #ifdef PyDateTime_IMPORT if (!PyDate_Check(dtstart) || !PyDate_Check(dtend)) { PyErr_SetString(PyExc_TypeError, "Invalid type for dtstart or dtend (needs DateTime)"); return NULL; } #endif start = CalTimeFromPy(dtstart); end = CalTimeFromPy(dtend); cal = BongoCalObjectNew(json->obj); occs = g_array_sized_new(FALSE, FALSE, sizeof(BongoCalOccurrence), 16); if (BongoCalObjectCollect(cal, start, end, NULL, TRUE, occs)) { JsonArray *ret; GArray *occsJson; occsJson = BongoCalOccurrencesToJson(occs, BongoCalObjectGetTimezone(cal, tzid)); g_array_free(occs, TRUE); ret = PyObject_New(JsonArray, &JsonArrayType); ret->array = occsJson; ret->own = TRUE; return (PyObject*)ret; } else { g_array_free(occs, TRUE); Py_INCREF(Py_None); return Py_None; } }
//----------------------------------------------------------------------------- // TimestampVar_SetValue() // Set the value of the variable. //----------------------------------------------------------------------------- static int TimestampVar_SetValue( udt_TimestampVar *var, // variable to set value for unsigned pos, // array position to set PyObject *value) // value to set { TIMESTAMP_STRUCT *sqlValue; sqlValue = &var->data[pos]; sqlValue->fraction = 0; if (PyDateTime_Check(value)) { sqlValue->year = PyDateTime_GET_YEAR(value); sqlValue->month = PyDateTime_GET_MONTH(value); sqlValue->day = PyDateTime_GET_DAY(value); sqlValue->hour = PyDateTime_DATE_GET_HOUR(value); sqlValue->minute = PyDateTime_DATE_GET_MINUTE(value); sqlValue->second = PyDateTime_DATE_GET_SECOND(value); } else if (PyDate_Check(value)) { sqlValue->year = PyDateTime_GET_YEAR(value); sqlValue->month = PyDateTime_GET_MONTH(value); sqlValue->day = PyDateTime_GET_DAY(value); sqlValue->hour = 0; sqlValue->minute = 0; sqlValue->second = 0; } else { PyErr_SetString(PyExc_TypeError, "expecting date or datetime data"); return -1; } return 0; }
//----------------------------------------------------------------------------- // Variable_TypeByValue() // Return a variable type given a Python object or NULL if the Python // object does not have a corresponding variable type. //----------------------------------------------------------------------------- static udt_VariableType *Variable_TypeByValue( PyObject* value, // Python type SQLUINTEGER* size) // size to use (OUT) { if (value == Py_None) { *size = 1; return &ceString_VariableType; } if (ceString_Check(value)) { *size = ceString_GetSize(value); return &ceString_VariableType; } #if PY_MAJOR_VERSION < 3 if (PyUnicode_Check(value)) { *size = PyUnicode_GET_SIZE(value); return &vt_Unicode; } #endif if (ceBinary_Check(value)) { udt_StringBuffer temp; if (StringBuffer_FromBinary(&temp, value) < 0) return NULL; *size = temp.size; StringBuffer_Clear(&temp); return &vt_Binary; } if (PyBool_Check(value)) return &vt_Bit; if (PyInt_Check(value)) return &vt_Integer; if (PyLong_Check(value)) return &vt_BigInteger; if (PyFloat_Check(value)) return &vt_Double; if (Py_TYPE(value) == (PyTypeObject*) g_DecimalType) return &vt_Decimal; if (PyTime_Check(value)) return &vt_Time; if (PyDateTime_Check(value)) return &vt_Timestamp; if (PyDate_Check(value)) return &vt_Timestamp; PyErr_Format(g_NotSupportedErrorException, "Variable_TypeByValue(): unhandled data type %s", Py_TYPE(value)->tp_name); return NULL; }
/** Convert a Python datetime.date to MySQL DATE. Convert the PyObject obj, which must be a datetime.date, to MySQL DATE value. Raises TypeError when obj is not a PyDate_Type. @param date the PyObject to be converted @return Converted date object. @retval PyBytes Python v3 @retval PyString Python v2 @retval NULL Exception */ PyObject* pytomy_date(PyObject *obj) { PyDateTime_IMPORT; if (!obj || !PyDate_Check(obj)) { PyErr_SetString(PyExc_TypeError, "Object must be a datetime.date"); return NULL; } return PyBytesFromFormat("%04d-%02d-%02d", PyDateTime_GET_YEAR(obj), PyDateTime_GET_MONTH(obj), PyDateTime_GET_DAY(obj)); }
//----------------------------------------------------------------------------- // DateVar_SetValue() // Set the value of the variable. //----------------------------------------------------------------------------- static int DateVar_SetValue( udt_DateVar *var, // variable to set value for unsigned pos, // array position to set PyObject *value) // value to set { DATE_STRUCT *sqlValue; sqlValue = &var->data[pos]; if (PyDateTime_Check(value) || PyDate_Check(value)) { sqlValue->year = PyDateTime_GET_YEAR(value); sqlValue->month = PyDateTime_GET_MONTH(value); sqlValue->day = PyDateTime_GET_DAY(value); } else { PyErr_SetString(PyExc_TypeError, "expecting date or datetime data"); return -1; } return 0; }
int fudgepyc_convertPythonToDate ( FudgeDate * target, PyObject * source ) { FudgeStatus status; int year, month, day; if ( ! ( PyDate_Check ( source ) || PyDateTime_Check ( source ) ) ) { exception_raise_any ( PyExc_TypeError, "Only datetime.date and datetime.datetime " "types can be converted in to FudgeDate" ); return -1; } if ( fudgepyc_convertAttrToInt ( &year, source, "year" ) || fudgepyc_convertAttrToInt ( &month, source, "month" ) || fudgepyc_convertAttrToInt ( &day, source, "day" ) ) return -1; status = FudgeDate_initialise ( target, year, month, day ); return exception_raiseOnError ( status ); }
void Object_beginTypeContext (JSOBJ _obj, JSONTypeContext *tc) { PyObject *obj, *exc, *toDictFunc; TypeContext *pc; PRINTMARK(); if (!_obj) { tc->type = JT_INVALID; return; } obj = (PyObject*) _obj; tc->prv = PyObject_Malloc(sizeof(TypeContext)); pc = (TypeContext *) tc->prv; if (!pc) { tc->type = JT_INVALID; PyErr_NoMemory(); return; } pc->newObj = NULL; pc->dictObj = NULL; pc->itemValue = NULL; pc->itemName = NULL; pc->attrList = NULL; pc->index = 0; pc->size = 0; pc->longValue = 0; if (PyIter_Check(obj)) { PRINTMARK(); goto ISITERABLE; } if (PyBool_Check(obj)) { PRINTMARK(); tc->type = (obj == Py_True) ? JT_TRUE : JT_FALSE; return; } else if (PyLong_Check(obj)) { PRINTMARK(); pc->PyTypeToJSON = PyLongToINT64; tc->type = JT_LONG; GET_TC(tc)->longValue = PyLong_AsLongLong(obj); exc = PyErr_Occurred(); if (exc && PyErr_ExceptionMatches(PyExc_OverflowError)) { #if HAS_JSON_HANDLE_BIGINTS PyErr_Clear(); pc->PyTypeToJSON = PyBigIntToSTR; tc->type = JT_BIGINT; GET_TC(tc)->longValue = 0; return; #endif PRINTMARK(); goto INVALID; } return; } else if (PyInt_Check(obj)) { PRINTMARK(); #ifdef _LP64 pc->PyTypeToJSON = PyIntToINT64; tc->type = JT_LONG; #else pc->PyTypeToJSON = PyIntToINT32; tc->type = JT_INT; #endif return; } else if (PyString_Check(obj)) { PRINTMARK(); pc->PyTypeToJSON = PyStringToUTF8; tc->type = JT_UTF8; return; } else if (PyUnicode_Check(obj)) { PRINTMARK(); pc->PyTypeToJSON = PyUnicodeToUTF8; tc->type = JT_UTF8; return; } else if (PyFloat_Check(obj) || (type_decimal && PyObject_IsInstance(obj, type_decimal))) { PRINTMARK(); pc->PyTypeToJSON = PyFloatToDOUBLE; tc->type = JT_DOUBLE; return; } else if (PyDateTime_Check(obj)) { PRINTMARK(); pc->PyTypeToJSON = PyDateTimeToINT64; tc->type = JT_LONG; return; } else if (PyDate_Check(obj)) { PRINTMARK(); pc->PyTypeToJSON = PyDateToINT64; tc->type = JT_LONG; return; } else if (obj == Py_None) { PRINTMARK(); tc->type = JT_NULL; return; } ISITERABLE: if (PyDict_Check(obj)) { PRINTMARK(); tc->type = JT_OBJECT; pc->iterBegin = Dict_iterBegin; pc->iterEnd = Dict_iterEnd; pc->iterNext = Dict_iterNext; pc->iterGetValue = Dict_iterGetValue; pc->iterGetName = Dict_iterGetName; pc->dictObj = obj; Py_INCREF(obj); return; } else if (PyList_Check(obj)) { PRINTMARK(); tc->type = JT_ARRAY; pc->iterBegin = List_iterBegin; pc->iterEnd = List_iterEnd; pc->iterNext = List_iterNext; pc->iterGetValue = List_iterGetValue; pc->iterGetName = List_iterGetName; return; } else if (PyTuple_Check(obj)) { PRINTMARK(); tc->type = JT_ARRAY; pc->iterBegin = Tuple_iterBegin; pc->iterEnd = Tuple_iterEnd; pc->iterNext = Tuple_iterNext; pc->iterGetValue = Tuple_iterGetValue; pc->iterGetName = Tuple_iterGetName; return; } else if (PyAnySet_Check(obj)) { PRINTMARK(); tc->type = JT_ARRAY; pc->iterBegin = Iter_iterBegin; pc->iterEnd = Iter_iterEnd; pc->iterNext = Iter_iterNext; pc->iterGetValue = Iter_iterGetValue; pc->iterGetName = Iter_iterGetName; return; } toDictFunc = PyObject_GetAttrString(obj, "toDict"); if (toDictFunc) { PyObject* tuple = PyTuple_New(0); PyObject* toDictResult = PyObject_Call(toDictFunc, tuple, NULL); Py_DECREF(tuple); Py_DECREF(toDictFunc); if (toDictResult == NULL) { PyErr_Clear(); tc->type = JT_NULL; return; } if (!PyDict_Check(toDictResult)) { Py_DECREF(toDictResult); tc->type = JT_NULL; return; } PRINTMARK(); tc->type = JT_OBJECT; pc->iterBegin = Dict_iterBegin; pc->iterEnd = Dict_iterEnd; pc->iterNext = Dict_iterNext; pc->iterGetValue = Dict_iterGetValue; pc->iterGetName = Dict_iterGetName; pc->dictObj = toDictResult; return; } PyErr_Clear(); PRINTMARK(); // Falling to INVALID case as this type of object(class instance, module, // class, function, etc..) can't be serialized. PyErr_Format (PyExc_TypeError, "%s", "Object is not JSON serializable"); INVALID: tc->type = JT_INVALID; PyObject_Free(tc->prv); tc->prv = NULL; return; }
void Object_beginTypeContext (PyObject *obj, JSONTypeContext *tc) { TypeContext *pc = (TypeContext *) tc->prv; PyObject *toDictFunc; tc->prv[0] = 0; tc->prv[1] = 0; tc->prv[2] = 0; tc->prv[3] = 0; tc->prv[4] = 0; tc->prv[5] = 0; tc->prv[6] = 0; tc->prv[7] = 0; tc->prv[8] = 0; tc->prv[9] = 0; tc->prv[10] = 0; tc->prv[11] = 0; tc->prv[12] = 0; tc->prv[13] = 0; tc->prv[14] = 0; if (PyIter_Check(obj)) { goto ISITERABLE; } if (PyBool_Check(obj)) { PRINTMARK(); tc->type = (obj == Py_True) ? JT_TRUE : JT_FALSE; return; } else if (PyInt_Check(obj)) { PRINTMARK(); #ifdef _LP64 pc->PyTypeToJSON = PyIntToINT64; tc->type = JT_LONG; #else pc->PyTypeToJSON = PyIntToINT32; tc->type = JT_INT; #endif return; } else if (PyLong_Check(obj)) { PyObject *exc; PRINTMARK(); pc->PyTypeToJSON = PyLongToINT64; tc->type = JT_LONG; GET_TC(tc)->longValue = PyLong_AsLongLong(obj); exc = PyErr_Occurred(); if (exc && PyErr_ExceptionMatches(PyExc_OverflowError)) { PRINTMARK(); tc->type = JT_INVALID; return; } return; } else if (PyString_Check(obj)) { PRINTMARK(); pc->PyTypeToJSON = PyStringToUTF8; tc->type = JT_UTF8; return; } else if (PyUnicode_Check(obj)) { PRINTMARK(); pc->PyTypeToJSON = PyUnicodeToUTF8; tc->type = JT_UTF8; return; } else if (PyFloat_Check(obj)) { PRINTMARK(); pc->PyTypeToJSON = PyFloatToDOUBLE; tc->type = JT_DOUBLE; return; } else if (PyDateTime_Check(obj)) { PRINTMARK(); pc->PyTypeToJSON = PyDateTimeToINT64; tc->type = JT_LONG; return; } else if (PyDate_Check(obj)) { PRINTMARK(); pc->PyTypeToJSON = PyDateToINT64; tc->type = JT_LONG; return; } else if (obj == Py_None) { PRINTMARK(); tc->type = JT_NULL; return; } ISITERABLE: if (PyDict_Check(obj)) { PRINTMARK(); tc->type = JT_OBJECT; pc->iterBegin = Dict_iterBegin; pc->iterEnd = Dict_iterEnd; pc->iterNext = Dict_iterNext; pc->iterGetValue = Dict_iterGetValue; pc->iterGetName = Dict_iterGetName; pc->dictObj = obj; Py_INCREF(obj); return; } else if (PyList_Check(obj)) { PRINTMARK(); tc->type = JT_ARRAY; pc->iterBegin = List_iterBegin; pc->iterEnd = List_iterEnd; pc->iterNext = List_iterNext; pc->iterGetValue = List_iterGetValue; pc->iterGetName = List_iterGetName; return; } else if (PyTuple_Check(obj)) { PRINTMARK(); tc->type = JT_ARRAY; pc->iterBegin = Tuple_iterBegin; pc->iterEnd = Tuple_iterEnd; pc->iterNext = Tuple_iterNext; pc->iterGetValue = Tuple_iterGetValue; pc->iterGetName = Tuple_iterGetName; return; } toDictFunc = PyObject_GetAttrString(obj, "toDict"); if (toDictFunc) { PyObject* tuple = PyTuple_New(0); PyObject* toDictResult = PyObject_Call(toDictFunc, tuple, NULL); Py_DECREF(tuple); Py_DECREF(toDictFunc); if (toDictResult == NULL) { PyErr_Clear(); tc->type = JT_NULL; return; } if (!PyDict_Check(toDictResult)) { Py_DECREF(toDictResult); tc->type = JT_NULL; return; } PRINTMARK(); tc->type = JT_OBJECT; pc->iterBegin = Dict_iterBegin; pc->iterEnd = Dict_iterEnd; pc->iterNext = Dict_iterNext; pc->iterGetValue = Dict_iterGetValue; pc->iterGetName = Dict_iterGetName; pc->dictObj = toDictResult; return; } PyErr_Clear(); tc->type = JT_OBJECT; pc->iterBegin = Dir_iterBegin; pc->iterEnd = Dir_iterEnd; pc->iterNext = Dir_iterNext; pc->iterGetValue = Dir_iterGetValue; pc->iterGetName = Dir_iterGetName; return; }
static bool GetParameterInfo(Cursor* cur, Py_ssize_t index, PyObject* param, ParamInfo& info) { // Determines the type of SQL parameter that will be used for this parameter based on the Python data type. // // Populates `info`. // TODO: if the param is a SQLParameter object, then bind to the wrapped value and use the input/output type from that // Hold a reference to param until info is freed, because info will often be holding data borrowed from param. if (PyObject_TypeCheck(param, (PyTypeObject*)SQLParameter_type)) { info.pParam = ((SQLParameter*)param)->value; info.InputOutputType = ((SQLParameter*)param)->type; } else { info.pParam = param; info.InputOutputType = SQL_PARAM_INPUT; } if (info.pParam == Py_None) return GetNullInfo(cur, index, info); if (info.pParam == null_binary) return GetNullBinaryInfo(cur, index, info); if (PyBytes_Check(info.pParam)) return GetBytesInfo(cur, index, info.pParam, info); if (PyUnicode_Check(info.pParam)) return GetUnicodeInfo(cur, index, info.pParam, info); if (PyBool_Check(info.pParam)) return GetBooleanInfo(cur, index, info.pParam, info); if (PyDateTime_Check(info.pParam)) return GetDateTimeInfo(cur, index, info.pParam, info); if (PyDate_Check(info.pParam)) return GetDateInfo(cur, index, info.pParam, info); if (PyTime_Check(info.pParam)) return GetTimeInfo(cur, index, info.pParam, info); if (PyLong_Check(info.pParam)) return GetLongInfo(cur, index, info.pParam, info); if (PyFloat_Check(info.pParam)) return GetFloatInfo(cur, index, info.pParam, info); if (PyDecimal_Check(info.pParam)) return GetDecimalInfo(cur, index, info.pParam, info); #if PY_VERSION_HEX >= 0x02060000 if (PyByteArray_Check(info.pParam)) return GetByteArrayInfo(cur, index, info.pParam, info); #endif #if PY_MAJOR_VERSION < 3 if (PyInt_Check(info.pParam)) return GetIntInfo(cur, index, info.pParam, info); if (PyBuffer_Check(info.pParam)) return GetBufferInfo(cur, index, info.pParam, info); #endif RaiseErrorV("HY105", ProgrammingError, "Invalid parameter type. param-index=%zd param-type=%s", index, Py_TYPE(info.pParam)->tp_name); return false; }
void Object_beginTypeContext (JSOBJ _obj, JSONTypeContext *tc) { PyObject *obj, *exc, *toDictFunc, *iter; TypeContext *pc; PRINTMARK(); if (!_obj) { tc->type = JT_INVALID; return; } obj = (PyObject*) _obj; pc = (TypeContext *) tc->prv; if (!pc) { tc->type = JT_INVALID; PyErr_NoMemory(); return; } pc->newObj = NULL; pc->dictObj = NULL; pc->itemValue = NULL; pc->itemName = NULL; pc->iterator = NULL; pc->attrList = NULL; pc->index = 0; pc->size = 0; pc->longValue = 0; if (PyIter_Check(obj)) { PRINTMARK(); goto ISITERABLE; } if (PyBool_Check(obj)) { PRINTMARK(); tc->type = (obj == Py_True) ? JT_TRUE : JT_FALSE; return; } else if (PyLong_Check(obj)) { PRINTMARK(); pc->PyTypeToJSON = PyLongToINT64; tc->type = JT_LONG; GET_TC(tc)->longValue = PyLong_AsLongLong(obj); exc = PyErr_Occurred(); if (exc && PyErr_ExceptionMatches(PyExc_OverflowError)) { PRINTMARK(); goto INVALID; } return; } else if (PyInt_Check(obj)) { PRINTMARK(); #ifdef _LP64 pc->PyTypeToJSON = PyIntToINT64; tc->type = JT_LONG; #else pc->PyTypeToJSON = PyIntToINT32; tc->type = JT_INT; #endif return; } else if (PyString_Check(obj)) { PRINTMARK(); pc->PyTypeToJSON = PyStringToUTF8; tc->type = JT_UTF8; return; } else if (PyUnicode_Check(obj)) { PRINTMARK(); pc->PyTypeToJSON = PyUnicodeToUTF8; tc->type = JT_UTF8; return; } else if (PyFloat_Check(obj) || (type_decimal && PyObject_IsInstance(obj, type_decimal))) { PRINTMARK(); pc->PyTypeToJSON = PyFloatToDOUBLE; tc->type = JT_DOUBLE; return; } else if (PyDateTime_Check(obj)) { PRINTMARK(); pc->PyTypeToJSON = PyDateTimeToINT64; tc->type = JT_LONG; return; } else if (PyDate_Check(obj)) { PRINTMARK(); pc->PyTypeToJSON = PyDateToINT64; tc->type = JT_LONG; return; } else if (obj == Py_None) { PRINTMARK(); tc->type = JT_NULL; return; } ISITERABLE: if (PyDict_Check(obj)) { PRINTMARK(); tc->type = JT_OBJECT; SetupDictIter(obj, pc); Py_INCREF(obj); return; } else if (PyList_Check(obj)) { PRINTMARK(); tc->type = JT_ARRAY; pc->iterEnd = List_iterEnd; pc->iterNext = List_iterNext; pc->iterGetValue = List_iterGetValue; pc->iterGetName = List_iterGetName; GET_TC(tc)->index = 0; GET_TC(tc)->size = PyList_GET_SIZE( (PyObject *) obj); return; } else if (PyTuple_Check(obj)) { PRINTMARK(); tc->type = JT_ARRAY; pc->iterEnd = Tuple_iterEnd; pc->iterNext = Tuple_iterNext; pc->iterGetValue = Tuple_iterGetValue; pc->iterGetName = Tuple_iterGetName; GET_TC(tc)->index = 0; GET_TC(tc)->size = PyTuple_GET_SIZE( (PyObject *) obj); GET_TC(tc)->itemValue = NULL; return; } /* else if (PyAnySet_Check(obj)) { PRINTMARK(); tc->type = JT_ARRAY; pc->iterBegin = NULL; pc->iterEnd = Iter_iterEnd; pc->iterNext = Iter_iterNext; pc->iterGetValue = Iter_iterGetValue; pc->iterGetName = Iter_iterGetName; return; } */ toDictFunc = PyObject_GetAttrString(obj, "toDict"); if (toDictFunc) { PyObject* tuple = PyTuple_New(0); PyObject* toDictResult = PyObject_Call(toDictFunc, tuple, NULL); Py_DECREF(tuple); Py_DECREF(toDictFunc); if (toDictResult == NULL) { PyErr_Clear(); tc->type = JT_NULL; return; } if (!PyDict_Check(toDictResult)) { Py_DECREF(toDictResult); tc->type = JT_NULL; return; } PRINTMARK(); tc->type = JT_OBJECT; SetupDictIter(toDictResult, pc); return; } PRINTMARK(); PyErr_Clear(); iter = PyObject_GetIter(obj); if (iter != NULL) { PRINTMARK(); tc->type = JT_ARRAY; pc->iterator = iter; pc->iterEnd = Iter_iterEnd; pc->iterNext = Iter_iterNext; pc->iterGetValue = Iter_iterGetValue; pc->iterGetName = Iter_iterGetName; return; } PRINTMARK(); PyErr_Clear(); PRINTMARK(); tc->type = JT_OBJECT; GET_TC(tc)->attrList = PyObject_Dir(obj); if (GET_TC(tc)->attrList == NULL) { PyErr_Clear(); goto INVALID; } GET_TC(tc)->index = 0; GET_TC(tc)->size = PyList_GET_SIZE(GET_TC(tc)->attrList); PRINTMARK(); pc->iterEnd = Dir_iterEnd; pc->iterNext = Dir_iterNext; pc->iterGetValue = Dir_iterGetValue; pc->iterGetName = Dir_iterGetName; return; INVALID: PRINTMARK(); tc->type = JT_INVALID; PyObject_Free(tc->prv); tc->prv = NULL; return; }
int AppendEscapedArg (Connection *self, char *start, char *end, PyObject *obj) { int ret; PyObject *strobj; /* FIXME: Surround strings with '' could be performed in this function to avoid extra logic in AppendAndEscapeString */ PRINTMARK(); if (PyString_Check(obj)) { PRINTMARK(); return AppendAndEscapeString(start, end, PyString_AS_STRING(obj), PyString_AS_STRING(obj) + PyString_GET_SIZE(obj), TRUE); } else if (PyUnicode_Check(obj)) { PRINTMARK(); strobj = self->PFN_PyUnicode_Encode(PyUnicode_AS_UNICODE(obj), PyUnicode_GET_SIZE(obj), NULL); if (strobj == NULL) { if (PyErr_Occurred()) { return -1; } PyErr_SetObject (PyExc_ValueError, obj); return -1; } ret = AppendAndEscapeString(start, end, PyString_AS_STRING(strobj), PyString_AS_STRING(strobj) + PyString_GET_SIZE(strobj), TRUE); Py_DECREF(strobj); return ret; } else if (obj == Py_None) { (*start++) = 'n'; (*start++) = 'u'; (*start++) = 'l'; (*start++) = 'l'; return 4; } else if (PyDateTime_Check(obj)) { int len = sprintf (start, "'%04d-%02d-%02d %02d:%02d:%02d'", PyDateTime_GET_YEAR(obj), PyDateTime_GET_MONTH(obj), PyDateTime_GET_DAY(obj), PyDateTime_DATE_GET_HOUR(obj), PyDateTime_DATE_GET_MINUTE(obj), PyDateTime_DATE_GET_SECOND(obj)); return len; } else if (PyDate_Check(obj)) { int len = sprintf (start, "'%04d:%02d:%02d'", PyDateTime_GET_YEAR(obj), PyDateTime_GET_MONTH(obj), PyDateTime_GET_DAY(obj)); return len; } //FIXME: Might possible to avoid this? PRINTMARK(); strobj = PyObject_Str(obj); ret = AppendAndEscapeString(start, end, PyString_AS_STRING(strobj), PyString_AS_STRING(strobj) + PyString_GET_SIZE(strobj), FALSE); Py_DECREF(strobj); return ret; }