New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
2.7.3: sqlite module does not build on centos 5 and Mac OS X 10.4 #58777
Comments
Python-2.7.3/Modules/_sqlite/connection.c: In function ‘_pysqlite_set_result’: The centos 5 version of sqlite3 (sqlite-devel-3.3.6-5) does not export the type sqlite3_int64. 2.7.0 did build without problems. Newer versions declare both sqlite3_int64 and sqlite_int64: http://www.sqlite.org/c3ref/int64.html Patch: diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c
index 26678c7..a646513 100644
--- a/Modules/_sqlite/connection.c
+++ b/Modules/_sqlite/connection.c
@@ -549,7 +549,7 @@ void _pysqlite_set_result(sqlite3_context* context, PyObject* py_val)
} else if (py_val == Py_None) {
sqlite3_result_null(context);
} else if (PyInt_Check(py_val)) {
- sqlite3_result_int64(context, (sqlite3_int64)PyInt_AsLong(py_val));
+ sqlite3_result_int64(context, (sqlite_int64)PyInt_AsLong(py_val));
} else if (PyLong_Check(py_val)) {
sqlite3_result_int64(context, PyLong_AsLongLong(py_val));
} else if (PyFloat_Check(py_val)) {
@@ -580,7 +580,7 @@ PyObject* _pysqlite_build_py_params(sqlite3_context *context, int argc, sqlite3_
sqlite3_value* cur_value;
PyObject* cur_py_value;
const char* val_str;
- sqlite3_int64 val_int;
+ sqlite_int64 val_int;
Py_ssize_t buflen;
void* raw_buffer; |
This patch worked for me as well. Thanks, Joakim! $ cat /etc/redhat-release
CentOS release 5.5 (Final) |
Mac OS X 10.4 is also affected and for the same reason. SQLite builds fine for Python 2.5 and 2.6, but not for 2.7. |
Just to make this a tad easier, I put Joakim's patch into a gist:
I suppose this could be fixed in the Python code with some autoconf stuff, but I'm not too comfortable with autoconf. |
curl -sk https://raw.github.com/gist/2727063/ | patch -p1 |
OK, here's a patch for configure.ac which seems to fix this problem -- if folks could review and test it that would be great. |
Thanks for the patch to configure.ac. It appears to work on OS X 10.4 and it should on any other system with an older version of sqlite3 installed. However, I think a better approach is to just change the two problematic references in Modules/_sqlite/connection.c to the older backwards compatible form. The current sqlite3.h file explicitly supports the older type for backward compatibility for exactly this kind of case. If so, why add unnecessary magic to Python's configure? Presumably the sqlite3 project will need to continue to support both definitions indefinitely. Perhaps Petri can chime in here as he made the change to include the new types. Attached is a new patch tested on OS X 10.4 and 10.7. |
My guess would be that the code was switched to use the new typedef because the SQLite docs say they're preferred. http://www.sqlite.org/c3ref/int64.html Maybe they are planning to deprecate the old typedef at some point? |
Probably either approach will have the exact same effect for the foreseeable |
Changing the code to use sqlite_int64 (Ned's patch) sounds better to me. |
New changeset e31597b3bd15 by Ned Deily in branch '2.7': |
OK, the patch, as originally suggested by Joakim, is applied for release in 2.7.4. Thanks everyone. |
Isn't 3.2 or 3.3 affected by this? |
No, since the developer who made the original changes used sqlite3_int64 for 2.7 (789a3ea97083) but chose to hardwire the type to PyLong_AsLongLong for 3.x (e67715b87131). [corrected ids] |
Ned, thanks for applying this patch! |
New changeset 44fe1f5b07e3 by Serhiy Storchaka in branch '2.7': |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: