summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>2010-12-23 04:08:32 +0100
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>2010-12-31 03:18:26 +0100
commit03dde732f6f14581d7f19ecda260087d4e6e6aaa (patch)
treedd78be1b5ebe3c5a0ddb733c1312036106b2fae0
parent87a7ebac10fb0055a0d685aa0ba50a09abf8fc86 (diff)
downloadpsycopg2-03dde732f6f14581d7f19ecda260087d4e6e6aaa.tar.gz
Datetime adaptation in bytes.
-rw-r--r--psycopg/adapter_datetime.c29
-rw-r--r--psycopg/python.h6
2 files changed, 18 insertions, 17 deletions
diff --git a/psycopg/adapter_datetime.c b/psycopg/adapter_datetime.c
index 19fd97e..2b9f69f 100644
--- a/psycopg/adapter_datetime.c
+++ b/psycopg/adapter_datetime.c
@@ -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);
}
}
diff --git a/psycopg/python.h b/psycopg/python.h
index 40895bb..452c734 100644
--- a/psycopg/python.h
+++ b/psycopg/python.h
@@ -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