Index: Lib/sqlite3/test/userfunctions.py =================================================================== --- Lib/sqlite3/test/userfunctions.py (revision 87866) +++ Lib/sqlite3/test/userfunctions.py (working copy) @@ -37,6 +37,8 @@ return None def func_returnblob(): return b"blob" +def func_returnlonglong(): + return 1<<31 def func_raiseexception(): 5/0 @@ -127,6 +129,7 @@ self.con.create_function("returnfloat", 0, func_returnfloat) self.con.create_function("returnnull", 0, func_returnnull) self.con.create_function("returnblob", 0, func_returnblob) + self.con.create_function("returnlonglong", 0, func_returnlonglong) self.con.create_function("raiseexception", 0, func_raiseexception) self.con.create_function("isstring", 1, func_isstring) @@ -200,6 +203,12 @@ self.assertEqual(type(val), bytes) self.assertEqual(val, b"blob") + def CheckFuncReturnLongLong(self): + cur = self.con.cursor() + cur.execute("select returnlonglong()") + val = cur.fetchone()[0] + self.assertEqual(val, 1<<31) + def CheckFuncException(self): cur = self.con.cursor() try: Index: Modules/_sqlite/connection.c =================================================================== --- Modules/_sqlite/connection.c (revision 87866) +++ Modules/_sqlite/connection.c (working copy) @@ -482,7 +482,7 @@ void _pysqlite_set_result(sqlite3_context* context, PyObject* py_val) { - long longval; + sqlite3_int64 longval; const char* buffer; Py_ssize_t buflen; @@ -491,8 +491,8 @@ } else if (py_val == Py_None) { sqlite3_result_null(context); } else if (PyLong_Check(py_val)) { - longval = PyLong_AsLong(py_val); - sqlite3_result_int64(context, (PY_LONG_LONG)longval); + longval = PyLong_AsLongLong(py_val); + sqlite3_result_int64(context, longval); } else if (PyFloat_Check(py_val)) { sqlite3_result_double(context, PyFloat_AsDouble(py_val)); } else if (PyUnicode_Check(py_val)) { @@ -517,7 +517,7 @@ sqlite3_value* cur_value; PyObject* cur_py_value; const char* val_str; - PY_LONG_LONG val_int; + sqlite3_int64 val_int; Py_ssize_t buflen; args = PyTuple_New(argc); @@ -530,7 +530,7 @@ switch (sqlite3_value_type(argv[i])) { case SQLITE_INTEGER: val_int = sqlite3_value_int64(cur_value); - cur_py_value = PyLong_FromLong((long)val_int); + cur_py_value = PyLong_FromLongLong(val_int); break; case SQLITE_FLOAT: cur_py_value = PyFloat_FromDouble(sqlite3_value_double(cur_value));