From ead2134d4ce23a96c7c804a2b11b44d56810c27cf9eeb2c8eeec9b042fd99bf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Schr=C3=B6ter?= Date: Wed, 20 Aug 2025 11:01:10 +0200 Subject: [PATCH] Sync changes to SLFO-1.2 branch --- apsw-3.46.1.0.tar.gz | 3 + apsw-3.50.4.0.tar.gz | 3 - disable-infinite-recursion-in-tests.patch | 72 ++++++++++++++ python-apsw.changes | 116 +--------------------- python-apsw.spec | 35 ++----- 5 files changed, 84 insertions(+), 145 deletions(-) create mode 100644 apsw-3.46.1.0.tar.gz delete mode 100644 apsw-3.50.4.0.tar.gz create mode 100644 disable-infinite-recursion-in-tests.patch diff --git a/apsw-3.46.1.0.tar.gz b/apsw-3.46.1.0.tar.gz new file mode 100644 index 0000000..6852657 --- /dev/null +++ b/apsw-3.46.1.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ecab0d2fb41f96d90ff7439bb34793e8803186f5cb1aa8c613d6b0ba11b3963 +size 913223 diff --git a/apsw-3.50.4.0.tar.gz b/apsw-3.50.4.0.tar.gz deleted file mode 100644 index fe0c233..0000000 --- a/apsw-3.50.4.0.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a817c387ce2f4030ab7c3064cf21e9957911155f24f226c3ad4938df3a155e11 -size 1093635 diff --git a/disable-infinite-recursion-in-tests.patch b/disable-infinite-recursion-in-tests.patch new file mode 100644 index 0000000..fb63e1b --- /dev/null +++ b/disable-infinite-recursion-in-tests.patch @@ -0,0 +1,72 @@ +From 0103ade603b321aa66e5bfc7a5a078219e888481 Mon Sep 17 00:00:00 2001 +From: Roger Binns +Date: Mon, 7 Oct 2024 07:13:54 -0700 +Subject: [PATCH] Disable infinite recursion test in non-debug builds + +You'll need a wide window to read this + +This is the backtrace on Ubuntu 24.10 with Python 3.12.7 - it has occurred on versions too + +Thread 1 "python3" received signal SIGSEGV, Segmentation fault. +#0 0x00007ffff7c6c804 in __printf_buffer (buf=buf@entry=0x7fffff7ff240, format=0x71cdf5 "%zd", ap=0x7fffff7ff290, mode_flags=6) at ./stdio-common/vfprintf-internal.c:600 +#1 0x00007ffff7c8dc93 in __vsprintf_internal (string=string@entry=0x7fffff7ff430 "", maxlen=maxlen@entry=26, format=, args=args@entry=0x7fffff7ff290, mode_flags=mode_flags@entry=6) at ./libio/iovsprintf.c:62 +#2 0x00007ffff7d4228f in ___sprintf_chk (s=s@entry=0x7fffff7ff430 "", flag=flag@entry=2, slen=slen@entry=26, format=) at ./debug/sprintf_chk.c:40 +#3 0x00000000005abf85 in sprintf (__s=, __fmt=) at /usr/include/x86_64-linux-gnu/bits/stdio2.h:30 +#4 unicode_fromformat_arg (writer=0x7fffff7ff3f0, f=0x71cdf7 "d", vargs=0x7fffff7ff3d8) at ../Objects/unicodeobject.c:2740 +#5 PyUnicode_FromFormatV (format=, vargs=vargs@entry=0x7fffff7ff4a8) at ../Objects/unicodeobject.c:2963 +#6 0x00000000005b3c6f in PyUnicode_FromFormat (format=format@entry=0x71cdf5 "%zd") at ../Objects/unicodeobject.c:3011 +#7 0x00000000005d7a3e in too_many_positional (co=, tstate=0xbae310 <_PyRuntime+458992>, given=2, defaults=, localsplus=0x7ffff7fb0cb0, qualname='APSW.testIssue425..handler') at ../Python/ceval.c:1150 +#8 initialize_locals (tstate=tstate@entry=0xbae310 <_PyRuntime+458992>, func=func@entry=0x7fffe9094ae0, localsplus=, args=, argcount=, kwnames=) at ../Python/ceval.c:1459 +#9 0x00000000005d7642 in _PyEvalFramePushAndInit (tstate=0xbae310 <_PyRuntime+458992>, func=0x7fffe9094ae0, locals=, args=0x7fffff7ff708, argcount=, kwnames=0x0) at ../Python/ceval.c:1594 +#10 _PyEval_Vector (tstate=0xbae310 <_PyRuntime+458992>, func=0x7fffe9094ae0, locals=, args=0x7fffff7ff708, argcount=2, kwnames=0x0) at ../Python/ceval.c:1677 +#11 0x000000000054a2d5 in _PyObject_VectorcallTstate (tstate=0xbae310 <_PyRuntime+458992>, callable=, args=, nargsf=, kwnames=) at ../Include/internal/pycore_call.h:92 +#12 PyObject_Vectorcall (callable=, args=, nargsf=, kwnames=) at ../Objects/call.c:325 +#13 0x00007fffe96aa94c in apsw_logger (arg=0x7fffe9094ae0, errcode=1, message=0x7fffff7ff770 "apsw_write_unraisable TypeError: APSW.testIssue425..handler() takes 0 positional arguments but 2 were given") at src/apsw.c:447 +#14 0x00007fffe945ece4 in renderLogMsg (iErrCode=1, zFormat=0x7fffe96ce958 "apsw_write_unraisable %s: %s", ap=0x7fffff7ff880) at sqlite3/sqlite3.c:32459 +#15 0x00007fffe945edfa in sqlite3_log (iErrCode=1, zFormat=0x7fffe96ce958 "apsw_write_unraisable %s: %s") at sqlite3/sqlite3.c:32470 +#16 0x00007fffe95d903a in apsw_write_unraisable (hookobject=0x0) at src/util.c:174 +#17 0x00007fffe96aaaf1 in apsw_logger (arg=0x7fffe9094ae0, errcode=1, message=0x7fffff7ffbc0 "apsw_write_unraisable TypeError: APSW.testIssue425..handler() takes 0 positional arguments but 2 were given") at src/apsw.c:464 +#18 0x00007fffe945ece4 in renderLogMsg (iErrCode=1, zFormat=0x7fffe96ce958 "apsw_write_unraisable %s: %s", ap=0x7fffff7ffcd0) at sqlite3/sqlite3.c:32459 +#19 0x00007fffe945edfa in sqlite3_log (iErrCode=1, zFormat=0x7fffe96ce958 "apsw_write_unraisable %s: %s") at sqlite3/sqlite3.c:32470 +#20 0x00007fffe95d903a in apsw_write_unraisable (hookobject=0x0) at src/util.c:174 +#21 0x00007fffe96aaaf1 in apsw_logger (arg=0x7fffe9094ae0, errcode=1, message=0x7fffff800010 "apsw_write_unraisable TypeError: APSW.testIssue425..handler() takes 0 positional arguments but 2 were given") at src/apsw.c:464 +#22 0x00007fffe945ece4 in renderLogMsg (iErrCode=1, zFormat=0x7fffe96ce958 "apsw_write_unraisable %s: %s", ap=0x7fffff800120) at sqlite3/sqlite3.c:32459 +#23 0x00007fffe945edfa in sqlite3_log (iErrCode=1, zFormat=0x7fffe96ce958 "apsw_write_unraisable %s: %s") at sqlite3/sqlite3.c:32470 +#24 0x00007fffe95d903a in apsw_write_unraisable (hookobject=0x0) at src/util.c:174 +#25 0x00007fffe96aaaf1 in apsw_logger (arg=0x7fffe9094ae0, errcode=1, message=0x7fffff800460 "apsw_write_unraisable TypeError: APSW.testIssue425..handler() takes 0 positional arguments but 2 were given") at src/apsw.c:464 +#26 0x00007fffe945ece4 in renderLogMsg (iErrCode=1, zFormat=0x7fffe96ce958 "apsw_write_unraisable %s: %s", ap=0x7fffff800570) at sqlite3/sqlite3.c:32459 +#27 0x00007fffe945edfa in sqlite3_log (iErrCode=1, zFormat=0x7fffe96ce958 "apsw_write_unraisable %s: %s") at sqlite3/sqlite3.c:32470 +#28 0x00007fffe95d903a in apsw_write_unraisable (hookobject=0x0) at src/util.c:174 +#29 0x00007fffe96aaaf1 in apsw_logger (arg=0x7fffe9094ae0, errcode=1, message=0x7fffff8008b0 "apsw_write_unraisable TypeError: APSW.testIssue425..handler() takes 0 positional arguments but 2 were given") at src/apsw.c:464 +#30 0x00007fffe945ece4 in renderLogMsg (iErrCode=1, zFormat=0x7fffe96ce958 "apsw_write_unraisable %s: %s", ap=0x7fffff8009c0) at sqlite3/sqlite3.c:32459 +#31 0x00007fffe945edfa in sqlite3_log (iErrCode=1, zFormat=0x7fffe96ce958 "apsw_write_unraisable %s: %s") at sqlite3/sqlite3.c:32470 +#32 0x00007fffe95d903a in apsw_write_unraisable (hookobject=0x0) at src/util.c:174 +#33 0x00007fffe96aaaf1 in apsw_logger (arg=0x7fffe9094ae0, errcode=1, message=0x7fffff800d00 "apsw_write_unraisable TypeError: APSW.testIssue425..handler() takes 0 positional arguments but 2 were given") at src/apsw.c:464 +#34 0x00007fffe945ece4 in renderLogMsg (iErrCode=1, zFormat=0x7fffe96ce958 "apsw_write_unraisable %s: %s", ap=0x7fffff800e10) at sqlite3/sqlite3.c:32459 +#35 0x00007fffe945edfa in sqlite3_log (iErrCode=1, zFormat=0x7fffe96ce958 "apsw_write_unraisable %s: %s") at sqlite3/sqlite3.c:32470 +#36 0x00007fffe95d903a in apsw_write_unraisable (hookobject=0x0) at src/util.c:174 + +These repeat because that is the point of the test until you get into the Python test code. +--- + apsw/tests.py | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/apsw/tests.py b/apsw/tests.py +index a349533b..bfec8e9f 100644 +--- a/apsw/tests.py ++++ b/apsw/tests.py +@@ -1188,6 +1188,14 @@ def testIssue376(self): + def testIssue425(self): + "Infinite recursion" + ++ # When Python tries to output an error message after reaching ++ # the recursion limit it can segv which is nothing to do with ++ # the apsw code, and the Python code looks good to me. Debug ++ # Python builds don't have this problem. See the commit ++ # message for this change for backtrace etc. ++ if "d" not in getattr(sys, "abiflags", ""): ++ return ++ + class VFSA(apsw.VFS): + + def __init__(self): diff --git a/python-apsw.changes b/python-apsw.changes index 990d235..b8e5f80 100644 --- a/python-apsw.changes +++ b/python-apsw.changes @@ -1,118 +1,8 @@ ------------------------------------------------------------------- -Tue Aug 5 08:38:22 UTC 2025 - John Paul Adrian Glaubitz +Tue Aug 19 11:54:17 UTC 2025 - Daniel Garcia -- Update to 3.50.4.0 - * PyPI binary builds are available for: - * Python 3.14 - * Windows ARM - * Python 3.14 `free threaded`__ (no GIL). The GIL will be - enabled when APSW is loaded. APSW will be free threaded - in the future (#568) -- from version 3.50.3.0 - * preupdate_hook` is available. The `commit` and `rollback` - hooks let you provide multiple callbacks, multiplex by APSW. - `apsw.ext.Trace` can now show updates, and transaction begin, - commit, and rollback. -- from version 3.50.2.0 - * PyPi builds now use `cibuildwheel version 3` which advances - the minimum supported Linux distribution. It is configured - to continue building both 32 and 64 bit binaries. -- from version 3.50.1.0 - * No user visible changes. -- from version 3.50.0.0 - * Full support for the `session` - * Added `Connection.setlk_timeout`, `apsw.mapping_setlk_timeout_flags`, - and enabled the timeout for amalgamation builds such as PyPI. - * Shell `open command ` allows specifying flags to - open a connection, and `connection command ` - shows flags used for each open. (#557) - * Type stubs updated to `collections.abc.Buffer` (Python 3.12+) - wherever some bytes are taken. `Buffers `__ have always been used, - but Python 3.12 added typing. -- from version 3.49.2.0 - * Shell dump command handles generated columns correctly. (#556) -- from version 3.49.1.0 - * No APSW changes. -- from version 3.49.0.0 - * `Connection.set_progress_handler` allows multiple callbacks - (multiplexed by APSW). - * Added `apsw.ext.query_limit` to limit total row count and execution - time within a block. (#520) - * `Connection.config` updated with new DBCONFIG options - * Adjustments for SQLite's new build process. -- from version 3.48.0.0 - * You can `pass any Python objects ` into SQLite, and - return them when used as runtime values such as functions. SQLite's - `pointer passing interface` is used behind the scenes. (#521) - * `Source releases ` are also available in tar format (#548), - and have updated source release signing `instructions `. - (#549) - * `Shared cache` (2006) is omitted when APSW includes the amalgamation - like PyPI builds. This is `recommended by SQLite `, has been `discouraged - for a long time`. `apsw.enable_shared_cache` will raise an exception - if called and the shared cache has been omitted. You can see what options - are in effect in `apsw.compile_options`. If you were using it for - shared memory databases then `use the memdb VFS `. -- from version 3.47.2.0 - * Added `apsw.ext.page_usage_to_svg` which shows database usage as - SVG. Available as shell `.pages-svg command `. -- from version 3.47.1.0 - * Documentation on how to `build for packagers ` such as - those maintaining Linux and BSD distributions. - * Documentation on how to `build for pyodide>`, the Python WASM - implementation that runs in the browser and NPM. PyPI does not - accept pyodide packages yet. - * A command line tool ``apsw`` is defined which invokes the `shell - `. This also allows using `uvx apsw` without having to - explicitly install APSW. - * Added `apsw.ext.analyze_pages` which uses `dbstat` to provide useful - information about the pages making up the database, and fragmentation. - The shell `.pages command ` shows it in a pretty form. -- from version 3.47.0.0 - * Support for Python 3.8 removed (#539). - * The readonly database statistics virtual table (`dbstat`) is enabled - by default for PyPI builds, and when ``--enable-all-extensions`` is - passed to manual `builds `. - * Added `recursive triggers ` - and `optimize ` to `apsw.bestpractice`. - * Multiple callbacks can be present for `Connection.trace_v2` with APSW ensuring - they are all called (#502) - * `Connection.trace_v2` callback information now has ``trigger``, ``id``, - and ``total_changes`` fields. - * Added `Connection.data_version` for getting a change counter. `pragma - data_version` doesn't update when changes are made on the same connection, - only others. - * Added `apsw.ext.ShowResourceUsage` for getting resource and SQLite usage - in a context block, and also use it for the shell `timer ` - command. - * Added `apsw.ext.Trace` for tracing SQL execution, row and change - counting, and timing per statement for use in a context block. - * Added `FTS5 support ` including registering and - calling tokenizers, and auxiliary functions. The `apsw.fts5` - module provides many additional classes and methods for working with - FTS5, including tokenizers for HTML, JSON, regular expressions, - support tokenizers for synonyms, stop words, transformers, and a - `~apsw.fts5.Table` class that wraps access to a FTS5 table - (including `creating one `) with - `~apsw.fts5.Table.search`, `~apsw.fts5.Table.more_like`, - and `~apsw.fts5.Table.query_suggest`. `apsw.fts5query` can - parse, modify, and reconstruct queries. The shell gets a `ftsq - ` command for issuing queries. - * Added `apsw.unicode` which implements Unicode algorithms for - determining codepoint groups making up a user perceived character, - word and sentence splitting, and where line breaks can be made. These - are used to make provided FTS5 tokenizers and auxiliary functions - fully Unicode aware. There are many additional methods such as - getting categories, stripping diacritics, case folding, width when - output to a terminal, text wrapping, and more. - * `apsw.ext.format_query_table` uses `apsw.unicode` to get widths and - line breaks more accurate. As a side effect it loses the `word_wrap` - parameter (breaking change). -- Add support for both update-alternatives and libalternatives -- Include apsw binary in %files section -- Remove shebang from all Python sources -- Switch upstream source back to PyPi -- Update BuildRequires from pyproject.toml +- Add upstream patch disable-infinite-recursion-in-tests.patch + gh#rogerbinns/apsw@0103ade60 ------------------------------------------------------------------- Sat Sep 28 19:15:48 UTC 2024 - Dirk Müller diff --git a/python-apsw.spec b/python-apsw.spec index 2099df3..710ebd0 100644 --- a/python-apsw.spec +++ b/python-apsw.spec @@ -1,7 +1,7 @@ # # spec file for package python-apsw # -# Copyright (c) 2025 SUSE LLC and contributors +# Copyright (c) 2024 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -15,22 +15,19 @@ # Please submit bugfixes or comments via https://bugs.opensuse.org/ # -%if 0%{?suse_version} > 1500 -%bcond_without libalternatives -%else -%bcond_with libalternatives -%endif %{?sle15_python_module_pythons} Name: python-apsw -Version: 3.50.4.0 +Version: 3.46.1.0 Release: 0 Summary: Another Python SQLite Wrapper License: Zlib Group: Development/Libraries/Python URL: https://github.com/rogerbinns/apsw/ -Source: https://files.pythonhosted.org/packages/source/a/apsw/apsw-%{version}.tar.gz -BuildRequires: %{python_module devel >= 3.9} +Source: https://github.com/rogerbinns/apsw/archive/refs/tags/%{version}.tar.gz#/apsw-%{version}.tar.gz +# PATCH-FIX-UPSTREAM disable-infinite-recursion-in-tests.patch -- gh#rogerbinns/apsw@0103ade60 +Patch0: disable-infinite-recursion-in-tests.patch +BuildRequires: %{python_module devel >= 3.8} BuildRequires: %{python_module pip} BuildRequires: %{python_module setuptools} BuildRequires: %{python_module wheel} @@ -38,13 +35,6 @@ BuildRequires: fdupes BuildRequires: pkgconfig BuildRequires: python-rpm-macros BuildRequires: pkgconfig(sqlite3) >= 3.44 -%if %{with libalternatives} -Requires: alts -BuildRequires: alts -%else -Requires(post): update-alternatives -Requires(postun):update-alternatives -%endif %python_subpackages %description @@ -55,8 +45,6 @@ complete SQLite API into Python. %prep %autosetup -p1 -n apsw-%{version} -# Remove shebang from all Python sources -find . -name "*.py" -exec sed -i "/#\!\/usr\/bin\/env python3/d" {} \; # See the discussion on gh#rogerbinns/apsw#462 cat << EOF >setup.apsw @@ -72,7 +60,6 @@ export CFLAGS="%{optflags} -fno-strict-aliasing" %install %pyproject_install %python_expand %fdupes %{buildroot}%{$python_sitearch} -%python_clone -a %{buildroot}%{_bindir}/apsw %check # gh#rogerbinns/apsw#462 @@ -81,19 +68,9 @@ export CFLAGS="%{optflags} -fno-strict-aliasing" $python -m apsw.tests -v } -%pre -%python_libalternatives_reset_alternative apsw - -%post -%python_install_alternative apsw - -%postun -%python_uninstall_alternative apsw - %files %{python_files} %license LICENSE %doc README.rst -%python_alternative %{_bindir}/apsw %{python_sitearch}/apsw %{python_sitearch}/apsw-%{version}*-info