@@ -274,9 +274,33 @@ PyObject *query_new(PyTypeObject *cls, PyObject *args, PyObject *Py_UNUSED(kwarg
274274                PyObject  * pattern  = 
275275                    PyObject_CallFunction (state -> re_compile , "s#" , second_arg , length );
276276                if  (pattern  ==  NULL ) {
277-                     _PyErr_FormatFromCause (
278-                         state -> query_error ,
279-                         "Invalid predicate in pattern at row %u: regular expression error" , row );
277+                     const  char  * msg  = 
278+                         "Invalid predicate in pattern at row %u: regular expression error" ;
279+ #if  PY_MINOR_VERSION  <  12 
280+                     PyObject  * etype , * cause , * exc , * trace ;
281+                     PyErr_Fetch (& etype , & cause , & trace );
282+                     PyErr_NormalizeException (& etype , & cause , & trace );
283+                     if  (trace  !=  NULL ) {
284+                         PyException_SetTraceback (cause , trace );
285+                         Py_DECREF (trace );
286+                     }
287+                     Py_DECREF (etype );
288+                     PyErr_Format (state -> query_error , msg , row );
289+                     PyErr_Fetch (& etype , & exc , & trace );
290+                     PyErr_NormalizeException (& etype , & exc , & trace );
291+                     Py_INCREF (cause );
292+                     PyException_SetCause (exc , cause );
293+                     PyException_SetContext (exc , cause );
294+                     PyErr_Restore (etype , exc , trace );
295+ #else 
296+                     PyObject  * cause  =  PyErr_GetRaisedException ();
297+                     PyErr_Format (state -> query_error , msg , row );
298+                     PyObject  * exc  =  PyErr_GetRaisedException ();
299+                     PyException_SetCause (exc , Py_NewRef (cause ));
300+                     PyException_SetContext (exc , Py_NewRef (cause ));
301+                     Py_DECREF (cause );
302+                     PyErr_SetRaisedException (exc );
303+ #endif 
280304                    goto error ;
281305                }
282306
0 commit comments