mirror of
https://github.com/psycopg/psycopg2.git
synced 2025-02-07 12:50:32 +03:00
Datetime adaptation in bytes.
This commit is contained in:
parent
87a7ebac10
commit
03dde732f6
|
@ -62,30 +62,37 @@ pydatetime_str(pydatetimeObject *self)
|
|||
if (self->type <= PSYCO_DATETIME_TIMESTAMP) {
|
||||
PyObject *tz;
|
||||
|
||||
/* Select the right PG type to cast into.
|
||||
* fmt contains %s in Py2 and %U in Py3,
|
||||
* So it can be used with the Text_FromFormatS macro */
|
||||
/* Select the right PG type to cast into. */
|
||||
char *fmt = NULL;
|
||||
switch (self->type) {
|
||||
case PSYCO_DATETIME_TIME:
|
||||
fmt = "'" Text_S "'::time";
|
||||
fmt = "'%s'::time";
|
||||
break;
|
||||
case PSYCO_DATETIME_DATE:
|
||||
fmt = "'" Text_S "'::date";
|
||||
fmt = "'%s'::date";
|
||||
break;
|
||||
case PSYCO_DATETIME_TIMESTAMP:
|
||||
tz = PyObject_GetAttrString(self->wrapped, "tzinfo");
|
||||
if (!tz) { return NULL; }
|
||||
fmt = (tz == Py_None)
|
||||
? "'" Text_S "'::timestamp"
|
||||
: "'" Text_S "'::timestamptz";
|
||||
fmt = (tz == Py_None) ? "'%s'::timestamp" : "'%s'::timestamptz";
|
||||
Py_DECREF(tz);
|
||||
break;
|
||||
}
|
||||
|
||||
iso = PyObject_CallMethod(self->wrapped, "isoformat", NULL);
|
||||
if (iso) {
|
||||
res = Text_FromFormatS(fmt, iso);
|
||||
#if PY_MAJOR_VERSION > 2
|
||||
{
|
||||
PyObject *biso;
|
||||
if (!(biso = PyUnicode_AsEncodedString(iso, "ascii", NULL))) {
|
||||
Py_DECREF(iso);
|
||||
return NULL;
|
||||
}
|
||||
Py_DECREF(iso);
|
||||
iso = biso;
|
||||
}
|
||||
#endif
|
||||
res = Bytes_FromFormat(fmt, Bytes_AsString(iso));
|
||||
Py_DECREF(iso);
|
||||
}
|
||||
return res;
|
||||
|
@ -103,8 +110,8 @@ pydatetime_str(pydatetimeObject *self)
|
|||
}
|
||||
buffer[6] = '\0';
|
||||
|
||||
return PyString_FromFormat("'%d days %d.%s seconds'::interval",
|
||||
obj->days, obj->seconds, buffer);
|
||||
return Bytes_FromFormat("'%d days %d.%s seconds'::interval",
|
||||
obj->days, obj->seconds, buffer);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -81,18 +81,12 @@
|
|||
#define Text_Format(f,a) PyString_Format(f,a)
|
||||
#define Text_FromUTF8(s) PyString_FromString(s)
|
||||
#define Text_FromUTF8AndSize(s,n) PyString_FromStringAndSize(s,n)
|
||||
/* f must contain exactly a %s placeholder */
|
||||
#define Text_FromFormatS(f,s) PyString_FromFormat(f, PyString_AsString(s))
|
||||
#define Text_S "%s"
|
||||
#else
|
||||
#define Text_Type PyUnicode_Type
|
||||
#define Text_Check(s) PyUnicode_Check(s)
|
||||
#define Text_Format(f,a) PyUnicode_Format(f,a)
|
||||
#define Text_FromUTF8(s) PyUnicode_FromString(s)
|
||||
#define Text_FromUTF8AndSize(s,n) PyUnicode_FromStringAndSize(s,n)
|
||||
/* f must contain exactly a %U placeholder */
|
||||
#define Text_FromFormatS(f,s) PyUnicode_FromFormat(f, s)
|
||||
#define Text_S "%U"
|
||||
#endif
|
||||
|
||||
#if PY_MAJOR_VERSION > 2
|
||||
|
|
Loading…
Reference in New Issue
Block a user