--- /srv/reproducible-results/rbuild-debian/r-b-build.YMHYBPGH/b1/libpqxx_7.10.0-1_arm64.changes +++ /srv/reproducible-results/rbuild-debian/r-b-build.YMHYBPGH/b2/libpqxx_7.10.0-1_arm64.changes ├── Files │ @@ -1,5 +1,5 @@ │ │ 7801c86399584b97e3450569033eb6a6 2463844 debug optional libpqxx-7.10-dbgsym_7.10.0-1_arm64.deb │ 0441684e14f161ffe34b7f9ab16f60c1 170636 libs optional libpqxx-7.10_7.10.0-1_arm64.deb │ 72ab3a01813b0378c46486e230bae225 360248 libdevel optional libpqxx-dev_7.10.0-1_arm64.deb │ - fdc97815e1695599d84cd2860216e6ac 2637416 doc optional libpqxx-doc_7.10.0-1_all.deb │ + a5d7341b4425b850feb9f797a37dcc52 2643604 doc optional libpqxx-doc_7.10.0-1_all.deb ├── libpqxx-doc_7.10.0-1_all.deb │ ├── file list │ │ @@ -1,3 +1,3 @@ │ │ -rw-r--r-- 0 0 0 4 2025-01-07 17:35:40.000000 debian-binary │ │ --rw-r--r-- 0 0 0 32420 2025-01-07 17:35:40.000000 control.tar.xz │ │ --rw-r--r-- 0 0 0 2604804 2025-01-07 17:35:40.000000 data.tar.xz │ │ +-rw-r--r-- 0 0 0 32396 2025-01-07 17:35:40.000000 control.tar.xz │ │ +-rw-r--r-- 0 0 0 2611016 2025-01-07 17:35:40.000000 data.tar.xz │ ├── control.tar.xz │ │ ├── control.tar │ │ │ ├── ./control │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ Package: libpqxx-doc │ │ │ │ Source: libpqxx │ │ │ │ Version: 7.10.0-1 │ │ │ │ Architecture: all │ │ │ │ Maintainer: Debian PostgreSQL team │ │ │ │ -Installed-Size: 13546 │ │ │ │ +Installed-Size: 13779 │ │ │ │ Suggests: libpqxx-dev (>= 7.10.0-1) │ │ │ │ Section: doc │ │ │ │ Priority: optional │ │ │ │ Multi-Arch: foreign │ │ │ │ Homepage: https://github.com/jtv/libpqxx/ │ │ │ │ Description: C++ library to connect to PostgreSQL (documentation) │ │ │ │ C++ library to enable user programs to communicate with │ │ │ ├── ./md5sums │ │ │ │ ├── ./md5sums │ │ │ │ │┄ Files differ │ ├── data.tar.xz │ │ ├── data.tar │ │ │ ├── file list │ │ │ │ @@ -2,19 +2,19 @@ │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-01-07 17:35:40.000000 ./usr/ │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-01-07 17:35:40.000000 ./usr/share/ │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-01-07 17:35:40.000000 ./usr/share/doc/ │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1305 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/changelog.Debian.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 2807 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/copyright │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/ │ │ │ │ --rw-r--r-- 0 root (0) root (0) 18206 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/accessing-results.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 18203 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/accessing-results.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 81499 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/annotated.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 22300 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/annotated_dup.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 63073 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/array-composite_8hxx_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 87535 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/array_8hxx_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 77193 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/array-composite_8hxx_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 88346 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/array_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 674 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/bc_s.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 634 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/bc_sd.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 8304 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/binary.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 47000 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/binarystring_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 38775 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/blob_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 12823 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/callgate_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 41063 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classes.html │ │ │ │ @@ -114,162 +114,162 @@ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 8397 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1field__streambuf__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 370 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1field__streambuf__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 8397 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1field__streambuf__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6124 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1inclusive__bound-members.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7672 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1inclusive__bound.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 247 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1inclusive__bound.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 35149 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1basic__robusttransaction-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 79173 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1basic__robusttransaction.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 79623 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1basic__robusttransaction.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 871 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1basic__robusttransaction__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 8578 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1basic__robusttransaction__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 871 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1basic__robusttransaction__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 8578 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1basic__robusttransaction__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 35514 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1basic__transaction-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 81455 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1basic__transaction.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 82175 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1basic__transaction.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 174 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1basic__transaction.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 853 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1basic__transaction__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 8172 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1basic__transaction__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 853 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1basic__transaction__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 8172 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1basic__transaction__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5689 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1callgate-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 11492 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1callgate.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12302 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1callgate.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 343 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1callgate.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1550 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1callgate__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 34318 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1callgate__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7279 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1dynamic__params-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13232 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1dynamic__params.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 18632 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1dynamic__params.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 510 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1dynamic__params.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4697 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__errorhandler-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7676 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__errorhandler.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7766 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__errorhandler.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 421 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__errorhandler__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7053 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__errorhandler__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 421 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__errorhandler__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7053 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__errorhandler__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5126 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__largeobject-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 8082 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__largeobject.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 8262 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__largeobject.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 417 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__largeobject__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7313 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__largeobject__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 417 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__largeobject__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7313 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__largeobject__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4782 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__notification__receiver-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7855 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__notification__receiver.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7945 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__notification__receiver.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 437 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__notification__receiver__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7793 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__notification__receiver__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 437 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__notification__receiver__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7793 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__notification__receiver__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4661 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__pipeline-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7596 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__pipeline.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7686 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__pipeline.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 411 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__pipeline__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6747 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__pipeline__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 411 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__pipeline__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6747 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__pipeline__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4693 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__sql__cursor-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7654 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__sql__cursor.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7744 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__sql__cursor.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 414 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__sql__cursor__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7164 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__sql__cursor__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 414 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__sql__cursor__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7164 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__sql__cursor__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4674 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__stream__to-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7625 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__stream__to.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7715 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__stream__to.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 412 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__stream__to__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7210 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__stream__to__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 412 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__stream__to__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7210 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__stream__to__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4693 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__transaction-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7658 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__transaction.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7748 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__transaction.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 417 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__transaction__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7047 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__transaction__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 417 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__transaction__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7047 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__transaction__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5204 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1const__connection__largeobject-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 8247 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1const__connection__largeobject.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 8427 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1const__connection__largeobject.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 458 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1const__connection__largeobject__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7447 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1const__connection__largeobject__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 458 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1const__connection__largeobject__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7447 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1const__connection__largeobject__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4695 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1errorhandler__connection-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7674 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1errorhandler__connection.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7764 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1errorhandler__connection.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 421 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1errorhandler__connection__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7240 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1errorhandler__connection__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 421 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1errorhandler__connection__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7240 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1errorhandler__connection__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4758 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1icursor__iterator__icursorstream-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7819 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1icursor__iterator__icursorstream.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7909 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1icursor__iterator__icursorstream.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 437 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1icursor__iterator__icursorstream__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7777 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1icursor__iterator__icursorstream__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 437 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1icursor__iterator__icursorstream__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7777 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1icursor__iterator__icursorstream__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4761 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1icursorstream__icursor__iterator-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7812 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1icursorstream__icursor__iterator.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7902 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1icursorstream__icursor__iterator.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 432 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1icursorstream__icursor__iterator__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 8430 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1icursorstream__icursor__iterator__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 432 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1icursorstream__icursor__iterator__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 8430 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1icursorstream__icursor__iterator__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4647 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__connection-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7612 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__connection.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7702 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__connection.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 432 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__connection__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6612 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__connection__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 432 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__connection__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6612 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__connection__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5045 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__creation-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 8009 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__creation.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 8189 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__creation.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 428 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__creation__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6765 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__creation__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 428 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__creation__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6765 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__creation__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4629 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__pipeline-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7574 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__pipeline.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7664 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__pipeline.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 428 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__pipeline__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6516 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__pipeline__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 428 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__pipeline__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6516 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__pipeline__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4661 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__sql__cursor-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7634 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__sql__cursor.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7724 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__sql__cursor.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 432 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__sql__cursor__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6729 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__sql__cursor__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 432 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__sql__cursor__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6729 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__sql__cursor__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4701 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1transaction__sql__cursor-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7672 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1transaction__sql__cursor.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7762 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1transaction__sql__cursor.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 416 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1transaction__sql__cursor__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7633 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1transaction__sql__cursor__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 416 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1transaction__sql__cursor__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7633 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1transaction__sql__cursor__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4754 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1transaction__transaction__focus-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7805 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1transaction__transaction__focus.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7895 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1transaction__transaction__focus.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 435 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1transaction__transaction__focus__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7680 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1transaction__transaction__focus__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 435 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1transaction__transaction__focus__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7680 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1transaction__transaction__focus__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7351 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1result__iter-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 9799 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1result__iter.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 11149 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1result__iter.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 264 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1result__iter.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5918 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1result__iteration-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7170 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1result__iteration.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7530 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1result__iteration.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 14951 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1sql__cursor-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 28230 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1sql__cursor.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 30480 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1sql__cursor.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 358 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1sql__cursor.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 444 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1sql__cursor__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5094 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1sql__cursor__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 444 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1sql__cursor__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5094 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1sql__cursor__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7922 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1stream__from__input__iterator-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 10688 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1stream__from__input__iterator.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 11948 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1stream__from__input__iterator.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 455 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1stream__from__input__iterator.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6463 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1stream__input__iteration-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 8342 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1stream__input__iteration.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 8702 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1stream__input__iteration.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 9218 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1stream__query-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 18228 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1stream__query.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 19938 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1stream__query.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 796 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1stream__query.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 873 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1stream__query__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 9824 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1stream__query__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 550 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1stream__query__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6505 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1stream__query__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 9288 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1stream__query__input__iterator-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 14324 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1stream__query__input__iterator.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 15944 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1stream__query__input__iterator.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 694 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1stream__query__input__iterator.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 9668 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1largeobject-members.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 33645 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1largeobject.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1352 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1largeobject.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 426 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1largeobject__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5162 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1largeobject__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 12045 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1largeobject__streambuf-members.html │ │ │ │ @@ -373,33 +373,33 @@ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 18002 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1zview.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 700 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1zview.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 365 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1zview__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4108 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1zview__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 634 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1zview__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5643 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1zview__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 132 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/closed.png │ │ │ │ --rw-r--r-- 0 root (0) root (0) 27680 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/composite_8hxx_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12353 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/concat_8hxx_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 28395 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/composite_8hxx_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 15148 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/concat_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5997 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/config-internal-autotools_8h_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5750 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/config-internal-compiler_8h_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4812 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/config-public-autotools_8h_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5574 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/config-public-compiler_8h_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 22712 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/config_8h_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 10153 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/connection-errorhandler_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 13234 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/connection-largeobject_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 10660 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/connection-notification__receiver_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 10344 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/connection-pipeline_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 9689 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/connection-sql__cursor_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 8829 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/connection-stream__from_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 8759 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/connection-stream__to_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 13910 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/connection-transaction_8hxx_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 137398 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/connection_8hxx_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 260956 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/conversions_8hxx_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 139049 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/connection_8hxx_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 271863 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/conversions_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 59527 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/cursor_8hxx_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 36018 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/datatypes.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 36021 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/datatypes.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 13989 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/dbtransaction_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 19653 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/deprecated.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5222 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/dir_09456df80b5baeba1147d2b9ef5f002c.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 399 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/dir_09456df80b5baeba1147d2b9ef5f002c_dep.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1857 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/dir_09456df80b5baeba1147d2b9ef5f002c_dep.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 11101 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/dir_3abbb4e2076021b5d2239498be5fcb30.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1544 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/dir_3abbb4e2076021b5d2239498be5fcb30.js │ │ │ │ @@ -418,16 +418,16 @@ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4580 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/dir_d44c64559bbebec7f509842c48db8b23.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 147 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/dir_d44c64559bbebec7f509842c48db8b23.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1503 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/doc.svg │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1503 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/docd.svg │ │ │ │ -rw-r--r-- 0 root (0) root (0) 45631 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/doxygen.css │ │ │ │ -rw-r--r-- 0 root (0) root (0) 15461 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/doxygen.svg │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7704 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/dynsections.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 11901 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/encoding__group_8hxx_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 137795 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/encodings_8hxx_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12928 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/encoding__group_8hxx_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 220982 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/encodings_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 8209 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/errorhandler-connection_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 18589 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/errorhandler_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 10026 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/escaping.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 144139 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/except_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 85079 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/field_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 25190 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/files.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 223 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/files_dup.js │ │ │ │ @@ -800,47 +800,47 @@ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 3388 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/inherit_graph_98.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 231 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/inherit_graph_99.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 2408 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/inherit_graph_99.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 84788 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/inherits.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 11272 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/isolation_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 176630 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/jquery.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 97246 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/largeobject_8hxx_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 9053 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/libpq-forward_8hxx_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 9976 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/libpq-forward_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5925 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/menu.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6488 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/menudata.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 582 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/minus.svg │ │ │ │ -rw-r--r-- 0 root (0) root (0) 582 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/minusd.svg │ │ │ │ -rw-r--r-- 0 root (0) root (0) 18732 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/namespacemembers.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4523 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/namespacemembers_enum.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4381 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/namespacemembers_eval.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 14784 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/namespacemembers_func.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6302 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/namespacemembers_type.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4402 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/namespacemembers_vars.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 205143 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/namespacepqxx.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 21958 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/namespacepqxx.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 127100 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/namespacepqxx_1_1internal.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 164605 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/namespacepqxx_1_1internal.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 10672 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/namespacepqxx_1_1internal.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7435 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/namespacepqxx_1_1internal_1_1pq.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 8940 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/namespacepqxx_1_1internal_1_1pq.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4456 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/namespacepqxx_1_1prepare.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 379 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/namespacepqxx_structpqxx_1_1notification_dup.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 319 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/namespacepqxx_structpqxx_1_1thread__safety__model_dup.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 75543 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/namespaces.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 79 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/namespaces_dup.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 155 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/nav_f.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 168 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/nav_fd.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 95 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/nav_g.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 98 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/nav_h.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 111 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/nav_hd.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 2167 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/navtree.css │ │ │ │ -rw-r--r-- 0 root (0) root (0) 15935 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/navtree.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5968 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/navtreedata.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 19107 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/navtreeindex0.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 19104 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/navtreeindex0.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 21285 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/navtreeindex1.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 19510 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/navtreeindex2.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 15186 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/navtreeindex3.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 15189 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/navtreeindex3.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 17784 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/navtreeindex4.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 18023 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/navtreeindex5.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 2477 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/navtreeindex6.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 13256 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/nontransaction_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 16353 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/notification_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 122 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/open.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6420 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/pages.html │ │ │ │ @@ -849,51 +849,51 @@ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5810 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/performance.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 29855 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/pipeline_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 696 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/plus.svg │ │ │ │ -rw-r--r-- 0 root (0) root (0) 696 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/plusd.svg │ │ │ │ -rw-r--r-- 0 root (0) root (0) 8893 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/pqxx-source_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 14803 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/prepared.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 9364 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/prepared__statement_8hxx_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 101844 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/range_8hxx_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 102455 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/range_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5685 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/resize.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 8660 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/result-connection_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 11425 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/result-creation_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 8756 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/result-pipeline_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 8591 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/result-sql__cursor_8hxx_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 63743 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/result_8hxx_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 29407 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/result__iter_8hxx_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 64354 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/result_8hxx_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 31058 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/result__iter_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 62185 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/result__iterator_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 19467 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/robusttransaction_8hxx_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 91997 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/row_8hxx_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 92608 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/row_8hxx_source.html │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7545 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_0.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4729 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_1.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6981 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_10.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21312 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_11.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7527 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_12.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6978 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_10.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21617 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_11.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7531 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_12.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 2858 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_13.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 906 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_14.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 1395 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_15.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 1394 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_15.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 94 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_16.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1207 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_17.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 319 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_18.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 15544 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_2.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4604 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_3.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4603 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_3.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 9410 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_4.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7171 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_5.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7172 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_5.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5455 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_6.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1038 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_7.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5821 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_8.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5822 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_8.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 147 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_9.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 2895 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_a.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 1395 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_b.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 1394 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_b.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 9601 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_c.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 9128 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_d.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 9162 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_d.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6432 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_e.js │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4653 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_f.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4663 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_f.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 875 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/classes_0.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1086 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/classes_1.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 975 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/classes_10.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 835 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/classes_11.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 157 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/classes_12.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 85 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/classes_13.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 3820 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/classes_2.js │ │ │ │ @@ -1007,20 +1007,20 @@ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 280 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/variables_b.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 124 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/variables_c.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 158 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/search/variables_d.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 27575 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/separated__list_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 316 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/splitbar.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 284 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/splitbard.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 20884 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/sql__cursor_8hxx_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 22632 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/statement__parameters_8hxx_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 69161 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/strconv_8hxx_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 26259 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/statement__parameters_8hxx_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 70604 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/strconv_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 55559 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/stream__from_8hxx_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 22603 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/stream__iterator_8hxx_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 49763 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/stream__query_8hxx_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 48948 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/stream__query__impl_8hxx_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 24150 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/stream__iterator_8hxx_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 63374 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/stream__query_8hxx_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 53019 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/stream__query__impl_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 57527 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/stream__to_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 14471 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/streams.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 389 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1argument__error__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4983 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1argument__error__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 389 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1argument__error__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4983 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1argument__error__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 697 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1broken__connection__coll__graph.map │ │ │ │ @@ -1094,62 +1094,62 @@ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1461 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1insufficient__resources__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 15359 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1insufficient__resources__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 946 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1integrity__constraint__violation__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 9782 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1integrity__constraint__violation__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 2284 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1integrity__constraint__violation__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 25567 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1integrity__constraint__violation__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6703 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1array__string__traits-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 8098 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1array__string__traits.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 10348 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1array__string__traits.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6343 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1c__params-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 10014 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1c__params.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 10734 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1c__params.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 560 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1c__params.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7544 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1disallowed__ambiguous__char__conversion-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 9374 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1disallowed__ambiguous__char__conversion.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12344 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1disallowed__ambiguous__char__conversion.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7619 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1enum__traits-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 10337 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1enum__traits.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13217 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1enum__traits.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7159 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1float__traits-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 9260 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1float__traits.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12050 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1float__traits.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6257 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1gate_1_1connection__stream__from-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12100 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1gate_1_1connection__stream__from.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12280 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1gate_1_1connection__stream__from.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 419 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1gate_1_1connection__stream__from__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7248 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1gate_1_1connection__stream__from__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 419 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1gate_1_1connection__stream__from__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7248 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1gate_1_1connection__stream__from__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4653 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6353 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6893 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4901 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1BIG5_01_4-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5596 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1BIG5_01_4.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6136 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1BIG5_01_4.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4921 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1EUC__CN_01_4-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5611 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1EUC__CN_01_4.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6151 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1EUC__CN_01_4.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4921 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1EUC__JP_01_4-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5611 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1EUC__JP_01_4.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6151 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1EUC__JP_01_4.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4921 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1EUC__KR_01_4-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5611 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1EUC__KR_01_4.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6151 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1EUC__KR_01_4.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4921 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1EUC__TW_01_4-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5611 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1EUC__TW_01_4.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6151 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1EUC__TW_01_4.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4925 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1GB18030_01_4-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5614 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1GB18030_01_4.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6154 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1GB18030_01_4.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4893 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1GBK_01_4-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5590 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1GBK_01_4.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6130 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1GBK_01_4.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4909 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1JOHAB_01_4-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5602 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1JOHAB_01_4.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6142 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1JOHAB_01_4.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4927 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1MONOBYTE_01_4-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5624 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1MONOBYTE_01_4.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6164 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1MONOBYTE_01_4.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4977 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1MULE__INTERNAL_01_4-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5653 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1MULE__INTERNAL_01_4.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6193 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1MULE__INTERNAL_01_4.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4901 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1SJIS_01_4-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5596 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1SJIS_01_4.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6136 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1SJIS_01_4.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4893 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1UHC_01_4-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5590 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1UHC_01_4.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6130 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1UHC_01_4.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4901 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1UTF8_01_4-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5596 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1UTF8_01_4.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6136 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1UTF8_01_4.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6832 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1integral__traits-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 8645 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1integral__traits.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 11165 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1integral__traits.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6775 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1notice__waiters-members.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 8731 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1notice__waiters.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 9361 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1notice__waiters.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 355 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal__error__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4177 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal__error__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 355 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal__error__inherit__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4177 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal__error__inherit__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 930 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1invalid__cursor__name__coll__graph.map │ │ │ │ -rw-r--r-- 0 root (0) root (0) 8958 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1invalid__cursor__name__coll__graph.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 930 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1invalid__cursor__name__inherit__graph.map │ │ │ │ @@ -1517,22 +1517,22 @@ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5631 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/thread-safety.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 13036 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/time_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6099 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/topics.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 648 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/topics.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 8071 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/transaction-sql__cursor_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 11097 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/transaction-transaction__focus_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 19257 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/transaction_8hxx_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 141578 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/transaction__base_8hxx_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 142917 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/transaction__base_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 21897 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/transaction__focus_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 19663 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/transactor_8hxx_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 34918 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/types_8hxx_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 115450 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/util_8hxx_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 9333 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/version_8hxx_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 8055 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/wait_8hxx_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 30428 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/zview_8hxx_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 131557 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/util_8hxx_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 9944 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/version_8hxx_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 9186 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/wait_8hxx_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 31351 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/doxygen-html/zview_8hxx_source.html │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-01-07 17:35:40.000000 ./usr/share/doc/libpqxx-doc/examples/ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6285 2024-12-22 18:24:39.000000 ./usr/share/doc/libpqxx-doc/examples/runner.cxx │ │ │ │ -rw-r--r-- 0 root (0) root (0) 2953 2024-12-22 18:24:39.000000 ./usr/share/doc/libpqxx-doc/examples/test00.cxx │ │ │ │ -rw-r--r-- 0 root (0) root (0) 717 2024-12-22 18:24:39.000000 ./usr/share/doc/libpqxx-doc/examples/test01.cxx │ │ │ │ -rw-r--r-- 0 root (0) root (0) 2250 2024-12-22 18:24:39.000000 ./usr/share/doc/libpqxx-doc/examples/test02.cxx │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1282 2024-12-22 18:24:39.000000 ./usr/share/doc/libpqxx-doc/examples/test04.cxx │ │ │ │ -rw-r--r-- 0 root (0) root (0) 3714 2024-12-22 18:24:39.000000 ./usr/share/doc/libpqxx-doc/examples/test07.cxx │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/accessing-results.html │ │ │ │ @@ -93,38 +93,38 @@ │ │ │ │
Accessing results and result rows
│ │ │ │ │ │ │ │
│ │ │ │

A query produces a result set consisting of rows, and each row consists of fields. There are several ways to receive this data.

│ │ │ │

The fields are "untyped." That is to say, libpqxx has no opinion on what their types are. The database sends the data in a very flexible textual format. When you read a field, you specify what type you want it to be, and libpqxx converts the text format to that type for you.

│ │ │ │

If a value does not conform to the format for the type you specify, the conversion fails. For example, if you have strings that all happen to contain numbers, you can read them as int. But if any of the values is empty, or it's null (for a type that doesn't support null), or it's some string that does not look like an integer, or it's too large, you can't convert it to int.

│ │ │ │

So usually, reading result data from the database means not just retrieving the data; it also means converting it to some target type.

│ │ │ │ -

│ │ │ │ +

│ │ │ │ Querying rows of data

│ │ │ │

The simplest way to query rows of data is to call one of a transaction's "query" functions, passing as template arguments the types of columns you want to get back (e.g. int, std::string, double, and so on) and as a regular argument the query itself.

│ │ │ │

You can then iterate over the result to go over the rows of data:

│ │ │ │
for (auto [id, value] :
│ │ │ │
tx.query<int, std::string>("SELECT id, name FROM item"))
│ │ │ │
{
│ │ │ │
std::cout << id << '\t' << value << '\n';
│ │ │ │
}
│ │ │ │

The "query" functions execute your query, load the complete result data from the database, and then as you iterate, convert each row it received to a tuple of C++ types that you indicated.

│ │ │ │

There are different query functions for querying any number of rows (query()); querying just one row of data as a std::tuple and throwing an error if there's more than one row (query1()); or querying

│ │ │ │ -

│ │ │ │ +

│ │ │ │ Streaming rows

│ │ │ │

There's another way to go through the rows coming out of a query. It's usually easier and faster if there are a lot of rows, but there are drawbacks.

│ │ │ │

One, you start getting rows before all the data has come in from the database. That speeds things up, but what happens if you lose your network connection while transferring the data? Your application may already have processed some of the data before finding out that the rest isn't coming. If that is a problem for your application, streaming may not be the right choice.

│ │ │ │

Two, streaming only works for some types of query. The stream() function wraps your query in a PostgreSQL COPY command, and COPY only supports a few commands: SELECT, VALUES, or an INSERT, UPDATE, or DELETE with a RETURNING clause. See the COPY documentation here: [ https://www.postgresql.org/docs/current/sql-copy.html ](https://www.postgresql.org/docs/current/sql-copy.html).

│ │ │ │

Three, when you convert a field to a "view" type (such as std::string_view or pqxx::bytes_view), the view points to underlying data which only stays valid until you iterate to the next row or exit the loop. So if you want to use that data for longer than a single iteration of the streaming loop, you'll have to store it somewhere yourself.

│ │ │ │

Now for the good news. Streaming does make it very easy to query data and loop over it, and often faster than with the "query" or "exec" functions:

│ │ │ │
for (auto [id, name, x, y] :
│ │ │ │
tx.stream<int, std::string_view, float, float>(
│ │ │ │
"SELECT id, name, x, y FROM point"))
│ │ │ │
process(id + 1, "point-" + name, x * 10.0, y * 10.0);
│ │ │ │

The conversion to C++ types (here int, std::string_view, and two floats) is built into the function. You never even see row objects, field objects, iterators, or conversion methods. You just put in your query and you receive your data.

│ │ │ │ -

│ │ │ │ +

│ │ │ │ Results with metadata

│ │ │ │

Sometimes you want more from a query result than just rows of data. You may need to know right away how many rows of result data you received, or how many rows your UPDATE statement has affected, or the names of the columns, etc.

│ │ │ │

For that, use the transaction's "exec" query execution functions. Apart from a few exceptions, these return a pqxx::result object. A result is a container of pqxx::row objects, so you can iterate them as normal, or index them like you would index an array. Each row in turn is a container of pqxx::field, Each field holds a value, but doesn't know its type. You specify the type when you read the value.

│ │ │ │

For example, your code might do:

│ │ │ │
pqxx::result r = tx.exec("SELECT * FROM mytable");
│ │ │ │
for (auto const &row: r)
│ │ │ │
{
│ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/array-composite_8hxx_source.html │ │ │ │ @@ -108,282 +108,282 @@ │ │ │ │
8
│ │ │ │
9namespace pqxx::internal
│ │ │ │
10{
│ │ │ │
11// Find the end of a double-quoted string.
│ │ │ │
19template<encoding_group ENC>
│ │ │ │
│ │ │ │
20inline std::size_t scan_double_quoted_string(
│ │ │ │ -
21 char const input[], std::size_t size, std::size_t pos)
│ │ │ │ +
21 char const input[], std::size_t size, std::size_t pos)
│ │ │ │
22{
│ │ │ │
23 // TODO: find_char<'"', '\\'>().
│ │ │ │ -
24 using scanner = glyph_scanner<ENC>;
│ │ │ │ -
25 auto next{scanner::call(input, size, pos)};
│ │ │ │ + │ │ │ │ +
25 auto next{scanner::call(input, size, pos)};
│ │ │ │
26 PQXX_ASSUME(next > pos);
│ │ │ │ -
27 bool at_quote{false};
│ │ │ │ +
27 bool at_quote{false};
│ │ │ │
28 pos = next;
│ │ │ │ -
29 next = scanner::call(input, size, pos);
│ │ │ │ +
29 next = scanner::call(input, size, pos);
│ │ │ │
30 PQXX_ASSUME(next > pos);
│ │ │ │
31 while (pos < size)
│ │ │ │
32 {
│ │ │ │ -
33 if (at_quote)
│ │ │ │ +
33 if (at_quote)
│ │ │ │
34 {
│ │ │ │ -
35 if (next - pos == 1 and input[pos] == '"')
│ │ │ │ +
35 if (next - pos == 1 and input[pos] == '"')
│ │ │ │
36 {
│ │ │ │
37 // We just read a pair of double quotes. Carry on.
│ │ │ │ -
38 at_quote = false;
│ │ │ │ +
38 at_quote = false;
│ │ │ │
39 }
│ │ │ │
40 else
│ │ │ │
41 {
│ │ │ │
42 // We just read one double quote, and now we're at a character that's
│ │ │ │
43 // not a second double quote. Ergo, that last character was the
│ │ │ │
44 // closing double quote and this is the position right after it.
│ │ │ │
45 return pos;
│ │ │ │
46 }
│ │ │ │
47 }
│ │ │ │
48 else if (next - pos == 1)
│ │ │ │
49 {
│ │ │ │ -
50 switch (input[pos])
│ │ │ │ +
50 switch (input[pos])
│ │ │ │
51 {
│ │ │ │
52 case '\\':
│ │ │ │
53 // Backslash escape. Skip ahead by one more character.
│ │ │ │
54 pos = next;
│ │ │ │ -
55 next = scanner::call(input, size, pos);
│ │ │ │ +
55 next = scanner::call(input, size, pos);
│ │ │ │
56 PQXX_ASSUME(next > pos);
│ │ │ │
57 break;
│ │ │ │
58
│ │ │ │
59 case '"':
│ │ │ │
60 // This is either the closing double quote, or the first of a pair of
│ │ │ │
61 // double quotes.
│ │ │ │ -
62 at_quote = true;
│ │ │ │ +
62 at_quote = true;
│ │ │ │
63 break;
│ │ │ │
64 }
│ │ │ │
65 }
│ │ │ │
66 else
│ │ │ │
67 {
│ │ │ │
68 // Multibyte character. Carry on.
│ │ │ │
69 }
│ │ │ │
70 pos = next;
│ │ │ │ -
71 next = scanner::call(input, size, pos);
│ │ │ │ +
71 next = scanner::call(input, size, pos);
│ │ │ │
72 PQXX_ASSUME(next > pos);
│ │ │ │
73 }
│ │ │ │ -
74 if (not at_quote)
│ │ │ │ +
74 if (not at_quote)
│ │ │ │
75 throw argument_error{
│ │ │ │ -
76 "Missing closing double-quote: " + std::string{input}};
│ │ │ │ +
76 "Missing closing double-quote: " + std::string{input}};
│ │ │ │
77 return pos;
│ │ │ │
78}
│ │ │ │
│ │ │ │
79
│ │ │ │
80
│ │ │ │
81// TODO: Needs version with caller-supplied buffer.
│ │ │ │
83template<encoding_group ENC>
│ │ │ │
│ │ │ │
84inline std::string parse_double_quoted_string(
│ │ │ │ -
85 char const input[], std::size_t end, std::size_t pos)
│ │ │ │ +
85 char const input[], std::size_t end, std::size_t pos)
│ │ │ │
86{
│ │ │ │ -
87 std::string output;
│ │ │ │ +
87 std::string output;
│ │ │ │
88 // Maximum output size is same as the input size, minus the opening and
│ │ │ │
89 // closing quotes. Or in the extreme opposite case, the real number could be
│ │ │ │
90 // half that. Usually it'll be a pretty close estimate.
│ │ │ │ -
91 output.reserve(std::size_t(end - pos - 2));
│ │ │ │ +
91 output.reserve(std::size_t(end - pos - 2));
│ │ │ │
92
│ │ │ │
93 // TODO: Use find_char<...>().
│ │ │ │ -
94 using scanner = glyph_scanner<ENC>;
│ │ │ │ -
95 auto here{scanner::call(input, end, pos)},
│ │ │ │ -
96 next{scanner::call(input, end, here)};
│ │ │ │ -
97 PQXX_ASSUME(here > pos);
│ │ │ │ -
98 PQXX_ASSUME(next > here);
│ │ │ │ -
99 while (here < end - 1)
│ │ │ │ + │ │ │ │ +
95 auto here{scanner::call(input, end, pos)},
│ │ │ │ +
96 next{scanner::call(input, end, here)};
│ │ │ │ +
97 PQXX_ASSUME(here > pos);
│ │ │ │ +
98 PQXX_ASSUME(next > here);
│ │ │ │ +
99 while (here < end - 1)
│ │ │ │
100 {
│ │ │ │
101 // A backslash here is always an escape. So is a double-quote, since we're
│ │ │ │
102 // inside the double-quoted string. In either case, we can just ignore the
│ │ │ │
103 // escape character and use the next character. This is the one redeeming
│ │ │ │
104 // feature of SQL's escaping system.
│ │ │ │ -
105 if ((next - here == 1) and (input[here] == '\\' or input[here] == '"'))
│ │ │ │ +
105 if ((next - here == 1) and (input[here] == '\\' or input[here] == '"'))
│ │ │ │
106 {
│ │ │ │
107 // Skip escape.
│ │ │ │ -
108 here = next;
│ │ │ │ -
109 next = scanner::call(input, end, here);
│ │ │ │ -
110 PQXX_ASSUME(next > here);
│ │ │ │ +
108 here = next;
│ │ │ │ +
109 next = scanner::call(input, end, here);
│ │ │ │ +
110 PQXX_ASSUME(next > here);
│ │ │ │
111 }
│ │ │ │ -
112 output.append(input + here, input + next);
│ │ │ │ -
113 here = next;
│ │ │ │ -
114 next = scanner::call(input, end, here);
│ │ │ │ -
115 PQXX_ASSUME(next > here);
│ │ │ │ +
112 output.append(input + here, input + next);
│ │ │ │ +
113 here = next;
│ │ │ │ +
114 next = scanner::call(input, end, here);
│ │ │ │ +
115 PQXX_ASSUME(next > here);
│ │ │ │
116 }
│ │ │ │ -
117 return output;
│ │ │ │ +
117 return output;
│ │ │ │
118}
│ │ │ │
│ │ │ │
119
│ │ │ │
120
│ │ │ │
122
│ │ │ │ -
129template<pqxx::internal::encoding_group ENC, char... STOP>
│ │ │ │ +
129template<pqxx::internal::encoding_group ENC, char... STOP>
│ │ │ │
130inline std::size_t
│ │ │ │
│ │ │ │ -
131scan_unquoted_string(char const input[], std::size_t size, std::size_t pos)
│ │ │ │ +
131scan_unquoted_string(char const input[], std::size_t size, std::size_t pos)
│ │ │ │
132{
│ │ │ │ -
133 using scanner = glyph_scanner<ENC>;
│ │ │ │ -
134 auto next{scanner::call(input, size, pos)};
│ │ │ │ + │ │ │ │ +
134 auto next{scanner::call(input, size, pos)};
│ │ │ │
135 PQXX_ASSUME(next > pos);
│ │ │ │ -
136 while ((pos < size) and ((next - pos) > 1 or ((input[pos] != STOP) and ...)))
│ │ │ │ +
136 while ((pos < size) and ((next - pos) > 1 or ((input[pos] != STOP) and ...)))
│ │ │ │
137 {
│ │ │ │
138 pos = next;
│ │ │ │ -
139 next = scanner::call(input, size, pos);
│ │ │ │ +
139 next = scanner::call(input, size, pos);
│ │ │ │
140 PQXX_ASSUME(next > pos);
│ │ │ │
141 }
│ │ │ │
142 return pos;
│ │ │ │
143}
│ │ │ │
│ │ │ │
144
│ │ │ │
145
│ │ │ │
147template<pqxx::internal::encoding_group ENC>
│ │ │ │
148inline std::string_view
│ │ │ │
│ │ │ │ -
149parse_unquoted_string(char const input[], std::size_t end, std::size_t pos)
│ │ │ │ +
149parse_unquoted_string(char const input[], std::size_t end, std::size_t pos)
│ │ │ │
150{
│ │ │ │ -
151 return {&input[pos], end - pos};
│ │ │ │ +
151 return {&input[pos], end - pos};
│ │ │ │
152}
│ │ │ │
│ │ │ │
153
│ │ │ │
154
│ │ │ │
156
│ │ │ │
179template<encoding_group ENC, typename T>
│ │ │ │
│ │ │ │ │ │ │ │ -
181 std::size_t &index, std::string_view input, std::size_t &pos, T &field,
│ │ │ │ -
182 std::size_t last_field)
│ │ │ │ +
181 std::size_t &index, std::string_view input, std::size_t &pos, T &field,
│ │ │ │ +
182 std::size_t last_field)
│ │ │ │
183{
│ │ │ │ -
184 assert(index <= last_field);
│ │ │ │ -
185 auto next{glyph_scanner<ENC>::call(std::data(input), std::size(input), pos)};
│ │ │ │ +
184 assert(index <= last_field);
│ │ │ │ +
185 auto next{glyph_scanner<ENC>::call(std::data(input), std::size(input), pos)};
│ │ │ │
186 PQXX_ASSUME(next > pos);
│ │ │ │
187 if ((next - pos) != 1)
│ │ │ │
188 throw conversion_error{"Non-ASCII character in composite-type syntax."};
│ │ │ │
189
│ │ │ │
190 // Expect a field.
│ │ │ │ -
191 switch (input[pos])
│ │ │ │ +
191 switch (input[pos])
│ │ │ │
192 {
│ │ │ │
193 case ',':
│ │ │ │
194 case ')':
│ │ │ │
195 case ']':
│ │ │ │
196 // The field is empty, i.e, null.
│ │ │ │
197 if constexpr (nullness<T>::has_null)
│ │ │ │ │ │ │ │
199 else
│ │ │ │
200 throw conversion_error{
│ │ │ │
201 "Can't read composite field " + to_string(index) + ": C++ type " +
│ │ │ │ -
202 type_name<T> + " does not support nulls."};
│ │ │ │ +
202 type_name<T> + " does not support nulls."};
│ │ │ │
203 break;
│ │ │ │
204
│ │ │ │
205 case '"': {
│ │ │ │ -
206 auto const stop{
│ │ │ │ -
207 scan_double_quoted_string<ENC>(std::data(input), std::size(input), pos)};
│ │ │ │ -
208 PQXX_ASSUME(stop > pos);
│ │ │ │ +
206 auto const stop{
│ │ │ │ +
207 scan_double_quoted_string<ENC>(std::data(input), std::size(input), pos)};
│ │ │ │ +
208 PQXX_ASSUME(stop > pos);
│ │ │ │
209 auto const text{
│ │ │ │ -
210 parse_double_quoted_string<ENC>(std::data(input), stop, pos)};
│ │ │ │ -
211 field = from_string<T>(text);
│ │ │ │ -
212 pos = stop;
│ │ │ │ +
210 parse_double_quoted_string<ENC>(std::data(input), stop, pos)};
│ │ │ │ +
211 field = from_string<T>(text);
│ │ │ │ +
212 pos = stop;
│ │ │ │
213 }
│ │ │ │
214 break;
│ │ │ │
215
│ │ │ │
216 default: {
│ │ │ │ -
217 auto const stop{scan_unquoted_string<ENC, ',', ')', ']'>(
│ │ │ │ -
218 std::data(input), std::size(input), pos)};
│ │ │ │ -
219 PQXX_ASSUME(stop >= pos);
│ │ │ │ + │ │ │ │ +
218 std::data(input), std::size(input), pos)};
│ │ │ │ +
219 PQXX_ASSUME(stop >= pos);
│ │ │ │
220 field =
│ │ │ │ -
221 from_string<T>(std::string_view{std::data(input) + pos, stop - pos});
│ │ │ │ -
222 pos = stop;
│ │ │ │ +
221 from_string<T>(std::string_view{std::data(input) + pos, stop - pos});
│ │ │ │ +
222 pos = stop;
│ │ │ │
223 }
│ │ │ │
224 break;
│ │ │ │
225 }
│ │ │ │
226
│ │ │ │
227 // Expect a comma or a closing parenthesis.
│ │ │ │ -
228 next = glyph_scanner<ENC>::call(std::data(input), std::size(input), pos);
│ │ │ │ +
228 next = glyph_scanner<ENC>::call(std::data(input), std::size(input), pos);
│ │ │ │
229 PQXX_ASSUME(next > pos);
│ │ │ │
230
│ │ │ │
231 if ((next - pos) != 1)
│ │ │ │
232 throw conversion_error{
│ │ │ │
233 "Unexpected non-ASCII character after composite field: " +
│ │ │ │ -
234 std::string{input}};
│ │ │ │ +
234 std::string{input}};
│ │ │ │
235
│ │ │ │ -
236 if (index < last_field)
│ │ │ │ +
236 if (index < last_field)
│ │ │ │
237 {
│ │ │ │ -
238 if (input[pos] != ',')
│ │ │ │ +
238 if (input[pos] != ',')
│ │ │ │
239 throw conversion_error{
│ │ │ │ -
240 "Found '" + std::string{input[pos]} +
│ │ │ │ -
241 "' in composite value where comma was expected: " + std::data(input)};
│ │ │ │ +
240 "Found '" + std::string{input[pos]} +
│ │ │ │ +
241 "' in composite value where comma was expected: " + std::data(input)};
│ │ │ │
242 }
│ │ │ │
243 else
│ │ │ │
244 {
│ │ │ │ -
245 if (input[pos] == ',')
│ │ │ │ +
245 if (input[pos] == ',')
│ │ │ │
246 throw conversion_error{
│ │ │ │
247 "Composite value contained more fields than the expected " +
│ │ │ │ -
248 to_string(last_field) + ": " + std::data(input)};
│ │ │ │ -
249 if (input[pos] != ')' and input[pos] != ']')
│ │ │ │ +
248 to_string(last_field) + ": " + std::data(input)};
│ │ │ │ +
249 if (input[pos] != ')' and input[pos] != ']')
│ │ │ │
250 throw conversion_error{
│ │ │ │
251 "Composite value has unexpected characters where closing parenthesis "
│ │ │ │
252 "was expected: " +
│ │ │ │ -
253 std::string{input}};
│ │ │ │ -
254 if (next != std::size(input))
│ │ │ │ +
253 std::string{input}};
│ │ │ │ +
254 if (next != std::size(input))
│ │ │ │
255 throw conversion_error{
│ │ │ │
256 "Composite value has unexpected text after closing parenthesis: " +
│ │ │ │ -
257 std::string{input}};
│ │ │ │ +
257 std::string{input}};
│ │ │ │
258 }
│ │ │ │
259
│ │ │ │
260 pos = next;
│ │ │ │
261 ++index;
│ │ │ │
262}
│ │ │ │
│ │ │ │
263
│ │ │ │
264
│ │ │ │
266template<typename T>
│ │ │ │ -
267using composite_field_parser = void (*)(
│ │ │ │ -
268 std::size_t &index, std::string_view input, std::size_t &pos, T &field,
│ │ │ │ -
269 std::size_t last_field);
│ │ │ │ + │ │ │ │ +
268 std::size_t &index, std::string_view input, std::size_t &pos, T &field,
│ │ │ │ +
269 std::size_t last_field);
│ │ │ │
270
│ │ │ │
271
│ │ │ │
273template<typename T>
│ │ │ │
│ │ │ │ - │ │ │ │ + │ │ │ │
275{
│ │ │ │ -
276 switch (enc)
│ │ │ │ +
276 switch (enc)
│ │ │ │
277 {
│ │ │ │
278 case encoding_group::MONOBYTE:
│ │ │ │ -
279 return parse_composite_field<encoding_group::MONOBYTE>;
│ │ │ │ + │ │ │ │
280 case encoding_group::BIG5:
│ │ │ │ -
281 return parse_composite_field<encoding_group::BIG5>;
│ │ │ │ + │ │ │ │
282 case encoding_group::EUC_CN:
│ │ │ │ -
283 return parse_composite_field<encoding_group::EUC_CN>;
│ │ │ │ + │ │ │ │
284 case encoding_group::EUC_JP:
│ │ │ │ -
285 return parse_composite_field<encoding_group::EUC_JP>;
│ │ │ │ + │ │ │ │
286 case encoding_group::EUC_KR:
│ │ │ │ -
287 return parse_composite_field<encoding_group::EUC_KR>;
│ │ │ │ + │ │ │ │
288 case encoding_group::EUC_TW:
│ │ │ │ -
289 return parse_composite_field<encoding_group::EUC_TW>;
│ │ │ │ + │ │ │ │
290 case encoding_group::GB18030:
│ │ │ │ -
291 return parse_composite_field<encoding_group::GB18030>;
│ │ │ │ -
292 case encoding_group::GBK: return parse_composite_field<encoding_group::GBK>;
│ │ │ │ + │ │ │ │ +
292 case encoding_group::GBK: return parse_composite_field<encoding_group::GBK>;
│ │ │ │
293 case encoding_group::JOHAB:
│ │ │ │ -
294 return parse_composite_field<encoding_group::JOHAB>;
│ │ │ │ + │ │ │ │
295 case encoding_group::MULE_INTERNAL:
│ │ │ │ -
296 return parse_composite_field<encoding_group::MULE_INTERNAL>;
│ │ │ │ + │ │ │ │
297 case encoding_group::SJIS:
│ │ │ │ -
298 return parse_composite_field<encoding_group::SJIS>;
│ │ │ │ -
299 case encoding_group::UHC: return parse_composite_field<encoding_group::UHC>;
│ │ │ │ + │ │ │ │ +
299 case encoding_group::UHC: return parse_composite_field<encoding_group::UHC>;
│ │ │ │
300 case encoding_group::UTF8:
│ │ │ │ -
301 return parse_composite_field<encoding_group::UTF8>;
│ │ │ │ + │ │ │ │
302 }
│ │ │ │ -
303 throw internal_error{concat("Unexpected encoding group code: ", enc, ".")};
│ │ │ │ +
303 throw internal_error{concat("Unexpected encoding group code: ", enc, ".")};
│ │ │ │
304}
│ │ │ │
│ │ │ │
305
│ │ │ │
306
│ │ │ │
308template<typename T>
│ │ │ │
│ │ │ │ -
309inline std::size_t size_composite_field_buffer(T const &field)
│ │ │ │ +
309inline std::size_t size_composite_field_buffer(T const &field)
│ │ │ │
310{
│ │ │ │ -
311 if constexpr (is_unquoted_safe<T>)
│ │ │ │ +
311 if constexpr (is_unquoted_safe<T>)
│ │ │ │
312 {
│ │ │ │
313 // Safe to copy, without quotes or escaping. Drop the terminating zero.
│ │ │ │
314 return size_buffer(field) - 1;
│ │ │ │
315 }
│ │ │ │
316 else
│ │ │ │
317 {
│ │ │ │
318 // + Opening quote.
│ │ │ │ @@ -395,37 +395,37 @@ │ │ │ │
324 return 1 + 2 * (size_buffer(field) - 1) + 1;
│ │ │ │
325 }
│ │ │ │
326}
│ │ │ │
│ │ │ │
327
│ │ │ │
328
│ │ │ │
329template<typename T>
│ │ │ │ -
330inline void write_composite_field(char *&pos, char *end, T const &field)
│ │ │ │ +
330inline void write_composite_field(char *&pos, char *end, T const &field)
│ │ │ │
331{
│ │ │ │ -
332 if constexpr (is_unquoted_safe<T>)
│ │ │ │ +
332 if constexpr (is_unquoted_safe<T>)
│ │ │ │
333 {
│ │ │ │
334 // No need for quoting or escaping. Convert it straight into its final
│ │ │ │
335 // place in the buffer, and "backspace" the trailing zero.
│ │ │ │
336 pos = string_traits<T>::into_buf(pos, end, field) - 1;
│ │ │ │
337 }
│ │ │ │
338 else
│ │ │ │
339 {
│ │ │ │
340 // The field may need escaping, which means we need an intermediate buffer.
│ │ │ │
341 // To avoid allocating that at run time, we use the end of the buffer that
│ │ │ │
342 // we have.
│ │ │ │ -
343 auto const budget{size_buffer(field)};
│ │ │ │ +
343 auto const budget{size_buffer(field)};
│ │ │ │
344 *pos++ = '"';
│ │ │ │
345
│ │ │ │
346 // Now escape buf into its final position.
│ │ │ │ -
347 for (char const c : string_traits<T>::to_buf(end - budget, end, field))
│ │ │ │ +
347 for (char const c : string_traits<T>::to_buf(end - budget, end, field))
│ │ │ │
348 {
│ │ │ │ -
349 if ((c == '"') or (c == '\\'))
│ │ │ │ +
349 if ((c == '"') or (c == '\\'))
│ │ │ │
350 *pos++ = '\\';
│ │ │ │
351
│ │ │ │ -
352 *pos++ = c;
│ │ │ │ +
352 *pos++ = c;
│ │ │ │
353 }
│ │ │ │
354
│ │ │ │
355 *pos++ = '"';
│ │ │ │
356 }
│ │ │ │
357
│ │ │ │
358 *pos++ = ',';
│ │ │ │
359}
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -13,275 +13,275 @@ │ │ │ │ │ 7# include "pqxx/strconv.hxx" │ │ │ │ │ 8 │ │ │ │ │ 9namespace _p_q_x_x_:_:_i_n_t_e_r_n_a_l │ │ │ │ │ 10{ │ │ │ │ │ 11// Find the end of a double-quoted string. │ │ │ │ │ 19template │ │ │ │ │ _2_0inline std::size_t _s_c_a_n___d_o_u_b_l_e___q_u_o_t_e_d___s_t_r_i_n_g( │ │ │ │ │ -21 char const input[], std::size_t size, std::size_t pos) │ │ │ │ │ +21 char const _i_n_p_u_t[], std::size_t size, std::size_t pos) │ │ │ │ │ 22{ │ │ │ │ │ 23 // TODO: find_char<'"', '\\'>(). │ │ │ │ │ -24 using scanner = _g_l_y_p_h___s_c_a_n_n_e_r_<_E_N_C_>; │ │ │ │ │ -25 auto next{scanner::call(input, size, pos)}; │ │ │ │ │ +24 using _s_c_a_n_n_e_r = _g_l_y_p_h___s_c_a_n_n_e_r_<_E_N_C_>; │ │ │ │ │ +25 auto next{scanner::call(_i_n_p_u_t, size, pos)}; │ │ │ │ │ 26 PQXX_ASSUME(next > pos); │ │ │ │ │ -27 bool at_quote{false}; │ │ │ │ │ +27 bool _a_t___q_u_o_t_e{false}; │ │ │ │ │ 28 pos = next; │ │ │ │ │ -29 next = scanner::call(input, size, pos); │ │ │ │ │ +29 next = scanner::call(_i_n_p_u_t, size, pos); │ │ │ │ │ 30 PQXX_ASSUME(next > pos); │ │ │ │ │ 31 while (pos < size) │ │ │ │ │ 32 { │ │ │ │ │ -33 if (at_quote) │ │ │ │ │ +33 if (_a_t___q_u_o_t_e) │ │ │ │ │ 34 { │ │ │ │ │ -35 if (next - pos == 1 and input[pos] == '"') │ │ │ │ │ +35 if (next - pos == 1 _a_n_d _i_n_p_u_t[pos] == '"') │ │ │ │ │ 36 { │ │ │ │ │ 37 // We just read a pair of double quotes. Carry on. │ │ │ │ │ -38 at_quote = false; │ │ │ │ │ +38 _a_t___q_u_o_t_e = false; │ │ │ │ │ 39 } │ │ │ │ │ 40 else │ │ │ │ │ 41 { │ │ │ │ │ 42 // We just read one double quote, and now we're at a character that's │ │ │ │ │ 43 // not a second double quote. Ergo, that last character was the │ │ │ │ │ 44 // closing double quote and this is the position right after it. │ │ │ │ │ 45 return pos; │ │ │ │ │ 46 } │ │ │ │ │ 47 } │ │ │ │ │ 48 else if (next - pos == 1) │ │ │ │ │ 49 { │ │ │ │ │ -50 switch (input[pos]) │ │ │ │ │ +50 switch (_i_n_p_u_t[pos]) │ │ │ │ │ 51 { │ │ │ │ │ 52 case '\\': │ │ │ │ │ 53 // Backslash escape. Skip ahead by one more character. │ │ │ │ │ 54 pos = next; │ │ │ │ │ -55 next = scanner::call(input, size, pos); │ │ │ │ │ +55 next = scanner::call(_i_n_p_u_t, size, pos); │ │ │ │ │ 56 PQXX_ASSUME(next > pos); │ │ │ │ │ 57 break; │ │ │ │ │ 58 │ │ │ │ │ 59 case '"': │ │ │ │ │ 60 // This is either the closing double quote, or the first of a pair of │ │ │ │ │ 61 // double quotes. │ │ │ │ │ -62 at_quote = true; │ │ │ │ │ +62 _a_t___q_u_o_t_e = true; │ │ │ │ │ 63 break; │ │ │ │ │ 64 } │ │ │ │ │ 65 } │ │ │ │ │ 66 else │ │ │ │ │ 67 { │ │ │ │ │ 68 // Multibyte character. Carry on. │ │ │ │ │ 69 } │ │ │ │ │ 70 pos = next; │ │ │ │ │ -71 next = scanner::call(input, size, pos); │ │ │ │ │ +71 next = scanner::call(_i_n_p_u_t, size, pos); │ │ │ │ │ 72 PQXX_ASSUME(next > pos); │ │ │ │ │ 73 } │ │ │ │ │ -74 if (not at_quote) │ │ │ │ │ +74 if (_n_o_t _a_t___q_u_o_t_e) │ │ │ │ │ 75 throw _a_r_g_u_m_e_n_t___e_r_r_o_r{ │ │ │ │ │ -76 "Missing closing double-quote: " + std::string{input}}; │ │ │ │ │ +76 "Missing closing double-quote: " + std::string{_i_n_p_u_t}}; │ │ │ │ │ 77 return pos; │ │ │ │ │ 78} │ │ │ │ │ 79 │ │ │ │ │ 80 │ │ │ │ │ 81// TODO: Needs version with caller-supplied buffer. │ │ │ │ │ 83template │ │ │ │ │ _8_4inline std::string _p_a_r_s_e___d_o_u_b_l_e___q_u_o_t_e_d___s_t_r_i_n_g( │ │ │ │ │ -85 char const input[], std::size_t end, std::size_t pos) │ │ │ │ │ +85 char const _i_n_p_u_t[], std::size_t end, std::size_t pos) │ │ │ │ │ 86{ │ │ │ │ │ -87 std::string output; │ │ │ │ │ +87 std::string _o_u_t_p_u_t; │ │ │ │ │ 88 // Maximum output size is same as the input size, minus the opening and │ │ │ │ │ 89 // closing quotes. Or in the extreme opposite case, the real number could be │ │ │ │ │ 90 // half that. Usually it'll be a pretty close estimate. │ │ │ │ │ -91 output.reserve(std::size_t(end - pos - 2)); │ │ │ │ │ +91 _o_u_t_p_u_t.reserve(std::size_t(end - pos - 2)); │ │ │ │ │ 92 │ │ │ │ │ 93 // TODO: Use find_char<...>(). │ │ │ │ │ -94 using scanner = _g_l_y_p_h___s_c_a_n_n_e_r_<_E_N_C_>; │ │ │ │ │ -95 auto here{scanner::call(input, end, pos)}, │ │ │ │ │ -96 next{scanner::call(input, end, here)}; │ │ │ │ │ -97 PQXX_ASSUME(here > pos); │ │ │ │ │ -98 PQXX_ASSUME(next > here); │ │ │ │ │ -99 while (here < end - 1) │ │ │ │ │ +94 using _s_c_a_n_n_e_r = _g_l_y_p_h___s_c_a_n_n_e_r_<_E_N_C_>; │ │ │ │ │ +95 auto _h_e_r_e{scanner::call(_i_n_p_u_t, end, pos)}, │ │ │ │ │ +96 next{scanner::call(_i_n_p_u_t, end, _h_e_r_e)}; │ │ │ │ │ +97 PQXX_ASSUME(_h_e_r_e > pos); │ │ │ │ │ +98 PQXX_ASSUME(next > _h_e_r_e); │ │ │ │ │ +99 while (_h_e_r_e < end - 1) │ │ │ │ │ 100 { │ │ │ │ │ 101 // A backslash here is always an escape. So is a double-quote, since we're │ │ │ │ │ 102 // inside the double-quoted string. In either case, we can just ignore the │ │ │ │ │ 103 // escape character and use the next character. This is the one redeeming │ │ │ │ │ 104 // feature of SQL's escaping system. │ │ │ │ │ -105 if ((next - here == 1) and (input[here] == '\\' or input[here] == '"')) │ │ │ │ │ +105 if ((next - _h_e_r_e == 1) _a_n_d (_i_n_p_u_t[_h_e_r_e] == '\\' _o_r _i_n_p_u_t[_h_e_r_e] == '"')) │ │ │ │ │ 106 { │ │ │ │ │ 107 // Skip escape. │ │ │ │ │ -108 here = next; │ │ │ │ │ -109 next = scanner::call(input, end, here); │ │ │ │ │ -110 PQXX_ASSUME(next > here); │ │ │ │ │ +108 _h_e_r_e = next; │ │ │ │ │ +109 next = scanner::call(_i_n_p_u_t, end, _h_e_r_e); │ │ │ │ │ +110 PQXX_ASSUME(next > _h_e_r_e); │ │ │ │ │ 111 } │ │ │ │ │ -112 output.append(input + here, input + next); │ │ │ │ │ -113 here = next; │ │ │ │ │ -114 next = scanner::call(input, end, here); │ │ │ │ │ -115 PQXX_ASSUME(next > here); │ │ │ │ │ +112 _o_u_t_p_u_t.append(_i_n_p_u_t + _h_e_r_e, _i_n_p_u_t + next); │ │ │ │ │ +113 _h_e_r_e = next; │ │ │ │ │ +114 next = scanner::call(_i_n_p_u_t, end, _h_e_r_e); │ │ │ │ │ +115 PQXX_ASSUME(next > _h_e_r_e); │ │ │ │ │ 116 } │ │ │ │ │ -117 return output; │ │ │ │ │ +117 return _o_u_t_p_u_t; │ │ │ │ │ 118} │ │ │ │ │ 119 │ │ │ │ │ 120 │ │ │ │ │ 122 │ │ │ │ │ -129template │ │ │ │ │ +129template │ │ │ │ │ 130inline std::size_t │ │ │ │ │ -_1_3_1_s_c_a_n___u_n_q_u_o_t_e_d___s_t_r_i_n_g(char const input[], std::size_t size, std::size_t pos) │ │ │ │ │ +_1_3_1_s_c_a_n___u_n_q_u_o_t_e_d___s_t_r_i_n_g(char const _i_n_p_u_t[], std::size_t size, std::size_t pos) │ │ │ │ │ 132{ │ │ │ │ │ -133 using scanner = _g_l_y_p_h___s_c_a_n_n_e_r_<_E_N_C_>; │ │ │ │ │ -134 auto next{scanner::call(input, size, pos)}; │ │ │ │ │ +133 using _s_c_a_n_n_e_r = _g_l_y_p_h___s_c_a_n_n_e_r_<_E_N_C_>; │ │ │ │ │ +134 auto next{scanner::call(_i_n_p_u_t, size, pos)}; │ │ │ │ │ 135 PQXX_ASSUME(next > pos); │ │ │ │ │ -136 while ((pos < size) and ((next - pos) > 1 or ((input[pos] != STOP) and │ │ │ │ │ +136 while ((pos < size) _a_n_d ((next - pos) > 1 _o_r ((_i_n_p_u_t[pos] != _S_T_O_P) _a_n_d │ │ │ │ │ ...))) │ │ │ │ │ 137 { │ │ │ │ │ 138 pos = next; │ │ │ │ │ -139 next = scanner::call(input, size, pos); │ │ │ │ │ +139 next = scanner::call(_i_n_p_u_t, size, pos); │ │ │ │ │ 140 PQXX_ASSUME(next > pos); │ │ │ │ │ 141 } │ │ │ │ │ 142 return pos; │ │ │ │ │ 143} │ │ │ │ │ 144 │ │ │ │ │ 145 │ │ │ │ │ 147template │ │ │ │ │ 148inline std::string_view │ │ │ │ │ -_1_4_9_p_a_r_s_e___u_n_q_u_o_t_e_d___s_t_r_i_n_g(char const input[], std::size_t end, std::size_t pos) │ │ │ │ │ +_1_4_9_p_a_r_s_e___u_n_q_u_o_t_e_d___s_t_r_i_n_g(char const _i_n_p_u_t[], std::size_t end, std::size_t pos) │ │ │ │ │ 150{ │ │ │ │ │ -151 return {&input[pos], end - pos}; │ │ │ │ │ +151 return {&_i_n_p_u_t[pos], end - pos}; │ │ │ │ │ 152} │ │ │ │ │ 153 │ │ │ │ │ 154 │ │ │ │ │ 156 │ │ │ │ │ 179template │ │ │ │ │ _1_8_0inline void _p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d( │ │ │ │ │ -181 std::size_t &index, std::string_view input, std::size_t &pos, T &_f_i_e_l_d, │ │ │ │ │ -182 std::size_t last_field) │ │ │ │ │ +181 std::size_t &index, std::string_view _i_n_p_u_t, std::size_t &pos, _T &_f_i_e_l_d, │ │ │ │ │ +182 std::size_t _l_a_s_t___f_i_e_l_d) │ │ │ │ │ 183{ │ │ │ │ │ -184 assert(index <= last_field); │ │ │ │ │ -185 auto next{_g_l_y_p_h___s_c_a_n_n_e_r_<_E_N_C_>_:_:_c_a_l_l(std::data(input), std::size(input), │ │ │ │ │ +184 _a_s_s_e_r_t(index <= _l_a_s_t___f_i_e_l_d); │ │ │ │ │ +185 auto next{_g_l_y_p_h___s_c_a_n_n_e_r_<_E_N_C_>_:_:_c_a_l_l(std::data(_i_n_p_u_t), std::size(_i_n_p_u_t), │ │ │ │ │ pos)}; │ │ │ │ │ 186 PQXX_ASSUME(next > pos); │ │ │ │ │ 187 if ((next - pos) != 1) │ │ │ │ │ 188 throw _c_o_n_v_e_r_s_i_o_n___e_r_r_o_r{"Non-ASCII character in composite-type syntax."}; │ │ │ │ │ 189 │ │ │ │ │ 190 // Expect a field. │ │ │ │ │ -191 switch (input[pos]) │ │ │ │ │ +191 switch (_i_n_p_u_t[pos]) │ │ │ │ │ 192 { │ │ │ │ │ 193 case ',': │ │ │ │ │ 194 case ')': │ │ │ │ │ 195 case ']': │ │ │ │ │ 196 // The field is empty, i.e, null. │ │ │ │ │ 197 if constexpr (_n_u_l_l_n_e_s_s_<_T_>_:_:_h_a_s___n_u_l_l) │ │ │ │ │ 198 _f_i_e_l_d = _n_u_l_l_n_e_s_s_<_T_>_:_:_n_u_l_l(); │ │ │ │ │ 199 else │ │ │ │ │ 200 throw _c_o_n_v_e_r_s_i_o_n___e_r_r_o_r{ │ │ │ │ │ 201 "Can't read composite field " + _t_o___s_t_r_i_n_g(index) + ": C++ type " + │ │ │ │ │ -202 type_name + " does not support nulls."}; │ │ │ │ │ +202 _t_y_p_e___n_a_m_e_<_T_> + " does not support nulls."}; │ │ │ │ │ 203 break; │ │ │ │ │ 204 │ │ │ │ │ 205 case '"': { │ │ │ │ │ -206 auto const stop{ │ │ │ │ │ -207 scan_double_quoted_string(std::data(input), std::size(input), pos)}; │ │ │ │ │ -208 PQXX_ASSUME(stop > pos); │ │ │ │ │ +206 auto const _s_t_o_p{ │ │ │ │ │ +207 _s_c_a_n___d_o_u_b_l_e___q_u_o_t_e_d___s_t_r_i_n_g_<_E_N_C_>(std::data(_i_n_p_u_t), std::size(_i_n_p_u_t), pos)}; │ │ │ │ │ +208 PQXX_ASSUME(_s_t_o_p > pos); │ │ │ │ │ 209 auto const text{ │ │ │ │ │ -210 parse_double_quoted_string(std::data(input), stop, pos)}; │ │ │ │ │ -211 _f_i_e_l_d = from_string(text); │ │ │ │ │ -212 pos = stop; │ │ │ │ │ +210 _p_a_r_s_e___d_o_u_b_l_e___q_u_o_t_e_d___s_t_r_i_n_g_<_E_N_C_>(std::data(_i_n_p_u_t), _s_t_o_p, pos)}; │ │ │ │ │ +211 _f_i_e_l_d = _f_r_o_m___s_t_r_i_n_g_<_T_>(text); │ │ │ │ │ +212 pos = _s_t_o_p; │ │ │ │ │ 213 } │ │ │ │ │ 214 break; │ │ │ │ │ 215 │ │ │ │ │ 216 default: { │ │ │ │ │ -217 auto const stop{scan_unquoted_string( │ │ │ │ │ -218 std::data(input), std::size(input), pos)}; │ │ │ │ │ -219 PQXX_ASSUME(stop >= pos); │ │ │ │ │ +217 auto const _s_t_o_p{_s_c_a_n___u_n_q_u_o_t_e_d___s_t_r_i_n_g_<_E_N_C_,_ _'_,_'_,_ _'_)_'_,_ _'_]_'_>( │ │ │ │ │ +218 std::data(_i_n_p_u_t), std::size(_i_n_p_u_t), pos)}; │ │ │ │ │ +219 PQXX_ASSUME(_s_t_o_p >= pos); │ │ │ │ │ 220 _f_i_e_l_d = │ │ │ │ │ -221 from_string(std::string_view{std::data(input) + pos, stop - pos}); │ │ │ │ │ -222 pos = stop; │ │ │ │ │ +221 _f_r_o_m___s_t_r_i_n_g_<_T_>(std::string_view{std::data(_i_n_p_u_t) + pos, _s_t_o_p - pos}); │ │ │ │ │ +222 pos = _s_t_o_p; │ │ │ │ │ 223 } │ │ │ │ │ 224 break; │ │ │ │ │ 225 } │ │ │ │ │ 226 │ │ │ │ │ 227 // Expect a comma or a closing parenthesis. │ │ │ │ │ -228 next = _g_l_y_p_h___s_c_a_n_n_e_r_<_E_N_C_>_:_:_c_a_l_l(std::data(input), std::size(input), pos); │ │ │ │ │ +228 next = _g_l_y_p_h___s_c_a_n_n_e_r_<_E_N_C_>_:_:_c_a_l_l(std::data(_i_n_p_u_t), std::size(_i_n_p_u_t), pos); │ │ │ │ │ 229 PQXX_ASSUME(next > pos); │ │ │ │ │ 230 │ │ │ │ │ 231 if ((next - pos) != 1) │ │ │ │ │ 232 throw _c_o_n_v_e_r_s_i_o_n___e_r_r_o_r{ │ │ │ │ │ 233 "Unexpected non-ASCII character after composite field: " + │ │ │ │ │ -234 std::string{input}}; │ │ │ │ │ +234 std::string{_i_n_p_u_t}}; │ │ │ │ │ 235 │ │ │ │ │ -236 if (index < last_field) │ │ │ │ │ +236 if (index < _l_a_s_t___f_i_e_l_d) │ │ │ │ │ 237 { │ │ │ │ │ -238 if (input[pos] != ',') │ │ │ │ │ +238 if (_i_n_p_u_t[pos] != ',') │ │ │ │ │ 239 throw _c_o_n_v_e_r_s_i_o_n___e_r_r_o_r{ │ │ │ │ │ -240 "Found '" + std::string{input[pos]} + │ │ │ │ │ -241 "' in composite value where comma was expected: " + std::data(input)}; │ │ │ │ │ +240 "Found '" + std::string{_i_n_p_u_t[pos]} + │ │ │ │ │ +241 "' in composite value where comma was expected: " + std::data(_i_n_p_u_t)}; │ │ │ │ │ 242 } │ │ │ │ │ 243 else │ │ │ │ │ 244 { │ │ │ │ │ -245 if (input[pos] == ',') │ │ │ │ │ +245 if (_i_n_p_u_t[pos] == ',') │ │ │ │ │ 246 throw _c_o_n_v_e_r_s_i_o_n___e_r_r_o_r{ │ │ │ │ │ 247 "Composite value contained more fields than the expected " + │ │ │ │ │ -248 _t_o___s_t_r_i_n_g(last_field) + ": " + std::data(input)}; │ │ │ │ │ -249 if (input[pos] != ')' and input[pos] != ']') │ │ │ │ │ +248 _t_o___s_t_r_i_n_g(_l_a_s_t___f_i_e_l_d) + ": " + std::data(_i_n_p_u_t)}; │ │ │ │ │ +249 if (_i_n_p_u_t[pos] != ')' _a_n_d _i_n_p_u_t[pos] != ']') │ │ │ │ │ 250 throw _c_o_n_v_e_r_s_i_o_n___e_r_r_o_r{ │ │ │ │ │ 251 "Composite value has unexpected characters where closing parenthesis " │ │ │ │ │ 252 "was expected: " + │ │ │ │ │ -253 std::string{input}}; │ │ │ │ │ -254 if (next != std::size(input)) │ │ │ │ │ +253 std::string{_i_n_p_u_t}}; │ │ │ │ │ +254 if (next != std::size(_i_n_p_u_t)) │ │ │ │ │ 255 throw _c_o_n_v_e_r_s_i_o_n___e_r_r_o_r{ │ │ │ │ │ 256 "Composite value has unexpected text after closing parenthesis: " + │ │ │ │ │ -257 std::string{input}}; │ │ │ │ │ +257 std::string{_i_n_p_u_t}}; │ │ │ │ │ 258 } │ │ │ │ │ 259 │ │ │ │ │ 260 pos = next; │ │ │ │ │ 261 ++index; │ │ │ │ │ 262} │ │ │ │ │ 263 │ │ │ │ │ 264 │ │ │ │ │ 266template │ │ │ │ │ -_2_6_7using _c_o_m_p_o_s_i_t_e___f_i_e_l_d___p_a_r_s_e_r = void (*)( │ │ │ │ │ -268 std::size_t &index, std::string_view input, std::size_t &pos, T &_f_i_e_l_d, │ │ │ │ │ -269 std::size_t last_field); │ │ │ │ │ +_2_6_7using _c_o_m_p_o_s_i_t_e___f_i_e_l_d___p_a_r_s_e_r = _v_o_i_d (*)( │ │ │ │ │ +268 std::size_t &index, std::string_view _i_n_p_u_t, std::size_t &pos, _T &_f_i_e_l_d, │ │ │ │ │ +269 std::size_t _l_a_s_t___f_i_e_l_d); │ │ │ │ │ 270 │ │ │ │ │ 271 │ │ │ │ │ 273template │ │ │ │ │ _2_7_4_c_o_m_p_o_s_i_t_e___f_i_e_l_d___p_a_r_s_e_r_<_T_> _s_p_e_c_i_a_l_i_z_e___p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d(encoding_group │ │ │ │ │ -enc) │ │ │ │ │ +_e_n_c) │ │ │ │ │ 275{ │ │ │ │ │ -276 switch (enc) │ │ │ │ │ +276 switch (_e_n_c) │ │ │ │ │ 277 { │ │ │ │ │ 278 case encoding_group::MONOBYTE: │ │ │ │ │ -279 return parse_composite_field; │ │ │ │ │ +279 return _p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d_<_e_n_c_o_d_i_n_g___g_r_o_u_p_:_:_M_O_N_O_B_Y_T_E_>; │ │ │ │ │ 280 case encoding_group::BIG5: │ │ │ │ │ -281 return parse_composite_field; │ │ │ │ │ +281 return _p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d_<_e_n_c_o_d_i_n_g___g_r_o_u_p_:_:_B_I_G_5_>; │ │ │ │ │ 282 case encoding_group::EUC_CN: │ │ │ │ │ -283 return parse_composite_field; │ │ │ │ │ +283 return _p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d_<_e_n_c_o_d_i_n_g___g_r_o_u_p_:_:_E_U_C___C_N_>; │ │ │ │ │ 284 case encoding_group::EUC_JP: │ │ │ │ │ -285 return parse_composite_field; │ │ │ │ │ +285 return _p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d_<_e_n_c_o_d_i_n_g___g_r_o_u_p_:_:_E_U_C___J_P_>; │ │ │ │ │ 286 case encoding_group::EUC_KR: │ │ │ │ │ -287 return parse_composite_field; │ │ │ │ │ +287 return _p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d_<_e_n_c_o_d_i_n_g___g_r_o_u_p_:_:_E_U_C___K_R_>; │ │ │ │ │ 288 case encoding_group::EUC_TW: │ │ │ │ │ -289 return parse_composite_field; │ │ │ │ │ +289 return _p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d_<_e_n_c_o_d_i_n_g___g_r_o_u_p_:_:_E_U_C___T_W_>; │ │ │ │ │ 290 case encoding_group::GB18030: │ │ │ │ │ -291 return parse_composite_field; │ │ │ │ │ -292 case encoding_group::GBK: return parse_composite_field; │ │ │ │ │ +291 return _p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d_<_e_n_c_o_d_i_n_g___g_r_o_u_p_:_:_G_B_1_8_0_3_0_>; │ │ │ │ │ +292 case encoding_group::GBK: return _p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d_<_e_n_c_o_d_i_n_g___g_r_o_u_p_:_: │ │ │ │ │ +_G_B_K_>; │ │ │ │ │ 293 case encoding_group::JOHAB: │ │ │ │ │ -294 return parse_composite_field; │ │ │ │ │ +294 return _p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d_<_e_n_c_o_d_i_n_g___g_r_o_u_p_:_:_J_O_H_A_B_>; │ │ │ │ │ 295 case encoding_group::MULE_INTERNAL: │ │ │ │ │ -296 return parse_composite_field; │ │ │ │ │ +296 return _p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d_<_e_n_c_o_d_i_n_g___g_r_o_u_p_:_:_M_U_L_E___I_N_T_E_R_N_A_L_>; │ │ │ │ │ 297 case encoding_group::SJIS: │ │ │ │ │ -298 return parse_composite_field; │ │ │ │ │ -299 case encoding_group::UHC: return parse_composite_field; │ │ │ │ │ +298 return _p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d_<_e_n_c_o_d_i_n_g___g_r_o_u_p_:_:_S_J_I_S_>; │ │ │ │ │ +299 case encoding_group::UHC: return _p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d_<_e_n_c_o_d_i_n_g___g_r_o_u_p_:_: │ │ │ │ │ +_U_H_C_>; │ │ │ │ │ 300 case encoding_group::UTF8: │ │ │ │ │ -301 return parse_composite_field; │ │ │ │ │ +301 return _p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d_<_e_n_c_o_d_i_n_g___g_r_o_u_p_:_:_U_T_F_8_>; │ │ │ │ │ 302 } │ │ │ │ │ -303 throw _i_n_t_e_r_n_a_l___e_r_r_o_r{_c_o_n_c_a_t("Unexpected encoding group code: ", enc, ".")}; │ │ │ │ │ +303 throw _i_n_t_e_r_n_a_l___e_r_r_o_r{_c_o_n_c_a_t("Unexpected encoding group code: ", _e_n_c, ".")}; │ │ │ │ │ 304} │ │ │ │ │ 305 │ │ │ │ │ 306 │ │ │ │ │ 308template │ │ │ │ │ -_3_0_9inline std::size_t _s_i_z_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d___b_u_f_f_e_r(T const &_f_i_e_l_d) │ │ │ │ │ +_3_0_9inline std::size_t _s_i_z_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d___b_u_f_f_e_r(_T const &_f_i_e_l_d) │ │ │ │ │ 310{ │ │ │ │ │ -311 if constexpr (is_unquoted_safe) │ │ │ │ │ +311 if constexpr (_i_s___u_n_q_u_o_t_e_d___s_a_f_e_<_T_>) │ │ │ │ │ 312 { │ │ │ │ │ 313 // Safe to copy, without quotes or escaping. Drop the terminating zero. │ │ │ │ │ 314 return size_buffer(_f_i_e_l_d) - 1; │ │ │ │ │ 315 } │ │ │ │ │ 316 else │ │ │ │ │ 317 { │ │ │ │ │ 318 // + Opening quote. │ │ │ │ │ @@ -292,37 +292,37 @@ │ │ │ │ │ 323 // + Closing quote. │ │ │ │ │ 324 return 1 + 2 * (size_buffer(_f_i_e_l_d) - 1) + 1; │ │ │ │ │ 325 } │ │ │ │ │ 326} │ │ │ │ │ 327 │ │ │ │ │ 328 │ │ │ │ │ 329template │ │ │ │ │ -330inline void write_composite_field(char *&pos, char *end, T const &_f_i_e_l_d) │ │ │ │ │ +330inline void write_composite_field(char *&pos, char *end, _T const &_f_i_e_l_d) │ │ │ │ │ 331{ │ │ │ │ │ -332 if constexpr (is_unquoted_safe) │ │ │ │ │ +332 if constexpr (_i_s___u_n_q_u_o_t_e_d___s_a_f_e_<_T_>) │ │ │ │ │ 333 { │ │ │ │ │ 334 // No need for quoting or escaping. Convert it straight into its final │ │ │ │ │ 335 // place in the buffer, and "backspace" the trailing zero. │ │ │ │ │ 336 pos = _s_t_r_i_n_g___t_r_a_i_t_s_<_T_>_:_:_i_n_t_o___b_u_f(pos, end, _f_i_e_l_d) - 1; │ │ │ │ │ 337 } │ │ │ │ │ 338 else │ │ │ │ │ 339 { │ │ │ │ │ 340 // The field may need escaping, which means we need an intermediate buffer. │ │ │ │ │ 341 // To avoid allocating that at run time, we use the end of the buffer that │ │ │ │ │ 342 // we have. │ │ │ │ │ -343 auto const budget{size_buffer(field)}; │ │ │ │ │ +343 auto const _b_u_d_g_e_t{size_buffer(field)}; │ │ │ │ │ 344 *pos++ = '"'; │ │ │ │ │ 345 │ │ │ │ │ 346 // Now escape buf into its final position. │ │ │ │ │ -347 for (char const c : string_traits::to_buf(end - budget, end, field)) │ │ │ │ │ +347 for (char const _c : string_traits<_T>::to_buf(end - _b_u_d_g_e_t, end, field)) │ │ │ │ │ 348 { │ │ │ │ │ -349 if ((c == '"') or (c == '\\')) │ │ │ │ │ +349 if ((_c == '"') _o_r (_c == '\\')) │ │ │ │ │ 350 *pos++ = '\\'; │ │ │ │ │ 351 │ │ │ │ │ -352 *pos++ = c; │ │ │ │ │ +352 *pos++ = _c; │ │ │ │ │ 353 } │ │ │ │ │ 354 │ │ │ │ │ 355 *pos++ = '"'; │ │ │ │ │ 356 } │ │ │ │ │ 357 │ │ │ │ │ 358 *pos++ = ','; │ │ │ │ │ 359} │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/array_8hxx_source.html │ │ │ │ @@ -405,28 +405,28 @@ │ │ │ │
380 // string might not contain any special characters. So it's
│ │ │ │
381 // tempting to check, and try to use a string_view and avoid a
│ │ │ │
382 // useless copy step. But. Even besides the branch prediction
│ │ │ │
383 // risk, the very fact that the back-end chose to quote the string
│ │ │ │
384 // indicates that there is some kind of special character in there.
│ │ │ │
385 // So in practice, this optimisation would only apply if the only
│ │ │ │
386 // special characters in the string were commas.
│ │ │ │ -
387 end = pqxx::internal::scan_double_quoted_string<ENC>(
│ │ │ │ + │ │ │ │
388 std::data(data), std::size(data), here);
│ │ │ │
389 // TODO: scan_double_quoted_string() with reusable buffer.
│ │ │ │
390 std::string const buf{
│ │ │ │ -
391 pqxx::internal::parse_double_quoted_string<ENC>(
│ │ │ │ + │ │ │ │
392 std::data(data), end, here)};
│ │ │ │
393 m_elts.emplace_back(from_string<ELEMENT>(buf));
│ │ │ │
394 }
│ │ │ │
395 break;
│ │ │ │
396 default: {
│ │ │ │
397 // Unquoted string. An unquoted string is always literal, no
│ │ │ │
398 // escaping or encoding, so we don't need to parse it into a
│ │ │ │
399 // buffer. We can just read it as a string_view.
│ │ │ │ -
400 end = pqxx::internal::scan_unquoted_string<ENC, SEPARATOR, '}'>(
│ │ │ │ + │ │ │ │
401 std::data(data), std::size(data), here);
│ │ │ │
402 std::string_view const field{
│ │ │ │
403 std::string_view{std::data(data) + here, end - here}};
│ │ │ │
404 if (field == "NULL")
│ │ │ │
405 {
│ │ │ │
406 if constexpr (nullness<ELEMENT>::has_null)
│ │ │ │
407 m_elts.emplace_back(nullness<ELEMENT>::null());
│ │ │ │ @@ -591,14 +591,15 @@ │ │ │ │
constexpr auto cbegin() const noexcept
Begin iteration of individual elements.
Definition array.hxx:115
│ │ │ │
constexpr auto crend() const noexcept
Return end point of reverse iteration.
Definition array.hxx:121
│ │ │ │
std::array< std::size_t, DIMENSIONS > const & sizes() noexcept
Return the sizes of this array in each of its dimensions.
Definition array.hxx:82
│ │ │ │
array(std::string_view data, connection const &cx)
Parse an SQL array, read as text from a pqxx::result or stream.
Definition array.hxx:68
│ │ │ │
constexpr auto front() const noexcept
Refer to the first element, if any.
Definition array.hxx:153
│ │ │ │
Connection to a database.
Definition connection.hxx:279
│ │ │ │
std::string concat(TYPE... item)
Efficiently combine a bunch of items into one big string.
Definition concat.hxx:31
│ │ │ │ +
composite_field_parser< T > specialize_parse_composite_field(encoding_group enc)
Look up implementation of parse_composite_field for ENC.
Definition array-composite.hxx:274
│ │ │ │
The home of all libpqxx classes, functions, templates, etc.
Definition array.cxx:27
│ │ │ │
static TYPE null()
Return a null value.
│ │ │ │
static bool has_null
Does this type have a null value?
Definition strconv.hxx:93
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

│ │ │ │ Caveats

│ │ │ │

There are some restrictions on binary_cast that you must be aware of.

│ │ │ │

First, your data must of a type that gives us bytes. So: char, unsigned char, signed char, int8_t, uint8_t, or of course std::byte. You can't feed in a vector of double, or anything like that.

│ │ │ │

Second, the data must be laid out as a contiguous block in memory. If there's no std::data() implementation for your type, it's not suitable.

│ │ │ │

Third, binary_cast only constructs something like a std::string_view. It does not make a copy of your actual data. So, make sure that your data remains alive and in the same place while you're using it.

│ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1basic__fieldstream.html │ │ │ │ @@ -148,15 +148,15 @@ │ │ │ │ │ │ │ │  basic_fieldstream (field const &f) │ │ │ │   │ │ │ │ │ │ │ │

Detailed Description

│ │ │ │
template<typename CHAR = char, typename TRAITS = std::char_traits<CHAR>>
│ │ │ │ class pqxx::basic_fieldstream< CHAR, TRAITS >

Input stream that gets its data from a result field.

│ │ │ │ -
Deprecated:
To convert a field's value string to some other type, e.g. to an int, use the field's as<...>() member function. To read a field efficiently just as a string, use its c_str() or its as<std::string_vview>().
│ │ │ │ +
Deprecated:
To convert a field's value string to some other type, e.g. to an int, use the field's as<...>() member function. To read a field efficiently just as a string, use its c_str() or its as<std::string_vview>().
│ │ │ │

Works like any other istream to read data from a field. It supports all formatting and streaming operations of std::istream. For convenience there is a fieldstream alias, which defines a basic_fieldstream for char. This is similar to how e.g. std::ifstream relates to std::basic_ifstream.

│ │ │ │

This class has only been tested for the char type (and its default traits).

│ │ │ │

The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1basic__ilostream.html │ │ │ │ @@ -151,15 +151,15 @@ │ │ │ │  basic_ilostream (dbtransaction &t, oid o, largeobject::size_type buf_size=512) │ │ │ │  Create a basic_ilostream.
│ │ │ │   │ │ │ │ │ │ │ │

Detailed Description

│ │ │ │
template<typename CHAR = char, typename TRAITS = std::char_traits<CHAR>>
│ │ │ │ class pqxx::basic_ilostream< CHAR, TRAITS >

Input stream that gets its data from a large object.

│ │ │ │ -
Deprecated:
Access large objects directly using the blob class.
│ │ │ │ +
Deprecated:
Access large objects directly using the blob class.
│ │ │ │

This class worked like any other istream, but to read data from a large object. It supported all formatting and streaming operations of std::istream.

│ │ │ │

This functionality was considered too fragile and complex, so it has been replaced with a single, much simpler class.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ basic_ilostream() [1/2]

│ │ │ │ │ │ │ │
│ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1basic__lostream.html │ │ │ │ @@ -151,15 +151,15 @@ │ │ │ │  basic_lostream (dbtransaction &t, oid o, largeobject::size_type buf_size=512) │ │ │ │  Create a basic_lostream.
│ │ │ │   │ │ │ │ │ │ │ │

Detailed Description

│ │ │ │
template<typename CHAR = char, typename TRAITS = std::char_traits<CHAR>>
│ │ │ │ class pqxx::basic_lostream< CHAR, TRAITS >

Stream that reads and writes a large object.

│ │ │ │ -
Deprecated:
Access large objects directly using the blob class.
│ │ │ │ +
Deprecated:
Access large objects directly using the blob class.
│ │ │ │

This worked like a std::iostream, but to read data from, or write data to, a large object. It supported all formatting and streaming operations of std::iostream.

│ │ │ │

This functionality was considered too fragile and complex, so it has been replaced with a single, much simpler class.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ basic_lostream() [1/2]

│ │ │ │ │ │ │ │
│ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1basic__olostream.html │ │ │ │ @@ -151,15 +151,15 @@ │ │ │ │  basic_olostream (dbtransaction &t, oid o, largeobject::size_type buf_size=512) │ │ │ │  Create a basic_olostream.
│ │ │ │   │ │ │ │ │ │ │ │

Detailed Description

│ │ │ │
template<typename CHAR = char, typename TRAITS = std::char_traits<CHAR>>
│ │ │ │ class pqxx::basic_olostream< CHAR, TRAITS >

Output stream that writes data back to a large object.

│ │ │ │ -
Deprecated:
Access large objects directly using the blob class.
│ │ │ │ +
Deprecated:
Access large objects directly using the blob class.
│ │ │ │

This worked like any other ostream, but to write data to a large object. It supported all formatting and streaming operations of std::ostream.

│ │ │ │

This functionality was considered too fragile and complex, so it has been replaced with a single, much simpler class.

│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ basic_olostream() [1/2]

│ │ │ │ │ │ │ │
│ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1blob.html │ │ │ │ @@ -543,15 +543,15 @@ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Read up to std::size(buf) bytes from the object.

│ │ │ │ -
Deprecated:
As libpqxx moves to C++20 as its baseline language version, this will take and return std::span<std::byte>.
│ │ │ │ +
Deprecated:
As libpqxx moves to C++20 as its baseline language version, this will take and return std::span<std::byte>.
│ │ │ │

Retrieves bytes from the blob, at the current position, until buf is full (i.e. its current size is reached), or there are no more bytes to read, whichever comes first.

│ │ │ │

This function will not change either the size or the capacity of buf, only its contents.

│ │ │ │

Returns the filled portion of buf. This may be empty.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1connection.html │ │ │ │ @@ -379,31 +379,31 @@ │ │ │ │   │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -788,15 +788,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

Notifications and Receivers

This is PostgreSQL-specific extension that goes beyond standard SQL. It's a communications mechanism between clients on a database, akin to a transactional message bus.

│ │ │ │

A notification happens on a channel, identified by a name. You can set a connection to listen for notifications on the channel, using the connection's listen() function. (Internally this will issue a LISTEN SQL command). Any client on the database can send a notification on that channel by executing a NOTIFY SQL command. The transaction classes implement a convenience function for this, called transaction_base::notify().

│ │ │ │

Notifications can carry an optional payload string. This is free-form text which carries additional information to the receiver.

│ │ │ │
Warning
There are a few pitfalls with the channel names: case sensitivity and encodings. They are not too hard to avoid, but the safest thing to do is use only lower-case ASCII names.
│ │ │ │ -

│ │ │ │ +

│ │ │ │ Case sensitivity

│ │ │ │

Channel names are case-sensitive. By default, however, PostgreSQL does convert the channel name in a NOTIFY or LISTEN command to lower-case, to give the impression that it is not case-sensitive while keeping the performance cost low.

│ │ │ │

Thus, a LISTEN Hello will pick up a notification from NOTIFY Hello but also one from NOTIFY hello, because the database converts Hello into hello going in either direction.

│ │ │ │

You can prevent this conversion by putting the name in double quotes, as quote_name() does. This is what libpqxx's notification functions do. If you use libpqxx to lisen on Hello but raw SQL to notify Hello, the notification will not arrive because the notification actually uses the string hello instead.

│ │ │ │

Confused? Safest thing to do is to use only lower-case letters in the channel names!

│ │ │ │ -

│ │ │ │ +

│ │ │ │ Transactions

│ │ │ │

Both listening and notifying are transactional in the backend: they only take effect once the back-end transaction in which you do them is committed.

│ │ │ │

For an outgoing notification, this means that the transaction holds on to the outgoing message until you commit. (A nontransaction does not start a backend transaction, so if that's the transaction type you're using, the message does go out immediately.)

│ │ │ │

For listening to incoming notifications, it gets a bit more complicated. To avoid complicating its internal bookkeeping, libpqxx only lets you start listening while no transaction is open.

│ │ │ │

No notifications will come in while you're in a transaction... again unless it's a nontransaction of course, because that does not open a transaction on the backend.

│ │ │ │ -

│ │ │ │ +

│ │ │ │ Exceptions

│ │ │ │

If your handler throws an exception, that will simply propagate up the call chain to wherever you were when you received it.

│ │ │ │

This is differnt from the old notification_receiver mechanism which logged exceptions but did not propagate them.

│ │ │ │ -

│ │ │ │ +

│ │ │ │ Encoding

│ │ │ │

When a client sends a notification, it does so in its client encoding. If necessary, the back-end converts them to its internal encoding. And then when a client receives the notification, the database converts it to the receiver's client encoding.

│ │ │ │

Simple enough, right?

│ │ │ │

However if you should change your connection's client encoding after you start listening on a channel, then any notifications you receive may have different channel names than the ones for which you are listening.

│ │ │ │

If this could be a problem in your scenario, stick to names in pure ASCII. Those will look the same in all the encodings postgres supports.

│ │ │ │
using notification_handler = std::function< void(notification)>
std::vector< pqxx::errorhandler * > pqxx::connection::get_errorhandlers () const
│ │ │ │
│ │ │ │ -
Deprecated:
Return pointers to the active errorhandlers.
│ │ │ │ +
Deprecated:
Return pointers to the active errorhandlers.
│ │ │ │

The entries are ordered from oldest to newest handler.

│ │ │ │

The pointers point to the real errorhandlers. The container it returns however is a copy of the one internal to the connection, not a reference.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ get_notifs()

│ │ │ │ @@ -1528,15 +1528,15 @@ │ │ │ │ ) │ │ │ │ & │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Set session variable, using SQL's SET command.

│ │ │ │ -
Deprecated:
To set a session variable, use set_session_var. To set a transaction-local variable, execute an SQL SET command.
│ │ │ │ +
Deprecated:
To set a session variable, use set_session_var. To set a transaction-local variable, execute an SQL SET command.
│ │ │ │
Warning
When setting a string value, you must escape and quote it first. Use the quote() function to do that.
│ │ │ │
│ │ │ │ This executes an SQL query, so do not get or set variables while a table stream or pipeline is active on the same connection.
│ │ │ │
Parameters
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1errorhandler.html │ │ │ │ @@ -126,15 +126,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
varVariable to set.
valueNew value for Var. This can be any SQL expression. If it's a string, be sure that it's properly escaped and quoted.

│ │ │ │ Friends

│ │ │ │ class internal::gate::errorhandler_connection
 
│ │ │ │

Detailed Description

│ │ │ │ -
Deprecated:
Base class for obsolete error-handler callbacks.
│ │ │ │ +
Deprecated:
Base class for obsolete error-handler callbacks.
│ │ │ │

This method of handling errors is obsolete. Use a "notice handler" instead.

│ │ │ │
Warning
Strange things happen when a result object outlives its parent connection. If you register an error handler on a connection, then you must not access the result after destroying the connection. This applies even if you destroy the error handler first!
│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ errorhandler()

│ │ │ │ │ │ │ │
│ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1basic__robusttransaction.html │ │ │ │ @@ -127,18 +127,18 @@ │ │ │ │ │ │ │ │ │ │ │ │
[legend]
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +  │ │ │ │ │ │ │ │ │ │ │ │ +  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Protected Member Functions

│ │ │ │ - basic_robusttransaction (connection &cx, zview begin_command, std::string_view tname)
basic_robusttransaction (connection &cx, zview begin_command, std::string_view tname)
 
│ │ │ │ - basic_robusttransaction (connection &cx, zview begin_command)
basic_robusttransaction (connection &cx, zview begin_command)
 
- Protected Member Functions inherited from pqxx::dbtransaction
│ │ │ │  dbtransaction (connection &cx)
 Begin transaction.
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -9,18 +9,18 @@ │ │ │ │ │ [+]Inheritance diagram for pqxx::internal::basic_robusttransaction: │ │ │ │ │ [Inheritance graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ [+]Collaboration diagram for pqxx::internal::basic_robusttransaction: │ │ │ │ │ [Collaboration graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ PPrrootteecctteedd MMeemmbbeerr FFuunnccttiioonnss │ │ │ │ │ -   bbaassiicc__rroobbuussttttrraannssaaccttiioonn (_c_o_n_n_e_c_t_i_o_n &cx, _z_v_i_e_w begin_command, │ │ │ │ │ - std::string_view tname) │ │ │ │ │ +   bbaassiicc__rroobbuussttttrraannssaaccttiioonn (_c_o_n_n_e_c_t_i_o_n &_c_x, _z_v_i_e_w _b_e_g_i_n___c_o_m_m_a_n_d, │ │ │ │ │ + std::string_view _t_n_a_m_e) │ │ │ │ │   │ │ │ │ │ -   bbaassiicc__rroobbuussttttrraannssaaccttiioonn (_c_o_n_n_e_c_t_i_o_n &cx, _z_v_i_e_w begin_command) │ │ │ │ │ +   bbaassiicc__rroobbuussttttrraannssaaccttiioonn (_c_o_n_n_e_c_t_i_o_n &_c_x, _z_v_i_e_w _b_e_g_i_n___c_o_m_m_a_n_d) │ │ │ │ │   │ │ │ │ │ [-] Protected Member Functions inherited from _p_q_x_x_:_:_d_b_t_r_a_n_s_a_c_t_i_o_n │ │ │ │ │   ddbbttrraannssaaccttiioonn (_c_o_n_n_e_c_t_i_o_n &cx) │ │ │ │ │   Begin transaction. │ │ │ │ │   │ │ │ │ │   ddbbttrraannssaaccttiioonn (_c_o_n_n_e_c_t_i_o_n &cx, std::string_view tname) │ │ │ │ │   Begin transaction. │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1basic__transaction.html │ │ │ │ @@ -126,21 +126,21 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
[legend]
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ +  │ │ │ │ │ │ │ │ │ │ │ │ +  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Protected Member Functions

 basic_transaction (connection &cx, zview begin_command, std::string_view tname)
 basic_transaction (connection &cx, zview begin_command, std::string_view tname)
 
│ │ │ │ - basic_transaction (connection &cx, zview begin_command, std::string &&tname)
basic_transaction (connection &cx, zview begin_command, std::string &&tname)
 
│ │ │ │ - basic_transaction (connection &cx, zview begin_command)
basic_transaction (connection &cx, zview begin_command)
 
- Protected Member Functions inherited from pqxx::dbtransaction
│ │ │ │  dbtransaction (connection &cx)
 Begin transaction.
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -9,21 +9,21 @@ │ │ │ │ │ [+]Inheritance diagram for pqxx::internal::basic_transaction: │ │ │ │ │ [Inheritance graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ [+]Collaboration diagram for pqxx::internal::basic_transaction: │ │ │ │ │ [Collaboration graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ PPrrootteecctteedd MMeemmbbeerr FFuunnccttiioonnss │ │ │ │ │ -   _b_a_s_i_c___t_r_a_n_s_a_c_t_i_o_n (_c_o_n_n_e_c_t_i_o_n &cx, _z_v_i_e_w begin_command, std:: │ │ │ │ │ - string_view tname) │ │ │ │ │ +   _b_a_s_i_c___t_r_a_n_s_a_c_t_i_o_n (_c_o_n_n_e_c_t_i_o_n &_c_x, _z_v_i_e_w _b_e_g_i_n___c_o_m_m_a_n_d, std:: │ │ │ │ │ + string_view _t_n_a_m_e) │ │ │ │ │   │ │ │ │ │ -   bbaassiicc__ttrraannssaaccttiioonn (_c_o_n_n_e_c_t_i_o_n &cx, _z_v_i_e_w begin_command, std:: │ │ │ │ │ - string &&tname) │ │ │ │ │ +   bbaassiicc__ttrraannssaaccttiioonn (_c_o_n_n_e_c_t_i_o_n &_c_x, _z_v_i_e_w _b_e_g_i_n___c_o_m_m_a_n_d, std:: │ │ │ │ │ + string &&_t_n_a_m_e) │ │ │ │ │   │ │ │ │ │ -   bbaassiicc__ttrraannssaaccttiioonn (_c_o_n_n_e_c_t_i_o_n &cx, _z_v_i_e_w begin_command) │ │ │ │ │ +   bbaassiicc__ttrraannssaaccttiioonn (_c_o_n_n_e_c_t_i_o_n &_c_x, _z_v_i_e_w _b_e_g_i_n___c_o_m_m_a_n_d) │ │ │ │ │   │ │ │ │ │ [-] Protected Member Functions inherited from _p_q_x_x_:_:_d_b_t_r_a_n_s_a_c_t_i_o_n │ │ │ │ │   ddbbttrraannssaaccttiioonn (_c_o_n_n_e_c_t_i_o_n &cx) │ │ │ │ │   Begin transaction. │ │ │ │ │   │ │ │ │ │   ddbbttrraannssaaccttiioonn (_c_o_n_n_e_c_t_i_o_n &cx, std::string_view tname) │ │ │ │ │   Begin transaction. │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1callgate.html │ │ │ │ @@ -120,34 +120,34 @@ │ │ │ │ │ │ │ │ │ │ │ │
[legend]
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +using  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +using  │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Protected Types

│ │ │ │ -using super = callgate< HOME >
super = callgate< HOME >
 This class, to keep constructors easy.
 
│ │ │ │ -using reference = HOME &
reference = HOME &
 A reference to the host class. Helps keep constructors easy.
 
│ │ │ │ │ │ │ │ │ │ │ │ +  │ │ │ │ │ │ │ │ │ │ │ │ +reference  │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Protected Member Functions

│ │ │ │ - callgate (reference x)
callgate (reference x)
 
│ │ │ │ -reference home () const noexcept
home () const noexcept
 The home object. The gate class has full "private" access.
 
│ │ │ │

Detailed Description

│ │ │ │ -
template<typename HOME>
│ │ │ │ +
template<typename HOME>
│ │ │ │ class pqxx::internal::callgate< HOME >

Base class for call gates.

│ │ │ │

A call gate defines a limited, private interface on the host class that specified client classes can access.

│ │ │ │

The metaphor works as follows: the gate stands in front of a "home," which is really a class, and only lets specific friends in.

│ │ │ │

To implement a call gate that gives client C access to host H,

    │ │ │ │
  • derive a gate class from callgate<H>;
  • │ │ │ │
  • make the gate class a friend of H;
  • │ │ │ │
  • make C a friend of the gate class; and
  • │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -6,28 +6,28 @@ │ │ │ │ │ _P_r_o_t_e_c_t_e_d_ _T_y_p_e_s | _P_r_o_t_e_c_t_e_d_ _M_e_m_b_e_r_ _F_u_n_c_t_i_o_n_s | _L_i_s_t_ _o_f_ _a_l_l_ _m_e_m_b_e_r_s │ │ │ │ │ pqxx::internal::callgate< HOME > Class Template Reference │ │ │ │ │ Base class for call gates. _M_o_r_e_._._. │ │ │ │ │ [+]Inheritance diagram for pqxx::internal::callgate< HOME >: │ │ │ │ │ [Inheritance graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ PPrrootteecctteedd TTyyppeess │ │ │ │ │ -using  ssuuppeerr = _c_a_l_l_g_a_t_e< HOME > │ │ │ │ │ +_u_s_i_n_g  ssuuppeerr = _c_a_l_l_g_a_t_e< _H_O_M_E > │ │ │ │ │   This class, to keep constructors easy. │ │ │ │ │   │ │ │ │ │ -using  rreeffeerreennccee = HOME & │ │ │ │ │ +_u_s_i_n_g  rreeffeerreennccee = _H_O_M_E & │ │ │ │ │   A reference to the host class. Helps keep constructors easy. │ │ │ │ │   │ │ │ │ │ PPrrootteecctteedd MMeemmbbeerr FFuunnccttiioonnss │ │ │ │ │ -   ccaallllggaattee (_r_e_f_e_r_e_n_c_e x) │ │ │ │ │ +   ccaallllggaattee (_r_e_f_e_r_e_n_c_e _x) │ │ │ │ │   │ │ │ │ │ -_r_e_f_e_r_e_n_c_e  hhoommee () const noexcept │ │ │ │ │ +_r_e_f_e_r_e_n_c_e  hhoommee () _c_o_n_s_t _n_o_e_x_c_e_p_t │ │ │ │ │   The home object. The gate class has full "private" access. │ │ │ │ │   │ │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ -template │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _H_O_M_E> │ │ │ │ │ class pqxx::internal::callgate< HOME > │ │ │ │ │ Base class for call gates. │ │ │ │ │ A call gate defines a limited, private interface on the host class that │ │ │ │ │ specified client classes can access. │ │ │ │ │ The metaphor works as follows: the gate stands in front of a "home," which is │ │ │ │ │ really a class, and only lets specific friends in. │ │ │ │ │ To implement a call gate that gives client C access to host H, │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1dynamic__params.html │ │ │ │ @@ -96,70 +96,70 @@ │ │ │ │
    pqxx::internal::dynamic_params< IT, ACCESSOR > Class Template Reference
    │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +constexpr  │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ +template<typenameC > │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +constexprIT  │ │ │ │ │ │ │ │ │ │ │ │ +constexprIT  │ │ │ │ │ │ │ │ │ │ │ │ +constexprauto  │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

│ │ │ │ -constexpr dynamic_params (IT begin, IT end)
dynamic_params (IT begin, IT end)
 Wrap a sequence of pointers or iterators.
 
constexpr dynamic_params (IT begin, IT end, ACCESSOR &acc)
constexpr dynamic_params (IT begin, IT end, ACCESSOR &acc)
 Wrap a sequence of pointers or iterators.
 
│ │ │ │ -template<typename C >
constexpr dynamic_params (C &container)
constexpr dynamic_params (C &container)
 Wrap a container.
 
template<typename C >
constexpr dynamic_params (C &container, ACCESSOR &acc)
template<typename C >
constexpr dynamic_params (C &container, ACCESSOR &acc)
 Wrap a container.
 
│ │ │ │ -constexpr IT begin () const noexcept
begin () const noexcept
 
│ │ │ │ -constexpr IT end () const noexcept
end () const noexcept
 
│ │ │ │ -constexpr auto access (decltype(*std::declval< IT >()) value) const -> decltype(std::declval< ACCESSOR >()(value))
access (decltype(*std::declval< IT >()) value) const -> decltype(std::declval< ACCESSOR >()(value))
 
│ │ │ │

Detailed Description

│ │ │ │ -
template<typename IT, typename ACCESSOR = decltype(iterator_identity<IT>)>
│ │ │ │ -class pqxx::internal::dynamic_params< IT, ACCESSOR >
Deprecated:
Use params instead.
│ │ │ │ +
template<typename IT, typename ACCESSOR = decltype(iterator_identity<IT>)>
│ │ │ │ +class pqxx::internal::dynamic_params< IT, ACCESSOR >
Deprecated:
Use params instead.
│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ │ │ │ │

◆ dynamic_params() [1/2]

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ -template<typename IT , typename ACCESSOR = decltype(iterator_identity<IT>)>
│ │ │ │ +template<typename IT , typename ACCESSOR = decltype(iterator_identity<IT>)>
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -178,31 +178,31 @@ │ │ │ │ │ │ │ │ │ │ │ │

◆ dynamic_params() [2/2]

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ -template<typename IT , typename ACCESSOR = decltype(iterator_identity<IT>)>
│ │ │ │ +template<typename IT , typename ACCESSOR = decltype(iterator_identity<IT>)>
│ │ │ │
│ │ │ │ -template<typename C >
│ │ │ │ +template<typename C >
│ │ │ │
constexpr pqxx::internal::dynamic_params< IT, ACCESSOR >::dynamic_params constexpr pqxx::internal::dynamic_params< IT, ACCESSOR >::dynamic_params (IT IT begin,
IT IT end,
ACCESSOR & ACCESSORacc 
)
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,58 +2,58 @@ │ │ │ │ │ The C++ client library for PostgreSQL │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _P_u_b_l_i_c_ _M_e_m_b_e_r_ _F_u_n_c_t_i_o_n_s | _L_i_s_t_ _o_f_ _a_l_l_ _m_e_m_b_e_r_s │ │ │ │ │ pqxx::internal::dynamic_params< IT, ACCESSOR > Class Template Reference │ │ │ │ │ PPuubblliicc MMeemmbbeerr FFuunnccttiioonnss │ │ │ │ │ - constexpr  ddyynnaammiicc__ppaarraammss (IT begin, IT end) │ │ │ │ │ + _c_o_n_s_t_e_x_p_r  ddyynnaammiicc__ppaarraammss (_I_T begin, _I_T end) │ │ │ │ │   Wrap a sequence of pointers or iterators. │ │ │ │ │   │ │ │ │ │ - constexpr  _d_y_n_a_m_i_c___p_a_r_a_m_s (IT begin, IT end, ACCESSOR &acc) │ │ │ │ │ + _c_o_n_s_t_e_x_p_r  _d_y_n_a_m_i_c___p_a_r_a_m_s (_I_T begin, _I_T end, _A_C_C_E_S_S_O_R &_a_c_c) │ │ │ │ │   Wrap a sequence of pointers or iterators. │ │ │ │ │   │ │ │ │ │ -template │ │ │ │ │ - constexpr  ddyynnaammiicc__ppaarraammss (C &container) │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _C > │ │ │ │ │ + _c_o_n_s_t_e_x_p_r  ddyynnaammiicc__ppaarraammss (_C &_c_o_n_t_a_i_n_e_r) │ │ │ │ │   Wrap a container. │ │ │ │ │   │ │ │ │ │ -template │ │ │ │ │ - constexpr  _d_y_n_a_m_i_c___p_a_r_a_m_s (C &container, ACCESSOR &acc) │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _C > │ │ │ │ │ + _c_o_n_s_t_e_x_p_r  _d_y_n_a_m_i_c___p_a_r_a_m_s (_C &_c_o_n_t_a_i_n_e_r, _A_C_C_E_S_S_O_R &_a_c_c) │ │ │ │ │   Wrap a container. │ │ │ │ │   │ │ │ │ │ - constexpr IT  bbeeggiinn () const noexcept │ │ │ │ │ + _c_o_n_s_t_e_x_p_r _I_T  bbeeggiinn () _c_o_n_s_t _n_o_e_x_c_e_p_t │ │ │ │ │   │ │ │ │ │ - constexpr IT  eenndd () const noexcept │ │ │ │ │ + _c_o_n_s_t_e_x_p_r _I_T  eenndd () _c_o_n_s_t _n_o_e_x_c_e_p_t │ │ │ │ │   │ │ │ │ │ -constexpr auto  aacccceessss (decltype(*std::declval< IT >()) value) const - │ │ │ │ │ - > decltype(std::declval< ACCESSOR >()(value)) │ │ │ │ │ +_c_o_n_s_t_e_x_p_r _a_u_t_o  aacccceessss (_d_e_c_l_t_y_p_e(*std::declval< _I_T >()) value) _c_o_n_s_t - │ │ │ │ │ + > _d_e_c_l_t_y_p_e(std::declval< _A_C_C_E_S_S_O_R >()(value)) │ │ │ │ │   │ │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ -template)> │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _I_T, _t_y_p_e_n_a_m_e _A_C_C_E_S_S_O_R = decltype(iterator_identity)> │ │ │ │ │ class pqxx::internal::dynamic_params< IT, ACCESSOR > │ │ │ │ │ _DD_ee_pp_rr_ee_cc_aa_tt_ee_dd_:: │ │ │ │ │ Use _p_a_r_a_m_s instead. │ │ │ │ │ ********** CCoonnssttrruuccttoorr && DDeessttrruuccttoorr DDooccuummeennttaattiioonn ********** │ │ │ │ │ ********** _?◆_? ddyynnaammiicc__ppaarraammss(()) [[11//22]] ********** │ │ │ │ │ -template)> │ │ │ │ │ -constexpr _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_d_y_n_a_m_i_c___p_a_r_a_m_s< ( IT  bbeeggiinn, │ │ │ │ │ -IT, ACCESSOR >::dynamic_params │ │ │ │ │ - IT  eenndd, inlineconstexpr │ │ │ │ │ - ACCESSOR &  aacccc  │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _I_T , _t_y_p_e_n_a_m_e _A_C_C_E_S_S_O_R = decltype(iterator_identity)> │ │ │ │ │ +_c_o_n_s_t_e_x_p_r _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_d_y_n_a_m_i_c___p_a_r_a_m_s< ( _I_T  bbeeggiinn, │ │ │ │ │ +_I_T, _A_C_C_E_S_S_O_R >::dynamic_params │ │ │ │ │ + _I_T  eenndd, inlineconstexpr │ │ │ │ │ + _A_C_C_E_S_S_O_R &  aacccc  │ │ │ │ │ ) │ │ │ │ │ Wrap a sequence of pointers or iterators. │ │ │ │ │ This version takes an accessor callable. If you pass an accessor acc, then any │ │ │ │ │ parameter p will go into the statement's parameter list as acc(p). │ │ │ │ │ ********** _?◆_? ddyynnaammiicc__ppaarraammss(()) [[22//22]] ********** │ │ │ │ │ -template)> │ │ │ │ │ -template │ │ │ │ │ -constexpr _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_: │ │ │ │ │ -_d_y_n_a_m_i_c___p_a_r_a_m_s< IT, ACCESSOR ( C &  ccoonnttaaiinneerr, │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _I_T , _t_y_p_e_n_a_m_e _A_C_C_E_S_S_O_R = decltype(iterator_identity)> │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _C > │ │ │ │ │ +_c_o_n_s_t_e_x_p_r _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_: │ │ │ │ │ +_d_y_n_a_m_i_c___p_a_r_a_m_s< _I_T, _A_C_C_E_S_S_O_R ( _C &  ccoonnttaaiinneerr, │ │ │ │ │ >::dynamic_params inlineexplicitconstexpr │ │ │ │ │ - ACCESSOR &  aacccc  │ │ │ │ │ + _A_C_C_E_S_S_O_R &  aacccc  │ │ │ │ │ ) │ │ │ │ │ Wrap a container. │ │ │ │ │ This version takes an accessor callable. If you pass an accessor acc, then any │ │ │ │ │ parameter p will go into the statement's parameter list as acc(p). │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this class was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/ │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__errorhandler.html │ │ │ │ @@ -120,15 +120,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
[legend]
│ │ │ │
constexpr pqxx::internal::dynamic_params< IT, ACCESSOR >::dynamic_params constexpr pqxx::internal::dynamic_params< IT, ACCESSOR >::dynamic_params (C & Ccontainer,
ACCESSOR & ACCESSORacc 
)
│ │ │ │ │ │ │ │ │ │ │ │ +class  │ │ │ │ │ │ │ │

│ │ │ │ Friends

│ │ │ │ -class pqxx::errorhandler
pqxx::errorhandler
 
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -8,15 +8,15 @@ │ │ │ │ │ [+]Inheritance diagram for pqxx::internal::gate::connection_errorhandler: │ │ │ │ │ [Inheritance graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ [+]Collaboration diagram for pqxx::internal::gate::connection_errorhandler: │ │ │ │ │ [Collaboration graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ FFrriieennddss │ │ │ │ │ -class  ppqqxxxx::::eerrrroorrhhaannddlleerr │ │ │ │ │ +_c_l_a_s_s  ppqqxxxx::::eerrrroorrhhaannddlleerr │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this class was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/gates/ │ │ │ │ │ _c_o_n_n_e_c_t_i_o_n_-_e_r_r_o_r_h_a_n_d_l_e_r_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__largeobject.html │ │ │ │ @@ -120,18 +120,18 @@ │ │ │ │ │ │ │ │ │ │ │ │
[legend]
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +class  │ │ │ │ │ │ │ │ │ │ │ │ +class  │ │ │ │ │ │ │ │

│ │ │ │ Friends

│ │ │ │ -class pqxx::blob
pqxx::blob
 
│ │ │ │ -class pqxx::largeobject
pqxx::largeobject
 
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -8,17 +8,17 @@ │ │ │ │ │ [+]Inheritance diagram for pqxx::internal::gate::connection_largeobject: │ │ │ │ │ [Inheritance graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ [+]Collaboration diagram for pqxx::internal::gate::connection_largeobject: │ │ │ │ │ [Collaboration graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ FFrriieennddss │ │ │ │ │ -class  ppqqxxxx::::bblloobb │ │ │ │ │ +_c_l_a_s_s  ppqqxxxx::::bblloobb │ │ │ │ │   │ │ │ │ │ -class  ppqqxxxx::::llaarrggeeoobbjjeecctt │ │ │ │ │ +_c_l_a_s_s  ppqqxxxx::::llaarrggeeoobbjjeecctt │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this class was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/gates/ │ │ │ │ │ _c_o_n_n_e_c_t_i_o_n_-_l_a_r_g_e_o_b_j_e_c_t_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__notification__receiver.html │ │ │ │ @@ -120,15 +120,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
[legend]
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +class  │ │ │ │ │ │ │ │

│ │ │ │ Friends

│ │ │ │ -class pqxx::notification_receiver
pqxx::notification_receiver
 
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -10,15 +10,15 @@ │ │ │ │ │ [Inheritance graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ [+]Collaboration diagram for pqxx::internal::gate:: │ │ │ │ │ connection_notification_receiver: │ │ │ │ │ [Collaboration graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ FFrriieennddss │ │ │ │ │ -class  ppqqxxxx::::nnoottiiffiiccaattiioonn__rreecceeiivveerr │ │ │ │ │ +_c_l_a_s_s  ppqqxxxx::::nnoottiiffiiccaattiioonn__rreecceeiivveerr │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this class was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/gates/ │ │ │ │ │ _c_o_n_n_e_c_t_i_o_n_-_n_o_t_i_f_i_c_a_t_i_o_n___r_e_c_e_i_v_e_r_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__pipeline.html │ │ │ │ @@ -120,15 +120,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
[legend]
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +class  │ │ │ │ │ │ │ │

│ │ │ │ Friends

│ │ │ │ -class pqxx::pipeline
pqxx::pipeline
 
│ │ │ │
The documentation for this class was generated from the following file:
    │ │ │ │
  • /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/gates/connection-pipeline.hxx
  • │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -8,15 +8,15 @@ │ │ │ │ │ [+]Inheritance diagram for pqxx::internal::gate::connection_pipeline: │ │ │ │ │ [Inheritance graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ [+]Collaboration diagram for pqxx::internal::gate::connection_pipeline: │ │ │ │ │ [Collaboration graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ FFrriieennddss │ │ │ │ │ -class  ppqqxxxx::::ppiippeelliinnee │ │ │ │ │ +_c_l_a_s_s  ppqqxxxx::::ppiippeelliinnee │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this class was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/gates/ │ │ │ │ │ _c_o_n_n_e_c_t_i_o_n_-_p_i_p_e_l_i_n_e_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__sql__cursor.html │ │ │ │ @@ -120,15 +120,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
[legend]
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +class  │ │ │ │ │ │ │ │

│ │ │ │ Friends

│ │ │ │ -class pqxx::internal::sql_cursor
pqxx::internal::sql_cursor
 
│ │ │ │
The documentation for this class was generated from the following file:
    │ │ │ │
  • /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/gates/connection-sql_cursor.hxx
  • │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -8,15 +8,15 @@ │ │ │ │ │ [+]Inheritance diagram for pqxx::internal::gate::connection_sql_cursor: │ │ │ │ │ [Inheritance graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ [+]Collaboration diagram for pqxx::internal::gate::connection_sql_cursor: │ │ │ │ │ [Collaboration graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ FFrriieennddss │ │ │ │ │ -class  ppqqxxxx::::iinntteerrnnaall::::ssqqll__ccuurrssoorr │ │ │ │ │ +_c_l_a_s_s  ppqqxxxx::::iinntteerrnnaall::::ssqqll__ccuurrssoorr │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this class was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/gates/ │ │ │ │ │ _c_o_n_n_e_c_t_i_o_n_-_s_q_l___c_u_r_s_o_r_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__stream__to.html │ │ │ │ @@ -120,15 +120,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
[legend]
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +class  │ │ │ │ │ │ │ │

│ │ │ │ Friends

│ │ │ │ -class pqxx::stream_to
pqxx::stream_to
 
│ │ │ │
The documentation for this class was generated from the following file:
    │ │ │ │
  • /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/gates/connection-stream_to.hxx
  • │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -8,15 +8,15 @@ │ │ │ │ │ [+]Inheritance diagram for pqxx::internal::gate::connection_stream_to: │ │ │ │ │ [Inheritance graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ [+]Collaboration diagram for pqxx::internal::gate::connection_stream_to: │ │ │ │ │ [Collaboration graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ FFrriieennddss │ │ │ │ │ -class  ppqqxxxx::::ssttrreeaamm__ttoo │ │ │ │ │ +_c_l_a_s_s  ppqqxxxx::::ssttrreeaamm__ttoo │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this class was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/gates/ │ │ │ │ │ _c_o_n_n_e_c_t_i_o_n_-_s_t_r_e_a_m___t_o_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1connection__transaction.html │ │ │ │ @@ -120,15 +120,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
[legend]
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +class  │ │ │ │ │ │ │ │

│ │ │ │ Friends

│ │ │ │ -class pqxx::transaction_base
pqxx::transaction_base
 
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -8,15 +8,15 @@ │ │ │ │ │ [+]Inheritance diagram for pqxx::internal::gate::connection_transaction: │ │ │ │ │ [Inheritance graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ [+]Collaboration diagram for pqxx::internal::gate::connection_transaction: │ │ │ │ │ [Collaboration graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ FFrriieennddss │ │ │ │ │ -class  ppqqxxxx::::ttrraannssaaccttiioonn__bbaassee │ │ │ │ │ +_c_l_a_s_s  ppqqxxxx::::ttrraannssaaccttiioonn__bbaassee │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this class was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/gates/ │ │ │ │ │ _c_o_n_n_e_c_t_i_o_n_-_t_r_a_n_s_a_c_t_i_o_n_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1const__connection__largeobject.html │ │ │ │ @@ -120,18 +120,18 @@ │ │ │ │ │ │ │ │ │ │ │ │
[legend]
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +class  │ │ │ │ │ │ │ │ │ │ │ │ +class  │ │ │ │ │ │ │ │

│ │ │ │ Friends

│ │ │ │ -class pqxx::blob
pqxx::blob
 
│ │ │ │ -class pqxx::largeobject
pqxx::largeobject
 
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -9,17 +9,17 @@ │ │ │ │ │ [Inheritance graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ [+]Collaboration diagram for pqxx::internal::gate:: │ │ │ │ │ const_connection_largeobject: │ │ │ │ │ [Collaboration graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ FFrriieennddss │ │ │ │ │ -class  ppqqxxxx::::bblloobb │ │ │ │ │ +_c_l_a_s_s  ppqqxxxx::::bblloobb │ │ │ │ │   │ │ │ │ │ -class  ppqqxxxx::::llaarrggeeoobbjjeecctt │ │ │ │ │ +_c_l_a_s_s  ppqqxxxx::::llaarrggeeoobbjjeecctt │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this class was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/gates/ │ │ │ │ │ _c_o_n_n_e_c_t_i_o_n_-_l_a_r_g_e_o_b_j_e_c_t_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1errorhandler__connection.html │ │ │ │ @@ -120,15 +120,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
[legend]
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +class  │ │ │ │ │ │ │ │

│ │ │ │ Friends

│ │ │ │ -class pqxx::connection
pqxx::connection
 
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -8,15 +8,15 @@ │ │ │ │ │ [+]Inheritance diagram for pqxx::internal::gate::errorhandler_connection: │ │ │ │ │ [Inheritance graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ [+]Collaboration diagram for pqxx::internal::gate::errorhandler_connection: │ │ │ │ │ [Collaboration graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ FFrriieennddss │ │ │ │ │ -class  ppqqxxxx::::ccoonnnneeccttiioonn │ │ │ │ │ +_c_l_a_s_s  ppqqxxxx::::ccoonnnneeccttiioonn │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this class was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/gates/ │ │ │ │ │ _e_r_r_o_r_h_a_n_d_l_e_r_-_c_o_n_n_e_c_t_i_o_n_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1icursor__iterator__icursorstream.html │ │ │ │ @@ -120,15 +120,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
[legend]
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +class  │ │ │ │ │ │ │ │

│ │ │ │ Friends

│ │ │ │ -class pqxx::icursorstream
pqxx::icursorstream
 
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -10,15 +10,15 @@ │ │ │ │ │ [Inheritance graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ [+]Collaboration diagram for pqxx::internal::gate:: │ │ │ │ │ icursor_iterator_icursorstream: │ │ │ │ │ [Collaboration graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ FFrriieennddss │ │ │ │ │ -class  ppqqxxxx::::iiccuurrssoorrssttrreeaamm │ │ │ │ │ +_c_l_a_s_s  ppqqxxxx::::iiccuurrssoorrssttrreeaamm │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this class was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/gates/ │ │ │ │ │ _i_c_u_r_s_o_r___i_t_e_r_a_t_o_r_-_i_c_u_r_s_o_r_s_t_r_e_a_m_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1icursorstream__icursor__iterator.html │ │ │ │ @@ -120,15 +120,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
[legend]
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +class  │ │ │ │ │ │ │ │

│ │ │ │ Friends

│ │ │ │ -class pqxx::icursor_iterator
pqxx::icursor_iterator
 
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -10,15 +10,15 @@ │ │ │ │ │ [Inheritance graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ [+]Collaboration diagram for pqxx::internal::gate:: │ │ │ │ │ icursorstream_icursor_iterator: │ │ │ │ │ [Collaboration graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ FFrriieennddss │ │ │ │ │ -class  ppqqxxxx::::iiccuurrssoorr__iitteerraattoorr │ │ │ │ │ +_c_l_a_s_s  ppqqxxxx::::iiccuurrssoorr__iitteerraattoorr │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this class was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/gates/ │ │ │ │ │ _i_c_u_r_s_o_r_s_t_r_e_a_m_-_i_c_u_r_s_o_r___i_t_e_r_a_t_o_r_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__connection.html │ │ │ │ @@ -120,15 +120,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
[legend]
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +class  │ │ │ │ │ │ │ │

│ │ │ │ Friends

│ │ │ │ -class pqxx::connection
pqxx::connection
 
│ │ │ │
The documentation for this class was generated from the following file:
    │ │ │ │
  • /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/gates/result-connection.hxx
  • │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -8,15 +8,15 @@ │ │ │ │ │ [+]Inheritance diagram for pqxx::internal::gate::result_connection: │ │ │ │ │ [Inheritance graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ [+]Collaboration diagram for pqxx::internal::gate::result_connection: │ │ │ │ │ [Collaboration graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ FFrriieennddss │ │ │ │ │ -class  ppqqxxxx::::ccoonnnneeccttiioonn │ │ │ │ │ +_c_l_a_s_s  ppqqxxxx::::ccoonnnneeccttiioonn │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this class was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/gates/ │ │ │ │ │ _r_e_s_u_l_t_-_c_o_n_n_e_c_t_i_o_n_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__creation.html │ │ │ │ @@ -120,18 +120,18 @@ │ │ │ │ │ │ │ │ │ │ │ │
[legend]
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +class  │ │ │ │ │ │ │ │ │ │ │ │ +class  │ │ │ │ │ │ │ │

│ │ │ │ Friends

│ │ │ │ -class pqxx::connection
pqxx::connection
 
│ │ │ │ -class pqxx::pipeline
pqxx::pipeline
 
│ │ │ │
The documentation for this class was generated from the following file:
    │ │ │ │
  • /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/gates/result-creation.hxx
  • │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -8,17 +8,17 @@ │ │ │ │ │ [+]Inheritance diagram for pqxx::internal::gate::result_creation: │ │ │ │ │ [Inheritance graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ [+]Collaboration diagram for pqxx::internal::gate::result_creation: │ │ │ │ │ [Collaboration graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ FFrriieennddss │ │ │ │ │ -class  ppqqxxxx::::ccoonnnneeccttiioonn │ │ │ │ │ +_c_l_a_s_s  ppqqxxxx::::ccoonnnneeccttiioonn │ │ │ │ │   │ │ │ │ │ -class  ppqqxxxx::::ppiippeelliinnee │ │ │ │ │ +_c_l_a_s_s  ppqqxxxx::::ppiippeelliinnee │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this class was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/gates/ │ │ │ │ │ _r_e_s_u_l_t_-_c_r_e_a_t_i_o_n_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__pipeline.html │ │ │ │ @@ -120,15 +120,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
[legend]
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +class  │ │ │ │ │ │ │ │

│ │ │ │ Friends

│ │ │ │ -class pqxx::pipeline
pqxx::pipeline
 
│ │ │ │
The documentation for this class was generated from the following file:
    │ │ │ │
  • /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/gates/result-pipeline.hxx
  • │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -8,15 +8,15 @@ │ │ │ │ │ [+]Inheritance diagram for pqxx::internal::gate::result_pipeline: │ │ │ │ │ [Inheritance graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ [+]Collaboration diagram for pqxx::internal::gate::result_pipeline: │ │ │ │ │ [Collaboration graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ FFrriieennddss │ │ │ │ │ -class  ppqqxxxx::::ppiippeelliinnee │ │ │ │ │ +_c_l_a_s_s  ppqqxxxx::::ppiippeelliinnee │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this class was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/gates/ │ │ │ │ │ _r_e_s_u_l_t_-_p_i_p_e_l_i_n_e_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1result__sql__cursor.html │ │ │ │ @@ -120,15 +120,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
[legend]
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +class  │ │ │ │ │ │ │ │

│ │ │ │ Friends

│ │ │ │ -class pqxx::internal::sql_cursor
pqxx::internal::sql_cursor
 
│ │ │ │
The documentation for this class was generated from the following file:
    │ │ │ │
  • /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/gates/result-sql_cursor.hxx
  • │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -8,15 +8,15 @@ │ │ │ │ │ [+]Inheritance diagram for pqxx::internal::gate::result_sql_cursor: │ │ │ │ │ [Inheritance graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ [+]Collaboration diagram for pqxx::internal::gate::result_sql_cursor: │ │ │ │ │ [Collaboration graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ FFrriieennddss │ │ │ │ │ -class  ppqqxxxx::::iinntteerrnnaall::::ssqqll__ccuurrssoorr │ │ │ │ │ +_c_l_a_s_s  ppqqxxxx::::iinntteerrnnaall::::ssqqll__ccuurrssoorr │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this class was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/gates/ │ │ │ │ │ _r_e_s_u_l_t_-_s_q_l___c_u_r_s_o_r_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1transaction__sql__cursor.html │ │ │ │ @@ -120,15 +120,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
[legend]
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +class  │ │ │ │ │ │ │ │

│ │ │ │ Friends

│ │ │ │ -class pqxx::internal::sql_cursor
pqxx::internal::sql_cursor
 
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -8,15 +8,15 @@ │ │ │ │ │ [+]Inheritance diagram for pqxx::internal::gate::transaction_sql_cursor: │ │ │ │ │ [Inheritance graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ [+]Collaboration diagram for pqxx::internal::gate::transaction_sql_cursor: │ │ │ │ │ [Collaboration graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ FFrriieennddss │ │ │ │ │ -class  ppqqxxxx::::iinntteerrnnaall::::ssqqll__ccuurrssoorr │ │ │ │ │ +_c_l_a_s_s  ppqqxxxx::::iinntteerrnnaall::::ssqqll__ccuurrssoorr │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this class was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/gates/ │ │ │ │ │ _t_r_a_n_s_a_c_t_i_o_n_-_s_q_l___c_u_r_s_o_r_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1gate_1_1transaction__transaction__focus.html │ │ │ │ @@ -120,15 +120,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
[legend]
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +class  │ │ │ │ │ │ │ │

│ │ │ │ Friends

│ │ │ │ -class pqxx::transaction_focus
pqxx::transaction_focus
 
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -9,15 +9,15 @@ │ │ │ │ │ [Inheritance graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ [+]Collaboration diagram for pqxx::internal::gate:: │ │ │ │ │ transaction_transaction_focus: │ │ │ │ │ [Collaboration graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ FFrriieennddss │ │ │ │ │ -class  ppqqxxxx::::ttrraannssaaccttiioonn__ffooccuuss │ │ │ │ │ +_c_l_a_s_s  ppqqxxxx::::ttrraannssaaccttiioonn__ffooccuuss │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this class was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/gates/ │ │ │ │ │ _t_r_a_n_s_a_c_t_i_o_n_-_t_r_a_n_s_a_c_t_i_o_n___f_o_c_u_s_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1result__iter.html │ │ │ │ @@ -100,41 +100,41 @@ │ │ │ │ │ │ │ │

Iterator for looped unpacking of a result. │ │ │ │ More...

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +using  │ │ │ │ │ │ │ │

│ │ │ │ Public Types

│ │ │ │ -using value_type = std::tuple< TYPE... >
value_type = std::tuple< TYPE... >
 
│ │ │ │ │ │ │ │ │ │ │ │ +  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +  │ │ │ │ │ │ │ │ │ │ │ │ +  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +bool  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +bool  │ │ │ │ │ │ │ │ │ │ │ │ +value_type const &  │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

│ │ │ │ - result_iter ()=default
result_iter ()=default
 Construct an "end" iterator.
 
│ │ │ │ - result_iter (result const &home)
result_iter (result const &home)
 
│ │ │ │ - result_iter (result_iter const &)=default
result_iter (result_iter const &)=default
 
│ │ │ │ result_iteroperator++ ()
 
│ │ │ │ -bool operator== (result_iter const &rhs) const
operator== (result_iter const &rhs) const
 Comparison only works for comparing to end().
 
│ │ │ │ -bool operator!= (result_iter const &rhs) const
operator!= (result_iter const &rhs) const
 
│ │ │ │ -value_type const & operator* () const
operator* () const
 
│ │ │ │

Detailed Description

│ │ │ │
template<typename... TYPE>
│ │ │ │ class pqxx::internal::result_iter< TYPE >

Iterator for looped unpacking of a result.

│ │ │ │

The documentation for this class was generated from the following file:
    │ │ │ │
  • /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/result_iter.hxx
  • │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -3,32 +3,32 @@ │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _P_u_b_l_i_c_ _T_y_p_e_s | _P_u_b_l_i_c_ _M_e_m_b_e_r_ _F_u_n_c_t_i_o_n_s | _L_i_s_t_ _o_f_ _a_l_l_ _m_e_m_b_e_r_s │ │ │ │ │ pqxx::internal::result_iter< TYPE > Class Template Reference │ │ │ │ │ Iterator for looped unpacking of a result. _M_o_r_e_._._. │ │ │ │ │ PPuubblliicc TTyyppeess │ │ │ │ │ -using  vvaalluuee__ttyyppee = std::tuple< TYPE... > │ │ │ │ │ +_u_s_i_n_g  vvaalluuee__ttyyppee = std::tuple< TYPE... > │ │ │ │ │   │ │ │ │ │ PPuubblliicc MMeemmbbeerr FFuunnccttiioonnss │ │ │ │ │ -   rreessuulltt__iitteerr ()=default │ │ │ │ │ +   rreessuulltt__iitteerr ()=_d_e_f_a_u_l_t │ │ │ │ │   Construct an "end" iterator. │ │ │ │ │   │ │ │ │ │ -   rreessuulltt__iitteerr (_r_e_s_u_l_t const &home) │ │ │ │ │ +   rreessuulltt__iitteerr (_r_e_s_u_l_t _c_o_n_s_t &home) │ │ │ │ │   │ │ │ │ │ -   rreessuulltt__iitteerr (_r_e_s_u_l_t___i_t_e_r const &)=default │ │ │ │ │ +   rreessuulltt__iitteerr (_r_e_s_u_l_t___i_t_e_r _c_o_n_s_t &)=_d_e_f_a_u_l_t │ │ │ │ │   │ │ │ │ │ _r_e_s_u_l_t___i_t_e_r &  ooppeerraattoorr++++ () │ │ │ │ │   │ │ │ │ │ - bool  ooppeerraattoorr==== (_r_e_s_u_l_t___i_t_e_r const &rhs) const │ │ │ │ │ + _b_o_o_l  ooppeerraattoorr==== (_r_e_s_u_l_t___i_t_e_r _c_o_n_s_t &_r_h_s) _c_o_n_s_t │ │ │ │ │   Comparison only works for comparing to end(). │ │ │ │ │   │ │ │ │ │ - bool  ooppeerraattoorr!!== (_r_e_s_u_l_t___i_t_e_r const &rhs) const │ │ │ │ │ + _b_o_o_l  ooppeerraattoorr!!== (_r_e_s_u_l_t___i_t_e_r _c_o_n_s_t &_r_h_s) _c_o_n_s_t │ │ │ │ │   │ │ │ │ │ -value_type const &  ooppeerraattoorr** () const │ │ │ │ │ +value_type _c_o_n_s_t &  ooppeerraattoorr** () _c_o_n_s_t │ │ │ │ │   │ │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ template │ │ │ │ │ class pqxx::internal::result_iter< TYPE > │ │ │ │ │ Iterator for looped unpacking of a result. │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this class was generated from the following file: │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1result__iteration.html │ │ │ │ @@ -97,27 +97,27 @@ │ │ │ │
    pqxx::internal::result_iteration< TYPE > Class Template Reference
    │ │ │ │ │ │ │ │
    │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +using  │ │ │ │ │ │ │ │

    │ │ │ │ Public Types

    │ │ │ │ -using iterator = result_iter< TYPE... >
    iterator = result_iter< TYPE... >
     
    │ │ │ │ │ │ │ │ │ │ │ │ +  │ │ │ │ │ │ │ │ │ │ │ │ +iterator  │ │ │ │ │ │ │ │ │ │ │ │ +iterator  │ │ │ │ │ │ │ │

    │ │ │ │ Public Member Functions

    │ │ │ │ - result_iteration (result const &home)
    result_iteration (result const &home)
     
    │ │ │ │ -iterator begin () const
    begin () const
     
    │ │ │ │ -iterator end () const
    end () const
     
    │ │ │ │
    The documentation for this class was generated from the following file:
      │ │ │ │
    • /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/result_iter.hxx
    • │ │ │ │
    │ │ │ │
    │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,22 +2,22 @@ │ │ │ │ │ The C++ client library for PostgreSQL │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _P_u_b_l_i_c_ _T_y_p_e_s | _P_u_b_l_i_c_ _M_e_m_b_e_r_ _F_u_n_c_t_i_o_n_s | _L_i_s_t_ _o_f_ _a_l_l_ _m_e_m_b_e_r_s │ │ │ │ │ pqxx::internal::result_iteration< TYPE > Class Template Reference │ │ │ │ │ PPuubblliicc TTyyppeess │ │ │ │ │ -using  iitteerraattoorr = _r_e_s_u_l_t___i_t_e_r< TYPE... > │ │ │ │ │ +_u_s_i_n_g  iitteerraattoorr = _r_e_s_u_l_t___i_t_e_r< TYPE... > │ │ │ │ │   │ │ │ │ │ PPuubblliicc MMeemmbbeerr FFuunnccttiioonnss │ │ │ │ │ -   rreessuulltt__iitteerraattiioonn (_r_e_s_u_l_t const &home) │ │ │ │ │ +   rreessuulltt__iitteerraattiioonn (_r_e_s_u_l_t _c_o_n_s_t &home) │ │ │ │ │   │ │ │ │ │ -_i_t_e_r_a_t_o_r  bbeeggiinn () const │ │ │ │ │ +_i_t_e_r_a_t_o_r  bbeeggiinn () _c_o_n_s_t │ │ │ │ │   │ │ │ │ │ -_i_t_e_r_a_t_o_r  eenndd () const │ │ │ │ │ +_i_t_e_r_a_t_o_r  eenndd () _c_o_n_s_t │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this class was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/ │ │ │ │ │ _r_e_s_u_l_t___i_t_e_r_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1sql__cursor.html │ │ │ │ @@ -123,43 +123,43 @@ │ │ │ │ │ │ │ │ │ │ │ │
    [legend]
    │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +  │ │ │ │ │ │ │ │ │ │ │ │ +  │ │ │ │ │ │ │ │ │ │ │ │ +result  │ │ │ │ │ │ │ │ │ │ │ │ +result  │ │ │ │ │ │ │ │ │ │ │ │ +difference_type  │ │ │ │ │ │ │ │ │ │ │ │ +difference_type  │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +resultconst &  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +void  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -9,44 +9,44 @@ │ │ │ │ │ [+]Inheritance diagram for pqxx::internal::sql_cursor: │ │ │ │ │ [Inheritance graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ [+]Collaboration diagram for pqxx::internal::sql_cursor: │ │ │ │ │ [Collaboration graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ PPuubblliicc MMeemmbbeerr FFuunnccttiioonnss │ │ │ │ │ -   ssqqll__ccuurrssoorr (_t_r_a_n_s_a_c_t_i_o_n___b_a_s_e &t, std:: │ │ │ │ │ - string_view query, std::string_view cname, │ │ │ │ │ - _c_u_r_s_o_r___b_a_s_e_:_:_a_c_c_e_s_s___p_o_l_i_c_y ap, _c_u_r_s_o_r___b_a_s_e_:_: │ │ │ │ │ - _u_p_d_a_t_e___p_o_l_i_c_y up, _c_u_r_s_o_r___b_a_s_e_:_:_o_w_n_e_r_s_h_i_p___p_o_l_i_c_y │ │ │ │ │ - op, bool hold) │ │ │ │ │ +   ssqqll__ccuurrssoorr (_t_r_a_n_s_a_c_t_i_o_n___b_a_s_e &_t, std:: │ │ │ │ │ + string_view query, std::string_view _c_n_a_m_e, │ │ │ │ │ + _c_u_r_s_o_r___b_a_s_e_:_:_a_c_c_e_s_s___p_o_l_i_c_y _a_p, _c_u_r_s_o_r___b_a_s_e_:_: │ │ │ │ │ + _u_p_d_a_t_e___p_o_l_i_c_y _u_p, _c_u_r_s_o_r___b_a_s_e_:_:_o_w_n_e_r_s_h_i_p___p_o_l_i_c_y │ │ │ │ │ + _o_p, _b_o_o_l _h_o_l_d) │ │ │ │ │   │ │ │ │ │ -   ssqqll__ccuurrssoorr (_t_r_a_n_s_a_c_t_i_o_n___b_a_s_e &t, std:: │ │ │ │ │ - string_view cname, _c_u_r_s_o_r___b_a_s_e_:_:_o_w_n_e_r_s_h_i_p___p_o_l_i_c_y │ │ │ │ │ - op) │ │ │ │ │ +   ssqqll__ccuurrssoorr (_t_r_a_n_s_a_c_t_i_o_n___b_a_s_e &_t, std:: │ │ │ │ │ + string_view _c_n_a_m_e, _c_u_r_s_o_r___b_a_s_e_:_:_o_w_n_e_r_s_h_i_p___p_o_l_i_c_y │ │ │ │ │ + _o_p) │ │ │ │ │   │ │ │ │ │ - _r_e_s_u_l_t  ffeettcchh (difference_type rows, difference_type │ │ │ │ │ - &displacement) │ │ │ │ │ + _r_e_s_u_l_t  ffeettcchh (difference_type _r_o_w_s, difference_type │ │ │ │ │ + &_d_i_s_p_l_a_c_e_m_e_n_t) │ │ │ │ │   │ │ │ │ │ - _r_e_s_u_l_t  ffeettcchh (difference_type rows) │ │ │ │ │ + _r_e_s_u_l_t  ffeettcchh (difference_type _r_o_w_s) │ │ │ │ │   │ │ │ │ │ - difference_type  mmoovvee (difference_type rows, difference_type │ │ │ │ │ - &displacement) │ │ │ │ │ + difference_type  mmoovvee (difference_type _r_o_w_s, difference_type │ │ │ │ │ + &_d_i_s_p_l_a_c_e_m_e_n_t) │ │ │ │ │   │ │ │ │ │ - difference_type  mmoovvee (difference_type rows) │ │ │ │ │ + difference_type  mmoovvee (difference_type _r_o_w_s) │ │ │ │ │   │ │ │ │ │ - difference_type  _p_o_s () const noexcept │ │ │ │ │ + difference_type  _p_o_s () _c_o_n_s_t _n_o_e_x_c_e_p_t │ │ │ │ │   Current position, or -1 for unknown. │ │ │ │ │   │ │ │ │ │ - difference_type  _e_n_d_p_o_s () const noexcept │ │ │ │ │ + difference_type  _e_n_d_p_o_s () _c_o_n_s_t _n_o_e_x_c_e_p_t │ │ │ │ │   End position, or -1 for unknown. │ │ │ │ │   │ │ │ │ │ - _r_e_s_u_l_t const &  eemmppttyy__rreessuulltt () const noexcept │ │ │ │ │ + _r_e_s_u_l_t _c_o_n_s_t &  eemmppttyy__rreessuulltt () _c_o_n_s_t _n_o_e_x_c_e_p_t │ │ │ │ │   Return zero-row result for this cursor. │ │ │ │ │   │ │ │ │ │ - void  cclloossee () noexcept │ │ │ │ │ + _v_o_i_d  cclloossee () _n_o_e_x_c_e_p_t │ │ │ │ │   │ │ │ │ │ [-] Public Member Functions inherited from _p_q_x_x_:_:_c_u_r_s_o_r___b_a_s_e │ │ │ │ │   ccuurrssoorr__bbaassee (_c_u_r_s_o_r___b_a_s_e const &)=delete │ │ │ │ │   │ │ │ │ │ _c_u_r_s_o_r___b_a_s_e &  ooppeerraattoorr== (_c_u_r_s_o_r___b_a_s_e const &)=delete │ │ │ │ │   │ │ │ │ │ constexpr std::string const &  _n_a_m_e () const noexcept │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1stream__from__input__iterator.html │ │ │ │ @@ -100,41 +100,41 @@ │ │ │ │ │ │ │ │

    Input iterator for stream_from. │ │ │ │ More...

    │ │ │ │

    │ │ │ │ Public Member Functions

    │ │ │ │ - sql_cursor (transaction_base &t, std::string_view query, std::string_view cname, cursor_base::access_policy ap, cursor_base::update_policy up, cursor_base::ownership_policy op, bool hold)
    sql_cursor (transaction_base &t, std::string_view query, std::string_view cname, cursor_base::access_policy ap, cursor_base::update_policy up, cursor_base::ownership_policy op, bool hold)
     
    │ │ │ │ - sql_cursor (transaction_base &t, std::string_view cname, cursor_base::ownership_policy op)
    sql_cursor (transaction_base &t, std::string_view cname, cursor_base::ownership_policy op)
     
    │ │ │ │ -result fetch (difference_type rows, difference_type &displacement)
    fetch (difference_type rows, difference_type &displacement)
     
    │ │ │ │ -result fetch (difference_type rows)
    fetch (difference_type rows)
     
    │ │ │ │ -difference_type move (difference_type rows, difference_type &displacement)
    move (difference_type rows, difference_type &displacement)
     
    │ │ │ │ -difference_type move (difference_type rows)
    move (difference_type rows)
     
    difference_type pos () const noexcept
    difference_type pos () const noexcept
     Current position, or -1 for unknown.
     
    difference_type endpos () const noexcept
    difference_type endpos () const noexcept
     End position, or -1 for unknown.
     
    │ │ │ │ -result const & empty_result () const noexcept
    empty_result () const noexcept
     Return zero-row result for this cursor.
     
    │ │ │ │ -void close () noexcept
    close () noexcept
     
    - Public Member Functions inherited from pqxx::cursor_base
    │ │ │ │  cursor_base (cursor_base const &)=delete
     
    │ │ │ │ cursor_baseoperator= (cursor_base const &)=delete
    │ │ │ │ │ │ │ │ │ │ │ │ +using  │ │ │ │ │ │ │ │

    │ │ │ │ Public Types

    │ │ │ │ -using value_type = std::tuple< TYPE... >
    value_type = std::tuple< TYPE... >
     
    │ │ │ │ │ │ │ │ │ │ │ │ +  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +value_type const &  │ │ │ │ │ │ │ │ │ │ │ │ +bool  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +bool  │ │ │ │ │ │ │ │ │ │ │ │

    │ │ │ │ Public Member Functions

    │ │ │ │ - stream_from_input_iterator ()=default
    stream_from_input_iterator ()=default
     Construct an "end" iterator.
     
    │ │ │ │  stream_from_input_iterator (stream_t &home)
     
    │ │ │ │ - stream_from_input_iterator (stream_from_input_iterator const &)=default
    stream_from_input_iterator (stream_from_input_iterator const &)=default
     
    │ │ │ │ stream_from_input_iteratoroperator++ ()
     
    │ │ │ │ -value_type const & operator* () const
    operator* () const
     
    │ │ │ │ -bool operator== (stream_from_input_iterator const &rhs) const
    operator== (stream_from_input_iterator const &rhs) const
     Comparison only works for comparing to end().
     
    │ │ │ │ -bool operator!= (stream_from_input_iterator const &rhs) const
    operator!= (stream_from_input_iterator const &rhs) const
     Comparison only works for comparing to end().
     
    │ │ │ │

    Detailed Description

    │ │ │ │
    template<typename... TYPE>
    │ │ │ │ class pqxx::internal::stream_from_input_iterator< TYPE >

    Input iterator for stream_from.

    │ │ │ │

    Just barely enough to support range-based "for" loops on stream_from. Don't assume that any of the usual behaviour works beyond that.

    │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -3,35 +3,35 @@ │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _P_u_b_l_i_c_ _T_y_p_e_s | _P_u_b_l_i_c_ _M_e_m_b_e_r_ _F_u_n_c_t_i_o_n_s | _L_i_s_t_ _o_f_ _a_l_l_ _m_e_m_b_e_r_s │ │ │ │ │ pqxx::internal::stream_from_input_iterator< TYPE > Class Template Reference │ │ │ │ │ Input iterator for _s_t_r_e_a_m___f_r_o_m. _M_o_r_e_._._. │ │ │ │ │ PPuubblliicc TTyyppeess │ │ │ │ │ -using  vvaalluuee__ttyyppee = std::tuple< TYPE... > │ │ │ │ │ +_u_s_i_n_g  vvaalluuee__ttyyppee = std::tuple< TYPE... > │ │ │ │ │   │ │ │ │ │ PPuubblliicc MMeemmbbeerr FFuunnccttiioonnss │ │ │ │ │ -   ssttrreeaamm__ffrroomm__iinnppuutt__iitteerraattoorr ()=default │ │ │ │ │ +   ssttrreeaamm__ffrroomm__iinnppuutt__iitteerraattoorr ()=_d_e_f_a_u_l_t │ │ │ │ │   Construct an "end" iterator. │ │ │ │ │   │ │ │ │ │   ssttrreeaamm__ffrroomm__iinnppuutt__iitteerraattoorr (_s_t_r_e_a_m___t &home) │ │ │ │ │   │ │ │ │ │   ssttrreeaamm__ffrroomm__iinnppuutt__iitteerraattoorr │ │ │ │ │ - (_s_t_r_e_a_m___f_r_o_m___i_n_p_u_t___i_t_e_r_a_t_o_r const &)=default │ │ │ │ │ + (_s_t_r_e_a_m___f_r_o_m___i_n_p_u_t___i_t_e_r_a_t_o_r _c_o_n_s_t &)=_d_e_f_a_u_l_t │ │ │ │ │   │ │ │ │ │ _s_t_r_e_a_m___f_r_o_m___i_n_p_u_t___i_t_e_r_a_t_o_r &  ooppeerraattoorr++++ () │ │ │ │ │   │ │ │ │ │ - value_type const &  ooppeerraattoorr** () const │ │ │ │ │ + value_type _c_o_n_s_t &  ooppeerraattoorr** () _c_o_n_s_t │ │ │ │ │   │ │ │ │ │ - bool  ooppeerraattoorr==== (_s_t_r_e_a_m___f_r_o_m___i_n_p_u_t___i_t_e_r_a_t_o_r const │ │ │ │ │ - &rhs) const │ │ │ │ │ + _b_o_o_l  ooppeerraattoorr==== (_s_t_r_e_a_m___f_r_o_m___i_n_p_u_t___i_t_e_r_a_t_o_r _c_o_n_s_t │ │ │ │ │ + &_r_h_s) _c_o_n_s_t │ │ │ │ │   Comparison only works for comparing to end(). │ │ │ │ │   │ │ │ │ │ - bool  ooppeerraattoorr!!== (_s_t_r_e_a_m___f_r_o_m___i_n_p_u_t___i_t_e_r_a_t_o_r const │ │ │ │ │ - &rhs) const │ │ │ │ │ + _b_o_o_l  ooppeerraattoorr!!== (_s_t_r_e_a_m___f_r_o_m___i_n_p_u_t___i_t_e_r_a_t_o_r _c_o_n_s_t │ │ │ │ │ + &_r_h_s) _c_o_n_s_t │ │ │ │ │   Comparison only works for comparing to end(). │ │ │ │ │   │ │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ template │ │ │ │ │ class pqxx::internal::stream_from_input_iterator< TYPE > │ │ │ │ │ Input iterator for _s_t_r_e_a_m___f_r_o_m. │ │ │ │ │ Just barely enough to support range-based "for" loops on _s_t_r_e_a_m___f_r_o_m. Don't │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1stream__input__iteration.html │ │ │ │ @@ -100,30 +100,30 @@ │ │ │ │ │ │ │ │

    Iteration over a stream_query. │ │ │ │ More...

    │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +using  │ │ │ │ │ │ │ │ │ │ │ │ +using  │ │ │ │ │ │ │ │

    │ │ │ │ Public Types

    │ │ │ │ -using stream_t = stream_from
    stream_t = stream_from
     
    │ │ │ │ -using iterator = stream_from_input_iterator< TYPE... >
    iterator = stream_from_input_iterator< TYPE... >
     
    │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +iterator  │ │ │ │ │ │ │ │ │ │ │ │ +iterator  │ │ │ │ │ │ │ │

    │ │ │ │ Public Member Functions

    │ │ │ │  stream_input_iteration (stream_t &home)
     
    │ │ │ │ -iterator begin () const
    begin () const
     
    │ │ │ │ -iterator end () const
    end () const
     
    │ │ │ │

    Detailed Description

    │ │ │ │
    template<typename... TYPE>
    │ │ │ │ class pqxx::internal::stream_input_iteration< TYPE >

    Iteration over a stream_query.

    │ │ │ │

    The documentation for this class was generated from the following file:
      │ │ │ │
    • /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/stream_iterator.hxx
    • │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -3,24 +3,24 @@ │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _P_u_b_l_i_c_ _T_y_p_e_s | _P_u_b_l_i_c_ _M_e_m_b_e_r_ _F_u_n_c_t_i_o_n_s | _L_i_s_t_ _o_f_ _a_l_l_ _m_e_m_b_e_r_s │ │ │ │ │ pqxx::internal::stream_input_iteration< TYPE > Class Template Reference │ │ │ │ │ Iteration over a _s_t_r_e_a_m___q_u_e_r_y. _M_o_r_e_._._. │ │ │ │ │ PPuubblliicc TTyyppeess │ │ │ │ │ -using  ssttrreeaamm__tt = _s_t_r_e_a_m___f_r_o_m │ │ │ │ │ +_u_s_i_n_g  ssttrreeaamm__tt = _s_t_r_e_a_m___f_r_o_m │ │ │ │ │   │ │ │ │ │ -using  iitteerraattoorr = _s_t_r_e_a_m___f_r_o_m___i_n_p_u_t___i_t_e_r_a_t_o_r< TYPE... > │ │ │ │ │ +_u_s_i_n_g  iitteerraattoorr = _s_t_r_e_a_m___f_r_o_m___i_n_p_u_t___i_t_e_r_a_t_o_r< TYPE... > │ │ │ │ │   │ │ │ │ │ PPuubblliicc MMeemmbbeerr FFuunnccttiioonnss │ │ │ │ │   ssttrreeaamm__iinnppuutt__iitteerraattiioonn (_s_t_r_e_a_m___t &home) │ │ │ │ │   │ │ │ │ │ -_i_t_e_r_a_t_o_r  bbeeggiinn () const │ │ │ │ │ +_i_t_e_r_a_t_o_r  bbeeggiinn () _c_o_n_s_t │ │ │ │ │   │ │ │ │ │ -_i_t_e_r_a_t_o_r  eenndd () const │ │ │ │ │ +_i_t_e_r_a_t_o_r  eenndd () _c_o_n_s_t │ │ │ │ │   │ │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ template │ │ │ │ │ class pqxx::internal::stream_input_iteration< TYPE > │ │ │ │ │ Iteration over a _s_t_r_e_a_m___q_u_e_r_y. │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this class was generated from the following file: │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1stream__query.html │ │ │ │ @@ -126,46 +126,46 @@ │ │ │ │ │ │ │ │ │ │ │ │
      [legend]
    │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +using  │ │ │ │ │ │ │ │

    │ │ │ │ Public Types

    │ │ │ │ -using line_handle = std::unique_ptr< char, void(*)(void const *)>
    line_handle = std::unique_ptr< char, void(*)(void const *)>
     
    │ │ │ │ │ │ │ │ │ │ │ │ +  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +  │ │ │ │ │ │ │ │ │ │ │ │ +stream_query &  │ │ │ │ │ │ │ │ │ │ │ │ +bool  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +auto  │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +std::tuple< TYPE... >  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

    │ │ │ │ Public Member Functions

    │ │ │ │ - stream_query (transaction_base &tx, std::string_view query)
    stream_query (transaction_base &tx, std::string_view query)
     Execute query on tx, stream results.
     
    │ │ │ │ - stream_query (transaction_base &tx, std::string_view query, params const &)
    stream_query (transaction_base &tx, std::string_view query, params const &)
     Execute query on tx, stream results.
     
    │ │ │ │ - stream_query (stream_query &&)=delete
    stream_query (stream_query &&)=delete
     
    │ │ │ │ -stream_queryoperator= (stream_query &&)=delete
    operator= (stream_query &&)=delete
     
    │ │ │ │ -bool done () const &noexcept
    done () const &noexcept
     Has this stream reached the end of its data?
     
    │ │ │ │ -auto begin () &
    begin () &
     Begin iterator. Only for use by "range for.".
     
    auto end () const &
    auto end () const &
     End iterator. Only for use by "range for.".
     
    │ │ │ │ -std::tuple< TYPE... > parse_line (zview line) &
    parse_line (zview line) &
     Parse and convert the latest line of data we received.
     
    │ │ │ │ std::pair< line_handle, std::size_t > read_line () &
     Read a COPY line from the server.
     
    │ │ │ │ @@ -187,15 +187,15 @@ │ │ │ │
    │ │ │ │ template<typename... TYPE>
    │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
    │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
    auto pqxx::internal::stream_query< TYPE >::end auto pqxx::internal::stream_query< TYPE >::end () const &
    │ │ │ │
    │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -10,42 +10,42 @@ │ │ │ │ │ [+]Inheritance diagram for pqxx::internal::stream_query< TYPE >: │ │ │ │ │ [Inheritance graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ [+]Collaboration diagram for pqxx::internal::stream_query< TYPE >: │ │ │ │ │ [Collaboration graph] │ │ │ │ │ [_l_e_g_e_n_d] │ │ │ │ │ PPuubblliicc TTyyppeess │ │ │ │ │ -using  lliinnee__hhaannddllee = std::unique_ptr< char, void(*)(void const *)> │ │ │ │ │ +_u_s_i_n_g  lliinnee__hhaannddllee = std::unique_ptr< _c_h_a_r, _v_o_i_d(*)(_v_o_i_d _c_o_n_s_t *)> │ │ │ │ │   │ │ │ │ │ PPuubblliicc MMeemmbbeerr FFuunnccttiioonnss │ │ │ │ │ -   ssttrreeaamm__qquueerryy (_t_r_a_n_s_a_c_t_i_o_n___b_a_s_e &tx, │ │ │ │ │ +   ssttrreeaamm__qquueerryy (_t_r_a_n_s_a_c_t_i_o_n___b_a_s_e &_t_x, │ │ │ │ │ std::string_view query) │ │ │ │ │   Execute query on tx, stream results. │ │ │ │ │   │ │ │ │ │ -   ssttrreeaamm__qquueerryy (_t_r_a_n_s_a_c_t_i_o_n___b_a_s_e &tx, │ │ │ │ │ - std::string_view query, _p_a_r_a_m_s const &) │ │ │ │ │ +   ssttrreeaamm__qquueerryy (_t_r_a_n_s_a_c_t_i_o_n___b_a_s_e &_t_x, │ │ │ │ │ + std::string_view query, _p_a_r_a_m_s _c_o_n_s_t &) │ │ │ │ │   Execute query on tx, stream results. │ │ │ │ │   │ │ │ │ │ -   ssttrreeaamm__qquueerryy (_s_t_r_e_a_m___q_u_e_r_y &&)=delete │ │ │ │ │ +   ssttrreeaamm__qquueerryy (_s_t_r_e_a_m___q_u_e_r_y &&)=_d_e_l_e_t_e │ │ │ │ │   │ │ │ │ │ - _s_t_r_e_a_m___q_u_e_r_y &  ooppeerraattoorr== (_s_t_r_e_a_m___q_u_e_r_y &&)=delete │ │ │ │ │ + _s_t_r_e_a_m___q_u_e_r_y &  ooppeerraattoorr== (_s_t_r_e_a_m___q_u_e_r_y &&)=_d_e_l_e_t_e │ │ │ │ │   │ │ │ │ │ - bool  ddoonnee () const &noexcept │ │ │ │ │ + _b_o_o_l  ddoonnee () _c_o_n_s_t &_n_o_e_x_c_e_p_t │ │ │ │ │   Has this stream reached the end of its │ │ │ │ │ data? │ │ │ │ │   │ │ │ │ │ - auto  bbeeggiinn () & │ │ │ │ │ + _a_u_t_o  bbeeggiinn () & │ │ │ │ │   Begin iterator. Only for use by "range │ │ │ │ │ for.". │ │ │ │ │   │ │ │ │ │ - auto  _e_n_d () const & │ │ │ │ │ + _a_u_t_o  _e_n_d () _c_o_n_s_t & │ │ │ │ │   End iterator. Only for use by "range │ │ │ │ │ for.". │ │ │ │ │   │ │ │ │ │ - std::tuple< TYPE... >  ppaarrssee__lliinnee (_z_v_i_e_w line) & │ │ │ │ │ + std::tuple< TYPE... >  ppaarrssee__lliinnee (_z_v_i_e_w _l_i_n_e) & │ │ │ │ │   Parse and convert the latest line of │ │ │ │ │ data we received. │ │ │ │ │   │ │ │ │ │ std::pair< line_handle, std::size_t >  rreeaadd__lliinnee () & │ │ │ │ │   Read a COPY line from the server. │ │ │ │ │   │ │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ @@ -71,15 +71,15 @@ │ │ │ │ │ Warning │ │ │ │ │ While a stream is active, you cannot execute queries, open a pipeline, │ │ │ │ │ etc. on the same transaction. A transaction can have at most one object │ │ │ │ │ of a type derived from _p_q_x_x_:_:_t_r_a_n_s_a_c_t_i_o_n___f_o_c_u_s active on it at a time. │ │ │ │ │ ********** MMeemmbbeerr FFuunnccttiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ │ ********** _?◆_? eenndd(()) ********** │ │ │ │ │ template │ │ │ │ │ -auto _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_s_t_r_e_a_m___q_u_e_r_y< TYPE >::end ( ) const & inline │ │ │ │ │ +_a_u_t_o _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_s_t_r_e_a_m___q_u_e_r_y< _T_Y_P_E >::end ( ) const & inline │ │ │ │ │ End iterator. Only for use by "range for.". │ │ │ │ │ The end iterator is a different type than the regular iterator. It simplifies │ │ │ │ │ the comparisons: we know at compile time that we're comparing to the end │ │ │ │ │ pointer. │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this class was generated from the following files: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/ │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1internal_1_1stream__query__input__iterator.html │ │ │ │ @@ -100,52 +100,52 @@ │ │ │ │ │ │ │ │

    Input iterator for stream_query. │ │ │ │ More...

    │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +using  │ │ │ │ │ │ │ │ │ │ │ │ +using  │ │ │ │ │ │ │ │

    │ │ │ │ Public Types

    │ │ │ │ -using value_type = std::tuple< TYPE... >
    value_type = std::tuple< TYPE... >
     
    │ │ │ │ -using difference_type = long
    difference_type = long
     
    │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +  │ │ │ │ │ │ │ │ │ │ │ │ +  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +value_type  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +bool  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +bool  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +stream_query_input_iterator &  │ │ │ │ │ │ │ │

    │ │ │ │ Public Member Functions

    │ │ │ │  stream_query_input_iterator (stream_t &home)
     
    │ │ │ │ - stream_query_input_iterator (stream_query_input_iterator const &)=default
    stream_query_input_iterator (stream_query_input_iterator const &)=default
     
    │ │ │ │ - stream_query_input_iterator (stream_query_input_iterator &&)=default
    stream_query_input_iterator (stream_query_input_iterator &&)=default
     
    │ │ │ │ stream_query_input_iteratoroperator++ () &
     Pre-increment. This is what you'd normally want to use.
     
    stream_query_input_iterator operator++ (int)
    stream_query_input_iterator operator++ (int)
     Post-increment. Only here to satisfy input_iterator concept.
     
    │ │ │ │ -value_type operator* () const
    operator* () const
     Dereference. There's no caching in here, so don't repeat calls.
     
    │ │ │ │ -bool operator== (stream_query_end_iterator) const noexcept
    operator== (stream_query_end_iterator) const noexcept
     Are we at the end?
     
    │ │ │ │ -bool operator!= (stream_query_end_iterator) const noexcept
    operator!= (stream_query_end_iterator) const noexcept
     Comparison only works for comparing to end().
     
    │ │ │ │ -stream_query_input_iteratoroperator= (stream_query_input_iterator &&rhs) noexcept
    operator= (stream_query_input_iterator &&rhs) noexcept
     
    │ │ │ │

    Detailed Description

    │ │ │ │
    template<typename... TYPE>
    │ │ │ │ class pqxx::internal::stream_query_input_iterator< TYPE >

    Input iterator for stream_query.

    │ │ │ │

    Just barely enough to support range-based "for" loops on stream_from. Don't assume that any of the usual behaviour works beyond that.

    │ │ │ │

    Member Function Documentation

    │ │ │ │ @@ -157,17 +157,17 @@ │ │ │ │
    │ │ │ │ template<typename... TYPE>
    │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -3,61 +3,61 @@ │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _P_u_b_l_i_c_ _T_y_p_e_s | _P_u_b_l_i_c_ _M_e_m_b_e_r_ _F_u_n_c_t_i_o_n_s | _L_i_s_t_ _o_f_ _a_l_l_ _m_e_m_b_e_r_s │ │ │ │ │ pqxx::internal::stream_query_input_iterator< TYPE > Class Template Reference │ │ │ │ │ Input iterator for _s_t_r_e_a_m___q_u_e_r_y. _M_o_r_e_._._. │ │ │ │ │ PPuubblliicc TTyyppeess │ │ │ │ │ -using  vvaalluuee__ttyyppee = std::tuple< TYPE... > │ │ │ │ │ +_u_s_i_n_g  vvaalluuee__ttyyppee = std::tuple< TYPE... > │ │ │ │ │   │ │ │ │ │ -using  ddiiffffeerreennccee__ttyyppee = long │ │ │ │ │ +_u_s_i_n_g  ddiiffffeerreennccee__ttyyppee = _l_o_n_g │ │ │ │ │   │ │ │ │ │ PPuubblliicc MMeemmbbeerr FFuunnccttiioonnss │ │ │ │ │   ssttrreeaamm__qquueerryy__iinnppuutt__iitteerraattoorr (_s_t_r_e_a_m___t &home) │ │ │ │ │   │ │ │ │ │   ssttrreeaamm__qquueerryy__iinnppuutt__iitteerraattoorr │ │ │ │ │ - (_s_t_r_e_a_m___q_u_e_r_y___i_n_p_u_t___i_t_e_r_a_t_o_r const &)=default │ │ │ │ │ + (_s_t_r_e_a_m___q_u_e_r_y___i_n_p_u_t___i_t_e_r_a_t_o_r _c_o_n_s_t &)=_d_e_f_a_u_l_t │ │ │ │ │   │ │ │ │ │   ssttrreeaamm__qquueerryy__iinnppuutt__iitteerraattoorr │ │ │ │ │ - (_s_t_r_e_a_m___q_u_e_r_y___i_n_p_u_t___i_t_e_r_a_t_o_r &&)=default │ │ │ │ │ + (_s_t_r_e_a_m___q_u_e_r_y___i_n_p_u_t___i_t_e_r_a_t_o_r &&)=_d_e_f_a_u_l_t │ │ │ │ │   │ │ │ │ │ _s_t_r_e_a_m___q_u_e_r_y___i_n_p_u_t___i_t_e_r_a_t_o_r &  ooppeerraattoorr++++ () & │ │ │ │ │   Pre-increment. This is what you'd normally want │ │ │ │ │ to use. │ │ │ │ │   │ │ │ │ │ - _s_t_r_e_a_m___q_u_e_r_y___i_n_p_u_t___i_t_e_r_a_t_o_r  _o_p_e_r_a_t_o_r_+_+ (int) │ │ │ │ │ + _s_t_r_e_a_m___q_u_e_r_y___i_n_p_u_t___i_t_e_r_a_t_o_r  _o_p_e_r_a_t_o_r_+_+ (_i_n_t) │ │ │ │ │   Post-increment. Only here to satisfy │ │ │ │ │ input_iterator concept. │ │ │ │ │   │ │ │ │ │ - value_type  ooppeerraattoorr** () const │ │ │ │ │ + value_type  ooppeerraattoorr** () _c_o_n_s_t │ │ │ │ │   Dereference. There's no caching in here, so │ │ │ │ │ don't repeat calls. │ │ │ │ │   │ │ │ │ │ - bool  ooppeerraattoorr==== (_s_t_r_e_a_m___q_u_e_r_y___e_n_d___i_t_e_r_a_t_o_r) const │ │ │ │ │ - noexcept │ │ │ │ │ + _b_o_o_l  ooppeerraattoorr==== (_s_t_r_e_a_m___q_u_e_r_y___e_n_d___i_t_e_r_a_t_o_r) _c_o_n_s_t │ │ │ │ │ + _n_o_e_x_c_e_p_t │ │ │ │ │   Are we at the end? │ │ │ │ │   │ │ │ │ │ - bool  ooppeerraattoorr!!== (_s_t_r_e_a_m___q_u_e_r_y___e_n_d___i_t_e_r_a_t_o_r) const │ │ │ │ │ - noexcept │ │ │ │ │ + _b_o_o_l  ooppeerraattoorr!!== (_s_t_r_e_a_m___q_u_e_r_y___e_n_d___i_t_e_r_a_t_o_r) _c_o_n_s_t │ │ │ │ │ + _n_o_e_x_c_e_p_t │ │ │ │ │   Comparison only works for comparing to end(). │ │ │ │ │   │ │ │ │ │ -_s_t_r_e_a_m___q_u_e_r_y___i_n_p_u_t___i_t_e_r_a_t_o_r &  ooppeerraattoorr== (_s_t_r_e_a_m___q_u_e_r_y___i_n_p_u_t___i_t_e_r_a_t_o_r &&rhs) │ │ │ │ │ - noexcept │ │ │ │ │ +_s_t_r_e_a_m___q_u_e_r_y___i_n_p_u_t___i_t_e_r_a_t_o_r &  ooppeerraattoorr== (_s_t_r_e_a_m___q_u_e_r_y___i_n_p_u_t___i_t_e_r_a_t_o_r &&_r_h_s) │ │ │ │ │ + _n_o_e_x_c_e_p_t │ │ │ │ │   │ │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ template │ │ │ │ │ class pqxx::internal::stream_query_input_iterator< TYPE > │ │ │ │ │ Input iterator for _s_t_r_e_a_m___q_u_e_r_y. │ │ │ │ │ Just barely enough to support range-based "for" loops on _s_t_r_e_a_m___f_r_o_m. Don't │ │ │ │ │ assume that any of the usual behaviour works beyond that. │ │ │ │ │ ********** MMeemmbbeerr FFuunnccttiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ │ ********** _?◆_? ooppeerraattoorr++++(()) ********** │ │ │ │ │ template │ │ │ │ │ _s_t_r_e_a_m___q_u_e_r_y___i_n_p_u_t___i_t_e_r_a_t_o_r _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_: │ │ │ │ │ -_s_t_r_e_a_m___q_u_e_r_y___i_n_p_u_t___i_t_e_r_a_t_o_r< TYPE >:: ( int  ) inline │ │ │ │ │ +_s_t_r_e_a_m___q_u_e_r_y___i_n_p_u_t___i_t_e_r_a_t_o_r< _T_Y_P_E >:: ( _i_n_t  ) inline │ │ │ │ │ operator++ │ │ │ │ │ Post-increment. Only here to satisfy input_iterator concept. │ │ │ │ │ The iterator that this returns is in an unusable state. │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this class was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/ │ │ │ │ │ _s_t_r_e_a_m___q_u_e_r_y___i_m_p_l_._h_x_x │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1largeobject.html │ │ │ │ @@ -171,15 +171,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
    │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
    stream_query_input_iterator pqxx::internal::stream_query_input_iterator< TYPE >::operator++ stream_query_input_iterator pqxx::internal::stream_query_input_iterator< TYPE >::operator++ (int int )
    │ │ │ │
    │ │ │ │ inline
     
    │ │ │ │ PQXX_PRIVATE std::string reason (connection const &, int err) const
     
    │ │ │ │

    Detailed Description

    │ │ │ │

    Identity of a large object.

    │ │ │ │ -
    Deprecated:
    Use the blob class instead.
    │ │ │ │ +
    Deprecated:
    Use the blob class instead.
    │ │ │ │

    Encapsulates the identity of a large object.

    │ │ │ │

    A largeobject must be accessed only from within a backend transaction, but the object's identity remains valid as long as the object exists.

    │ │ │ │

    Constructor & Destructor Documentation

    │ │ │ │ │ │ │ │

    ◆ largeobject() [1/5]

    │ │ │ │ │ │ │ │
    │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1largeobject__streambuf.html │ │ │ │ @@ -190,15 +190,15 @@ │ │ │ │
    │ │ │ │ virtual int_type underflow () override
     
    │ │ │ │

    Detailed Description

    │ │ │ │
    template<typename CHAR = char, typename TRAITS = std::char_traits<CHAR>>
    │ │ │ │ class pqxx::largeobject_streambuf< CHAR, TRAITS >

    Streambuf to use large objects in standard I/O streams.

    │ │ │ │ -
    Deprecated:
    Access large objects directly using the blob class.
    │ │ │ │ +
    Deprecated:
    Access large objects directly using the blob class.
    │ │ │ │

    The standard streambuf classes provide uniform access to data storage such as files or string buffers, so they can be accessed using standard input or output streams. This streambuf implementation provided similar access to large objects, so they could be read and written using the same stream classes.

    │ │ │ │

    This functionality was considered too fragile and complex, so it has been replaced with a single, much simpler class.

    │ │ │ │

    Member Data Documentation

    │ │ │ │ │ │ │ │

    ◆ default_mode

    │ │ │ │ │ │ │ │
    │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1largeobjectaccess.html │ │ │ │ @@ -238,15 +238,15 @@ │ │ │ │
 
bool operator>= (largeobject const &other) const
 Compare object identities.
 
│ │ │ │

Detailed Description

│ │ │ │

Accessor for large object's contents.

│ │ │ │ -
Deprecated:
Use the blob class instead.
│ │ │ │ +
Deprecated:
Use the blob class instead.
│ │ │ │

Member Typedef Documentation

│ │ │ │ │ │ │ │

◆ openmode

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1params.html │ │ │ │ @@ -181,15 +181,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
(binarystring const & value) &
│ │ │ │
│ │ │ │ -
Deprecated:
Append binarystring parameter.
│ │ │ │ +
Deprecated:
Append binarystring parameter.
│ │ │ │

The binarystring must stay valid for as long as the params remains active.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ append() [2/6]

│ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1quiet__errorhandler.html │ │ │ │ @@ -137,15 +137,15 @@ │ │ │ │  
errorhandler (errorhandler const &)=delete
 
│ │ │ │ errorhandleroperator= (errorhandler const &)=delete
 
│ │ │ │

Detailed Description

│ │ │ │ -
Deprecated:
Use a notice handler instead.
│ │ │ │ +
Deprecated:
Use a notice handler instead.
│ │ │ │

Member Function Documentation

│ │ │ │ │ │ │ │

◆ operator()()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1row.html │ │ │ │ @@ -497,15 +497,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
) const
│ │ │ │
│ │ │ │

Produce a slice of this row, containing the given range of columns.

│ │ │ │ -
Deprecated:
I haven't heard of anyone caring about row slicing at all in at least the last 15 years. Yet it adds complexity, so unless anyone files a bug explaining why they really need this feature, I'm going to remove it. Even if they do, the feature may need an update.
│ │ │ │ +
Deprecated:
I haven't heard of anyone caring about row slicing at all in at least the last 15 years. Yet it adds complexity, so unless anyone files a bug explaining why they really need this feature, I'm going to remove it. Even if they do, the feature may need an update.
│ │ │ │

The slice runs from the range's starting column to the range's end column, exclusive. It looks just like a normal result row, except slices can be empty.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ table_column()

│ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1stream__from.html │ │ │ │ @@ -209,15 +209,15 @@ │ │ │ │
 
static stream_from table (transaction_base &tx, table_path path, std::initializer_list< std::string_view > columns={})
 Factory: Stream data from a given table.
 
│ │ │ │

Detailed Description

│ │ │ │

Stream data from the database.

│ │ │ │ -
Deprecated:
Use transaction_base::stream.
│ │ │ │ +
Deprecated:
Use transaction_base::stream.
│ │ │ │

For larger data sets, retrieving data this way is likely to be faster than executing a query and then iterating and converting the rows fields. You will also be able to start processing before all of the data has come in.

│ │ │ │

There are also downsides. Not all kinds of query will work in a stream. But straightforward SELECT and UPDATE ... RETURNING queries should work. This function makes use of pqxx::stream_from, which in turn uses PostgreSQL's COPY command, so see the documentation for those to get the full details.

│ │ │ │

There are other downsides. If there stream encounters an error, it may leave the entire connection in an unusable state, so you'll have to give the whole thing up. Finally, opening a stream puts the connection in a special state, so you won't be able to do many other things with the connection or the transaction while the stream is open.

│ │ │ │

There are two ways of starting a stream: you stream either all rows in a table (using one of the factories, table() or raw_table()), or the results of a query (using the query() factory).

│ │ │ │

Usually you'll want the stream convenience wrapper in transaction_base, * so you don't need to deal with this class directly.

│ │ │ │
Warning
While a stream is active, you cannot execute queries, open a pipeline, etc. on the same transaction. A transaction can have at most one object of a type derived from pqxx::transaction_focus active on it at a time.
│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ @@ -250,15 +250,15 @@ │ │ │ │
)
│ │ │ │
│ │ │ │ │ │ │ │

Execute query, and stream over the results.

│ │ │ │ -
Deprecated:
Use factory function query instead.
│ │ │ │ +
Deprecated:
Use factory function query instead.
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ stream_from() [2/7]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -287,15 +287,15 @@ │ │ │ │ ) │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Stream all rows in table, all columns.

│ │ │ │ -
Deprecated:
Use factories table or raw_table instead.
│ │ │ │ +
Deprecated:
Use factories table or raw_table instead.
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ stream_from() [3/7]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -346,15 +346,15 @@ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Stream given columns from all rows in table.

│ │ │ │ -
Deprecated:
Use factories table or raw_table instead.
│ │ │ │ +
Deprecated:
Use factories table or raw_table instead.
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ stream_from() [4/7]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -399,15 +399,15 @@ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Stream given columns from all rows in table.

│ │ │ │ -
Deprecated:
Use factory function query instead.
│ │ │ │ +
Deprecated:
Use factory function query instead.
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ stream_from() [5/7]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -436,15 +436,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
Deprecated:
Use factories table or raw_table instead.
│ │ │ │ +
Deprecated:
Use factories table or raw_table instead.
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ stream_from() [6/7]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -481,15 +481,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
Deprecated:
Use factories table or raw_table instead.
│ │ │ │ +
Deprecated:
Use factories table or raw_table instead.
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ stream_from() [7/7]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -524,15 +524,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
Deprecated:
Use factories table or raw_table instead.
│ │ │ │ +
Deprecated:
Use factories table or raw_table instead.
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Member Function Documentation

│ │ │ │ │ │ │ │

◆ complete()

│ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/classpqxx_1_1stream__to.html │ │ │ │ @@ -218,15 +218,15 @@ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Create a stream, without specifying columns.

│ │ │ │ -
Deprecated:
Use table or raw_table as a factory.
│ │ │ │ +
Deprecated:
Use table or raw_table as a factory.
│ │ │ │

Fields will be inserted in whatever order the columns have in the database.

│ │ │ │

You'll probably want to specify the columns, so that the mapping between your data fields and the table is explicit in your code, and not hidden in an "implicit contract" between your code and your schema.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ stream_to() [2/2]

│ │ │ │ @@ -267,15 +267,15 @@ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Create a stream, specifying column names as a container of strings.

│ │ │ │ -
Deprecated:
Use table or raw_table as a factory.
│ │ │ │ +
Deprecated:
Use table or raw_table as a factory.
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Member Function Documentation

│ │ │ │ │ │ │ │

◆ complete()

│ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/composite_8hxx_source.html │ │ │ │ @@ -131,15 +131,15 @@ │ │ │ │
49 internal::concat("Invalid composite value string: ", text)};
│ │ │ │
50
│ │ │ │
51 here = next;
│ │ │ │
52
│ │ │ │
53 // TODO: Reuse parse_composite_field specialisation across calls.
│ │ │ │
54 constexpr auto num_fields{sizeof...(fields)};
│ │ │ │
55 std::size_t index{0};
│ │ │ │ -
56 (pqxx::internal::specialize_parse_composite_field<T>(enc)(
│ │ │ │ +
56 (pqxx::internal::specialize_parse_composite_field<T>(enc)(
│ │ │ │
57 index, text, here, fields, num_fields - 1),
│ │ │ │
58 ...);
│ │ │ │
59 if (here != std::size(text))
│ │ │ │
60 throw conversion_error{internal::concat(
│ │ │ │
61 "Composite value did not end at the closing parenthesis: '", text,
│ │ │ │
62 "'.")};
│ │ │ │
63 if (text[here - 1] != ')')
│ │ │ │ @@ -209,15 +209,15 @@ │ │ │ │
133 std::memcpy(begin, empty, std::size(empty));
│ │ │ │
134 return begin + std::size(empty);
│ │ │ │
135 }
│ │ │ │
136
│ │ │ │
137 char *pos{begin};
│ │ │ │
138 *pos++ = '(';
│ │ │ │
139
│ │ │ │ -
140 (pqxx::internal::write_composite_field<T>(pos, end, fields), ...);
│ │ │ │ +
140 (pqxx::internal::write_composite_field<T>(pos, end, fields), ...);
│ │ │ │
141
│ │ │ │
142 // If we've got multiple fields, "backspace" that last comma.
│ │ │ │
143 if constexpr (num_fields > 1)
│ │ │ │
144 --pos;
│ │ │ │
145 *pos++ = ')';
│ │ │ │
146 *pos++ = '\0';
│ │ │ │
147 return pos;
│ │ │ │ @@ -226,14 +226,15 @@ │ │ │ │
149} // namespace pqxx
│ │ │ │
150#endif
│ │ │ │
Value conversion failed, e.g. when converting "Hello" to int.
Definition except.hxx:283
│ │ │ │
Internal items for libpqxx' own use. Do not use these yourself.
Definition encodings.cxx:33
│ │ │ │
std::string concat(TYPE... item)
Efficiently combine a bunch of items into one big string.
Definition concat.hxx:31
│ │ │ │
std::size_t size_composite_field_buffer(T const &field)
Conservatively estimate buffer size needed for a composite field.
Definition array-composite.hxx:309
│ │ │ │
PQXX_LIBEXPORT glyph_scanner_func * get_glyph_scanner(encoding_group)
Look up the glyph scanner function for a given encoding group.
│ │ │ │ +
composite_field_parser< T > specialize_parse_composite_field(encoding_group enc)
Look up implementation of parse_composite_field for ENC.
Definition array-composite.hxx:274
│ │ │ │
The home of all libpqxx classes, functions, templates, etc.
Definition array.cxx:27
│ │ │ │
char * composite_into_buf(char *begin, char *end, T const &...fields)
Render a series of values as a single composite SQL value.
Definition composite.hxx:123
│ │ │ │
std::size_t composite_size_buffer(T const &...fields) noexcept
Estimate the buffer size needed to represent a value of a composite type.
Definition composite.hxx:96
│ │ │ │
void parse_composite(pqxx::internal::encoding_group enc, std::string_view text, T &...fields)
Parse a string representation of a value of a composite type.
Definition composite.hxx:35
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -36,15 +36,15 @@ │ │ │ │ │ 49 _i_n_t_e_r_n_a_l_:_:_c_o_n_c_a_t("Invalid composite value string: ", text)}; │ │ │ │ │ 50 │ │ │ │ │ 51 here = next; │ │ │ │ │ 52 │ │ │ │ │ 53 // TODO: Reuse parse_composite_field specialisation across calls. │ │ │ │ │ 54 constexpr auto num_fields{sizeof...(fields)}; │ │ │ │ │ 55 std::size_t index{0}; │ │ │ │ │ -56 (pqxx::internal::specialize_parse_composite_field(enc)( │ │ │ │ │ +56 (_p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_s_p_e_c_i_a_l_i_z_e___p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d_<_T_>(enc)( │ │ │ │ │ 57 index, text, here, fields, num_fields - 1), │ │ │ │ │ 58 ...); │ │ │ │ │ 59 if (here != std::size(text)) │ │ │ │ │ 60 throw _c_o_n_v_e_r_s_i_o_n___e_r_r_o_r{_i_n_t_e_r_n_a_l_:_:_c_o_n_c_a_t( │ │ │ │ │ 61 "Composite value did not end at the closing parenthesis: '", text, │ │ │ │ │ 62 "'.")}; │ │ │ │ │ 63 if (text[here - 1] != ')') │ │ │ │ │ @@ -108,15 +108,15 @@ │ │ │ │ │ 133 std::memcpy(begin, empty, std::size(empty)); │ │ │ │ │ 134 return begin + std::size(empty); │ │ │ │ │ 135 } │ │ │ │ │ 136 │ │ │ │ │ 137 char *pos{begin}; │ │ │ │ │ 138 *pos++ = '('; │ │ │ │ │ 139 │ │ │ │ │ -140 (pqxx::internal::write_composite_field(pos, end, fields), ...); │ │ │ │ │ +140 (_p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_w_r_i_t_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d_<_T_>(pos, end, fields), ...); │ │ │ │ │ 141 │ │ │ │ │ 142 // If we've got multiple fields, "backspace" that last comma. │ │ │ │ │ 143 if constexpr (num_fields > 1) │ │ │ │ │ 144 --pos; │ │ │ │ │ 145 *pos++ = ')'; │ │ │ │ │ 146 *pos++ = '\0'; │ │ │ │ │ 147 return pos; │ │ │ │ │ @@ -136,14 +136,19 @@ │ │ │ │ │ _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_s_i_z_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d___b_u_f_f_e_r │ │ │ │ │ std::size_t size_composite_field_buffer(T const &field) │ │ │ │ │ Conservatively estimate buffer size needed for a composite field. │ │ │ │ │ DDeeffiinniittiioonn array-composite.hxx:309 │ │ │ │ │ _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_g_e_t___g_l_y_p_h___s_c_a_n_n_e_r │ │ │ │ │ PQXX_LIBEXPORT glyph_scanner_func * get_glyph_scanner(encoding_group) │ │ │ │ │ Look up the glyph scanner function for a given encoding group. │ │ │ │ │ +_p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_s_p_e_c_i_a_l_i_z_e___p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d │ │ │ │ │ +composite_field_parser< T > specialize_parse_composite_field(encoding_group │ │ │ │ │ +enc) │ │ │ │ │ +Look up implementation of parse_composite_field for ENC. │ │ │ │ │ +DDeeffiinniittiioonn array-composite.hxx:274 │ │ │ │ │ _p_q_x_x │ │ │ │ │ The home of all libpqxx classes, functions, templates, etc. │ │ │ │ │ DDeeffiinniittiioonn array.cxx:27 │ │ │ │ │ _p_q_x_x_:_:_c_o_m_p_o_s_i_t_e___i_n_t_o___b_u_f │ │ │ │ │ char * composite_into_buf(char *begin, char *end, T const &...fields) │ │ │ │ │ Render a series of values as a single composite SQL value. │ │ │ │ │ DDeeffiinniittiioonn composite.hxx:123 │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/concat_8hxx_source.html │ │ │ │ @@ -106,48 +106,49 @@ │ │ │ │
6
│ │ │ │
7# include "pqxx/strconv.hxx"
│ │ │ │
8
│ │ │ │
9namespace pqxx::internal
│ │ │ │
10{
│ │ │ │
12template<typename TYPE>
│ │ │ │
│ │ │ │ -
13void render_item(TYPE const &item, char *&here, char *end)
│ │ │ │ +
13void render_item(TYPE const &item, char *&here, char *end)
│ │ │ │
14{
│ │ │ │ -
15 auto const next = string_traits<TYPE>::into_buf(here, end, item) - 1;
│ │ │ │ -
16 PQXX_ASSUME(next >= here);
│ │ │ │ -
17 here = next;
│ │ │ │ +
15 auto const next = string_traits<TYPE>::into_buf(here, end, item) - 1;
│ │ │ │ +
16 PQXX_ASSUME(next >= here);
│ │ │ │ +
17 here = next;
│ │ │ │
18}
│ │ │ │
│ │ │ │
19
│ │ │ │
20
│ │ │ │
21// C++20: Support non-random_access_range ranges.
│ │ │ │
23
│ │ │ │ -
30template<typename... TYPE>
│ │ │ │ +
30template<typename... TYPE>
│ │ │ │
│ │ │ │ -
31[[nodiscard]] inline std::string concat(TYPE... item)
│ │ │ │ +
31[[nodiscard]] inline std::string concat(TYPE... item)
│ │ │ │
32{
│ │ │ │ -
33 std::string buf;
│ │ │ │ +
33 std::string buf;
│ │ │ │
34 // Size to accommodate string representations of all inputs, minus their
│ │ │ │
35 // terminating zero bytes.
│ │ │ │ -
36 buf.resize(size_buffer(item...));
│ │ │ │ +
36 buf.resize(size_buffer(item...));
│ │ │ │
37
│ │ │ │ -
38 char *const data{buf.data()};
│ │ │ │ -
39 char *here = data;
│ │ │ │ -
40 char *end = data + std::size(buf);
│ │ │ │ -
41 (render_item(item, here, end), ...);
│ │ │ │ +
38 char *const data{buf.data()};
│ │ │ │ +
39 char *here = data;
│ │ │ │ +
40 char *end = data + std::size(buf);
│ │ │ │ +
41 (render_item(item, here, end), ...);
│ │ │ │
42
│ │ │ │ -
43 buf.resize(static_cast<std::size_t>(here - data));
│ │ │ │ -
44 return buf;
│ │ │ │ +
43 buf.resize(static_cast<std::size_t>(here - data));
│ │ │ │ +
44 return buf;
│ │ │ │
45}
│ │ │ │
│ │ │ │
46} // namespace pqxx::internal
│ │ │ │
47#endif
│ │ │ │
Internal items for libpqxx' own use. Do not use these yourself.
Definition encodings.cxx:33
│ │ │ │
std::string concat(TYPE... item)
Efficiently combine a bunch of items into one big string.
Definition concat.hxx:31
│ │ │ │
void render_item(TYPE const &item, char *&here, char *end)
Convert item to a string, write it into [here, end).
Definition concat.hxx:13
│ │ │ │ +
composite_field_parser< T > specialize_parse_composite_field(encoding_group enc)
Look up implementation of parse_composite_field for ENC.
Definition array-composite.hxx:274
│ │ │ │
static char * into_buf(char *begin, char *end, TYPE const &value)
Write value's string representation into buffer at begin.
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -1468,14 +1468,15 @@ │ │ │ │
void throw_null_conversion(std::string const &type)
Throw exception for attempt to convert SQL NULL to given type.
Definition strconv.cxx:248
│ │ │ │
constexpr std::size_t size_esc_bin(std::size_t binary_bytes) noexcept
Compute buffer size needed to escape binary data for use as a BYTEA.
Definition util.hxx:516
│ │ │ │
constexpr char number_to_digit(int i) noexcept
Convert a number in [0, 9] to its ASCII digit.
Definition conversions.hxx:27
│ │ │ │
constexpr bool cmp_less(LEFT lhs, RIGHT rhs) noexcept
Same as std::cmp_less, or a workaround where that's not available.
Definition util.hxx:65
│ │ │ │
constexpr int digit_to_number(char c) noexcept
Compute numeric value of given textual digit (assuming that it is a digit).
Definition conversions.hxx:34
│ │ │ │
void PQXX_LIBEXPORT esc_bin(bytes_view binary_data, char buffer[]) noexcept
Hex-escape binary data into a buffer.
Definition util.cxx:134
│ │ │ │
std::string to_string_float(T value)
Floating-point implementations for pqxx::to_string().
Definition strconv.cxx:661
│ │ │ │ +
composite_field_parser< T > specialize_parse_composite_field(encoding_group enc)
Look up implementation of parse_composite_field for ENC.
Definition array-composite.hxx:274
│ │ │ │
constexpr bool cmp_greater(LEFT lhs, RIGHT rhs) noexcept
C++20 std::cmp_greater, or workaround if not available.
Definition util.hxx:87
│ │ │ │
std::string state_buffer_overrun(int have_bytes, int need_bytes)
Summarize buffer overrun.
Definition strconv.cxx:260
│ │ │ │
char * generic_into_buf(char *begin, char *end, T const &value)
Generic implementation for into_buf, on top of to_buf.
Definition conversions.hxx:95
│ │ │ │
constexpr bool cmp_greater_equal(LEFT lhs, RIGHT rhs) noexcept
C++20 std::cmp_greater_equal, or workaround if not available.
Definition util.hxx:113
│ │ │ │
constexpr bool cmp_less_equal(LEFT lhs, RIGHT rhs) noexcept
C++20 std::cmp_less_equal, or workaround if not available.
Definition util.hxx:100
│ │ │ │
constexpr std::size_t size_unesc_bin(std::size_t escaped_bytes) noexcept
Compute binary size from the size of its escaped version.
Definition util.hxx:525
│ │ │ │
The home of all libpqxx classes, functions, templates, etc.
Definition array.cxx:27
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -25,120 +25,120 @@ │ │ │ │ │ 19 │ │ │ │ │ 20/* Internal helpers for string conversion, and conversion implementations. │ │ │ │ │ 21 * │ │ │ │ │ 22 * Do not include this header directly. The libpqxx headers do it for you. │ │ │ │ │ 23 */ │ │ │ │ │ 24namespace _p_q_x_x_:_:_i_n_t_e_r_n_a_l │ │ │ │ │ 25{ │ │ │ │ │ -_2_7inline constexpr char _n_u_m_b_e_r___t_o___d_i_g_i_t(int i) noexcept │ │ │ │ │ +_2_7inline constexpr char _n_u_m_b_e_r___t_o___d_i_g_i_t(int _i) noexcept │ │ │ │ │ 28{ │ │ │ │ │ -29 return static_cast(i + '0'); │ │ │ │ │ +29 return static_cast(_i + '0'); │ │ │ │ │ 30} │ │ │ │ │ 31 │ │ │ │ │ 32 │ │ │ │ │ -_3_4constexpr int _d_i_g_i_t___t_o___n_u_m_b_e_r(char c) noexcept │ │ │ │ │ +_3_4constexpr int _d_i_g_i_t___t_o___n_u_m_b_e_r(char _c) noexcept │ │ │ │ │ 35{ │ │ │ │ │ -36 return c - '0'; │ │ │ │ │ +36 return _c - '0'; │ │ │ │ │ 37} │ │ │ │ │ 38 │ │ │ │ │ 39 │ │ │ │ │ 41 │ │ │ │ │ 44std::string PQXX_LIBEXPORT │ │ │ │ │ -45_s_t_a_t_e___b_u_f_f_e_r___o_v_e_r_r_u_n(int have_bytes, int need_bytes); │ │ │ │ │ +45_s_t_a_t_e___b_u_f_f_e_r___o_v_e_r_r_u_n(int _h_a_v_e___b_y_t_e_s, int _n_e_e_d___b_y_t_e_s); │ │ │ │ │ 46 │ │ │ │ │ 47 │ │ │ │ │ 48template │ │ │ │ │ -49inline std::string _s_t_a_t_e___b_u_f_f_e_r___o_v_e_r_r_u_n(HAVE have_bytes, NEED need_bytes) │ │ │ │ │ +49inline std::string _s_t_a_t_e___b_u_f_f_e_r___o_v_e_r_r_u_n(_H_A_V_E _h_a_v_e___b_y_t_e_s, _N_E_E_D _n_e_e_d___b_y_t_e_s) │ │ │ │ │ 50{ │ │ │ │ │ 51 return _s_t_a_t_e___b_u_f_f_e_r___o_v_e_r_r_u_n( │ │ │ │ │ -52 static_cast(have_bytes), static_cast(need_bytes)); │ │ │ │ │ +52 static_cast(_h_a_v_e___b_y_t_e_s), static_cast(_n_e_e_d___b_y_t_e_s)); │ │ │ │ │ 53} │ │ │ │ │ 54 │ │ │ │ │ 55 │ │ │ │ │ -57[[noreturn]] PQXX_LIBEXPORT PQXX_COLD void │ │ │ │ │ +57[[_n_o_r_e_t_u_r_n]] PQXX_LIBEXPORT PQXX_COLD void │ │ │ │ │ 58_t_h_r_o_w___n_u_l_l___c_o_n_v_e_r_s_i_o_n(std::string const &type); │ │ │ │ │ 59 │ │ │ │ │ 60 │ │ │ │ │ -62[[noreturn]] PQXX_LIBEXPORT PQXX_COLD void │ │ │ │ │ +62[[_n_o_r_e_t_u_r_n]] PQXX_LIBEXPORT PQXX_COLD void │ │ │ │ │ 63_t_h_r_o_w___n_u_l_l___c_o_n_v_e_r_s_i_o_n(std::string_view type); │ │ │ │ │ 64 │ │ │ │ │ 65 │ │ │ │ │ 67 │ │ │ │ │ _7_6template struct _d_i_s_a_l_l_o_w_e_d___a_m_b_i_g_u_o_u_s___c_h_a_r___c_o_n_v_e_r_s_i_o_n │ │ │ │ │ 77{ │ │ │ │ │ 78 static constexpr bool converts_to_string{false}; │ │ │ │ │ 79 static constexpr bool converts_from_string{false}; │ │ │ │ │ -80 static char *into_buf(char *, char *, CHAR_TYPE) = delete; │ │ │ │ │ +80 static char *into_buf(char *, char *, _C_H_A_R___T_Y_P_E) = delete; │ │ │ │ │ 81 static constexpr _z_v_i_e_w │ │ │ │ │ -82 to_buf(char *, char *, CHAR_TYPE const &) noexcept = delete; │ │ │ │ │ +82 to_buf(char *, char *, _C_H_A_R___T_Y_P_E const &) noexcept = delete; │ │ │ │ │ 83 │ │ │ │ │ 84 static constexpr std::size_t │ │ │ │ │ -85 size_buffer(CHAR_TYPE const &) noexcept = delete; │ │ │ │ │ -86 static CHAR_TYPE from_string(std::string_view) = delete; │ │ │ │ │ +85 size_buffer(_C_H_A_R___T_Y_P_E const &) noexcept = delete; │ │ │ │ │ +86 static _C_H_A_R___T_Y_P_E from_string(std::string_view) = delete; │ │ │ │ │ 87}; │ │ │ │ │ 88 │ │ │ │ │ 89 │ │ │ │ │ -90template PQXX_LIBEXPORT extern std::string _t_o___s_t_r_i_n_g___f_l_o_a_t(T); │ │ │ │ │ +90template PQXX_LIBEXPORT extern std::string _t_o___s_t_r_i_n_g___f_l_o_a_t(_T); │ │ │ │ │ 91 │ │ │ │ │ 92 │ │ │ │ │ 94template │ │ │ │ │ -_9_5inline char *_g_e_n_e_r_i_c___i_n_t_o___b_u_f(char *begin, char *end, T const &value) │ │ │ │ │ +_9_5inline char *_g_e_n_e_r_i_c___i_n_t_o___b_u_f(char *begin, char *end, _T const &value) │ │ │ │ │ 96{ │ │ │ │ │ 97 _z_v_i_e_w const text{_s_t_r_i_n_g___t_r_a_i_t_s_<_T_>_:_:_t_o___b_u_f(begin, end, value)}; │ │ │ │ │ -98 auto const space{end - begin}; │ │ │ │ │ +98 auto const _s_p_a_c_e{end - begin}; │ │ │ │ │ 99 // Include the trailing zero. │ │ │ │ │ -100 auto const len = std::size(text) + 1; │ │ │ │ │ -101 if (_i_n_t_e_r_n_a_l_:_:_c_m_p___g_r_e_a_t_e_r(len, space)) │ │ │ │ │ +100 auto const _l_e_n = std::size(text) + 1; │ │ │ │ │ +101 if (_i_n_t_e_r_n_a_l_:_:_c_m_p___g_r_e_a_t_e_r(_l_e_n, _s_p_a_c_e)) │ │ │ │ │ 102 throw _c_o_n_v_e_r_s_i_o_n___o_v_e_r_r_u_n{ │ │ │ │ │ -103 "Not enough buffer space to insert " + type_name + ". " + │ │ │ │ │ -104 _s_t_a_t_e___b_u_f_f_e_r___o_v_e_r_r_u_n(space, len)}; │ │ │ │ │ -105 std::memmove(begin, text.data(), len); │ │ │ │ │ -106 return begin + len; │ │ │ │ │ +103 "Not enough buffer space to insert " + _t_y_p_e___n_a_m_e_<_T_> + ". " + │ │ │ │ │ +104 _s_t_a_t_e___b_u_f_f_e_r___o_v_e_r_r_u_n(_s_p_a_c_e, _l_e_n)}; │ │ │ │ │ +105 std::memmove(begin, text.data(), _l_e_n); │ │ │ │ │ +106 return begin + _l_e_n; │ │ │ │ │ 107} │ │ │ │ │ 108 │ │ │ │ │ 109 │ │ │ │ │ 110// C++20: Guard with concept? │ │ │ │ │ _1_1_2template struct _i_n_t_e_g_r_a_l___t_r_a_i_t_s │ │ │ │ │ 113{ │ │ │ │ │ 114 static constexpr bool converts_to_string{true}; │ │ │ │ │ 115 static constexpr bool converts_from_string{true}; │ │ │ │ │ -116 static PQXX_LIBEXPORT T from_string(std::string_view text); │ │ │ │ │ -117 static PQXX_LIBEXPORT _z_v_i_e_w to_buf(char *begin, char *end, T const &value); │ │ │ │ │ -118 static PQXX_LIBEXPORT char *into_buf(char *begin, char *end, T const │ │ │ │ │ +116 static PQXX_LIBEXPORT _T from_string(std::string_view text); │ │ │ │ │ +117 static PQXX_LIBEXPORT _z_v_i_e_w to_buf(char *begin, char *end, _T const &value); │ │ │ │ │ +118 static PQXX_LIBEXPORT char *into_buf(char *begin, char *end, _T const │ │ │ │ │ &value); │ │ │ │ │ 119 │ │ │ │ │ -120 static constexpr std::size_t size_buffer(T const &) noexcept │ │ │ │ │ +120 static constexpr std::size_t size_buffer(_T const &) noexcept │ │ │ │ │ 121 { │ │ │ │ │ 126 return std::is_signed_v + std::numeric_limits::digits10 + 1 + 1; │ │ │ │ │ 127 } │ │ │ │ │ 128}; │ │ │ │ │ 129 │ │ │ │ │ 130 │ │ │ │ │ 131// C++20: Guard with concept? │ │ │ │ │ _1_3_3template struct _f_l_o_a_t___t_r_a_i_t_s │ │ │ │ │ 134{ │ │ │ │ │ 135 static constexpr bool converts_to_string{true}; │ │ │ │ │ 136 static constexpr bool converts_from_string{true}; │ │ │ │ │ -137 static PQXX_LIBEXPORT T from_string(std::string_view text); │ │ │ │ │ -138 static PQXX_LIBEXPORT _z_v_i_e_w _t_o___b_u_f(char *begin, char *end, T const &value); │ │ │ │ │ -139 static PQXX_LIBEXPORT char *into_buf(char *begin, char *end, T const │ │ │ │ │ +137 static PQXX_LIBEXPORT _T from_string(std::string_view text); │ │ │ │ │ +138 static PQXX_LIBEXPORT _z_v_i_e_w _t_o___b_u_f(char *begin, char *end, _T const &value); │ │ │ │ │ +139 static PQXX_LIBEXPORT char *into_buf(char *begin, char *end, _T const │ │ │ │ │ &value); │ │ │ │ │ 140 │ │ │ │ │ 141 // Return a nonnegative integral value's number of decimal digits. │ │ │ │ │ 142 static constexpr std::size_t digits10(std::size_t value) noexcept │ │ │ │ │ 143 { │ │ │ │ │ 144 if (value < 10) │ │ │ │ │ 145 return 1; │ │ │ │ │ 146 else │ │ │ │ │ 147 return 1 + digits10(value / 10); │ │ │ │ │ 148 } │ │ │ │ │ 149 │ │ │ │ │ -150 static constexpr std::size_t size_buffer(T const &) noexcept │ │ │ │ │ +150 static constexpr std::size_t size_buffer(_T const &) noexcept │ │ │ │ │ 151 { │ │ │ │ │ -152 using lims = std::numeric_limits; │ │ │ │ │ +152 using _l_i_m_s = std::numeric_limits; │ │ │ │ │ 153 // See #328 for a detailed discussion on the maximum number of digits. │ │ │ │ │ 154 // │ │ │ │ │ 155 // In a nutshell: for the big cases, the scientific notation is always │ │ │ │ │ 156 // the shortest one, and therefore the one that to_chars will pick. │ │ │ │ │ 157 // │ │ │ │ │ 158 // So... How long can the scientific notation get? 1 (for sign) + 1 (for │ │ │ │ │ 159 // decimal point) + 1 (for 'e') + 1 (for exponent sign) + max_digits10 + │ │ │ │ │ @@ -154,27 +154,27 @@ │ │ │ │ │ 169 // the smallest power of 10 which a normalised version of T can represent. │ │ │ │ │ 170 // But the smallest denormalised power of 10 that T can represent is │ │ │ │ │ 171 // another max_digits10 powers of 10 below that. │ │ │ │ │ 172 // needs a minus sign. │ │ │ │ │ 173 // │ │ │ │ │ 174 // All this stuff messes with my head a bit because it's on the order of │ │ │ │ │ 175 // log10(log10(n)). It's easy to get the number of logs wrong. │ │ │ │ │ -176 auto const max_pos_exp{digits10(lims::max_exponent10)}; │ │ │ │ │ +176 auto const _m_a_x___p_o_s___e_x_p{digits10(lims::max_exponent10)}; │ │ │ │ │ 177 // Really want std::abs(lims::min_exponent10), but MSVC 2017 apparently has │ │ │ │ │ 178 // problems with std::abs. So we use -lims::min_exponent10 instead. │ │ │ │ │ -179 auto const max_neg_exp{ │ │ │ │ │ +179 auto const _m_a_x___n_e_g___e_x_p{ │ │ │ │ │ 180 digits10(lims::max_digits10 - lims::min_exponent10)}; │ │ │ │ │ 181 return 1 + // Sign. │ │ │ │ │ 182 1 + // Decimal point. │ │ │ │ │ 183 std::numeric_limits::max_digits10 + // Mantissa digits. │ │ │ │ │ 184 1 + // Exponent "e". │ │ │ │ │ 185 1 + // Exponent sign. │ │ │ │ │ 186 // Spell this weirdly to stop Windows compilers from reading this as │ │ │ │ │ 187 // a call to their "max" macro when NOMINMAX is not defined. │ │ │ │ │ -188 (std::max)(max_pos_exp, max_neg_exp) + // Exponent digits. │ │ │ │ │ +188 (std::max)(_m_a_x___p_o_s___e_x_p, _m_a_x___n_e_g___e_x_p) + // Exponent digits. │ │ │ │ │ 189 1; // Terminating zero. │ │ │ │ │ 190 } │ │ │ │ │ 191}; │ │ │ │ │ 192} // namespace pqxx::internal │ │ │ │ │ 193 │ │ │ │ │ 194 │ │ │ │ │ 195namespace _p_q_x_x │ │ │ │ │ @@ -1007,106 +1007,106 @@ │ │ │ │ │ 1039 using _e_l_t___t_r_a_i_t_s = _s_t_r_i_n_g___t_r_a_i_t_s_<_e_l_t___t_y_p_e_>; │ │ │ │ │ 1040 static constexpr _z_v_i_e_w s_null{"NULL"}; │ │ │ │ │ 1041 │ │ │ │ │ 1042public: │ │ │ │ │ 1043 static constexpr bool converts_to_string{true}; │ │ │ │ │ 1044 static constexpr bool converts_from_string{false}; │ │ │ │ │ 1045 │ │ │ │ │ -1046 static _z_v_i_e_w to_buf(char *begin, char *end, Container const &value) │ │ │ │ │ +1046 static _z_v_i_e_w to_buf(char *begin, char *end, _C_o_n_t_a_i_n_e_r const &value) │ │ │ │ │ 1047 { │ │ │ │ │ 1048 return generic_to_buf(begin, end, value); │ │ │ │ │ 1049 } │ │ │ │ │ 1050 │ │ │ │ │ -1051 static char *into_buf(char *begin, char *end, Container const &value) │ │ │ │ │ +1051 static char *into_buf(char *begin, char *end, _C_o_n_t_a_i_n_e_r const &value) │ │ │ │ │ 1052 { │ │ │ │ │ -1053 assert(begin <= end); │ │ │ │ │ -1054 std::size_t const budget{size_buffer(value)}; │ │ │ │ │ -1055 if (_i_n_t_e_r_n_a_l_:_:_c_m_p___l_e_s_s(end - begin, budget)) │ │ │ │ │ +1053 _a_s_s_e_r_t(begin <= end); │ │ │ │ │ +1054 std::size_t const _b_u_d_g_e_t{size_buffer(value)}; │ │ │ │ │ +1055 if (_i_n_t_e_r_n_a_l_:_:_c_m_p___l_e_s_s(end - begin, _b_u_d_g_e_t)) │ │ │ │ │ 1056 throw _c_o_n_v_e_r_s_i_o_n___o_v_e_r_r_u_n{ │ │ │ │ │ 1057 "Not enough buffer space to convert array to string."}; │ │ │ │ │ 1058 │ │ │ │ │ -1059 char *here = begin; │ │ │ │ │ -1060 *here++ = '{'; │ │ │ │ │ +1059 char *_h_e_r_e = begin; │ │ │ │ │ +1060 *_h_e_r_e++ = '{'; │ │ │ │ │ 1061 │ │ │ │ │ -1062 bool nonempty{false}; │ │ │ │ │ -1063 for (auto const &elt : value) │ │ │ │ │ +1062 bool _n_o_n_e_m_p_t_y{false}; │ │ │ │ │ +1063 for (auto const &_e_l_t : value) │ │ │ │ │ 1064 { │ │ │ │ │ -1065 if (is_null(elt)) │ │ │ │ │ +1065 if (is_null(_e_l_t)) │ │ │ │ │ 1066 { │ │ │ │ │ -1067 s_null.copy(here, std::size(s_null)); │ │ │ │ │ -1068 here += std::size(s_null); │ │ │ │ │ +1067 s_null.copy(_h_e_r_e, std::size(s_null)); │ │ │ │ │ +1068 _h_e_r_e += std::size(s_null); │ │ │ │ │ 1069 } │ │ │ │ │ -1070 else if constexpr (is_sql_array) │ │ │ │ │ +1070 else if constexpr (_i_s___s_q_l___a_r_r_a_y_<_e_l_t___t_y_p_e_>) │ │ │ │ │ 1071 { │ │ │ │ │ 1072 // Render nested array in-place. Then erase the trailing zero. │ │ │ │ │ -1073 here = _e_l_t___t_r_a_i_t_s_:_:_i_n_t_o___b_u_f(here, end, elt) - 1; │ │ │ │ │ +1073 _h_e_r_e = _e_l_t___t_r_a_i_t_s_:_:_i_n_t_o___b_u_f(_h_e_r_e, end, _e_l_t) - 1; │ │ │ │ │ 1074 } │ │ │ │ │ -1075 else if constexpr (is_unquoted_safe) │ │ │ │ │ +1075 else if constexpr (_i_s___u_n_q_u_o_t_e_d___s_a_f_e_<_e_l_t___t_y_p_e_>) │ │ │ │ │ 1076 { │ │ │ │ │ 1077 // No need to quote or escape. Just convert the value straight into │ │ │ │ │ 1078 // its place in the array, and "backspace" the trailing zero. │ │ │ │ │ -1079 here = _e_l_t___t_r_a_i_t_s_:_:_i_n_t_o___b_u_f(here, end, elt) - 1; │ │ │ │ │ +1079 _h_e_r_e = _e_l_t___t_r_a_i_t_s_:_:_i_n_t_o___b_u_f(_h_e_r_e, end, _e_l_t) - 1; │ │ │ │ │ 1080 } │ │ │ │ │ 1081 else │ │ │ │ │ 1082 { │ │ │ │ │ -1083 *here++ = '"'; │ │ │ │ │ +1083 *_h_e_r_e++ = '"'; │ │ │ │ │ 1084 │ │ │ │ │ 1085 // Use the tail end of the destination buffer as an intermediate │ │ │ │ │ 1086 // buffer. │ │ │ │ │ -1087 auto const elt_budget{pqxx::size_buffer(elt)}; │ │ │ │ │ -1088 assert(elt_budget < static_cast(end - here)); │ │ │ │ │ -1089 for (char const c : _e_l_t___t_r_a_i_t_s_:_:_t_o___b_u_f(end - elt_budget, end, elt)) │ │ │ │ │ +1087 auto const _e_l_t___b_u_d_g_e_t{pqxx::size_buffer(_e_l_t)}; │ │ │ │ │ +1088 _a_s_s_e_r_t(_e_l_t___b_u_d_g_e_t < static_cast(end - _h_e_r_e)); │ │ │ │ │ +1089 for (char const _c : _e_l_t___t_r_a_i_t_s_:_:_t_o___b_u_f(end - _e_l_t___b_u_d_g_e_t, end, _e_l_t)) │ │ │ │ │ 1090 { │ │ │ │ │ 1091 // We copy the intermediate buffer into the final buffer, char by │ │ │ │ │ 1092 // char, with escaping where necessary. │ │ │ │ │ 1093 // TODO: This will not work for all encodings. UTF8 & ASCII are OK. │ │ │ │ │ -1094 if (c == '\\' or c == '"') │ │ │ │ │ -1095 *here++ = '\\'; │ │ │ │ │ -1096 *here++ = c; │ │ │ │ │ +1094 if (_c == '\\' _o_r _c == '"') │ │ │ │ │ +1095 *_h_e_r_e++ = '\\'; │ │ │ │ │ +1096 *_h_e_r_e++ = _c; │ │ │ │ │ 1097 } │ │ │ │ │ -1098 *here++ = '"'; │ │ │ │ │ +1098 *_h_e_r_e++ = '"'; │ │ │ │ │ 1099 } │ │ │ │ │ -1100 *here++ = array_separator; │ │ │ │ │ -1101 nonempty = true; │ │ │ │ │ +1100 *_h_e_r_e++ = _a_r_r_a_y___s_e_p_a_r_a_t_o_r_<_e_l_t___t_y_p_e_>; │ │ │ │ │ +1101 _n_o_n_e_m_p_t_y = true; │ │ │ │ │ 1102 } │ │ │ │ │ 1103 │ │ │ │ │ 1104 // Erase that last comma, if present. │ │ │ │ │ -1105 if (nonempty) │ │ │ │ │ -1106 here--; │ │ │ │ │ +1105 if (_n_o_n_e_m_p_t_y) │ │ │ │ │ +1106 _h_e_r_e--; │ │ │ │ │ 1107 │ │ │ │ │ -1108 *here++ = '}'; │ │ │ │ │ -1109 *here++ = '\0'; │ │ │ │ │ +1108 *_h_e_r_e++ = '}'; │ │ │ │ │ +1109 *_h_e_r_e++ = '\0'; │ │ │ │ │ 1110 │ │ │ │ │ -1111 return here; │ │ │ │ │ +1111 return _h_e_r_e; │ │ │ │ │ 1112 } │ │ │ │ │ 1113 │ │ │ │ │ -1114 static std::size_t size_buffer(Container const &value) noexcept │ │ │ │ │ +1114 static std::size_t size_buffer(_C_o_n_t_a_i_n_e_r const &value) noexcept │ │ │ │ │ 1115 { │ │ │ │ │ -1116 if constexpr (is_unquoted_safe) │ │ │ │ │ +1116 if constexpr (_i_s___u_n_q_u_o_t_e_d___s_a_f_e_<_e_l_t___t_y_p_e_>) │ │ │ │ │ 1117 return 3 + std::accumulate( │ │ │ │ │ 1118 std::begin(value), std::end(value), std::size_t{}, │ │ │ │ │ -1119 [](std::size_t acc, elt_type const &elt) { │ │ │ │ │ +1119 [](std::size_t _a_c_c, elt_type const &_e_l_t) { │ │ │ │ │ 1120 // Budget for each element includes a terminating zero. │ │ │ │ │ 1121 // We won't actually be wanting those, but don't subtract │ │ │ │ │ 1122 // that one byte: we want room for a separator instead. │ │ │ │ │ -1123 return acc + (pqxx::is_null(elt) ? │ │ │ │ │ +1123 return _a_c_c + (pqxx::is_null(_e_l_t) ? │ │ │ │ │ 1124 std::size(s_null) : │ │ │ │ │ -1125 _e_l_t___t_r_a_i_t_s_:_:_s_i_z_e___b_u_f_f_e_r(elt)); │ │ │ │ │ +1125 _e_l_t___t_r_a_i_t_s_:_:_s_i_z_e___b_u_f_f_e_r(_e_l_t)); │ │ │ │ │ 1126 }); │ │ │ │ │ 1127 else │ │ │ │ │ 1128 return 3 + std::accumulate( │ │ │ │ │ 1129 std::begin(value), std::end(value), std::size_t{}, │ │ │ │ │ -1130 [](std::size_t acc, elt_type const &elt) { │ │ │ │ │ +1130 [](std::size_t _a_c_c, elt_type const &_e_l_t) { │ │ │ │ │ 1131 // Opening and closing quotes, plus worst-case escaping, │ │ │ │ │ 1132 // and the one byte for the trailing zero becomes room │ │ │ │ │ 1133 // for a separator. │ │ │ │ │ -1134 std::size_t const elt_size{ │ │ │ │ │ -1135 pqxx::is_null(elt) ? std::size(s_null) : │ │ │ │ │ -1136 _e_l_t___t_r_a_i_t_s_:_:_s_i_z_e___b_u_f_f_e_r(elt)}; │ │ │ │ │ -1137 return acc + 2 * elt_size + 2; │ │ │ │ │ +1134 std::size_t const _e_l_t___s_i_z_e{ │ │ │ │ │ +1135 pqxx::is_null(_e_l_t) ? std::size(s_null) : │ │ │ │ │ +1136 _e_l_t___t_r_a_i_t_s_:_:_s_i_z_e___b_u_f_f_e_r(_e_l_t)}; │ │ │ │ │ +1137 return _a_c_c + 2 * _e_l_t___s_i_z_e + 2; │ │ │ │ │ 1138 }); │ │ │ │ │ 1139 } │ │ │ │ │ 1140 │ │ │ │ │ 1141 // We don't yet support parsing of array types using from_string. Doing so │ │ │ │ │ 1142 // would require a reference to the connection. │ │ │ │ │ 1143}; │ │ │ │ │ 1144} // namespace pqxx::internal │ │ │ │ │ @@ -1302,14 +1302,19 @@ │ │ │ │ │ void PQXX_LIBEXPORT esc_bin(bytes_view binary_data, char buffer[]) noexcept │ │ │ │ │ Hex-escape binary data into a buffer. │ │ │ │ │ DDeeffiinniittiioonn util.cxx:134 │ │ │ │ │ _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_t_o___s_t_r_i_n_g___f_l_o_a_t │ │ │ │ │ std::string to_string_float(T value) │ │ │ │ │ Floating-point implementations for pqxx::to_string(). │ │ │ │ │ DDeeffiinniittiioonn strconv.cxx:661 │ │ │ │ │ +_p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_s_p_e_c_i_a_l_i_z_e___p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d │ │ │ │ │ +composite_field_parser< T > specialize_parse_composite_field(encoding_group │ │ │ │ │ +enc) │ │ │ │ │ +Look up implementation of parse_composite_field for ENC. │ │ │ │ │ +DDeeffiinniittiioonn array-composite.hxx:274 │ │ │ │ │ _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_c_m_p___g_r_e_a_t_e_r │ │ │ │ │ constexpr bool cmp_greater(LEFT lhs, RIGHT rhs) noexcept │ │ │ │ │ C++20 std::cmp_greater, or workaround if not available. │ │ │ │ │ DDeeffiinniittiioonn util.hxx:87 │ │ │ │ │ _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_s_t_a_t_e___b_u_f_f_e_r___o_v_e_r_r_u_n │ │ │ │ │ std::string state_buffer_overrun(int have_bytes, int need_bytes) │ │ │ │ │ Summarize buffer overrun. │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/datatypes.html │ │ │ │ @@ -93,52 +93,52 @@ │ │ │ │
Supporting additional data types
│ │ │ │ │ │ │ │
│ │ │ │

Communication with the database mostly happens in a text format. When you include an integer value in a query, either you use to_string to convert it to that text format, or under the bonnet, libpqxx does it for you. When you get a query result field "as a float," libpqxx converts from the text format to a floating-point type. These conversions are everywhere in libpqxx.

│ │ │ │

The conversion system supports many built-in types, but it is also extensible. You can "teach" libpqxx (in the scope of your own application) to convert additional types of values to and from PostgreSQL's string format.

│ │ │ │

This is massively useful, but it's not for the faint of heart. You'll need to specialise some templates. And, the API for doing this can change with any major libpqxx release.

│ │ │ │

If that happens, your code may fail to compile with the newer libpqxx version, and you'll have to go through the NEWS file to find the API changes. Usually it'll be a small change, like an additional function you need to implement, or a constant you need to define.

│ │ │ │ -

│ │ │ │ +

│ │ │ │ Converting types

│ │ │ │

In your application, a conversion is driven entirely by a C++ type you specify. The value's SQL type on the database side has nothing to do with it. Nor is there anything in the string that would identify its type. Your code says "convert to this type" and libpqxx does it.

│ │ │ │

So, if you've SELECTed a 64-bit integer from the database, and you try to convert it to a C++ short, one of two things will happen: either the number is small enough to fit in your short and it just works, or else it throws a conversion exception. Similarly, if you try to read a 32-bit SQL int as a C++ 32-bit unsigned int, that'll work fine, unless the value happens to be negative. In such cases the conversion will throw a conversion_error.

│ │ │ │

Or, your database table might have a text column, but a given field may contain a string that looks just like a number. You can convert that value to an integer type just fine. Or to a floating-point type. All that matters to the conversion is the actual value, and the type your code specifies.

│ │ │ │

In some cases the templates for these conversions can tell the type from the arguments you pass them:

│ │ │ │
auto x = to_string(99);
│ │ │ │

In other cases you may need to instantiate template explicitly:

│ │ │ │
auto y = from_string<int>("99");
│ │ │ │ -

│ │ │ │ +

│ │ │ │ Supporting a new type

│ │ │ │

Let's say you have some other SQL type which you want to be able to store in, or retrieve from, the database. What would it take to support that?

│ │ │ │

Sometimes you do not need complete support. You might need a conversion to a string but not from a string, for example. You write out the conversion at compile time, so don't be too afraid to be incomplete. If you leave out one of these steps, it's not going to crash at run time or mess up your data. The worst that can happen is that your code won't build.

│ │ │ │

So what do you need for a complete conversion?

│ │ │ │

First off, of course, you need a C++ type. It may be your own, but it doesn't have to be. It could be a type from a third-party library, or even one from the standard library that libpqxx does not yet support.

│ │ │ │

First thing to do is specialise the pqxx::type_name variable to give the type a human-readable name. That allows libpqxx error messages and such to talk about the type. If you don't define a name, libpqxx will try to figure one out with some help from the compiler, but it may not always be easy to read.

│ │ │ │

Then, does your type have a built-in null value? For example, a char * can be null on the C++ side. Or some types are always null, such as nullptr. You specialise the pqxx::nullness template to specify the details.

│ │ │ │

Finally, you specialise the pqxx::string_traits template. This is where you define the actual conversions.

│ │ │ │

Let's go through these steps one by one.

│ │ │ │ -

│ │ │ │ +

│ │ │ │ Your type

│ │ │ │

You'll need a type for which the conversions are not yet defined, because the C++ type is what determines the right conversion. One type, one set of conversions.

│ │ │ │

The type doesn't have to be one that you create. The conversion logic was designed such that you can build it around any type. So you can just as easily build a conversion for a type that's defined somewhere else. There's no need to include any special methods or other members inside the type itself. That's also why libpqxx can convert built-in types like int.

│ │ │ │

By the way, if the type is an enum, you don't need to do any of this. Just invoke the preprocessor macro PQXX_DECLARE_ENUM_CONVERSION, from the global namespace near the top of your translation unit, and pass the type as an argument.

│ │ │ │

The library also provides specialisations for std::optional<T>, std::shared_ptr<T>, and std::unique_ptr<T>. If you have conversions for T, you'll also automatically have conversions for those.

│ │ │ │ -

│ │ │ │ +

│ │ │ │ Specialise <tt>type_name</tt>

│ │ │ │

When errors happen during conversion, libpqxx will compose error messages for the user. Sometimes these will include the name of the type that's being converted.

│ │ │ │

To tell libpqxx the name of each type, there's a template variable called pqxx::type_name. For any given type T, it should have a specialisation that provides that T's human-readable name:

│ │ │ │
// T is your type.
│ │ │ │
namespace pqxx
│ │ │ │
{
│ │ │ │
template<> std::string const type_name<T>{"My T type's name"};
│ │ │ │
}
│ │ │ │
The home of all libpqxx classes, functions, templates, etc.
Definition array.cxx:27
│ │ │ │

(Yes, this means that you need to define something inside the pqxx namespace. Future versions of libpqxx may move this into a separate namespace.)

│ │ │ │

Define this early on in your translation unit, before any code that might cause libpqxx to need the name. That way, the libpqxx code which needs to know the type's name can see your definition.

│ │ │ │ -

│ │ │ │ +

│ │ │ │ Specialise <tt>nullness</tt>

│ │ │ │

A struct template pqxx::nullness defines whether your type has a natural "null value" built in. If so, it also provides member functions for producing and recognising null values.

│ │ │ │

The simplest scenario is also the most common: most types don't have a null value built in. There is no "null `int`" in C++. In that kind of case, just derive your nullness traits from pqxx::no_null as a shorthand:

│ │ │ │
// T is your type.
│ │ │ │
namespace pqxx
│ │ │ │
{
│ │ │ │
template<> struct nullness<T> : pqxx::no_null<T> {};
│ │ │ │ @@ -172,15 +172,15 @@ │ │ │ │
}
│ │ │ │
static bool is_null(TYPE const &value)
Is value a null?
│ │ │ │
static TYPE null()
Return a null value.
│ │ │ │
static bool has_null
Does this type have a null value?
Definition strconv.hxx:93
│ │ │ │
static bool always_null
Is this type always null?
Definition strconv.hxx:96
│ │ │ │

You may be wondering why there's a function to produce a null value, but also a function to check whether a value is null. Why not just compare the value to the result of null()? Because two null values may not be equal (like in SQL, where NULL <> NULL). Or T may have multiple different null values. Or T may override the comparison operator to behave in some unusual way.

│ │ │ │

As a third case, your type may be one that always represents a null value. This is the case for std::nullptr_t and std::nullopt_t. In that case, you set nullness<TYPE>::always_null to true (as well as has_null of course), and you won't need to define any actual conversions.

│ │ │ │ -

│ │ │ │ +

│ │ │ │ Specialise <tt>string_traits</tt>

│ │ │ │

This part is the most work. You can skip it for types that are always null, but those will be rare.

│ │ │ │

The APIs for doing this are designed so that you don't need to allocate memory on the free store, also known as "the heap": new/delete. Memory allocation can be hidden inside std::string, std::vector, etc. The conversion API allows you to use std::string for convenience, or memory buffers for speed.

│ │ │ │

Start by specialising the pqxx::string_traits template. You don't absolutely have to implement all parts of this API. Generally, if it compilers, you're OK for the time being. Just bear in mind that future libpqxx versions may change the API — or how it uses the API internally.

│ │ │ │
namespace pqxx
│ │ │ │
{
│ │ │ │
// T is your type.
│ │ │ │ @@ -211,22 +211,22 @@ │ │ │ │
static TYPE from_string(std::string_view text)
Parse a string representation of a TYPE value.
│ │ │ │
static std::size_t size_buffer(TYPE const &value) noexcept
Estimate how much buffer space is needed to represent value.
│ │ │ │
static zview to_buf(char *begin, char *end, TYPE const &value)
Return a string_view representing value, plus terminating zero.
│ │ │ │
static constexpr bool converts_to_string
Is conversion from TYPE to strings supported?
Definition strconv.hxx:159
│ │ │ │
static char * into_buf(char *begin, char *end, TYPE const &value)
Write value's string representation into buffer at begin.
│ │ │ │
static constexpr bool converts_from_string
Is conversion from string_view to TYPE supported?
Definition strconv.hxx:165
│ │ │ │

You'll also need to write those member functions, or as many of them as needed to get your code to build.

│ │ │ │ -

│ │ │ │ +

│ │ │ │ <tt>from_string</tt>

│ │ │ │

We start off simple: from_string parses a string as a value of T, and returns that value.

│ │ │ │

The string may or may not be zero-terminated; it's just the string_view from beginning to end (with end being exclusive). In your tests, be sure to cover cases where the string does not end in a zero byte!

│ │ │ │

It's perfectly possible that the string doesn't actually represent a T value. Mistakes happen. There can be corner cases. When you run into this, throw a pqxx::conversion_error.

│ │ │ │

(Of course it's also possible that you run into some other error, so it's fine to throw different exceptions as well. But when it's definitely "this is not │ │ │ │ the right format for a `T`," throw conversion_error.)

│ │ │ │ -

│ │ │ │ +

│ │ │ │ <tt>to_buf</tt>

│ │ │ │

In this function, you convert a value of T into a string that the postgres server will understand.

│ │ │ │

The caller will provide you with a buffer where you can write the string, if you need it: from begin to end exclusive. It's a half-open interval, so don't access *end.

│ │ │ │

If the buffer is insufficient for you to do the conversion, throw a pqxx::conversion_overrun. It doesn't have to be exact: you can be a little pessimistic and demand a bit more space than you need. Just be sure to throw the exception if there's any risk of overrunning the buffer.

│ │ │ │

You don't have to use the buffer for this function though. For example, pqxx::string_traits<bool>::to_buf returns a compile-time constant string and completely ignores the buffer.

│ │ │ │

Even if you do use the buffer, your string does not have to start at the beginning of the buffer. For example, the integer conversions may work from right to left, if that's easier: they can start by writing the least significant digit to the end of the buffer, divide the remainder by 10, and repeat for the next digit.

│ │ │ │

Return a pqxx::zview. This is basically a std::string_view, but with one difference: when you create a zview you guarantee that there is a valid zero byte right after the string_view. The zero byte does not count as part of its size, but it has to be there.

│ │ │ │ @@ -234,36 +234,36 @@ │ │ │ │
void invariant(zview z)
│ │ │ │
{
│ │ │ │
assert(z[std::size(z)] == 0);
│ │ │ │
}
│ │ │ │

The trailing zero should not go inside the zview, but if you convert into the buffer, do make sure you that trailing stays inside the buffer, i.e. before the end. (If there's no room for that zero inside the buffer, throw pqxx::conversion_error).

│ │ │ │

Beware of locales when converting. If you use standard library features like sprintf, they may obey whatever locale is currently set on the system where the code runs. That means that a simple integer like 1000000 may come out as "1000000" on your system, but as "1,000,000" on mine, or as "1.000.000" for somebody else, and on an Indian system it may be "1,00,000". Don't let that happen, or it will confuse things. Use only non-locale-sensitive library functions. Values coming from or going to the database should be in fixed, non-localised formats.

│ │ │ │

If your conversions need to deal with fields in types that libpqxx already supports, you can use the conversion functions for those: pqxx::from_string, pqxx::to_string, pqxx::to_buf. They in turn will call the string_traits specialisations for those types. Or, you can call their string_traits directly.

│ │ │ │ -

│ │ │ │ +

│ │ │ │ <tt>into_buf</tt>

│ │ │ │

This is a stricter version of to_buf. All the same requirements apply, but in addition you must write your string into the given buffer, starting exactly at begin.

│ │ │ │

That's why this function returns just a simple pointer: the address right behind the trailing zero. If the caller wants to use the string, they can find it at begin. If they want to write another value into the rest of the buffer, they can continue writing at the location you returned.

│ │ │ │ -

│ │ │ │ +

│ │ │ │ <tt>size_buffer</tt>

│ │ │ │

Here you estimate how much buffer space you need for converting a T to a string. Be precise if you can, but pessimistic if you must. It's usually better to waste a few bytes of space than to spend a lot of time computing the exact buffer space you need. And failing the conversion because you under-budgeted the buffer is worst of all.

│ │ │ │

Include the trailing zero in the buffer size. If your to_buf takes more space than just what's needed to store the result, include that too.

│ │ │ │

Make size_buffer a constexpr function if you can. It can allow the caller to allocate the buffer on the stack, with a size known at compile time.

│ │ │ │ -

│ │ │ │ +

│ │ │ │ Optional: Specialise <tt>is_unquoted_safe</tt>

│ │ │ │

When converting arrays or composite values to strings, libpqxx may need to quote values and escape any special characters. This takes time.

│ │ │ │

Some types though, such as integral or floating-point types, can never have any special characters such as quotes, commas, or backslashes in their string representations. In such cases, there's no need to quote or escape such values in SQL arrays or composite types.

│ │ │ │

If your type is like that, you can tell libpqxx about this by defining:

│ │ │ │
namespace pqxx
│ │ │ │
{
│ │ │ │
// T is your type.
│ │ │ │
template<> inline constexpr bool is_unquoted_safe<T>{true};
│ │ │ │
}
│ │ │ │

The code that converts this type of field to strings in an array or a composite type can then use a simpler, more efficient variant of the code. It's always safe to leave this out; it's just an optimisation for when you're completely sure that it's safe.

│ │ │ │

Do not do this if a string representation of your type may contain a comma; semicolon; parenthesis; brace; quote; backslash; newline; or any other character that might need escaping.

│ │ │ │ -

│ │ │ │ +

│ │ │ │ Optional: Specialise <tt>param_format</tt>

│ │ │ │

This one you don't generally need to worry about. Read on if you're writing a type which represents raw binary data, or if you're writing a template where some specialisations may contain raw binary data.

│ │ │ │

When you call parameterised statements, or prepared statements with parameters, libpqxx needs to pass your parameters on to libpq, the underlying C-level PostgreSQL client library.

│ │ │ │

There are two formats for doing that: text and binary. In the first, we represent all values as strings in the PostgreSQL text format, and the server then converts them into its own internal binary representation. That's what those string conversions above are all about, and it's what we do for almost all types of parameters.

│ │ │ │

But we do it differently when the parameter is a contiguous series of raw bytes and the corresponding SQL type is BYTEA. There is a text format for those, but we bypass it for efficiency. The server can use the binary data in the exact same form, without any conversion or extra processing. The binary data is also twice as compact during transport.

│ │ │ │

(People sometimes ask why we can't just treat all types as binary. However the general case isn't so clear-cut. The binary formats are not documented, there are no guarantees that they will be platform-independent or that they will remain stable across postgres releases, and there's no really solid way to detect when we might get the format wrong. On top of all that, the conversions aren't necessarily as straightforward and efficient as they sound. So, for the general case, libpqxx sticks with the text formats. Raw binary data alone stands out as a clear win.)

│ │ │ │

Long story short, the machinery for passing parameters needs to know: is this parameter a binary string, or not? In the normal case it can assume "no," and that's what it does. The text format is always a safe choice; we just try to use the binary format where it's faster.

│ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/deprecated.html │ │ │ │ @@ -93,87 +93,87 @@ │ │ │ │
Deprecated List
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
Class pqxx::array_parser
│ │ │ │
Use pqxx::array instead.
│ │ │ │
Class pqxx::basic_fieldstream< CHAR, TRAITS >
│ │ │ │ -
To convert a field's value string to some other type, e.g. to an int, use the field's as<...>() member function. To read a field efficiently just as a string, use its c_str() or its as<std::string_vview>().
│ │ │ │ +
To convert a field's value string to some other type, e.g. to an int, use the field's as<...>() member function. To read a field efficiently just as a string, use its c_str() or its as<std::string_vview>().
│ │ │ │
Class pqxx::basic_ilostream< CHAR, TRAITS >
│ │ │ │ -
Access large objects directly using the blob class.
│ │ │ │ +
Access large objects directly using the blob class.
│ │ │ │
Class pqxx::basic_lostream< CHAR, TRAITS >
│ │ │ │ -
Access large objects directly using the blob class.
│ │ │ │ +
Access large objects directly using the blob class.
│ │ │ │
Class pqxx::basic_olostream< CHAR, TRAITS >
│ │ │ │ -
Access large objects directly using the blob class.
│ │ │ │ +
Access large objects directly using the blob class.
│ │ │ │
Class pqxx::binarystring
│ │ │ │ -
Use bytes and bytes_view for binary data. In C++20 or better, any contiguous_range of std::byte will do.
│ │ │ │ +
Use bytes and bytes_view for binary data. In C++20 or better, any contiguous_range of std::byte will do.
│ │ │ │
Member pqxx::blob::read (std::vector< std::byte, ALLOC > &buf)
│ │ │ │ -
As libpqxx moves to C++20 as its baseline language version, this will take and return std::span<std::byte>.
│ │ │ │ +
As libpqxx moves to C++20 as its baseline language version, this will take and return std::span<std::byte>.
│ │ │ │
Member pqxx::connection::get_errorhandlers () const
│ │ │ │ -
Return pointers to the active errorhandlers.
│ │ │ │ +
Return pointers to the active errorhandlers.
│ │ │ │
Member pqxx::connection::set_variable (std::string_view var, std::string_view value) &
│ │ │ │ -
To set a session variable, use set_session_var. To set a transaction-local variable, execute an SQL SET command.
│ │ │ │ +
To set a session variable, use set_session_var. To set a transaction-local variable, execute an SQL SET command.
│ │ │ │
Member pqxx::connection_base
│ │ │ │ -
Old base class for connection. They are now the same class.
│ │ │ │ -
Member pqxx::encrypt_password (char const user[], char const password[])
│ │ │ │ -
Use connection::encrypt_password instead.
│ │ │ │ +
Old base class for connection. They are now the same class.
│ │ │ │
Member pqxx::encrypt_password (zview user, zview password)
│ │ │ │ +
Use connection::encrypt_password instead.
│ │ │ │ +
Member pqxx::encrypt_password (char const user[], char const password[])
│ │ │ │
Use connection::encrypt_password instead.
│ │ │ │
Class pqxx::errorhandler
│ │ │ │ -
Base class for obsolete error-handler callbacks.
│ │ │ │ +
Base class for obsolete error-handler callbacks.
│ │ │ │
Member pqxx::fieldstream
│ │ │ │ -
Read a field using field::as<...>() or field::c_str().
│ │ │ │ +
Read a field using field::as<...>() or field::c_str().
│ │ │ │
Member pqxx::from_query
│ │ │ │ -
Use transaction_base::stream instead of stream_from.
│ │ │ │ +
Use transaction_base::stream instead of stream_from.
│ │ │ │
Struct pqxx::from_query_t
│ │ │ │ -
Use stream_from::query() instead.
│ │ │ │ +
Use stream_from::query() instead.
│ │ │ │
Member pqxx::from_table
│ │ │ │ -
Use transaction_base::stream instead of stream_from.
│ │ │ │ +
Use transaction_base::stream instead of stream_from.
│ │ │ │
Struct pqxx::from_table_t
│ │ │ │ -
Use stream_from::table() instead.
│ │ │ │ +
Use stream_from::table() instead.
│ │ │ │
Class pqxx::internal::dynamic_params< IT, ACCESSOR >
│ │ │ │ -
Use params instead.
│ │ │ │ +
Use params instead.
│ │ │ │
Class pqxx::largeobject
│ │ │ │ -
Use the blob class instead.
│ │ │ │ +
Use the blob class instead.
│ │ │ │
Class pqxx::largeobject_streambuf< CHAR, TRAITS >
│ │ │ │ -
Access large objects directly using the blob class.
│ │ │ │ +
Access large objects directly using the blob class.
│ │ │ │
Class pqxx::largeobjectaccess
│ │ │ │ -
Use the blob class instead.
│ │ │ │ +
Use the blob class instead.
│ │ │ │
Member pqxx::operator<< (std::basic_ostream< CHAR > &s, field const &value)
│ │ │ │ -
The C++ streams library is not great to work with. In particular, error handling is easy to get wrong. So you're probably better off doing this by hand.
│ │ │ │ +
The C++ streams library is not great to work with. In particular, error handling is easy to get wrong. So you're probably better off doing this by hand.
│ │ │ │
Member pqxx::params::append (binarystring const &value) &
│ │ │ │ -
Append binarystring parameter.
│ │ │ │ +
Append binarystring parameter.
│ │ │ │
Namespace pqxx::prepare
│ │ │ │ -
The new params class replaces all of this.
│ │ │ │ +
The new params class replaces all of this.
│ │ │ │
Class pqxx::quiet_errorhandler
│ │ │ │ -
Use a notice handler instead.
│ │ │ │ +
Use a notice handler instead.
│ │ │ │
Member pqxx::row::slice (size_type sbegin, size_type send) const
│ │ │ │ -
I haven't heard of anyone caring about row slicing at all in at least the last 15 years. Yet it adds complexity, so unless anyone files a bug explaining why they really need this feature, I'm going to remove it. Even if they do, the feature may need an update.
│ │ │ │ +
I haven't heard of anyone caring about row slicing at all in at least the last 15 years. Yet it adds complexity, so unless anyone files a bug explaining why they really need this feature, I'm going to remove it. Even if they do, the feature may need an update.
│ │ │ │
Class pqxx::stream_from
│ │ │ │ -
Use transaction_base::stream.
│ │ │ │ +
Use transaction_base::stream.
│ │ │ │
Member pqxx::stream_from::stream_from (transaction_base &tx, from_table_t, std::string_view table, Columns const &columns)
│ │ │ │ -
Use factory function query instead.
│ │ │ │ -
Member pqxx::stream_from::stream_from (transaction_base &tx, std::string_view table)
│ │ │ │ -
Use factories table or raw_table instead.
│ │ │ │ -
Member pqxx::stream_from::stream_from (transaction_base &tx, std::string_view table, Columns const &columns)
│ │ │ │ -
Use factories table or raw_table instead.
│ │ │ │ +
Use factory function query instead.
│ │ │ │
Member pqxx::stream_from::stream_from (transaction_base &, std::string_view table, Iter columns_begin, Iter columns_end)
│ │ │ │ -
Use factories table or raw_table instead.
│ │ │ │ +
Use factories table or raw_table instead.
│ │ │ │ +
Member pqxx::stream_from::stream_from (transaction_base &tx, std::string_view table, Columns const &columns)
│ │ │ │ +
Use factories table or raw_table instead.
│ │ │ │ +
Member pqxx::stream_from::stream_from (transaction_base &tx, std::string_view table)
│ │ │ │ +
Use factories table or raw_table instead.
│ │ │ │
Member pqxx::stream_from::stream_from (transaction_base &, from_table_t, std::string_view table, Iter columns_begin, Iter columns_end)
│ │ │ │ -
Use factories table or raw_table instead.
│ │ │ │ +
Use factories table or raw_table instead.
│ │ │ │
Member pqxx::stream_from::stream_from (transaction_base &, from_table_t, std::string_view table)
│ │ │ │ -
Use factories table or raw_table instead.
│ │ │ │ +
Use factories table or raw_table instead.
│ │ │ │
Member pqxx::stream_from::stream_from (transaction_base &, from_query_t, std::string_view query)
│ │ │ │ -
Use factory function query instead.
│ │ │ │ +
Use factory function query instead.
│ │ │ │
Member pqxx::stream_to::stream_to (transaction_base &, std::string_view table_name, Columns const &columns)
│ │ │ │ -
Use table or raw_table as a factory.
│ │ │ │ +
Use table or raw_table as a factory.
│ │ │ │
Member pqxx::stream_to::stream_to (transaction_base &tx, std::string_view table_name)
│ │ │ │ -
Use table or raw_table as a factory.
│ │ │ │ +
Use table or raw_table as a factory.
│ │ │ │
Member pqxx::strip_t
│ │ │ │ -
In C++20 we'll replace this with std::remove_cvref.
│ │ │ │ +
In C++20 we'll replace this with std::remove_cvref.
│ │ │ │
Member pqxx::transaction_base::set_variable (std::string_view var, std::string_view value)
│ │ │ │
To set a transaction-local variable, execute an SQL SET command. To set a session variable, use the connection's set_session_var function.
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -26,18 +26,18 @@ │ │ │ │ │ Return pointers to the active errorhandlers. │ │ │ │ │ Member _p_q_x_x_:_:_c_o_n_n_e_c_t_i_o_n_:_:_s_e_t___v_a_r_i_a_b_l_e (std::string_view var, std::string_view │ │ │ │ │ value) & │ │ │ │ │ To set a session variable, use _s_e_t___s_e_s_s_i_o_n___v_a_r. To set a transaction- │ │ │ │ │ local variable, execute an SQL SET command. │ │ │ │ │ Member _p_q_x_x_:_:_c_o_n_n_e_c_t_i_o_n___b_a_s_e │ │ │ │ │ Old base class for connection. They are now the same class. │ │ │ │ │ - Member _p_q_x_x_:_:_e_n_c_r_y_p_t___p_a_s_s_w_o_r_d (char const user[], char const password[]) │ │ │ │ │ - Use _c_o_n_n_e_c_t_i_o_n_:_:_e_n_c_r_y_p_t___p_a_s_s_w_o_r_d instead. │ │ │ │ │ Member _p_q_x_x_:_:_e_n_c_r_y_p_t___p_a_s_s_w_o_r_d (zview user, zview password) │ │ │ │ │ Use _c_o_n_n_e_c_t_i_o_n_:_:_e_n_c_r_y_p_t___p_a_s_s_w_o_r_d instead. │ │ │ │ │ + Member _p_q_x_x_:_:_e_n_c_r_y_p_t___p_a_s_s_w_o_r_d (char const user[], char const password[]) │ │ │ │ │ + Use _c_o_n_n_e_c_t_i_o_n_:_:_e_n_c_r_y_p_t___p_a_s_s_w_o_r_d instead. │ │ │ │ │ Class _p_q_x_x_:_:_e_r_r_o_r_h_a_n_d_l_e_r │ │ │ │ │ Base class for obsolete error-handler callbacks. │ │ │ │ │ Member _p_q_x_x_:_:_f_i_e_l_d_s_t_r_e_a_m │ │ │ │ │ Read a field using _f_i_e_l_d_:_:_a_s<...>() or _f_i_e_l_d_:_:_c___s_t_r_(_). │ │ │ │ │ Member _p_q_x_x_:_:_f_r_o_m___q_u_e_r_y │ │ │ │ │ Use _t_r_a_n_s_a_c_t_i_o_n___b_a_s_e_:_:_s_t_r_e_a_m instead of _s_t_r_e_a_m___f_r_o_m. │ │ │ │ │ Struct _p_q_x_x_:_:_f_r_o_m___q_u_e_r_y___t │ │ │ │ │ @@ -70,22 +70,22 @@ │ │ │ │ │ explaining why they really need this feature, I'm going to remove it. │ │ │ │ │ Even if they do, the feature may need an update. │ │ │ │ │ Class _p_q_x_x_:_:_s_t_r_e_a_m___f_r_o_m │ │ │ │ │ Use _t_r_a_n_s_a_c_t_i_o_n___b_a_s_e_:_:_s_t_r_e_a_m. │ │ │ │ │ Member _p_q_x_x_:_:_s_t_r_e_a_m___f_r_o_m_:_:_s_t_r_e_a_m___f_r_o_m (_t_r_a_n_s_a_c_t_i_o_n___b_a_s_e &tx, _f_r_o_m___t_a_b_l_e___t, │ │ │ │ │ std::string_view table, Columns const &columns) │ │ │ │ │ Use factory function _q_u_e_r_y instead. │ │ │ │ │ - Member _p_q_x_x_:_:_s_t_r_e_a_m___f_r_o_m_:_:_s_t_r_e_a_m___f_r_o_m (_t_r_a_n_s_a_c_t_i_o_n___b_a_s_e &tx, std::string_view │ │ │ │ │ - table) │ │ │ │ │ + Member _p_q_x_x_:_:_s_t_r_e_a_m___f_r_o_m_:_:_s_t_r_e_a_m___f_r_o_m (_t_r_a_n_s_a_c_t_i_o_n___b_a_s_e &, std::string_view │ │ │ │ │ + table, Iter columns_begin, Iter columns_end) │ │ │ │ │ Use factories _t_a_b_l_e or _r_a_w___t_a_b_l_e instead. │ │ │ │ │ Member _p_q_x_x_:_:_s_t_r_e_a_m___f_r_o_m_:_:_s_t_r_e_a_m___f_r_o_m (_t_r_a_n_s_a_c_t_i_o_n___b_a_s_e &tx, std::string_view │ │ │ │ │ table, Columns const &columns) │ │ │ │ │ Use factories _t_a_b_l_e or _r_a_w___t_a_b_l_e instead. │ │ │ │ │ - Member _p_q_x_x_:_:_s_t_r_e_a_m___f_r_o_m_:_:_s_t_r_e_a_m___f_r_o_m (_t_r_a_n_s_a_c_t_i_o_n___b_a_s_e &, std::string_view │ │ │ │ │ - table, Iter columns_begin, Iter columns_end) │ │ │ │ │ + Member _p_q_x_x_:_:_s_t_r_e_a_m___f_r_o_m_:_:_s_t_r_e_a_m___f_r_o_m (_t_r_a_n_s_a_c_t_i_o_n___b_a_s_e &tx, std::string_view │ │ │ │ │ + table) │ │ │ │ │ Use factories _t_a_b_l_e or _r_a_w___t_a_b_l_e instead. │ │ │ │ │ Member _p_q_x_x_:_:_s_t_r_e_a_m___f_r_o_m_:_:_s_t_r_e_a_m___f_r_o_m (_t_r_a_n_s_a_c_t_i_o_n___b_a_s_e &, _f_r_o_m___t_a_b_l_e___t, │ │ │ │ │ std::string_view table, Iter columns_begin, Iter columns_end) │ │ │ │ │ Use factories _t_a_b_l_e or _r_a_w___t_a_b_l_e instead. │ │ │ │ │ Member _p_q_x_x_:_:_s_t_r_e_a_m___f_r_o_m_:_:_s_t_r_e_a_m___f_r_o_m (_t_r_a_n_s_a_c_t_i_o_n___b_a_s_e &, _f_r_o_m___t_a_b_l_e___t, │ │ │ │ │ std::string_view table) │ │ │ │ │ Use factories _t_a_b_l_e or _r_a_w___t_a_b_l_e instead. │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/encoding__group_8hxx_source.html │ │ │ │ @@ -130,26 +130,27 @@ │ │ │ │
37 UTF8,
│ │ │ │
38};
│ │ │ │
39
│ │ │ │
40
│ │ │ │
41// TODO: Get rid of these. Specialise at higher level.
│ │ │ │
43
│ │ │ │ │ │ │ │ -
53 std::size_t(char const buffer[], std::size_t buffer_len, std::size_t start);
│ │ │ │ +
53 std::size_t(char const buffer[], std::size_t buffer_len, std::size_t start);
│ │ │ │
54
│ │ │ │
55
│ │ │ │
57
│ │ │ │ │ │ │ │ -
71 std::size_t(std::string_view haystack, std::size_t start);
│ │ │ │ +
71 std::size_t(std::string_view haystack, std::size_t start);
│ │ │ │
72} // namespace pqxx::internal
│ │ │ │
73
│ │ │ │
74#endif
│ │ │ │
Internal items for libpqxx' own use. Do not use these yourself.
Definition encodings.cxx:33
│ │ │ │
std::size_t(char const buffer[], std::size_t buffer_len, std::size_t start) glyph_scanner_func
Function type: "find the end of the current glyph.".
Definition encoding_group.hxx:53
│ │ │ │
std::size_t(std::string_view haystack, std::size_t start) char_finder_func
Function type: "find first occurrence of specific any of ASCII characters.".
Definition encoding_group.hxx:71
│ │ │ │ +
composite_field_parser< T > specialize_parse_composite_field(encoding_group enc)
Look up implementation of parse_composite_field for ENC.
Definition array-composite.hxx:274
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -31,123 +31,123 @@ │ │ │ │ │ 34 │ │ │ │ │ 36 │ │ │ │ │ _4_0PQXX_LIBEXPORT _g_l_y_p_h___s_c_a_n_n_e_r___f_u_n_c *_g_e_t___g_l_y_p_h___s_c_a_n_n_e_r(encoding_group); │ │ │ │ │ 41 │ │ │ │ │ 42 │ │ │ │ │ 43// TODO: Get rid of this one. Use compile-time-specialised version instead. │ │ │ │ │ 45 │ │ │ │ │ -51template │ │ │ │ │ +51template │ │ │ │ │ _5_2inline std::size_t _f_i_n_d___c_h_a_r( │ │ │ │ │ -53 _g_l_y_p_h___s_c_a_n_n_e_r___f_u_n_c *scanner, std::string_view haystack, │ │ │ │ │ -54 std::size_t here = 0u) │ │ │ │ │ +53 _g_l_y_p_h___s_c_a_n_n_e_r___f_u_n_c *_s_c_a_n_n_e_r, std::string_view _h_a_y_s_t_a_c_k, │ │ │ │ │ +54 std::size_t _h_e_r_e = 0_u) │ │ │ │ │ 55{ │ │ │ │ │ -56 auto const sz{std::size(haystack)}; │ │ │ │ │ -57 auto const data{std::data(haystack)}; │ │ │ │ │ -58 while (here < sz) │ │ │ │ │ +56 auto const _s_z{std::size(_h_a_y_s_t_a_c_k)}; │ │ │ │ │ +57 auto const data{std::data(_h_a_y_s_t_a_c_k)}; │ │ │ │ │ +58 while (_h_e_r_e < _s_z) │ │ │ │ │ 59 { │ │ │ │ │ -60 auto next{scanner(data, sz, here)}; │ │ │ │ │ -61 PQXX_ASSUME(next > here); │ │ │ │ │ +60 auto next{_s_c_a_n_n_e_r(data, _s_z, _h_e_r_e)}; │ │ │ │ │ +61 PQXX_ASSUME(next > _h_e_r_e); │ │ │ │ │ 62 // (For some reason gcc had a problem with a right-fold here. But clang │ │ │ │ │ 63 // was fine.) │ │ │ │ │ -64 if ((... or (data[here] == NEEDLE))) │ │ │ │ │ +64 if ((... _o_r (data[_h_e_r_e] == _N_E_E_D_L_E))) │ │ │ │ │ 65 { │ │ │ │ │ 66 // Also check against a multibyte character starting with a bytes which │ │ │ │ │ 67 // just happens to match one of the ASCII bytes we're looking for. It'd │ │ │ │ │ 68 // be cleaner to check that first, but either works. So, let's apply the │ │ │ │ │ 69 // most selective filter first and skip this check in almost all cases. │ │ │ │ │ -70 if (next == here + 1) │ │ │ │ │ -71 return here; │ │ │ │ │ +70 if (next == _h_e_r_e + 1) │ │ │ │ │ +71 return _h_e_r_e; │ │ │ │ │ 72 } │ │ │ │ │ 73 │ │ │ │ │ 74 // Nope, no hit. Move on. │ │ │ │ │ -75 here = next; │ │ │ │ │ +75 _h_e_r_e = next; │ │ │ │ │ 76 } │ │ │ │ │ -77 return sz; │ │ │ │ │ +77 return _s_z; │ │ │ │ │ 78} │ │ │ │ │ 79 │ │ │ │ │ 80 │ │ │ │ │ 81// TODO: Get rid of this one. Use compile-time-specialised loop instead. │ │ │ │ │ 83 │ │ │ │ │ 86template │ │ │ │ │ _8_7inline void _f_o_r___g_l_y_p_h_s( │ │ │ │ │ -88 encoding_group enc, CALLABLE callback, char const buffer[], │ │ │ │ │ -89 std::size_t buffer_len, std::size_t start = 0) │ │ │ │ │ +88 encoding_group _e_n_c, _C_A_L_L_A_B_L_E _c_a_l_l_b_a_c_k, char const _b_u_f_f_e_r[], │ │ │ │ │ +89 std::size_t _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t = 0) │ │ │ │ │ 90{ │ │ │ │ │ -91 auto const scan{_g_e_t___g_l_y_p_h___s_c_a_n_n_e_r(enc)}; │ │ │ │ │ -92 for (std::size_t here = start, next; here < buffer_len; here = next) │ │ │ │ │ +91 auto const _s_c_a_n{_g_e_t___g_l_y_p_h___s_c_a_n_n_e_r(_e_n_c)}; │ │ │ │ │ +92 for (std::size_t _h_e_r_e = _s_t_a_r_t, next; _h_e_r_e < _b_u_f_f_e_r___l_e_n; _h_e_r_e = next) │ │ │ │ │ 93 { │ │ │ │ │ -94 next = scan(buffer, buffer_len, here); │ │ │ │ │ -95 PQXX_ASSUME(next > here); │ │ │ │ │ -96 callback(buffer + here, buffer + next); │ │ │ │ │ +94 next = _s_c_a_n(_b_u_f_f_e_r, _b_u_f_f_e_r___l_e_n, _h_e_r_e); │ │ │ │ │ +95 PQXX_ASSUME(next > _h_e_r_e); │ │ │ │ │ +96 _c_a_l_l_b_a_c_k(_b_u_f_f_e_r + _h_e_r_e, _b_u_f_f_e_r + next); │ │ │ │ │ 97 } │ │ │ │ │ 98} │ │ │ │ │ 99 │ │ │ │ │ 100 │ │ │ │ │ 101namespace │ │ │ │ │ 102{ │ │ │ │ │ 104constexpr PQXX_PURE unsigned char │ │ │ │ │ -105get_byte(char const buffer[], std::size_t offset) noexcept │ │ │ │ │ +105_g_e_t___b_y_t_e(char const _b_u_f_f_e_r[], std::size_t _o_f_f_s_e_t) noexcept │ │ │ │ │ 106{ │ │ │ │ │ -107 return static_cast(buffer[offset]); │ │ │ │ │ +107 return static_cast(_b_u_f_f_e_r[_o_f_f_s_e_t]); │ │ │ │ │ 108} │ │ │ │ │ 109 │ │ │ │ │ 110 │ │ │ │ │ -111[[noreturn]] PQXX_COLD void throw_for_encoding_error( │ │ │ │ │ -112 char const *encoding_name, char const buffer[], std::size_t start, │ │ │ │ │ +111[[_n_o_r_e_t_u_r_n]] PQXX_COLD void _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r( │ │ │ │ │ +112 char const *_e_n_c_o_d_i_n_g___n_a_m_e, char const _b_u_f_f_e_r[], std::size_t _s_t_a_r_t, │ │ │ │ │ 113 std::size_t count) │ │ │ │ │ 114{ │ │ │ │ │ -115 std::stringstream s; │ │ │ │ │ -116 s << "Invalid byte sequence for encoding " << encoding_name << " at byte " │ │ │ │ │ -117 << start << ": " << std::hex << std::setw(2) << std::setfill('0'); │ │ │ │ │ -118 for (std::size_t i{0}; i < count; ++i) │ │ │ │ │ +115 std::stringstream _s; │ │ │ │ │ +116 _s << "Invalid byte sequence for encoding " << _e_n_c_o_d_i_n_g___n_a_m_e << " at byte " │ │ │ │ │ +117 << _s_t_a_r_t << ": " << std::hex << std::setw(2) << std::setfill('0'); │ │ │ │ │ +118 for (std::size_t _i{0}; _i < count; ++_i) │ │ │ │ │ 119 { │ │ │ │ │ -120 s << "0x" << static_cast(get_byte(buffer, start + i)); │ │ │ │ │ -121 if (i + 1 < count) │ │ │ │ │ -122 s << " "; │ │ │ │ │ +120 _s << "0x" << static_cast(_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t + _i)); │ │ │ │ │ +121 if (_i + 1 < count) │ │ │ │ │ +122 _s << " "; │ │ │ │ │ 123 } │ │ │ │ │ -124 throw _p_q_x_x_:_:_a_r_g_u_m_e_n_t___e_r_r_o_r{s.str()}; │ │ │ │ │ +124 throw _p_q_x_x_:_:_a_r_g_u_m_e_n_t___e_r_r_o_r{_s.str()}; │ │ │ │ │ 125} │ │ │ │ │ 126 │ │ │ │ │ 127 │ │ │ │ │ 129constexpr PQXX_PURE bool │ │ │ │ │ -130between_inc(unsigned char value, unsigned bottom, unsigned top) │ │ │ │ │ +130_b_e_t_w_e_e_n___i_n_c(unsigned char value, unsigned _b_o_t_t_o_m, unsigned _t_o_p) │ │ │ │ │ 131{ │ │ │ │ │ -132 return value >= bottom and value <= top; │ │ │ │ │ +132 return value >= _b_o_t_t_o_m _a_n_d value <= _t_o_p; │ │ │ │ │ 133} │ │ │ │ │ 134} // namespace │ │ │ │ │ 135 │ │ │ │ │ 136 │ │ │ │ │ 138 │ │ │ │ │ _1_4_2template struct _g_l_y_p_h___s_c_a_n_n_e_r │ │ │ │ │ 143{ │ │ │ │ │ 144 // TODO: Convert to use string_view? │ │ │ │ │ 146 PQXX_PURE static std::size_t │ │ │ │ │ -_1_4_7 _c_a_l_l(char const buffer[], std::size_t buffer_len, std::size_t start); │ │ │ │ │ +_1_4_7 _c_a_l_l(char const _b_u_f_f_e_r[], std::size_t _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t); │ │ │ │ │ 148}; │ │ │ │ │ 149 │ │ │ │ │ 150 │ │ │ │ │ 151namespace │ │ │ │ │ 152{ │ │ │ │ │ 154 │ │ │ │ │ -160template │ │ │ │ │ +160template │ │ │ │ │ 161PQXX_PURE inline std::size_t │ │ │ │ │ -162find_ascii_char(std::string_view haystack, std::size_t here) │ │ │ │ │ +162_f_i_n_d___a_s_c_i_i___c_h_a_r(std::string_view _h_a_y_s_t_a_c_k, std::size_t _h_e_r_e) │ │ │ │ │ 163{ │ │ │ │ │ 164 // We only know how to search for ASCII characters. It's an optimisation │ │ │ │ │ 165 // assumption in the code below. │ │ │ │ │ -166 static_assert((... and ((NEEDLE & 0x80) == 0))); │ │ │ │ │ +166 static_assert((... _a_n_d ((_N_E_E_D_L_E & 0x80) == 0))); │ │ │ │ │ 167 │ │ │ │ │ -168 auto const sz{std::size(haystack)}; │ │ │ │ │ -169 auto const data{std::data(haystack)}; │ │ │ │ │ -170 while (here < sz) │ │ │ │ │ +168 auto const _s_z{std::size(_h_a_y_s_t_a_c_k)}; │ │ │ │ │ +169 auto const data{std::data(_h_a_y_s_t_a_c_k)}; │ │ │ │ │ +170 while (_h_e_r_e < _s_z) │ │ │ │ │ 171 { │ │ │ │ │ 172 // Look up the next character boundary. This can be quite costly, so we │ │ │ │ │ 173 // desperately want the call inlined. │ │ │ │ │ -174 auto next{_g_l_y_p_h___s_c_a_n_n_e_r_<_E_N_C_>_:_:_c_a_l_l(data, sz, here)}; │ │ │ │ │ -175 PQXX_ASSUME(next > here); │ │ │ │ │ +174 auto next{_g_l_y_p_h___s_c_a_n_n_e_r_<_E_N_C_>_:_:_c_a_l_l(data, _s_z, _h_e_r_e)}; │ │ │ │ │ +175 PQXX_ASSUME(next > _h_e_r_e); │ │ │ │ │ 176 │ │ │ │ │ 177 // (For some reason gcc had a problem with a right-fold here. But clang │ │ │ │ │ 178 // was fine.) │ │ │ │ │ 179 // │ │ │ │ │ 180 // In all supported encodings, if a character's first byte is in the ASCII │ │ │ │ │ 181 // range, that means it's a single-byte character. It follows that when we │ │ │ │ │ 182 // find a match, we do not need to check that we're in a single-byte │ │ │ │ │ @@ -157,88 +157,88 @@ │ │ │ │ │ 186 // each character's first byte. That first byte can only match NEEDLE if │ │ │ │ │ 187 // it's a single-byte character. │ │ │ │ │ 188 // │ │ │ │ │ 189 // In an "ASCII-safe" encoding, e.g. UTF-8 or the ISO-8859 ones, we check │ │ │ │ │ 190 // for a match at each byte in the text, because it's faster than finding │ │ │ │ │ 191 // character boundaries first. But in these encodings, a multichar byte │ │ │ │ │ 192 // never contains any bytes in the ASCII range at all. │ │ │ │ │ -193 if ((... or (data[here] == NEEDLE))) │ │ │ │ │ -194 return here; │ │ │ │ │ +193 if ((... _o_r (data[_h_e_r_e] == _N_E_E_D_L_E))) │ │ │ │ │ +194 return _h_e_r_e; │ │ │ │ │ 195 │ │ │ │ │ 196 // Nope, no hit. Move on. │ │ │ │ │ -197 here = next; │ │ │ │ │ +197 _h_e_r_e = next; │ │ │ │ │ 198 } │ │ │ │ │ -199 return sz; │ │ │ │ │ +199 return _s_z; │ │ │ │ │ 200} │ │ │ │ │ 201} // namespace │ │ │ │ │ 202 │ │ │ │ │ 203 │ │ │ │ │ 205 │ │ │ │ │ -209template │ │ │ │ │ +209template │ │ │ │ │ 210PQXX_PURE std::size_t │ │ │ │ │ -_2_1_1_f_i_n_d___s___a_s_c_i_i___c_h_a_r(std::string_view haystack, std::size_t here) │ │ │ │ │ +_2_1_1_f_i_n_d___s___a_s_c_i_i___c_h_a_r(std::string_view _h_a_y_s_t_a_c_k, std::size_t _h_e_r_e) │ │ │ │ │ 212{ │ │ │ │ │ 213 // We only know how to search for ASCII characters. It's an optimisation │ │ │ │ │ 214 // assumption in the code below. │ │ │ │ │ -215 static_assert((... and ((NEEDLE >> 7) == 0))); │ │ │ │ │ +215 static_assert((... _a_n_d ((_N_E_E_D_L_E >> 7) == 0))); │ │ │ │ │ 216 │ │ │ │ │ -217 auto const sz{std::size(haystack)}; │ │ │ │ │ -218 auto const data{std::data(haystack)}; │ │ │ │ │ +217 auto const _s_z{std::size(_h_a_y_s_t_a_c_k)}; │ │ │ │ │ +218 auto const data{std::data(_h_a_y_s_t_a_c_k)}; │ │ │ │ │ 219 │ │ │ │ │ 220 // No supported encoding has multibyte characters that start with an │ │ │ │ │ 221 // ASCII-range byte. │ │ │ │ │ -222 while ((... and (data[here] != NEEDLE))) │ │ │ │ │ +222 while ((... _a_n_d (data[_h_e_r_e] != _N_E_E_D_L_E))) │ │ │ │ │ 223 { │ │ │ │ │ -224 auto const next = _g_l_y_p_h___s_c_a_n_n_e_r_<_E_N_C_>_:_:_c_a_l_l(data, sz, here); │ │ │ │ │ -225 PQXX_ASSUME(next > here); │ │ │ │ │ -226 here = next; │ │ │ │ │ +224 auto const next = _g_l_y_p_h___s_c_a_n_n_e_r_<_E_N_C_>_:_:_c_a_l_l(data, _s_z, _h_e_r_e); │ │ │ │ │ +225 PQXX_ASSUME(next > _h_e_r_e); │ │ │ │ │ +226 _h_e_r_e = next; │ │ │ │ │ 227 } │ │ │ │ │ -228 return here; │ │ │ │ │ +228 return _h_e_r_e; │ │ │ │ │ 229} │ │ │ │ │ 230 │ │ │ │ │ 231 │ │ │ │ │ _2_3_2template<> struct _g_l_y_p_h___s_c_a_n_n_e_r │ │ │ │ │ 233{ │ │ │ │ │ 234 static PQXX_PURE constexpr std::size_t │ │ │ │ │ -235 _c_a_l_l(char const /* buffer */[], std::size_t buffer_len, std::size_t start) │ │ │ │ │ +235 _c_a_l_l(char const /* buffer */[], std::size_t _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │ 236 { │ │ │ │ │ 237 // TODO: Don't bother with npos. Let the caller check. │ │ │ │ │ -238 if (start >= buffer_len) │ │ │ │ │ +238 if (_s_t_a_r_t >= _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 239 PQXX_UNLIKELY return std::string::npos; │ │ │ │ │ 240 else │ │ │ │ │ -241 return start + 1; │ │ │ │ │ +241 return _s_t_a_r_t + 1; │ │ │ │ │ 242 } │ │ │ │ │ 243}; │ │ │ │ │ 244 │ │ │ │ │ 245 │ │ │ │ │ 246// https://en.wikipedia.org/wiki/Big5#Organization │ │ │ │ │ _2_4_7template<> struct _g_l_y_p_h___s_c_a_n_n_e_r │ │ │ │ │ 248{ │ │ │ │ │ 249 static PQXX_PURE std::size_t │ │ │ │ │ -250 _c_a_l_l(char const buffer[], std::size_t buffer_len, std::size_t start) │ │ │ │ │ +250 _c_a_l_l(char const _b_u_f_f_e_r[], std::size_t _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │ 251 { │ │ │ │ │ -252 if (start >= buffer_len) │ │ │ │ │ +252 if (_s_t_a_r_t >= _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 253 PQXX_UNLIKELY return std::string::npos; │ │ │ │ │ 254 │ │ │ │ │ -255 auto const byte1{get_byte(buffer, start)}; │ │ │ │ │ -256 if (byte1 < 0x80) │ │ │ │ │ -257 return start + 1; │ │ │ │ │ +255 auto const _b_y_t_e_1{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t)}; │ │ │ │ │ +256 if (_b_y_t_e_1 < 0x80) │ │ │ │ │ +257 return _s_t_a_r_t + 1; │ │ │ │ │ 258 │ │ │ │ │ -259 if (not between_inc(byte1, 0x81, 0xfe) or (start + 2 > buffer_len)) │ │ │ │ │ +259 if (_n_o_t _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0x81, 0xfe) _o_r (_s_t_a_r_t + 2 > _b_u_f_f_e_r___l_e_n)) │ │ │ │ │ 260 PQXX_UNLIKELY │ │ │ │ │ -261 throw_for_encoding_error("BIG5", buffer, start, 1); │ │ │ │ │ +261 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("BIG5", _b_u_f_f_e_r, _s_t_a_r_t, 1); │ │ │ │ │ 262 │ │ │ │ │ -263 auto const byte2{get_byte(buffer, start + 1)}; │ │ │ │ │ +263 auto const _b_y_t_e_2{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t + 1)}; │ │ │ │ │ 264 if ( │ │ │ │ │ -265 not between_inc(byte2, 0x40, 0x7e) and │ │ │ │ │ -266 not between_inc(byte2, 0xa1, 0xfe)) │ │ │ │ │ +265 _n_o_t _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0x40, 0x7e) _a_n_d │ │ │ │ │ +266 _n_o_t _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0xa1, 0xfe)) │ │ │ │ │ 267 PQXX_UNLIKELY │ │ │ │ │ -268 throw_for_encoding_error("BIG5", buffer, start, 2); │ │ │ │ │ +268 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("BIG5", _b_u_f_f_e_r, _s_t_a_r_t, 2); │ │ │ │ │ 269 │ │ │ │ │ -270 return start + 2; │ │ │ │ │ +270 return _s_t_a_r_t + 2; │ │ │ │ │ 271 } │ │ │ │ │ 272}; │ │ │ │ │ 273 │ │ │ │ │ 274 │ │ │ │ │ 275/* │ │ │ │ │ 276The PostgreSQL documentation claims that the EUC_* encodings are 1-3 bytes │ │ │ │ │ 277each, but other documents explain that the EUC sets can contain 1-(2,3,4) │ │ │ │ │ @@ -251,246 +251,246 @@ │ │ │ │ │ 283 EUC_TW : 1-4 │ │ │ │ │ 284*/ │ │ │ │ │ 285 │ │ │ │ │ 286// https://en.wikipedia.org/wiki/GB_2312#EUC-CN │ │ │ │ │ _2_8_7template<> struct _g_l_y_p_h___s_c_a_n_n_e_r │ │ │ │ │ 288{ │ │ │ │ │ 289 static PQXX_PURE std::size_t │ │ │ │ │ -290 _c_a_l_l(char const buffer[], std::size_t buffer_len, std::size_t start) │ │ │ │ │ +290 _c_a_l_l(char const _b_u_f_f_e_r[], std::size_t _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │ 291 { │ │ │ │ │ -292 if (start >= buffer_len) │ │ │ │ │ +292 if (_s_t_a_r_t >= _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 293 return std::string::npos; │ │ │ │ │ 294 │ │ │ │ │ -295 auto const byte1{get_byte(buffer, start)}; │ │ │ │ │ -296 if (byte1 < 0x80) │ │ │ │ │ -297 return start + 1; │ │ │ │ │ +295 auto const _b_y_t_e_1{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t)}; │ │ │ │ │ +296 if (_b_y_t_e_1 < 0x80) │ │ │ │ │ +297 return _s_t_a_r_t + 1; │ │ │ │ │ 298 │ │ │ │ │ -299 if (not between_inc(byte1, 0xa1, 0xf7) or start + 2 > buffer_len) │ │ │ │ │ +299 if (_n_o_t _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0xa1, 0xf7) _o_r _s_t_a_r_t + 2 > _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 300 PQXX_UNLIKELY │ │ │ │ │ -301 throw_for_encoding_error("EUC_CN", buffer, start, 1); │ │ │ │ │ +301 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("EUC_CN", _b_u_f_f_e_r, _s_t_a_r_t, 1); │ │ │ │ │ 302 │ │ │ │ │ -303 auto const byte2{get_byte(buffer, start + 1)}; │ │ │ │ │ -304 if (not between_inc(byte2, 0xa1, 0xfe)) │ │ │ │ │ +303 auto const _b_y_t_e_2{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t + 1)}; │ │ │ │ │ +304 if (_n_o_t _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0xa1, 0xfe)) │ │ │ │ │ 305 PQXX_UNLIKELY │ │ │ │ │ -306 throw_for_encoding_error("EUC_CN", buffer, start, 2); │ │ │ │ │ +306 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("EUC_CN", _b_u_f_f_e_r, _s_t_a_r_t, 2); │ │ │ │ │ 307 │ │ │ │ │ -308 return start + 2; │ │ │ │ │ +308 return _s_t_a_r_t + 2; │ │ │ │ │ 309 } │ │ │ │ │ 310}; │ │ │ │ │ 311 │ │ │ │ │ 312 │ │ │ │ │ 313// EUC-JP and EUC-JIS-2004 represent slightly different code points but │ │ │ │ │ iterate │ │ │ │ │ 314// the same: │ │ │ │ │ 315// │ │ │ │ │ 316// https://en.wikipedia.org/wiki/Extended_Unix_Code#EUC-JP │ │ │ │ │ 317// http://x0213.org/codetable/index.en.html │ │ │ │ │ _3_1_8template<> struct _g_l_y_p_h___s_c_a_n_n_e_r │ │ │ │ │ 319{ │ │ │ │ │ 320 static PQXX_PURE std::size_t │ │ │ │ │ -321 _c_a_l_l(char const buffer[], std::size_t buffer_len, std::size_t start) │ │ │ │ │ +321 _c_a_l_l(char const _b_u_f_f_e_r[], std::size_t _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │ 322 { │ │ │ │ │ -323 if (start >= buffer_len) │ │ │ │ │ +323 if (_s_t_a_r_t >= _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 324 return std::string::npos; │ │ │ │ │ 325 │ │ │ │ │ -326 auto const byte1{get_byte(buffer, start)}; │ │ │ │ │ -327 if (byte1 < 0x80) │ │ │ │ │ -328 return start + 1; │ │ │ │ │ +326 auto const _b_y_t_e_1{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t)}; │ │ │ │ │ +327 if (_b_y_t_e_1 < 0x80) │ │ │ │ │ +328 return _s_t_a_r_t + 1; │ │ │ │ │ 329 │ │ │ │ │ -330 if (start + 2 > buffer_len) │ │ │ │ │ +330 if (_s_t_a_r_t + 2 > _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 331 PQXX_UNLIKELY │ │ │ │ │ -332 throw_for_encoding_error("EUC_JP", buffer, start, 1); │ │ │ │ │ +332 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("EUC_JP", _b_u_f_f_e_r, _s_t_a_r_t, 1); │ │ │ │ │ 333 │ │ │ │ │ -334 auto const byte2{get_byte(buffer, start + 1)}; │ │ │ │ │ -335 if (byte1 == 0x8e) │ │ │ │ │ +334 auto const _b_y_t_e_2{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t + 1)}; │ │ │ │ │ +335 if (_b_y_t_e_1 == 0x8e) │ │ │ │ │ 336 { │ │ │ │ │ -337 if (not between_inc(byte2, 0xa1, 0xfe)) │ │ │ │ │ +337 if (_n_o_t _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0xa1, 0xfe)) │ │ │ │ │ 338 PQXX_UNLIKELY │ │ │ │ │ -339 throw_for_encoding_error("EUC_JP", buffer, start, 2); │ │ │ │ │ +339 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("EUC_JP", _b_u_f_f_e_r, _s_t_a_r_t, 2); │ │ │ │ │ 340 │ │ │ │ │ -341 return start + 2; │ │ │ │ │ +341 return _s_t_a_r_t + 2; │ │ │ │ │ 342 } │ │ │ │ │ 343 │ │ │ │ │ -344 if (between_inc(byte1, 0xa1, 0xfe)) │ │ │ │ │ +344 if (_b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0xa1, 0xfe)) │ │ │ │ │ 345 { │ │ │ │ │ -346 if (not between_inc(byte2, 0xa1, 0xfe)) │ │ │ │ │ +346 if (_n_o_t _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0xa1, 0xfe)) │ │ │ │ │ 347 PQXX_UNLIKELY │ │ │ │ │ -348 throw_for_encoding_error("EUC_JP", buffer, start, 2); │ │ │ │ │ +348 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("EUC_JP", _b_u_f_f_e_r, _s_t_a_r_t, 2); │ │ │ │ │ 349 │ │ │ │ │ -350 return start + 2; │ │ │ │ │ +350 return _s_t_a_r_t + 2; │ │ │ │ │ 351 } │ │ │ │ │ 352 │ │ │ │ │ -353 if (byte1 == 0x8f and start + 3 <= buffer_len) │ │ │ │ │ +353 if (_b_y_t_e_1 == 0x8f _a_n_d _s_t_a_r_t + 3 <= _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 354 { │ │ │ │ │ -355 auto const byte3{get_byte(buffer, start + 2)}; │ │ │ │ │ +355 auto const _b_y_t_e_3{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t + 2)}; │ │ │ │ │ 356 if ( │ │ │ │ │ -357 not between_inc(byte2, 0xa1, 0xfe) or │ │ │ │ │ -358 not between_inc(byte3, 0xa1, 0xfe)) │ │ │ │ │ +357 _n_o_t _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0xa1, 0xfe) _o_r │ │ │ │ │ +358 _n_o_t _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_3, 0xa1, 0xfe)) │ │ │ │ │ 359 PQXX_UNLIKELY │ │ │ │ │ -360 throw_for_encoding_error("EUC_JP", buffer, start, 3); │ │ │ │ │ +360 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("EUC_JP", _b_u_f_f_e_r, _s_t_a_r_t, 3); │ │ │ │ │ 361 │ │ │ │ │ -362 return start + 3; │ │ │ │ │ +362 return _s_t_a_r_t + 3; │ │ │ │ │ 363 } │ │ │ │ │ 364 │ │ │ │ │ -365 throw_for_encoding_error("EUC_JP", buffer, start, 1); │ │ │ │ │ +365 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("EUC_JP", _b_u_f_f_e_r, _s_t_a_r_t, 1); │ │ │ │ │ 366 } │ │ │ │ │ 367}; │ │ │ │ │ 368 │ │ │ │ │ 369 │ │ │ │ │ 370// https://en.wikipedia.org/wiki/Extended_Unix_Code#EUC-KR │ │ │ │ │ _3_7_1template<> struct _g_l_y_p_h___s_c_a_n_n_e_r │ │ │ │ │ 372{ │ │ │ │ │ 373 static PQXX_PURE std::size_t │ │ │ │ │ -374 _c_a_l_l(char const buffer[], std::size_t buffer_len, std::size_t start) │ │ │ │ │ +374 _c_a_l_l(char const _b_u_f_f_e_r[], std::size_t _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │ 375 { │ │ │ │ │ -376 if (start >= buffer_len) │ │ │ │ │ +376 if (_s_t_a_r_t >= _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 377 PQXX_UNLIKELY return std::string::npos; │ │ │ │ │ 378 │ │ │ │ │ -379 auto const byte1{get_byte(buffer, start)}; │ │ │ │ │ -380 if (byte1 < 0x80) │ │ │ │ │ -381 return start + 1; │ │ │ │ │ +379 auto const _b_y_t_e_1{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t)}; │ │ │ │ │ +380 if (_b_y_t_e_1 < 0x80) │ │ │ │ │ +381 return _s_t_a_r_t + 1; │ │ │ │ │ 382 │ │ │ │ │ -383 if (not between_inc(byte1, 0xa1, 0xfe) or start + 2 > buffer_len) │ │ │ │ │ +383 if (_n_o_t _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0xa1, 0xfe) _o_r _s_t_a_r_t + 2 > _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 384 PQXX_UNLIKELY │ │ │ │ │ -385 throw_for_encoding_error("EUC_KR", buffer, start, 1); │ │ │ │ │ +385 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("EUC_KR", _b_u_f_f_e_r, _s_t_a_r_t, 1); │ │ │ │ │ 386 │ │ │ │ │ -387 auto const byte2{get_byte(buffer, start + 1)}; │ │ │ │ │ -388 if (not between_inc(byte2, 0xa1, 0xfe)) │ │ │ │ │ +387 auto const _b_y_t_e_2{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t + 1)}; │ │ │ │ │ +388 if (_n_o_t _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0xa1, 0xfe)) │ │ │ │ │ 389 PQXX_UNLIKELY │ │ │ │ │ -390 throw_for_encoding_error("EUC_KR", buffer, start, 1); │ │ │ │ │ +390 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("EUC_KR", _b_u_f_f_e_r, _s_t_a_r_t, 1); │ │ │ │ │ 391 │ │ │ │ │ -392 return start + 2; │ │ │ │ │ +392 return _s_t_a_r_t + 2; │ │ │ │ │ 393 } │ │ │ │ │ 394}; │ │ │ │ │ 395 │ │ │ │ │ 396 │ │ │ │ │ 397// https://en.wikipedia.org/wiki/Extended_Unix_Code#EUC-TW │ │ │ │ │ _3_9_8template<> struct _g_l_y_p_h___s_c_a_n_n_e_r │ │ │ │ │ 399{ │ │ │ │ │ 400 static PQXX_PURE std::size_t │ │ │ │ │ -401 _c_a_l_l(char const buffer[], std::size_t buffer_len, std::size_t start) │ │ │ │ │ +401 _c_a_l_l(char const _b_u_f_f_e_r[], std::size_t _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │ 402 { │ │ │ │ │ -403 if (start >= buffer_len) │ │ │ │ │ +403 if (_s_t_a_r_t >= _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 404 PQXX_UNLIKELY │ │ │ │ │ 405 return std::string::npos; │ │ │ │ │ 406 │ │ │ │ │ -407 auto const byte1{get_byte(buffer, start)}; │ │ │ │ │ -408 if (byte1 < 0x80) │ │ │ │ │ -409 return start + 1; │ │ │ │ │ +407 auto const _b_y_t_e_1{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t)}; │ │ │ │ │ +408 if (_b_y_t_e_1 < 0x80) │ │ │ │ │ +409 return _s_t_a_r_t + 1; │ │ │ │ │ 410 │ │ │ │ │ -411 if (start + 2 > buffer_len) │ │ │ │ │ +411 if (_s_t_a_r_t + 2 > _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 412 PQXX_UNLIKELY │ │ │ │ │ -413 throw_for_encoding_error("EUC_KR", buffer, start, 1); │ │ │ │ │ +413 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("EUC_KR", _b_u_f_f_e_r, _s_t_a_r_t, 1); │ │ │ │ │ 414 │ │ │ │ │ -415 auto const byte2{get_byte(buffer, start + 1)}; │ │ │ │ │ -416 if (between_inc(byte1, 0xa1, 0xfe)) │ │ │ │ │ +415 auto const _b_y_t_e_2{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t + 1)}; │ │ │ │ │ +416 if (_b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0xa1, 0xfe)) │ │ │ │ │ 417 { │ │ │ │ │ -418 if (not between_inc(byte2, 0xa1, 0xfe)) │ │ │ │ │ +418 if (_n_o_t _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0xa1, 0xfe)) │ │ │ │ │ 419 PQXX_UNLIKELY │ │ │ │ │ -420 throw_for_encoding_error("EUC_KR", buffer, start, 2); │ │ │ │ │ +420 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("EUC_KR", _b_u_f_f_e_r, _s_t_a_r_t, 2); │ │ │ │ │ 421 │ │ │ │ │ -422 return start + 2; │ │ │ │ │ +422 return _s_t_a_r_t + 2; │ │ │ │ │ 423 } │ │ │ │ │ 424 │ │ │ │ │ -425 if (byte1 != 0x8e or start + 4 > buffer_len) │ │ │ │ │ +425 if (_b_y_t_e_1 != 0x8e _o_r _s_t_a_r_t + 4 > _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 426 PQXX_UNLIKELY │ │ │ │ │ -427 throw_for_encoding_error("EUC_KR", buffer, start, 1); │ │ │ │ │ +427 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("EUC_KR", _b_u_f_f_e_r, _s_t_a_r_t, 1); │ │ │ │ │ 428 │ │ │ │ │ 429 if ( │ │ │ │ │ -430 between_inc(byte2, 0xa1, 0xb0) and │ │ │ │ │ -431 between_inc(get_byte(buffer, start + 2), 0xa1, 0xfe) and │ │ │ │ │ -432 between_inc(get_byte(buffer, start + 3), 0xa1, 0xfe)) │ │ │ │ │ -433 return start + 4; │ │ │ │ │ +430 _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0xa1, 0xb0) _a_n_d │ │ │ │ │ +431 _b_e_t_w_e_e_n___i_n_c(_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t + 2), 0xa1, 0xfe) _a_n_d │ │ │ │ │ +432 _b_e_t_w_e_e_n___i_n_c(_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t + 3), 0xa1, 0xfe)) │ │ │ │ │ +433 return _s_t_a_r_t + 4; │ │ │ │ │ 434 │ │ │ │ │ 435 PQXX_UNLIKELY │ │ │ │ │ -436 throw_for_encoding_error("EUC_KR", buffer, start, 4); │ │ │ │ │ +436 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("EUC_KR", _b_u_f_f_e_r, _s_t_a_r_t, 4); │ │ │ │ │ 437 } │ │ │ │ │ 438}; │ │ │ │ │ 439 │ │ │ │ │ 440 │ │ │ │ │ 441// https://en.wikipedia.org/wiki/GB_18030#Mapping │ │ │ │ │ _4_4_2template<> struct _g_l_y_p_h___s_c_a_n_n_e_r │ │ │ │ │ 443{ │ │ │ │ │ 444 static PQXX_PURE std::size_t │ │ │ │ │ -445 _c_a_l_l(char const buffer[], std::size_t buffer_len, std::size_t start) │ │ │ │ │ +445 _c_a_l_l(char const _b_u_f_f_e_r[], std::size_t _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │ 446 { │ │ │ │ │ -447 if (start >= buffer_len) │ │ │ │ │ +447 if (_s_t_a_r_t >= _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 448 PQXX_UNLIKELY return std::string::npos; │ │ │ │ │ 449 │ │ │ │ │ -450 auto const byte1{get_byte(buffer, start)}; │ │ │ │ │ -451 if (byte1 < 0x80) │ │ │ │ │ -452 return start + 1; │ │ │ │ │ -453 if (byte1 == 0x80) │ │ │ │ │ -454 throw_for_encoding_error("GB18030", buffer, start, buffer_len - start); │ │ │ │ │ +450 auto const _b_y_t_e_1{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t)}; │ │ │ │ │ +451 if (_b_y_t_e_1 < 0x80) │ │ │ │ │ +452 return _s_t_a_r_t + 1; │ │ │ │ │ +453 if (_b_y_t_e_1 == 0x80) │ │ │ │ │ +454 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("GB18030", _b_u_f_f_e_r, _s_t_a_r_t, _b_u_f_f_e_r___l_e_n - _s_t_a_r_t); │ │ │ │ │ 455 │ │ │ │ │ -456 if (start + 2 > buffer_len) │ │ │ │ │ +456 if (_s_t_a_r_t + 2 > _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 457 PQXX_UNLIKELY │ │ │ │ │ -458 throw_for_encoding_error("GB18030", buffer, start, buffer_len - start); │ │ │ │ │ +458 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("GB18030", _b_u_f_f_e_r, _s_t_a_r_t, _b_u_f_f_e_r___l_e_n - _s_t_a_r_t); │ │ │ │ │ 459 │ │ │ │ │ -460 auto const byte2{get_byte(buffer, start + 1)}; │ │ │ │ │ -461 if (between_inc(byte2, 0x40, 0xfe)) │ │ │ │ │ +460 auto const _b_y_t_e_2{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t + 1)}; │ │ │ │ │ +461 if (_b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0x40, 0xfe)) │ │ │ │ │ 462 { │ │ │ │ │ -463 if (byte2 == 0x7f) │ │ │ │ │ +463 if (_b_y_t_e_2 == 0x7f) │ │ │ │ │ 464 PQXX_UNLIKELY │ │ │ │ │ -465 throw_for_encoding_error("GB18030", buffer, start, 2); │ │ │ │ │ +465 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("GB18030", _b_u_f_f_e_r, _s_t_a_r_t, 2); │ │ │ │ │ 466 │ │ │ │ │ -467 return start + 2; │ │ │ │ │ +467 return _s_t_a_r_t + 2; │ │ │ │ │ 468 } │ │ │ │ │ 469 │ │ │ │ │ -470 if (start + 4 > buffer_len) │ │ │ │ │ +470 if (_s_t_a_r_t + 4 > _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 471 PQXX_UNLIKELY │ │ │ │ │ -472 throw_for_encoding_error("GB18030", buffer, start, buffer_len - start); │ │ │ │ │ +472 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("GB18030", _b_u_f_f_e_r, _s_t_a_r_t, _b_u_f_f_e_r___l_e_n - _s_t_a_r_t); │ │ │ │ │ 473 │ │ │ │ │ 474 if ( │ │ │ │ │ -475 between_inc(byte2, 0x30, 0x39) and │ │ │ │ │ -476 between_inc(get_byte(buffer, start + 2), 0x81, 0xfe) and │ │ │ │ │ -477 between_inc(get_byte(buffer, start + 3), 0x30, 0x39)) │ │ │ │ │ -478 return start + 4; │ │ │ │ │ +475 _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0x30, 0x39) _a_n_d │ │ │ │ │ +476 _b_e_t_w_e_e_n___i_n_c(_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t + 2), 0x81, 0xfe) _a_n_d │ │ │ │ │ +477 _b_e_t_w_e_e_n___i_n_c(_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t + 3), 0x30, 0x39)) │ │ │ │ │ +478 return _s_t_a_r_t + 4; │ │ │ │ │ 479 │ │ │ │ │ 480 PQXX_UNLIKELY │ │ │ │ │ -481 throw_for_encoding_error("GB18030", buffer, start, 4); │ │ │ │ │ +481 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("GB18030", _b_u_f_f_e_r, _s_t_a_r_t, 4); │ │ │ │ │ 482 } │ │ │ │ │ 483}; │ │ │ │ │ 484 │ │ │ │ │ 485 │ │ │ │ │ 486// https://en.wikipedia.org/wiki/GBK_(character_encoding)#Encoding │ │ │ │ │ _4_8_7template<> struct _g_l_y_p_h___s_c_a_n_n_e_r │ │ │ │ │ 488{ │ │ │ │ │ 489 static PQXX_PURE std::size_t │ │ │ │ │ -490 _c_a_l_l(char const buffer[], std::size_t buffer_len, std::size_t start) │ │ │ │ │ +490 _c_a_l_l(char const _b_u_f_f_e_r[], std::size_t _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │ 491 { │ │ │ │ │ -492 if (start >= buffer_len) │ │ │ │ │ +492 if (_s_t_a_r_t >= _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 493 PQXX_UNLIKELY return std::string::npos; │ │ │ │ │ 494 │ │ │ │ │ -495 auto const byte1{get_byte(buffer, start)}; │ │ │ │ │ -496 if (byte1 < 0x80) │ │ │ │ │ -497 return start + 1; │ │ │ │ │ +495 auto const _b_y_t_e_1{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t)}; │ │ │ │ │ +496 if (_b_y_t_e_1 < 0x80) │ │ │ │ │ +497 return _s_t_a_r_t + 1; │ │ │ │ │ 498 │ │ │ │ │ -499 if (start + 2 > buffer_len) │ │ │ │ │ +499 if (_s_t_a_r_t + 2 > _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 500 PQXX_UNLIKELY │ │ │ │ │ -501 throw_for_encoding_error("GBK", buffer, start, 1); │ │ │ │ │ +501 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("GBK", _b_u_f_f_e_r, _s_t_a_r_t, 1); │ │ │ │ │ 502 │ │ │ │ │ -503 auto const byte2{get_byte(buffer, start + 1)}; │ │ │ │ │ +503 auto const _b_y_t_e_2{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t + 1)}; │ │ │ │ │ 504 if ( │ │ │ │ │ -505 (between_inc(byte1, 0xa1, 0xa9) and between_inc(byte2, 0xa1, 0xfe)) or │ │ │ │ │ -506 (between_inc(byte1, 0xb0, 0xf7) and between_inc(byte2, 0xa1, 0xfe)) or │ │ │ │ │ -507 (between_inc(byte1, 0x81, 0xa0) and between_inc(byte2, 0x40, 0xfe) and │ │ │ │ │ -508 byte2 != 0x7f) or │ │ │ │ │ -509 (between_inc(byte1, 0xaa, 0xfe) and between_inc(byte2, 0x40, 0xa0) and │ │ │ │ │ -510 byte2 != 0x7f) or │ │ │ │ │ -511 (between_inc(byte1, 0xa8, 0xa9) and between_inc(byte2, 0x40, 0xa0) and │ │ │ │ │ -512 byte2 != 0x7f) or │ │ │ │ │ -513 (between_inc(byte1, 0xaa, 0xaf) and between_inc(byte2, 0xa1, 0xfe)) or │ │ │ │ │ -514 (between_inc(byte1, 0xf8, 0xfe) and between_inc(byte2, 0xa1, 0xfe)) or │ │ │ │ │ -515 (between_inc(byte1, 0xa1, 0xa7) and between_inc(byte2, 0x40, 0xa0) and │ │ │ │ │ -516 byte2 != 0x7f)) │ │ │ │ │ -517 return start + 2; │ │ │ │ │ +505 (_b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0xa1, 0xa9) _a_n_d _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0xa1, 0xfe)) _o_r │ │ │ │ │ +506 (_b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0xb0, 0xf7) _a_n_d _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0xa1, 0xfe)) _o_r │ │ │ │ │ +507 (_b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0x81, 0xa0) _a_n_d _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0x40, 0xfe) _a_n_d │ │ │ │ │ +508 _b_y_t_e_2 != 0x7f) _o_r │ │ │ │ │ +509 (_b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0xaa, 0xfe) _a_n_d _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0x40, 0xa0) _a_n_d │ │ │ │ │ +510 _b_y_t_e_2 != 0x7f) _o_r │ │ │ │ │ +511 (_b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0xa8, 0xa9) _a_n_d _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0x40, 0xa0) _a_n_d │ │ │ │ │ +512 _b_y_t_e_2 != 0x7f) _o_r │ │ │ │ │ +513 (_b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0xaa, 0xaf) _a_n_d _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0xa1, 0xfe)) _o_r │ │ │ │ │ +514 (_b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0xf8, 0xfe) _a_n_d _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0xa1, 0xfe)) _o_r │ │ │ │ │ +515 (_b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0xa1, 0xa7) _a_n_d _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0x40, 0xa0) _a_n_d │ │ │ │ │ +516 _b_y_t_e_2 != 0x7f)) │ │ │ │ │ +517 return _s_t_a_r_t + 2; │ │ │ │ │ 518 │ │ │ │ │ 519 PQXX_UNLIKELY │ │ │ │ │ -520 throw_for_encoding_error("GBK", buffer, start, 2); │ │ │ │ │ +520 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("GBK", _b_u_f_f_e_r, _s_t_a_r_t, 2); │ │ │ │ │ 521 } │ │ │ │ │ 522}; │ │ │ │ │ 523 │ │ │ │ │ 524 │ │ │ │ │ 525/* │ │ │ │ │ 526The PostgreSQL documentation claims that the JOHAB encoding is 1-3 bytes, │ │ │ │ │ but │ │ │ │ │ @@ -501,37 +501,37 @@ │ │ │ │ │ 530CJKV Information Processing by Ken Lunde, pg. 269: │ │ │ │ │ 531 │ │ │ │ │ 532 https://bit.ly/2BEOu5V │ │ │ │ │ 533*/ │ │ │ │ │ _5_3_4template<> struct _g_l_y_p_h___s_c_a_n_n_e_r │ │ │ │ │ 535{ │ │ │ │ │ 536 static PQXX_PURE std::size_t │ │ │ │ │ -537 _c_a_l_l(char const buffer[], std::size_t buffer_len, std::size_t start) │ │ │ │ │ +537 _c_a_l_l(char const _b_u_f_f_e_r[], std::size_t _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │ 538 { │ │ │ │ │ -539 if (start >= buffer_len) │ │ │ │ │ +539 if (_s_t_a_r_t >= _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 540 PQXX_UNLIKELY return std::string::npos; │ │ │ │ │ 541 │ │ │ │ │ -542 auto const byte1{get_byte(buffer, start)}; │ │ │ │ │ -543 if (byte1 < 0x80) │ │ │ │ │ -544 return start + 1; │ │ │ │ │ +542 auto const _b_y_t_e_1{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t)}; │ │ │ │ │ +543 if (_b_y_t_e_1 < 0x80) │ │ │ │ │ +544 return _s_t_a_r_t + 1; │ │ │ │ │ 545 │ │ │ │ │ -546 if (start + 2 > buffer_len) │ │ │ │ │ +546 if (_s_t_a_r_t + 2 > _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 547 PQXX_UNLIKELY │ │ │ │ │ -548 throw_for_encoding_error("JOHAB", buffer, start, 1); │ │ │ │ │ +548 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("JOHAB", _b_u_f_f_e_r, _s_t_a_r_t, 1); │ │ │ │ │ 549 │ │ │ │ │ -550 auto const byte2{get_byte(buffer, start)}; │ │ │ │ │ +550 auto const _b_y_t_e_2{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t)}; │ │ │ │ │ 551 if ( │ │ │ │ │ -552 (between_inc(byte1, 0x84, 0xd3) and │ │ │ │ │ -553 (between_inc(byte2, 0x41, 0x7e) or between_inc(byte2, 0x81, 0xfe))) or │ │ │ │ │ -554 ((between_inc(byte1, 0xd8, 0xde) or between_inc(byte1, 0xe0, 0xf9)) and │ │ │ │ │ -555 (between_inc(byte2, 0x31, 0x7e) or between_inc(byte2, 0x91, 0xfe)))) │ │ │ │ │ -556 return start + 2; │ │ │ │ │ +552 (_b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0x84, 0xd3) _a_n_d │ │ │ │ │ +553 (_b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0x41, 0x7e) _o_r _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0x81, 0xfe))) _o_r │ │ │ │ │ +554 ((_b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0xd8, 0xde) _o_r _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0xe0, 0xf9)) _a_n_d │ │ │ │ │ +555 (_b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0x31, 0x7e) _o_r _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0x91, 0xfe)))) │ │ │ │ │ +556 return _s_t_a_r_t + 2; │ │ │ │ │ 557 │ │ │ │ │ 558 PQXX_UNLIKELY │ │ │ │ │ -559 throw_for_encoding_error("JOHAB", buffer, start, 2); │ │ │ │ │ +559 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("JOHAB", _b_u_f_f_e_r, _s_t_a_r_t, 2); │ │ │ │ │ 560 } │ │ │ │ │ 561}; │ │ │ │ │ 562 │ │ │ │ │ 563 │ │ │ │ │ 564/* │ │ │ │ │ 565PostgreSQL's MULE_INTERNAL is the emacs rather than Xemacs implementation; │ │ │ │ │ 566see the server/mb/pg_wchar.h PostgreSQL header file. │ │ │ │ │ @@ -539,55 +539,55 @@ │ │ │ │ │ was │ │ │ │ │ 568unable to get it to successfully iterate a MULE-encoded test CSV generated │ │ │ │ │ 569using PostgreSQL 9.2.23. Use this at your own risk. │ │ │ │ │ 570*/ │ │ │ │ │ _5_7_1template<> struct _g_l_y_p_h___s_c_a_n_n_e_r │ │ │ │ │ 572{ │ │ │ │ │ 573 static PQXX_PURE std::size_t │ │ │ │ │ -574 _c_a_l_l(char const buffer[], std::size_t buffer_len, std::size_t start) │ │ │ │ │ +574 _c_a_l_l(char const _b_u_f_f_e_r[], std::size_t _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │ 575 { │ │ │ │ │ -576 if (start >= buffer_len) │ │ │ │ │ +576 if (_s_t_a_r_t >= _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 577 PQXX_UNLIKELY return std::string::npos; │ │ │ │ │ 578 │ │ │ │ │ -579 auto const byte1{get_byte(buffer, start)}; │ │ │ │ │ -580 if (byte1 < 0x80) │ │ │ │ │ -581 return start + 1; │ │ │ │ │ +579 auto const _b_y_t_e_1{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t)}; │ │ │ │ │ +580 if (_b_y_t_e_1 < 0x80) │ │ │ │ │ +581 return _s_t_a_r_t + 1; │ │ │ │ │ 582 │ │ │ │ │ -583 if (start + 2 > buffer_len) │ │ │ │ │ +583 if (_s_t_a_r_t + 2 > _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 584 PQXX_UNLIKELY │ │ │ │ │ -585 throw_for_encoding_error("MULE_INTERNAL", buffer, start, 1); │ │ │ │ │ +585 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("MULE_INTERNAL", _b_u_f_f_e_r, _s_t_a_r_t, 1); │ │ │ │ │ 586 │ │ │ │ │ -587 auto const byte2{get_byte(buffer, start + 1)}; │ │ │ │ │ -588 if (between_inc(byte1, 0x81, 0x8d) and byte2 >= 0xa0) │ │ │ │ │ -589 return start + 2; │ │ │ │ │ +587 auto const _b_y_t_e_2{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t + 1)}; │ │ │ │ │ +588 if (_b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0x81, 0x8d) _a_n_d _b_y_t_e_2 >= 0xa0) │ │ │ │ │ +589 return _s_t_a_r_t + 2; │ │ │ │ │ 590 │ │ │ │ │ -591 if (start + 3 > buffer_len) │ │ │ │ │ +591 if (_s_t_a_r_t + 3 > _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 592 PQXX_UNLIKELY │ │ │ │ │ -593 throw_for_encoding_error("MULE_INTERNAL", buffer, start, 2); │ │ │ │ │ +593 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("MULE_INTERNAL", _b_u_f_f_e_r, _s_t_a_r_t, 2); │ │ │ │ │ 594 │ │ │ │ │ 595 if ( │ │ │ │ │ -596 ((byte1 == 0x9a and between_inc(byte2, 0xa0, 0xdf)) or │ │ │ │ │ -597 (byte1 == 0x9b and between_inc(byte2, 0xe0, 0xef)) or │ │ │ │ │ -598 (between_inc(byte1, 0x90, 0x99) and byte2 >= 0xa0)) and │ │ │ │ │ -599 (byte2 >= 0xa0)) │ │ │ │ │ -600 return start + 3; │ │ │ │ │ +596 ((_b_y_t_e_1 == 0x9a _a_n_d _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0xa0, 0xdf)) _o_r │ │ │ │ │ +597 (_b_y_t_e_1 == 0x9b _a_n_d _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0xe0, 0xef)) _o_r │ │ │ │ │ +598 (_b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0x90, 0x99) _a_n_d _b_y_t_e_2 >= 0xa0)) _a_n_d │ │ │ │ │ +599 (_b_y_t_e_2 >= 0xa0)) │ │ │ │ │ +600 return _s_t_a_r_t + 3; │ │ │ │ │ 601 │ │ │ │ │ -602 if (start + 4 > buffer_len) │ │ │ │ │ +602 if (_s_t_a_r_t + 4 > _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 603 PQXX_UNLIKELY │ │ │ │ │ -604 throw_for_encoding_error("MULE_INTERNAL", buffer, start, 3); │ │ │ │ │ +604 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("MULE_INTERNAL", _b_u_f_f_e_r, _s_t_a_r_t, 3); │ │ │ │ │ 605 │ │ │ │ │ 606 if ( │ │ │ │ │ -607 ((byte1 == 0x9c and between_inc(byte2, 0xf0, 0xf4)) or │ │ │ │ │ -608 (byte1 == 0x9d and between_inc(byte2, 0xf5, 0xfe))) and │ │ │ │ │ -609 get_byte(buffer, start + 2) >= 0xa0 and │ │ │ │ │ -610 get_byte(buffer, start + 4) >= 0xa0) │ │ │ │ │ -611 return start + 4; │ │ │ │ │ +607 ((_b_y_t_e_1 == 0x9c _a_n_d _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0xf0, 0xf4)) _o_r │ │ │ │ │ +608 (_b_y_t_e_1 == 0x9d _a_n_d _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0xf5, 0xfe))) _a_n_d │ │ │ │ │ +609 _g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t + 2) >= 0xa0 _a_n_d │ │ │ │ │ +610 _g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t + 4) >= 0xa0) │ │ │ │ │ +611 return _s_t_a_r_t + 4; │ │ │ │ │ 612 │ │ │ │ │ 613 PQXX_UNLIKELY │ │ │ │ │ -614 throw_for_encoding_error("MULE_INTERNAL", buffer, start, 4); │ │ │ │ │ +614 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("MULE_INTERNAL", _b_u_f_f_e_r, _s_t_a_r_t, 4); │ │ │ │ │ 615 } │ │ │ │ │ 616}; │ │ │ │ │ 617 │ │ │ │ │ 618 │ │ │ │ │ 619// As far as I can tell, for the purposes of iterating the only difference │ │ │ │ │ 620// between SJIS and SJIS-2004 is increased range in the first byte of two- │ │ │ │ │ byte │ │ │ │ │ @@ -599,234 +599,234 @@ │ │ │ │ │ 624// restriction for the first byte in 2-byte sequences. │ │ │ │ │ 625// │ │ │ │ │ 626// https://en.wikipedia.org/wiki/Shift_JIS#Shift_JIS_byte_map │ │ │ │ │ 627// http://x0213.org/codetable/index.en.html │ │ │ │ │ _6_2_8template<> struct _g_l_y_p_h___s_c_a_n_n_e_r │ │ │ │ │ 629{ │ │ │ │ │ 630 static PQXX_PURE std::size_t │ │ │ │ │ -631 _c_a_l_l(char const buffer[], std::size_t buffer_len, std::size_t start) │ │ │ │ │ +631 _c_a_l_l(char const _b_u_f_f_e_r[], std::size_t _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │ 632 { │ │ │ │ │ -633 if (start >= buffer_len) │ │ │ │ │ +633 if (_s_t_a_r_t >= _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 634 return std::string::npos; │ │ │ │ │ 635 │ │ │ │ │ -636 auto const byte1{get_byte(buffer, start)}; │ │ │ │ │ -637 if (byte1 < 0x80 or between_inc(byte1, 0xa1, 0xdf)) │ │ │ │ │ -638 return start + 1; │ │ │ │ │ +636 auto const _b_y_t_e_1{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t)}; │ │ │ │ │ +637 if (_b_y_t_e_1 < 0x80 _o_r _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0xa1, 0xdf)) │ │ │ │ │ +638 return _s_t_a_r_t + 1; │ │ │ │ │ 639 │ │ │ │ │ 640 if ( │ │ │ │ │ -641 not between_inc(byte1, 0x81, 0x9f) and │ │ │ │ │ -642 not between_inc(byte1, 0xe0, 0xfc)) │ │ │ │ │ +641 _n_o_t _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0x81, 0x9f) _a_n_d │ │ │ │ │ +642 _n_o_t _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0xe0, 0xfc)) │ │ │ │ │ 643 PQXX_UNLIKELY │ │ │ │ │ -644 throw_for_encoding_error("SJIS", buffer, start, 1); │ │ │ │ │ +644 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("SJIS", _b_u_f_f_e_r, _s_t_a_r_t, 1); │ │ │ │ │ 645 │ │ │ │ │ -646 if (start + 2 > buffer_len) │ │ │ │ │ +646 if (_s_t_a_r_t + 2 > _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 647 PQXX_UNLIKELY │ │ │ │ │ -648 throw_for_encoding_error("SJIS", buffer, start, buffer_len - start); │ │ │ │ │ +648 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("SJIS", _b_u_f_f_e_r, _s_t_a_r_t, _b_u_f_f_e_r___l_e_n - _s_t_a_r_t); │ │ │ │ │ 649 │ │ │ │ │ -650 auto const byte2{get_byte(buffer, start + 1)}; │ │ │ │ │ -651 if (byte2 == 0x7f) │ │ │ │ │ +650 auto const _b_y_t_e_2{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t + 1)}; │ │ │ │ │ +651 if (_b_y_t_e_2 == 0x7f) │ │ │ │ │ 652 PQXX_UNLIKELY │ │ │ │ │ -653 throw_for_encoding_error("SJIS", buffer, start, 2); │ │ │ │ │ +653 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("SJIS", _b_u_f_f_e_r, _s_t_a_r_t, 2); │ │ │ │ │ 654 │ │ │ │ │ -655 if (between_inc(byte2, 0x40, 0x9e) or between_inc(byte2, 0x9f, 0xfc)) │ │ │ │ │ -656 return start + 2; │ │ │ │ │ +655 if (_b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0x40, 0x9e) _o_r _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0x9f, 0xfc)) │ │ │ │ │ +656 return _s_t_a_r_t + 2; │ │ │ │ │ 657 │ │ │ │ │ 658 PQXX_UNLIKELY │ │ │ │ │ -659 throw_for_encoding_error("SJIS", buffer, start, 2); │ │ │ │ │ +659 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("SJIS", _b_u_f_f_e_r, _s_t_a_r_t, 2); │ │ │ │ │ 660 } │ │ │ │ │ 661}; │ │ │ │ │ 662 │ │ │ │ │ 663 │ │ │ │ │ 664// https://en.wikipedia.org/wiki/Unified_Hangul_Code │ │ │ │ │ _6_6_5template<> struct _g_l_y_p_h___s_c_a_n_n_e_r │ │ │ │ │ 666{ │ │ │ │ │ 667 static PQXX_PURE std::size_t │ │ │ │ │ -668 _c_a_l_l(char const buffer[], std::size_t buffer_len, std::size_t start) │ │ │ │ │ +668 _c_a_l_l(char const _b_u_f_f_e_r[], std::size_t _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │ 669 { │ │ │ │ │ -670 if (start >= buffer_len) │ │ │ │ │ +670 if (_s_t_a_r_t >= _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 671 PQXX_UNLIKELY return std::string::npos; │ │ │ │ │ 672 │ │ │ │ │ -673 auto const byte1{get_byte(buffer, start)}; │ │ │ │ │ -674 if (byte1 < 0x80) │ │ │ │ │ -675 return start + 1; │ │ │ │ │ +673 auto const _b_y_t_e_1{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t)}; │ │ │ │ │ +674 if (_b_y_t_e_1 < 0x80) │ │ │ │ │ +675 return _s_t_a_r_t + 1; │ │ │ │ │ 676 │ │ │ │ │ -677 if (start + 2 > buffer_len) │ │ │ │ │ +677 if (_s_t_a_r_t + 2 > _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 678 PQXX_UNLIKELY │ │ │ │ │ -679 throw_for_encoding_error("UHC", buffer, start, buffer_len - start); │ │ │ │ │ +679 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("UHC", _b_u_f_f_e_r, _s_t_a_r_t, _b_u_f_f_e_r___l_e_n - _s_t_a_r_t); │ │ │ │ │ 680 │ │ │ │ │ -681 auto const byte2{get_byte(buffer, start + 1)}; │ │ │ │ │ -682 if (between_inc(byte1, 0x80, 0xc6)) │ │ │ │ │ +681 auto const _b_y_t_e_2{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t + 1)}; │ │ │ │ │ +682 if (_b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0x80, 0xc6)) │ │ │ │ │ 683 { │ │ │ │ │ 684 if ( │ │ │ │ │ -685 between_inc(byte2, 0x41, 0x5a) or between_inc(byte2, 0x61, 0x7a) or │ │ │ │ │ -686 between_inc(byte2, 0x80, 0xfe)) │ │ │ │ │ -687 return start + 2; │ │ │ │ │ +685 _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0x41, 0x5a) _o_r _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0x61, 0x7a) _o_r │ │ │ │ │ +686 _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0x80, 0xfe)) │ │ │ │ │ +687 return _s_t_a_r_t + 2; │ │ │ │ │ 688 │ │ │ │ │ 689 PQXX_UNLIKELY │ │ │ │ │ -690 throw_for_encoding_error("UHC", buffer, start, 2); │ │ │ │ │ +690 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("UHC", _b_u_f_f_e_r, _s_t_a_r_t, 2); │ │ │ │ │ 691 } │ │ │ │ │ 692 │ │ │ │ │ -693 if (between_inc(byte1, 0xa1, 0xfe)) │ │ │ │ │ +693 if (_b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0xa1, 0xfe)) │ │ │ │ │ 694 { │ │ │ │ │ -695 if (not between_inc(byte2, 0xa1, 0xfe)) │ │ │ │ │ +695 if (_n_o_t _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0xa1, 0xfe)) │ │ │ │ │ 696 PQXX_UNLIKELY │ │ │ │ │ -697 throw_for_encoding_error("UHC", buffer, start, 2); │ │ │ │ │ +697 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("UHC", _b_u_f_f_e_r, _s_t_a_r_t, 2); │ │ │ │ │ 698 │ │ │ │ │ -699 return start + 2; │ │ │ │ │ +699 return _s_t_a_r_t + 2; │ │ │ │ │ 700 } │ │ │ │ │ 701 │ │ │ │ │ -702 throw_for_encoding_error("UHC", buffer, start, 1); │ │ │ │ │ +702 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("UHC", _b_u_f_f_e_r, _s_t_a_r_t, 1); │ │ │ │ │ 703 } │ │ │ │ │ 704}; │ │ │ │ │ 705 │ │ │ │ │ 706 │ │ │ │ │ 707// https://en.wikipedia.org/wiki/UTF-8#Description │ │ │ │ │ _7_0_8template<> struct _g_l_y_p_h___s_c_a_n_n_e_r │ │ │ │ │ 709{ │ │ │ │ │ 710 static PQXX_PURE std::size_t │ │ │ │ │ -711 _c_a_l_l(char const buffer[], std::size_t buffer_len, std::size_t start) │ │ │ │ │ +711 _c_a_l_l(char const _b_u_f_f_e_r[], std::size_t _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │ 712 { │ │ │ │ │ -713 if (start >= buffer_len) │ │ │ │ │ +713 if (_s_t_a_r_t >= _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 714 PQXX_UNLIKELY return std::string::npos; │ │ │ │ │ 715 │ │ │ │ │ -716 auto const byte1{get_byte(buffer, start)}; │ │ │ │ │ -717 if (byte1 < 0x80) │ │ │ │ │ -718 return start + 1; │ │ │ │ │ +716 auto const _b_y_t_e_1{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t)}; │ │ │ │ │ +717 if (_b_y_t_e_1 < 0x80) │ │ │ │ │ +718 return _s_t_a_r_t + 1; │ │ │ │ │ 719 │ │ │ │ │ -720 if (start + 2 > buffer_len) │ │ │ │ │ +720 if (_s_t_a_r_t + 2 > _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 721 PQXX_UNLIKELY │ │ │ │ │ -722 throw_for_encoding_error("UTF8", buffer, start, buffer_len - start); │ │ │ │ │ +722 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("UTF8", _b_u_f_f_e_r, _s_t_a_r_t, _b_u_f_f_e_r___l_e_n - _s_t_a_r_t); │ │ │ │ │ 723 │ │ │ │ │ -724 auto const byte2{get_byte(buffer, start + 1)}; │ │ │ │ │ -725 if (between_inc(byte1, 0xc0, 0xdf)) │ │ │ │ │ +724 auto const _b_y_t_e_2{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t + 1)}; │ │ │ │ │ +725 if (_b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0xc0, 0xdf)) │ │ │ │ │ 726 { │ │ │ │ │ -727 if (not between_inc(byte2, 0x80, 0xbf)) │ │ │ │ │ +727 if (_n_o_t _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0x80, 0xbf)) │ │ │ │ │ 728 PQXX_UNLIKELY │ │ │ │ │ -729 throw_for_encoding_error("UTF8", buffer, start, 2); │ │ │ │ │ +729 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("UTF8", _b_u_f_f_e_r, _s_t_a_r_t, 2); │ │ │ │ │ 730 │ │ │ │ │ -731 return start + 2; │ │ │ │ │ +731 return _s_t_a_r_t + 2; │ │ │ │ │ 732 } │ │ │ │ │ 733 │ │ │ │ │ -734 if (start + 3 > buffer_len) │ │ │ │ │ +734 if (_s_t_a_r_t + 3 > _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 735 PQXX_UNLIKELY │ │ │ │ │ -736 throw_for_encoding_error("UTF8", buffer, start, buffer_len - start); │ │ │ │ │ +736 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("UTF8", _b_u_f_f_e_r, _s_t_a_r_t, _b_u_f_f_e_r___l_e_n - _s_t_a_r_t); │ │ │ │ │ 737 │ │ │ │ │ -738 auto const byte3{get_byte(buffer, start + 2)}; │ │ │ │ │ -739 if (between_inc(byte1, 0xe0, 0xef)) │ │ │ │ │ +738 auto const _b_y_t_e_3{_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t + 2)}; │ │ │ │ │ +739 if (_b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0xe0, 0xef)) │ │ │ │ │ 740 { │ │ │ │ │ -741 if (between_inc(byte2, 0x80, 0xbf) and between_inc(byte3, 0x80, 0xbf)) │ │ │ │ │ -742 return start + 3; │ │ │ │ │ +741 if (_b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0x80, 0xbf) _a_n_d _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_3, 0x80, 0xbf)) │ │ │ │ │ +742 return _s_t_a_r_t + 3; │ │ │ │ │ 743 │ │ │ │ │ 744 PQXX_UNLIKELY │ │ │ │ │ -745 throw_for_encoding_error("UTF8", buffer, start, 3); │ │ │ │ │ +745 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("UTF8", _b_u_f_f_e_r, _s_t_a_r_t, 3); │ │ │ │ │ 746 } │ │ │ │ │ 747 │ │ │ │ │ -748 if (start + 4 > buffer_len) │ │ │ │ │ +748 if (_s_t_a_r_t + 4 > _b_u_f_f_e_r___l_e_n) │ │ │ │ │ 749 PQXX_UNLIKELY │ │ │ │ │ -750 throw_for_encoding_error("UTF8", buffer, start, buffer_len - start); │ │ │ │ │ +750 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("UTF8", _b_u_f_f_e_r, _s_t_a_r_t, _b_u_f_f_e_r___l_e_n - _s_t_a_r_t); │ │ │ │ │ 751 │ │ │ │ │ -752 if (between_inc(byte1, 0xf0, 0xf7)) │ │ │ │ │ +752 if (_b_e_t_w_e_e_n___i_n_c(_b_y_t_e_1, 0xf0, 0xf7)) │ │ │ │ │ 753 { │ │ │ │ │ 754 if ( │ │ │ │ │ -755 between_inc(byte2, 0x80, 0xbf) and between_inc(byte3, 0x80, 0xbf) and │ │ │ │ │ -756 between_inc(get_byte(buffer, start + 3), 0x80, 0xbf)) │ │ │ │ │ -757 return start + 4; │ │ │ │ │ +755 _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_2, 0x80, 0xbf) _a_n_d _b_e_t_w_e_e_n___i_n_c(_b_y_t_e_3, 0x80, 0xbf) _a_n_d │ │ │ │ │ +756 _b_e_t_w_e_e_n___i_n_c(_g_e_t___b_y_t_e(_b_u_f_f_e_r, _s_t_a_r_t + 3), 0x80, 0xbf)) │ │ │ │ │ +757 return _s_t_a_r_t + 4; │ │ │ │ │ 758 │ │ │ │ │ 759 PQXX_UNLIKELY │ │ │ │ │ -760 throw_for_encoding_error("UTF8", buffer, start, 4); │ │ │ │ │ +760 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("UTF8", _b_u_f_f_e_r, _s_t_a_r_t, 4); │ │ │ │ │ 761 } │ │ │ │ │ 762 │ │ │ │ │ 763 PQXX_UNLIKELY │ │ │ │ │ -764 throw_for_encoding_error("UTF8", buffer, start, 1); │ │ │ │ │ +764 _t_h_r_o_w___f_o_r___e_n_c_o_d_i_n_g___e_r_r_o_r("UTF8", _b_u_f_f_e_r, _s_t_a_r_t, 1); │ │ │ │ │ 765 } │ │ │ │ │ 766}; │ │ │ │ │ 767 │ │ │ │ │ 768 │ │ │ │ │ 770 │ │ │ │ │ 784constexpr inline encoding_group │ │ │ │ │ -_7_8_5_m_a_p___a_s_c_i_i___s_e_a_r_c_h___g_r_o_u_p(encoding_group enc) noexcept │ │ │ │ │ +_7_8_5_m_a_p___a_s_c_i_i___s_e_a_r_c_h___g_r_o_u_p(encoding_group _e_n_c) noexcept │ │ │ │ │ 786{ │ │ │ │ │ -787 switch (enc) │ │ │ │ │ +787 switch (_e_n_c) │ │ │ │ │ 788 { │ │ │ │ │ 789 case encoding_group::MONOBYTE: │ │ │ │ │ 790 case encoding_group::EUC_CN: │ │ │ │ │ 791 case encoding_group::EUC_JP: │ │ │ │ │ 792 case encoding_group::EUC_KR: │ │ │ │ │ 793 case encoding_group::EUC_TW: │ │ │ │ │ 794 case encoding_group::MULE_INTERNAL: │ │ │ │ │ 795 case encoding_group::UTF8: │ │ │ │ │ 796 // All these encodings are "ASCII-safe," meaning that if we're looking │ │ │ │ │ 797 // for a particular ASCII character, we can safely just go through the │ │ │ │ │ 798 // string byte for byte. Multibyte characters have the high bit set. │ │ │ │ │ 799 return encoding_group::MONOBYTE; │ │ │ │ │ 800 │ │ │ │ │ -801 default: PQXX_UNLIKELY return enc; │ │ │ │ │ +801 default: PQXX_UNLIKELY return _e_n_c; │ │ │ │ │ 802 } │ │ │ │ │ 803} │ │ │ │ │ 804 │ │ │ │ │ 805 │ │ │ │ │ 807 │ │ │ │ │ -813template │ │ │ │ │ +813template │ │ │ │ │ 814PQXX_PURE constexpr inline _c_h_a_r___f_i_n_d_e_r___f_u_n_c * │ │ │ │ │ -_8_1_5_g_e_t___c_h_a_r___f_i_n_d_e_r(encoding_group enc) │ │ │ │ │ +_8_1_5_g_e_t___c_h_a_r___f_i_n_d_e_r(encoding_group _e_n_c) │ │ │ │ │ 816{ │ │ │ │ │ -817 auto const as_if{_m_a_p___a_s_c_i_i___s_e_a_r_c_h___g_r_o_u_p(enc)}; │ │ │ │ │ -818 switch (as_if) │ │ │ │ │ +817 auto const _a_s___i_f{_m_a_p___a_s_c_i_i___s_e_a_r_c_h___g_r_o_u_p(_e_n_c)}; │ │ │ │ │ +818 switch (_a_s___i_f) │ │ │ │ │ 819 { │ │ │ │ │ 820 case encoding_group::MONOBYTE: │ │ │ │ │ -821 return pqxx::internal::find_ascii_char< │ │ │ │ │ -822 encoding_group::MONOBYTE, NEEDLE...>; │ │ │ │ │ +821 return _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_f_i_n_d___a_s_c_i_i___c_h_a_r< │ │ │ │ │ +822 encoding_group::MONOBYTE, _N_E_E_D_L_E...>; │ │ │ │ │ 823 case encoding_group::BIG5: │ │ │ │ │ -824 return pqxx::internal::find_ascii_char; │ │ │ │ │ +824 return _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_f_i_n_d___a_s_c_i_i___c_h_a_r; │ │ │ │ │ 825 case encoding_group::GB18030: │ │ │ │ │ -826 return pqxx::internal::find_ascii_char; │ │ │ │ │ +826 return _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_f_i_n_d___a_s_c_i_i___c_h_a_r; │ │ │ │ │ 827 case encoding_group::GBK: │ │ │ │ │ -828 return pqxx::internal::find_ascii_char; │ │ │ │ │ +828 return _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_f_i_n_d___a_s_c_i_i___c_h_a_r; │ │ │ │ │ 829 case encoding_group::JOHAB: │ │ │ │ │ -830 return pqxx::internal::find_ascii_char; │ │ │ │ │ +830 return _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_f_i_n_d___a_s_c_i_i___c_h_a_r; │ │ │ │ │ 831 case encoding_group::SJIS: │ │ │ │ │ -832 return pqxx::internal::find_ascii_char; │ │ │ │ │ +832 return _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_f_i_n_d___a_s_c_i_i___c_h_a_r; │ │ │ │ │ 833 case encoding_group::UHC: │ │ │ │ │ -834 return pqxx::internal::find_ascii_char; │ │ │ │ │ +834 return _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_f_i_n_d___a_s_c_i_i___c_h_a_r; │ │ │ │ │ 835 │ │ │ │ │ 836 default: │ │ │ │ │ 837 throw _p_q_x_x_:_:_i_n_t_e_r_n_a_l___e_r_r_o_r{_c_o_n_c_a_t( │ │ │ │ │ -838 "Unexpected encoding group: ", as_if, " (mapped from ", enc, ").")}; │ │ │ │ │ +838 "Unexpected encoding group: ", _a_s___i_f, " (mapped from ", _e_n_c, ").")}; │ │ │ │ │ 839 } │ │ │ │ │ 840} │ │ │ │ │ 841 │ │ │ │ │ 842 │ │ │ │ │ 844 │ │ │ │ │ -847template │ │ │ │ │ +847template │ │ │ │ │ 848PQXX_PURE constexpr inline _c_h_a_r___f_i_n_d_e_r___f_u_n_c * │ │ │ │ │ -_8_4_9_g_e_t___s___c_h_a_r___f_i_n_d_e_r(encoding_group enc) │ │ │ │ │ +_8_4_9_g_e_t___s___c_h_a_r___f_i_n_d_e_r(encoding_group _e_n_c) │ │ │ │ │ 850{ │ │ │ │ │ -851 auto const as_if{_m_a_p___a_s_c_i_i___s_e_a_r_c_h___g_r_o_u_p(enc)}; │ │ │ │ │ -852 switch (as_if) │ │ │ │ │ +851 auto const _a_s___i_f{_m_a_p___a_s_c_i_i___s_e_a_r_c_h___g_r_o_u_p(_e_n_c)}; │ │ │ │ │ +852 switch (_a_s___i_f) │ │ │ │ │ 853 { │ │ │ │ │ 854 case encoding_group::MONOBYTE: │ │ │ │ │ 855 return _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_f_i_n_d___s___a_s_c_i_i___c_h_a_r< │ │ │ │ │ -856 encoding_group::MONOBYTE, NEEDLE...>; │ │ │ │ │ +856 encoding_group::MONOBYTE, _N_E_E_D_L_E...>; │ │ │ │ │ 857 case encoding_group::BIG5: │ │ │ │ │ -858 return _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_f_i_n_d___s___a_s_c_i_i___c_h_a_r; │ │ │ │ │ +858 return _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_f_i_n_d___s___a_s_c_i_i___c_h_a_r; │ │ │ │ │ 859 case encoding_group::GB18030: │ │ │ │ │ 860 return _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_f_i_n_d___s___a_s_c_i_i___c_h_a_r< │ │ │ │ │ -861 encoding_group::GB18030, NEEDLE...>; │ │ │ │ │ +861 encoding_group::GB18030, _N_E_E_D_L_E...>; │ │ │ │ │ 862 case encoding_group::GBK: │ │ │ │ │ -863 return _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_f_i_n_d___s___a_s_c_i_i___c_h_a_r; │ │ │ │ │ +863 return _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_f_i_n_d___s___a_s_c_i_i___c_h_a_r; │ │ │ │ │ 864 case encoding_group::JOHAB: │ │ │ │ │ -865 return _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_f_i_n_d___s___a_s_c_i_i___c_h_a_r; │ │ │ │ │ +865 return _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_f_i_n_d___s___a_s_c_i_i___c_h_a_r; │ │ │ │ │ 866 case encoding_group::SJIS: │ │ │ │ │ -867 return _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_f_i_n_d___s___a_s_c_i_i___c_h_a_r; │ │ │ │ │ +867 return _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_f_i_n_d___s___a_s_c_i_i___c_h_a_r; │ │ │ │ │ 868 case encoding_group::UHC: │ │ │ │ │ -869 return _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_f_i_n_d___s___a_s_c_i_i___c_h_a_r; │ │ │ │ │ +869 return _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_f_i_n_d___s___a_s_c_i_i___c_h_a_r; │ │ │ │ │ 870 │ │ │ │ │ 871 default: │ │ │ │ │ 872 throw _p_q_x_x_:_:_i_n_t_e_r_n_a_l___e_r_r_o_r{_c_o_n_c_a_t( │ │ │ │ │ -873 "Unexpected encoding group: ", as_if, " (mapped from ", enc, ").")}; │ │ │ │ │ +873 "Unexpected encoding group: ", _a_s___i_f, " (mapped from ", _e_n_c, ").")}; │ │ │ │ │ 874 } │ │ │ │ │ 875} │ │ │ │ │ 876} // namespace pqxx::internal │ │ │ │ │ 877#endif │ │ │ │ │ _p_q_x_x_:_:_a_r_g_u_m_e_n_t___e_r_r_o_r │ │ │ │ │ Invalid argument passed to libpqxx, similar to std::invalid_argument. │ │ │ │ │ DDeeffiinniittiioonn except.hxx:266 │ │ │ │ │ @@ -873,14 +873,19 @@ │ │ │ │ │ _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_g_e_t___g_l_y_p_h___s_c_a_n_n_e_r │ │ │ │ │ PQXX_LIBEXPORT glyph_scanner_func * get_glyph_scanner(encoding_group) │ │ │ │ │ Look up the glyph scanner function for a given encoding group. │ │ │ │ │ _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_c_h_a_r___f_i_n_d_e_r___f_u_n_c │ │ │ │ │ std::size_t(std::string_view haystack, std::size_t start) char_finder_func │ │ │ │ │ Function type: "find first occurrence of specific any of ASCII characters.". │ │ │ │ │ DDeeffiinniittiioonn encoding_group.hxx:71 │ │ │ │ │ +_p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_s_p_e_c_i_a_l_i_z_e___p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d │ │ │ │ │ +composite_field_parser< T > specialize_parse_composite_field(encoding_group │ │ │ │ │ +enc) │ │ │ │ │ +Look up implementation of parse_composite_field for ENC. │ │ │ │ │ +DDeeffiinniittiioonn array-composite.hxx:274 │ │ │ │ │ _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_f_i_n_d___c_h_a_r │ │ │ │ │ std::size_t find_char(glyph_scanner_func *scanner, std::string_view haystack, │ │ │ │ │ std::size_t here=0u) │ │ │ │ │ Find any of the ASCII characters NEEDLE in haystack. │ │ │ │ │ DDeeffiinniittiioonn encodings.hxx:52 │ │ │ │ │ _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_m_a_p___a_s_c_i_i___s_e_a_r_c_h___g_r_o_u_p │ │ │ │ │ constexpr encoding_group map_ascii_search_group(encoding_group enc) noexcept │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/escaping.html │ │ │ │ @@ -95,30 +95,30 @@ │ │ │ │
│ │ │ │

Writing queries as strings is easy. But sometimes you need a variable in there: ‘"SELECT id FROM user WHERE name = &rsquo;" + name + "'"`.

│ │ │ │

This is dangerous. See the bug? If name can contain quotes, you may have an SQL injection vulnerability there, where users can enter nasty stuff like "`.'; DROP TABLE user`". Or if you're lucky, it's just a nasty bug that you discover when name happens to be "d'Arcy". Or... Well, I was born in a place called _'s-Gravenhage..._

│ │ │ │

There are two ways of dealing with this. One is statement Statement parameters — many SQL execution functions in libpqxx let you write placeholders for variable values in your SQL, like $1, $2, etc. When you then pass your variables as the parameter values, they get substituted into the query, but in a safe form.

│ │ │ │

The other is to escape the values yourself, before inserting them into your SQL. This isn't as safe as using parameters, since you need to be really conscientious about it. Use Statement parameters if you can... and libpqxx will do the escaping for you.

│ │ │ │

In escaping, quotes and other problematic characters are marked as "this is │ │ │ │ just a character inside the string, not the end of the string." There are several functions in libpqxx to do this for you.

│ │ │ │ -

│ │ │ │ +

│ │ │ │ SQL injection

│ │ │ │

To understand what SQL injection vulnerabilities are and why they should be prevented, imagine you use the following SQL statement somewhere in your program:

│ │ │ │
tx.exec(
│ │ │ │
"SELECT number, amount "
│ │ │ │
"FROM account "
│ │ │ │
"WHERE allowed_to_see('" + userid + "','" + password + "')");
│ │ │ │

This shows a logged-in user important information on all accounts he is authorized to view. The userid and password strings are variables entered by the user himself.

│ │ │ │

Now, if the user is actually an attacker who knows (or can guess) the general shape of this SQL statement, imagine getting the following password:

│ │ │ │
x') OR ('x' = 'x
│ │ │ │

Does that make sense to you? Probably not. But if this is inserted into the SQL string by the C++ code above, the query becomes:

│ │ │ │
SELECT number, amount
│ │ │ │
FROM account
│ │ │ │
WHERE allowed_to_see('user','x') OR ('x' = 'x')
│ │ │ │

Is this what you wanted to happen? Probably not! The neat allowed_to_see() clause is completely circumvented by the "`OR ('x' = 'x')`" clause, which is always true. Therefore, the attacker will get to see all accounts in the database!

│ │ │ │ -

│ │ │ │ +

│ │ │ │ Using the esc functions

│ │ │ │

Here's how you can fix the problem in the example above:

│ │ │ │
tx.exec(
│ │ │ │
"SELECT number, amount "
│ │ │ │
"FROM account "
│ │ │ │
"WHERE allowed_to_see('" + tx.esc(userid) + "', "
│ │ │ │
"'" + tx.esc(password) + "')");
│ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/group__escaping-functions.html │ │ │ │ @@ -120,15 +120,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
class pqxx::binarystring
│ │ │ │
│ │ │ │

Binary data corresponding to PostgreSQL's "BYTEA" binary-string type.

│ │ │ │ -
Deprecated:
Use bytes and bytes_view for binary data. In C++20 or better, any contiguous_range of std::byte will do.
│ │ │ │ +
Deprecated:
Use bytes and bytes_view for binary data. In C++20 or better, any contiguous_range of std::byte will do.
│ │ │ │

This class represents a binary string as stored in a field of type bytea.

│ │ │ │

Internally a binarystring is zero-terminated, but it may also contain null bytes, they're just like any other byte value. So don't assume that it's safe to treat the contents as a C-style string.

│ │ │ │

The binarystring retains its value even if the result it was obtained from is destroyed, but it cannot be copied or assigned.

│ │ │ │

To include a binarystring value in an SQL query, escape and quote it using the transaction's quote_raw function.

│ │ │ │
Warning
This class is implemented as a reference-counting smart pointer. Copying, swapping, and destroying binarystring objects that refer to the same underlying data block is not thread-safe. If you wish to pass binarystrings around between threads, make sure that each of these operations is protected against concurrency with similar operations on the same object, or other objects pointing to the same data block.
│ │ │ │
│ │ │ │ │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/libpq-forward_8hxx_source.html │ │ │ │ @@ -107,26 +107,27 @@ │ │ │ │
16 struct pg_conn;
│ │ │ │
17 struct pg_result;
│ │ │ │
18 struct pgNotify;
│ │ │ │
19}
│ │ │ │
20
│ │ │ │
22namespace pqxx::internal::pq
│ │ │ │
23{
│ │ │ │ -
24using PGconn = pg_conn;
│ │ │ │ -
25using PGresult = pg_result;
│ │ │ │ -
26using PGnotify = pgNotify;
│ │ │ │ -
27using PQnoticeProcessor = void (*)(void *, char const *);
│ │ │ │ +
24using PGconn = pg_conn;
│ │ │ │ +
25using PGresult = pg_result;
│ │ │ │ +
26using PGnotify = pgNotify;
│ │ │ │ +
27using PQnoticeProcessor = void (*)(void *, char const *);
│ │ │ │
28} // namespace pqxx::internal::pq
│ │ │ │
29
│ │ │ │
30namespace pqxx
│ │ │ │
31{
│ │ │ │
33using oid = unsigned int;
│ │ │ │
34} // namespace pqxx
│ │ │ │
35#endif
│ │ │ │
Forward declarations of libpq types as needed in libpqxx headers.
Definition util.cxx:205
│ │ │ │ +
composite_field_parser< T > specialize_parse_composite_field(encoding_group enc)
Look up implementation of parse_composite_field for ENC.
Definition array-composite.hxx:274
│ │ │ │
The home of all libpqxx classes, functions, templates, etc.
Definition array.cxx:27
│ │ │ │
unsigned int oid
PostgreSQL database row identifier.
Definition libpq-forward.hxx:33
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

Public Types

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
struct pqxx::from_query_t
│ │ │ │
│ │ │ │

Marker for stream_from constructors: "stream from query.".

│ │ │ │ -
Deprecated:
Use stream_from::query() instead.
│ │ │ │ +
Deprecated:
Use stream_from::query() instead.
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ pqxx::from_table_t

│ │ │ │ │ │ │ │
│ │ │ │ @@ -936,15 +936,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
struct pqxx::from_table_t
│ │ │ │
│ │ │ │

Marker for stream_from constructors: "stream from table.".

│ │ │ │ -
Deprecated:
Use stream_from::table() instead.
│ │ │ │ +
Deprecated:
Use stream_from::table() instead.
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ pqxx::notification

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1073,30 +1073,30 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
using pqxx::connection_base = typedef connection
│ │ │ │
│ │ │ │ -
Deprecated:
Old base class for connection. They are now the same class.
│ │ │ │ +
Deprecated:
Old base class for connection. They are now the same class.
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ fieldstream

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
using pqxx::fieldstream = typedef basic_fieldstream<char>
│ │ │ │
│ │ │ │ -
Deprecated:
Read a field using field::as<...>() or field::c_str().
│ │ │ │ +
Deprecated:
Read a field using field::as<...>() or field::c_str().
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ strip_t

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1107,15 +1107,15 @@ │ │ │ │ │ │ │ │ using pqxx::strip_t = typedef std::remove_cv_t<std::remove_reference_t<TYPE> > │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Remove any constness, volatile, and reference-ness from a type.

│ │ │ │ -
Deprecated:
In C++20 we'll replace this with std::remove_cvref.
│ │ │ │ +
Deprecated:
In C++20 we'll replace this with std::remove_cvref.
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ table_path

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1486,15 +1486,15 @@ │ │ │ │ ) │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Encrypt a password.

│ │ │ │ -
Deprecated:
Use connection::encrypt_password instead.
│ │ │ │ +
Deprecated:
Use connection::encrypt_password instead.
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ encrypt_password() [2/2]

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1525,15 +1525,15 @@ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Encrypt password.

│ │ │ │ -
Deprecated:
Use connection::encrypt_password instead.
│ │ │ │ +
Deprecated:
Use connection::encrypt_password instead.
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ from_string()

│ │ │ │ │ │ │ │
│ │ │ │ @@ -1701,15 +1701,15 @@ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Write a result field to any type of stream.

│ │ │ │ -
Deprecated:
The C++ streams library is not great to work with. In particular, error handling is easy to get wrong. So you're probably better off doing this by hand.
│ │ │ │ +
Deprecated:
The C++ streams library is not great to work with. In particular, error handling is easy to get wrong. So you're probably better off doing this by hand.
│ │ │ │

This can be convenient when writing a field to an output stream. More importantly, it lets you write a field to e.g. a stringstream which you can then use to read, format and convert the field in ways that to() does not support.

│ │ │ │

Example: parse a field into a variable of the nonstandard long long type.

│ │ │ │
extern result R;
│ │ │ │
long long L;
│ │ │ │
stringstream S;
│ │ │ │
│ │ │ │
// Write field's string into S
│ │ │ │ @@ -1985,15 +1985,15 @@ │ │ │ │ │ │ │ │ constexpr │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Pass this to a stream_from constructor to stream query results.

│ │ │ │ -
Deprecated:
Use transaction_base::stream instead of stream_from.
│ │ │ │ +
Deprecated:
Use transaction_base::stream instead of stream_from.
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ from_table

│ │ │ │ │ │ │ │
│ │ │ │ @@ -2010,15 +2010,15 @@ │ │ │ │ │ │ │ │ constexpr │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Pass this to a stream_from constructor to stream table contents.

│ │ │ │ -
Deprecated:
Use transaction_base::stream instead of stream_from.
│ │ │ │ +
Deprecated:
Use transaction_base::stream instead of stream_from.
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │

◆ has_generic_bytes_char_traits

│ │ │ │ │ │ │ │
│ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/namespacepqxx_1_1internal.html │ │ │ │ @@ -196,32 +196,32 @@ │ │ │ │ class  stream_query_input_iterator │ │ │ │  Input iterator for stream_query. More...
│ │ │ │   │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ +template<typenameT > │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ +template<typenameCALLABLE > │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Typedefs

│ │ │ │ -template<typename T >
using composite_field_parser = void(*)(std::size_t &index, std::string_view input, std::size_t &pos, T &field, std::size_t last_field)
using composite_field_parser = void(*)(std::size_t &index, std::string_view input, std::size_t &pos, T &field, std::size_t last_field)
 Pointer to an encoding-specific specialisation of parse_composite_field.
 
using glyph_scanner_func = std::size_t(char const buffer[], std::size_t buffer_len, std::size_t start)
using glyph_scanner_func = std::size_t(char const buffer[], std::size_t buffer_len, std::size_t start)
 Function type: "find the end of the current glyph.".
 
using char_finder_func = std::size_t(std::string_view haystack, std::size_t start)
using char_finder_func = std::size_t(std::string_view haystack, std::size_t start)
 Function type: "find first occurrence of specific any of ASCII characters.".
 
│ │ │ │ -template<typename CALLABLE >
using args_t = decltype(args_f(std::declval< CALLABLE >()))
using args_t = decltype(args_f(std::declval< CALLABLE >()))
 A callable's parameter types, as a tuple.
 
│ │ │ │ template<typename... TYPES>
using strip_types_t = decltype(strip_types(std::declval< TYPES... >()))
using strip_types_t = decltype(strip_types(std::declval< TYPES... >()))
 Take a tuple type and apply strip_t to its component types.
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Enumerations

enum class  encoding_group {
│ │ │ │   MONOBYTE │ │ │ │ @@ -243,299 +243,299 @@ │ │ │ │
│ │ │ │ }
 
│ │ │ │ │ │ │ │ │ │ │ │ +pqxx::internal::encoding_group  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +  │ │ │ │ │ │ │ │ │ │ │ │ +encoding_group  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +std::string  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +void  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +void  │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ +template<typenameT > │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +template std::string  │ │ │ │ │ │ │ │ │ │ │ │ +template std::string  │ │ │ │ │ │ │ │ │ │ │ │ +template std::string  │ │ │ │ │ │ │ │ │ │ │ │ +  │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ +template<typenameT > │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ +template<typenameT > │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ +template<typenameTYPE > │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +constexprchar  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +constexprint  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ +template<typenameHAVE , typenameNEED > │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ +template<typenameT > │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ +template<typenameT > │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +PQXX_PURE charconst *  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +PQXX_LIBEXPORT result  │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +PQXX_LIBEXPORT void  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +PQXX_LIBEXPORT void  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ +template<typenameLEFT , typenameRIGHT > │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ +template<typenameLEFT , typenameRIGHT > │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ +template<typenameLEFT , typenameRIGHT > │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ +template<typenameLEFT , typenameRIGHT > │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +std::string PQXX_LIBEXPORT  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +void PQXX_LIBEXPORT  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +bytes PQXX_LIBEXPORT  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ +template<typenameT > │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +constexprchar  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +constexprcharconst *  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +constexprcharconst *  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +charconst *  │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Functions

│ │ │ │ -pqxx::internal::encoding_group enc_group (std::string_view encoding_name)
enc_group (std::string_view encoding_name)
 Convert libpq encoding name to its libpqxx encoding group.
 
│ │ │ │ - __attribute__ ((pure)) char const *name_encoding(int encoding_id)
__attribute__ ((pure)) char const *name_encoding(int encoding_id)
 
│ │ │ │ -encoding_group enc_group (int)
enc_group (int)
 Convert libpq encoding enum value to its libpqxx group.
 
│ │ │ │ -std::string demangle_type_name (char const [])
demangle_type_name (char const [])
 Attempt to demangle std::type_info::name() to something human-readable.
 
│ │ │ │ -void throw_null_conversion (std::string const &type)
throw_null_conversion (std::string const &type)
 Throw exception for attempt to convert SQL NULL to given type.
 
│ │ │ │ -void throw_null_conversion (std::string_view type)
throw_null_conversion (std::string_view type)
 Throw exception for attempt to convert SQL NULL to given type.
 
std::string state_buffer_overrun (int have_bytes, int need_bytes)
std::string state_buffer_overrun (int have_bytes, int need_bytes)
 Summarize buffer overrun.
 
│ │ │ │ -template<typename T >
std::string to_string_float (T value)
std::string to_string_float (T value)
 Floating-point implementations for pqxx::to_string().
 
│ │ │ │ -template std::string to_string_float (float)
to_string_float (float)
 
│ │ │ │ -template std::string to_string_float (double)
to_string_float (double)
 
│ │ │ │ -template std::string to_string_float (long double)
to_string_float (long double)
 
│ │ │ │ - __attribute__ ((visibility("default"))) int check_pqxx_version_7_10() noexcept
__attribute__ ((visibility("default"))) int check_pqxx_version_7_10() noexcept
 
void PQXX_COLD PQXX_LIBEXPORT skip_init_ssl (int skips) noexcept
void PQXX_COLD PQXX_LIBEXPORT skip_init_ssl (int skips) noexcept
 Control OpenSSL/crypto library initialisation.
 
template<encoding_group ENC>
std::size_t scan_double_quoted_string (char const input[], std::size_t size, std::size_t pos)
std::size_t scan_double_quoted_string (char const input[], std::size_t size, std::size_t pos)
 
│ │ │ │ template<encoding_group ENC>
std::string parse_double_quoted_string (char const input[], std::size_t end, std::size_t pos)
std::string parse_double_quoted_string (char const input[], std::size_t end, std::size_t pos)
 Un-quote and un-escape a double-quoted SQL string.
 
template<pqxx::internal::encoding_group ENC, char... STOP>
std::size_t scan_unquoted_string (char const input[], std::size_t size, std::size_t pos)
std::size_t scan_unquoted_string (char const input[], std::size_t size, std::size_t pos)
 Find the end of an unquoted string in an array or composite-type value.
 
│ │ │ │ template<pqxx::internal::encoding_group ENC>
std::string_view parse_unquoted_string (char const input[], std::size_t end, std::size_t pos)
std::string_view parse_unquoted_string (char const input[], std::size_t end, std::size_t pos)
 Parse an unquoted array entry or cfield of a composite-type field.
 
template<encoding_group ENC, typename T >
void parse_composite_field (std::size_t &index, std::string_view input, std::size_t &pos, T &field, std::size_t last_field)
template<encoding_group ENC, typename T >
void parse_composite_field (std::size_t &index, std::string_view input, std::size_t &pos, T &field, std::size_t last_field)
 Parse a field of a composite-type value.
 
│ │ │ │ template<typename T >
composite_field_parser< T > specialize_parse_composite_field (encoding_group enc)
 Look up implementation of parse_composite_field for ENC.
 
│ │ │ │ -template<typename T >
std::size_t size_composite_field_buffer (T const &field)
std::size_t size_composite_field_buffer (T const &field)
 Conservatively estimate buffer size needed for a composite field.
 
│ │ │ │ -template<typename T >
void write_composite_field (char *&pos, char *end, T const &field)
void write_composite_field (char *&pos, char *end, T const &field)
 
│ │ │ │ -template<typename TYPE >
void render_item (TYPE const &item, char *&here, char *end)
void render_item (TYPE const &item, char *&here, char *end)
 Convert item to a string, write it into [here, end).
 
template<typename... TYPE>
std::string concat (TYPE... item)
std::string concat (TYPE... item)
 Efficiently combine a bunch of items into one big string.
 
│ │ │ │ -constexpr char number_to_digit (int i) noexcept
number_to_digit (int i) noexcept
 Convert a number in [0, 9] to its ASCII digit.
 
│ │ │ │ -constexpr int digit_to_number (char c) noexcept
digit_to_number (char c) noexcept
 Compute numeric value of given textual digit (assuming that it is a digit).
 
│ │ │ │ -template<typename HAVE , typename NEED >
std::string state_buffer_overrun (HAVE have_bytes, NEED need_bytes)
std::string state_buffer_overrun (HAVE have_bytes, NEED need_bytes)
 
│ │ │ │ -template<typename T >
PQXX_LIBEXPORT std::string to_string_float (T)
PQXX_LIBEXPORT std::string to_string_float (T)
 Floating-point implementations for pqxx::to_string().
 
│ │ │ │ -template<typename T >
char * generic_into_buf (char *begin, char *end, T const &value)
chargeneric_into_buf (char *begin, char *end, T const &value)
 Generic implementation for into_buf, on top of to_buf.
 
│ │ │ │ -PQXX_PURE char const * name_encoding (int encoding_id)
name_encoding (int encoding_id)
 Return PostgreSQL's name for encoding enum value.
 
PQXX_LIBEXPORT glyph_scanner_funcget_glyph_scanner (encoding_group)
 Look up the glyph scanner function for a given encoding group.
 
template<char... NEEDLE>
std::size_t find_char (glyph_scanner_func *scanner, std::string_view haystack, std::size_t here=0u)
std::size_t find_char (glyph_scanner_func *scanner, std::string_view haystack, std::size_t here=0u)
 Find any of the ASCII characters NEEDLE in haystack.
 
template<typename CALLABLE >
void for_glyphs (encoding_group enc, CALLABLE callback, char const buffer[], std::size_t buffer_len, std::size_t start=0)
template<typename CALLABLE >
void for_glyphs (encoding_group enc, CALLABLE callback, char const buffer[], std::size_t buffer_len, std::size_t start=0)
 Iterate over the glyphs in a buffer.
 
template<encoding_group ENC, char... NEEDLE>
PQXX_PURE std::size_t find_s_ascii_char (std::string_view haystack, std::size_t here)
PQXX_PURE std::size_t find_s_ascii_char (std::string_view haystack, std::size_t here)
 Find first of NEEDLE ASCII chars in haystack.
 
constexpr encoding_group map_ascii_search_group (encoding_group enc) noexcept
constexpr encoding_group map_ascii_search_group (encoding_group enc) noexcept
 Just for searching an ASCII character, what encoding can we use here?
 
template<char... NEEDLE>
PQXX_PURE constexpr char_finder_funcget_char_finder (encoding_group enc)
PQXX_PURE constexpr char_finder_funcget_char_finder (encoding_group enc)
 Look up a character search function for an encoding group.
 
template<char... NEEDLE>
PQXX_PURE constexpr char_finder_funcget_s_char_finder (encoding_group enc)
PQXX_PURE constexpr char_finder_funcget_s_char_finder (encoding_group enc)
 Look up a "sentry" character search function for an encoding group.
 
│ │ │ │ PQXX_LIBEXPORT result_size_type obtain_stateless_cursor_size (sql_cursor &)
 
│ │ │ │ -PQXX_LIBEXPORT result stateless_cursor_retrieve (sql_cursor &, result::difference_type size, result::difference_type begin_pos, result::difference_type end_pos)
stateless_cursor_retrieve (sql_cursor &, result::difference_type size, result::difference_type begin_pos, result::difference_type end_pos)
 
│ │ │ │ template<typename... TYPE>
bool operator== (stream_query_end_iterator, stream_query_input_iterator< TYPE... > const &i)
bool operator== (stream_query_end_iterator, stream_query_input_iterator< TYPE... > const &i)
 
│ │ │ │ template<typename... TYPE>
bool operator!= (stream_query_end_iterator, stream_query_input_iterator< TYPE... > const &i)
bool operator!= (stream_query_end_iterator, stream_query_input_iterator< TYPE... > const &i)
 
void PQXX_LIBEXPORT wait_for (unsigned int microseconds)
void PQXX_LIBEXPORT wait_for (unsigned int microseconds)
 Wait.
 
│ │ │ │ -PQXX_LIBEXPORT void wait_fd (int fd, bool for_read, bool for_write, unsigned seconds=1, unsigned microseconds=0)
wait_fd (int fd, bool for_read, bool for_write, unsigned seconds=1, unsigned microseconds=0)
 Wait for a socket to be ready for reading/writing, or timeout.
 
│ │ │ │ -PQXX_LIBEXPORT void clear_result (pq::PGresult const *) noexcept
clear_result (pq::PGresult const *) noexcept
 C++ wrapper for libpq's PQclear.
 
│ │ │ │ -template<typename LEFT , typename RIGHT >
constexpr bool cmp_less (LEFT lhs, RIGHT rhs) noexcept
constexpr bool cmp_less (LEFT lhs, RIGHT rhs) noexcept
 Same as std::cmp_less, or a workaround where that's not available.
 
│ │ │ │ -template<typename LEFT , typename RIGHT >
constexpr bool cmp_greater (LEFT lhs, RIGHT rhs) noexcept
constexpr bool cmp_greater (LEFT lhs, RIGHT rhs) noexcept
 C++20 std::cmp_greater, or workaround if not available.
 
│ │ │ │ -template<typename LEFT , typename RIGHT >
constexpr bool cmp_less_equal (LEFT lhs, RIGHT rhs) noexcept
constexpr bool cmp_less_equal (LEFT lhs, RIGHT rhs) noexcept
 C++20 std::cmp_less_equal, or workaround if not available.
 
│ │ │ │ -template<typename LEFT , typename RIGHT >
constexpr bool cmp_greater_equal (LEFT lhs, RIGHT rhs) noexcept
constexpr bool cmp_greater_equal (LEFT lhs, RIGHT rhs) noexcept
 C++20 std::cmp_greater_equal, or workaround if not available.
 
std::string cat2 (std::string_view x, std::string_view y)
std::string cat2 (std::string_view x, std::string_view y)
 Efficiently concatenate two strings.
 
template<typename CHAR >
constexpr bool is_digit (CHAR c) noexcept
template<typename CHAR >
constexpr bool is_digit (CHAR c) noexcept
 A safer and more generic replacement for std::isdigit.
 
std::string describe_object (std::string_view class_name, std::string_view name)
std::string describe_object (std::string_view class_name, std::string_view name)
 Describe an object for humans, based on class name and optional name.
 
void check_unique_register (void const *old_guest, std::string_view old_class, std::string_view old_name, void const *new_guest, std::string_view new_class, std::string_view new_name)
void check_unique_register (void const *old_guest, std::string_view old_class, std::string_view old_name, void const *new_guest, std::string_view new_class, std::string_view new_name)
 Check validity of registering a new "guest" in a "host.".
 
void check_unique_unregister (void const *old_guest, std::string_view old_class, std::string_view old_name, void const *new_guest, std::string_view new_class, std::string_view new_name)
void check_unique_unregister (void const *old_guest, std::string_view old_class, std::string_view old_name, void const *new_guest, std::string_view new_class, std::string_view new_name)
 Like check_unique_register, but for un-registering a guest.
 
constexpr std::size_t size_esc_bin (std::size_t binary_bytes) noexcept
constexpr std::size_t size_esc_bin (std::size_t binary_bytes) noexcept
 Compute buffer size needed to escape binary data for use as a BYTEA.
 
constexpr std::size_t size_unesc_bin (std::size_t escaped_bytes) noexcept
constexpr std::size_t size_unesc_bin (std::size_t escaped_bytes) noexcept
 Compute binary size from the size of its escaped version.
 
void PQXX_LIBEXPORT esc_bin (bytes_view binary_data, char buffer[]) noexcept
void PQXX_LIBEXPORT esc_bin (bytes_view binary_data, char buffer[]) noexcept
 Hex-escape binary data into a buffer.
 
│ │ │ │ -std::string PQXX_LIBEXPORT esc_bin (bytes_view binary_data)
esc_bin (bytes_view binary_data)
 Hex-escape binary data into a std::string.
 
│ │ │ │ -void PQXX_LIBEXPORT unesc_bin (std::string_view escaped_data, std::byte buffer[])
unesc_bin (std::string_view escaped_data, std::byte buffer[])
 Reconstitute binary data from its escaped version.
 
│ │ │ │ -bytes PQXX_LIBEXPORT unesc_bin (std::string_view escaped_data)
unesc_bin (std::string_view escaped_data)
 Reconstitute binary data from its escaped version.
 
│ │ │ │ -template<typename T >
auto ssize (T const &c)
auto ssize (T const &c)
 Transitional: std::ssize(), or custom implementation if not available.
 
template<typename RETURN , typename... ARGS>
std::tuple< ARGS... > args_f (RETURN(&func)(ARGS...))
template<typename RETURN , typename... ARGS>
std::tuple< ARGS... > args_f (RETURN(&func)(ARGS...))
 Helper for determining a function's parameter types.
 
template<typename RETURN , typename... ARGS>
std::tuple< ARGS... > args_f (std::function< RETURN(ARGS...)> const &)
template<typename RETURN , typename... ARGS>
std::tuple< ARGS... > args_f (std::function< RETURN(ARGS...)> const &)
 Helper for determining a std::function's parameter types.
 
template<typename CLASS , typename RETURN , typename... ARGS>
std::tuple< ARGS... > member_args_f (RETURN(CLASS::*)(ARGS...))
template<typename CLASS , typename RETURN , typename... ARGS>
std::tuple< ARGS... > member_args_f (RETURN(CLASS::*)(ARGS...))
 Helper for determining a member function's parameter types.
 
template<typename CALLABLE >
auto args_f (CALLABLE const &f) -> decltype(member_args_f(&CALLABLE::operator()))
template<typename CALLABLE >
auto args_f (CALLABLE const &f) -> decltype(member_args_f(&CALLABLE::operator()))
 Helper for determining a callable type's parameter types.
 
template<typename... TYPES>
std::tuple< strip_t< TYPES >... > strip_types (std::tuple< TYPES... > const &)
std::tuple< strip_t< TYPES >... > strip_types (std::tuple< TYPES... > const &)
 Helper: Apply strip_t to each of a tuple type's component types.
 
│ │ │ │ -constexpr char unescape_char (char escaped) noexcept
unescape_char (char escaped) noexcept
 Return original byte for escaped character.
 
│ │ │ │ template<std::size_t BYTES>
char const *PQXX_COLD error_string (int err_num, std::array< char, BYTES > &buffer)
char const *PQXX_COLD error_string (int err_num, std::array< char, BYTES > &buffer)
 Get error string for a given errno value.
 
PQXX_LIBEXPORT int check_pqxx_version_7_10 () noexcept
PQXX_LIBEXPORT int check_pqxx_version_7_10 () noexcept
 Library version check stub.
 
│ │ │ │ -constexpr char const * as_c_string (char const str[]) noexcept
as_c_string (char const str[]) noexcept
 Get a raw C string pointer.
 
│ │ │ │ template<std::size_t N>
constexpr char const * as_c_string (char(&str)[N]) noexcept
constexpr char constas_c_string (char(&str)[N]) noexcept
 Get a raw C string pointer.
 
│ │ │ │ -constexpr char const * as_c_string (pqxx::zview str) noexcept
as_c_string (pqxx::zview str) noexcept
 Get a raw C string pointer.
 
│ │ │ │ -char const * as_c_string (std::string const &str) noexcept
as_c_string (std::string const &str) noexcept
 Get a raw C string pointer.
 
│ │ │ │ │ │ │ │ │ │ │ │ +constexprchar  │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Variables

│ │ │ │ -constexpr char empty_composite_str [] {"()"}
empty_composite_str [] {"()"}
 
template<typename ITERATOR >
constexpr auto const iterator_identity
template<typename ITERATOR >
constexpr auto const iterator_identity
 
│ │ │ │

Detailed Description

│ │ │ │

Internal items for libpqxx' own use. Do not use these yourself.

│ │ │ │

Private namespace for libpqxx's internal use; do not access.

│ │ │ │

Version check.

│ │ │ │

Copyright (c) 2000-2024, Jeroen T. Vermeulen.

│ │ │ │ @@ -575,15 +575,15 @@ │ │ │ │ │ │ │ │

◆ char_finder_func

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │
using pqxx::internal::char_finder_func = typedef std::size_t(std::string_view haystack, std::size_t start)using pqxx::internal::char_finder_func = typedef std::size_t(std::string_view haystack, std::size_t start)
│ │ │ │
│ │ │ │ │ │ │ │

Function type: "find first occurrence of specific any of ASCII characters.".

│ │ │ │

This type of function takes a text buffer, and a location in that buffer, and returns the location of the first occurrence within that string of any of a specific set of ASCII characters.

│ │ │ │

For efficiency, it's up to the function to know which those special ASCII characters are.

│ │ │ │ @@ -595,15 +595,15 @@ │ │ │ │ │ │ │ │

◆ glyph_scanner_func

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │
using pqxx::internal::glyph_scanner_func = typedef std::size_t(char const buffer[], std::size_t buffer_len, std::size_t start)using pqxx::internal::glyph_scanner_func = typedef std::size_t(char const buffer[], std::size_t buffer_len, std::size_t start)
│ │ │ │
│ │ │ │ │ │ │ │

Function type: "find the end of the current glyph.".

│ │ │ │

This type of function takes a text buffer, and a location in that buffer, and returns the location one byte past the end of the current glyph.

│ │ │ │

The start offset marks the beginning of the current glyph. It must fall within the buffer.

│ │ │ │ @@ -614,22 +614,22 @@ │ │ │ │

Function Documentation

│ │ │ │ │ │ │ │

◆ args_f() [1/3]

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ -template<typename CALLABLE >
│ │ │ │ +template<typename CALLABLE >
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │
auto pqxx::internal::args_f auto pqxx::internal::args_f (CALLABLE const & CALLABLE constf) -> decltype(member_args_f(&CALLABLE::operator())) -> decltype(member_args_f(&CALLABLE::operator()))
│ │ │ │
│ │ │ │ │ │ │ │

Helper for determining a callable type's parameter types.

│ │ │ │

This specialisation should work for lambdas.

│ │ │ │

This function has no definition. It's not meant to be actually called. It's just there for pattern-matching in the compiler, so we can use its hypothetical return value.

│ │ │ │ @@ -638,20 +638,20 @@ │ │ │ │
│ │ │ │ │ │ │ │

◆ args_f() [2/3]

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ -template<typename RETURN , typename... ARGS>
│ │ │ │ +template<typename RETURN , typename... ARGS>
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
std::tuple< ARGS... > pqxx::internal::args_f (RETURN(&)(ARGS...) RETURN(&)(ARGS...) func)
│ │ │ │
│ │ │ │ │ │ │ │

Helper for determining a function's parameter types.

│ │ │ │ @@ -661,20 +661,20 @@ │ │ │ │
│ │ │ │ │ │ │ │

◆ args_f() [3/3]

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ -template<typename RETURN , typename... ARGS>
│ │ │ │ +template<typename RETURN , typename... ARGS>
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
std::tuple< ARGS... > pqxx::internal::args_f (std::function< RETURN(ARGS...)> const & std::function< RETURN(ARGS...)> const)
│ │ │ │
│ │ │ │ │ │ │ │

Helper for determining a std::function's parameter types.

│ │ │ │ @@ -713,29 +713,29 @@ │ │ │ │ │ │ │ │ inline │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Efficiently concatenate two strings.

│ │ │ │ -

This is a special case of concatenate(), needed because dependency management does not let us use that function here.

│ │ │ │ +

This is a special case of concatenate(), needed because dependency management does not let us use that function here.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

◆ check_pqxx_version_7_10()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
PQXX_LIBEXPORT int pqxx::internal::check_pqxx_version_7_10 PQXX_LIBEXPORT int pqxx::internal::check_pqxx_version_7_10 ()
│ │ │ │
│ │ │ │ @@ -755,17 +755,17 @@ │ │ │ │ │ │ │ │

◆ check_unique_register()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -775,15 +775,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -812,17 +812,17 @@ │ │ │ │ │ │ │ │

◆ check_unique_unregister()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
void pqxx::internal::check_unique_register void pqxx::internal::check_unique_register (void const * void constold_guest,
std::string_view old_class, std::string_view old_name,
void const * void constnew_guest,
std::string_view new_class,
│ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -832,15 +832,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -933,23 +933,23 @@ │ │ │ │
│ │ │ │
│ │ │ │
void pqxx::internal::check_unique_unregister void pqxx::internal::check_unique_unregister (void const * void constold_guest,
std::string_view old_class, std::string_view old_name,
void const * void constnew_guest,
std::string_view new_class,
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -1049,35 +1049,35 @@ │ │ │ │ │ │ │ │ │ │ │ │

◆ for_glyphs()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ -template<typename CALLABLE >
│ │ │ │ +template<typename CALLABLE >
│ │ │ │
void pqxx::internal::esc_bin void pqxx::internal::esc_bin (bytes_view binary_data,
char char buffer[] 
)
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -1114,15 +1114,15 @@ │ │ │ │
│ │ │ │ template<char... NEEDLE>
│ │ │ │
void pqxx::internal::for_glyphs void pqxx::internal::for_glyphs (encoding_group enc,
CALLABLE CALLABLE callback,
char const char const buffer[],
std::size_t buffer_len,
│ │ │ │ │ │ │ │ │ │ │ │ @@ -1167,15 +1167,15 @@ │ │ │ │
│ │ │ │ template<char... NEEDLE>
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
PQXX_PURE constexpr char_finder_func * pqxx::internal::get_char_finder PQXX_PURE constexpr char_finder_func * pqxx::internal::get_char_finder (encoding_group enc)
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ @@ -1192,23 +1192,23 @@ │ │ │ │ │ │ │ │ │ │ │ │

◆ is_digit()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ -template<typename CHAR >
│ │ │ │ +template<typename CHAR >
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
PQXX_PURE constexpr char_finder_func * pqxx::internal::get_s_char_finder PQXX_PURE constexpr char_finder_func * pqxx::internal::get_s_char_finder (encoding_group enc)
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -1227,15 +1227,15 @@ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
constexpr bool pqxx::internal::is_digit constexpr bool pqxx::internal::is_digit (CHAR CHAR c)
│ │ │ │
│ │ │ │ inlineconstexprnoexcept
│ │ │ │ │ │ │ │ │ │ │ │ @@ -1254,20 +1254,20 @@ │ │ │ │ │ │ │ │ │ │ │ │

◆ member_args_f()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ -template<typename CLASS , typename RETURN , typename... ARGS>
│ │ │ │ +template<typename CLASS , typename RETURN , typename... ARGS>
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
constexpr encoding_group pqxx::internal::map_ascii_search_group constexpr encoding_group pqxx::internal::map_ascii_search_group (encoding_group enc)
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
std::tuple< ARGS... > pqxx::internal::member_args_f (RETURN(CLASS::*)(ARGS...) RETURN(CLASS::*)(ARGS...) )
│ │ │ │
│ │ │ │ │ │ │ │

Helper for determining a member function's parameter types.

│ │ │ │ @@ -1278,21 +1278,21 @@ │ │ │ │
│ │ │ │ │ │ │ │

◆ parse_composite_field()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ -template<encoding_group ENC, typename T >
│ │ │ │ +template<encoding_group ENC, typename T >
│ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -1304,15 +1304,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -1359,15 +1359,15 @@ │ │ │ │
void pqxx::internal::parse_composite_field void pqxx::internal::parse_composite_field (std::size_t & index,
std::size_t & pos,
T & Tfield,
std::size_t last_field 
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -1406,15 +1406,15 @@ │ │ │ │
std::size_t pqxx::internal::scan_double_quoted_string (char const char const input[],
std::size_t size,
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -1450,15 +1450,15 @@ │ │ │ │
│ │ │ │
│ │ │ │
std::size_t pqxx::internal::scan_unquoted_string (char const char const input[],
std::size_t size,
│ │ │ │ │ │ │ │ │ │ │ │ @@ -1479,15 +1479,15 @@ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
constexpr std::size_t pqxx::internal::size_esc_bin constexpr std::size_t pqxx::internal::size_esc_bin (std::size_t binary_bytes)
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ @@ -1508,17 +1508,17 @@ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
constexpr std::size_t pqxx::internal::size_unesc_bin constexpr std::size_t pqxx::internal::size_unesc_bin (std::size_t escaped_bytes)
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -1543,21 +1543,21 @@ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
void PQXX_COLD PQXX_LIBEXPORT pqxx::internal::skip_init_ssl void PQXX_COLD PQXX_LIBEXPORT pqxx::internal::skip_init_ssl (int int skips)
│ │ │ │
│ │ │ │ noexcept
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -1574,17 +1574,17 @@ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ template<typename... TYPES>
│ │ │ │
std::string PQXX_LIBEXPORT pqxx::internal::state_buffer_overrun (int int have_bytes,
int int need_bytes 
)
│ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
std::tuple< strip_t< TYPES >... > pqxx::internal::strip_types std::tuple< strip_t< TYPES >... > pqxx::internal::strip_types (std::tuple< TYPES... > const & std::tuple< TYPES... > const)
│ │ │ │
│ │ │ │ │ │ │ │

Helper: Apply strip_t to each of a tuple type's component types.

│ │ │ │ @@ -1595,17 +1595,17 @@ │ │ │ │ │ │ │ │

◆ wait_for()

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
void pqxx::internal::wait_for void pqxx::internal::wait_for (unsigned int unsigned int microseconds)
│ │ │ │
│ │ │ │ │ │ │ │

Wait.

│ │ │ │ @@ -1616,21 +1616,21 @@ │ │ │ │

Variable Documentation

│ │ │ │ │ │ │ │

◆ iterator_identity

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ -template<typename ITERATOR >
│ │ │ │ +template<typename ITERATOR >
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │
constexpr auto const pqxx::internal::iterator_identityconstexpr auto const pqxx::internal::iterator_identity
│ │ │ │
│ │ │ │ inlineconstexpr
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -93,396 +93,396 @@ │ │ │ │ │ class   _s_t_r_e_a_m___q_u_e_r_y___e_n_d___i_t_e_r_a_t_o_r │ │ │ │ │   The end() iterator for a _s_t_r_e_a_m___q_u_e_r_y. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ class   _s_t_r_e_a_m___q_u_e_r_y___i_n_p_u_t___i_t_e_r_a_t_o_r │ │ │ │ │   Input iterator for _s_t_r_e_a_m___q_u_e_r_y. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ TTyyppeeddeeffss │ │ │ │ │ -template │ │ │ │ │ -using  ccoommppoossiittee__ffiieelldd__ppaarrsseerr = void(*)(std::size_t &index, std::string_view │ │ │ │ │ - input, std::size_t &pos, T &_f_i_e_l_d, std::size_t last_field) │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _T > │ │ │ │ │ +_u_s_i_n_g  ccoommppoossiittee__ffiieelldd__ppaarrsseerr = _v_o_i_d(*)(std::size_t &index, std::string_view │ │ │ │ │ + _i_n_p_u_t, std::size_t &pos, _T &_f_i_e_l_d, std::size_t _l_a_s_t___f_i_e_l_d) │ │ │ │ │   Pointer to an encoding-specific specialisation of parse_composite_field. │ │ │ │ │   │ │ │ │ │ -using  _g_l_y_p_h___s_c_a_n_n_e_r___f_u_n_c = std::size_t(char const buffer[], std::size_t │ │ │ │ │ - buffer_len, std::size_t start) │ │ │ │ │ +_u_s_i_n_g  _g_l_y_p_h___s_c_a_n_n_e_r___f_u_n_c = std::size_t(_c_h_a_r _c_o_n_s_t _b_u_f_f_e_r[], std::size_t │ │ │ │ │ + _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │   Function type: "find the end of the current glyph.". │ │ │ │ │   │ │ │ │ │ -using  _c_h_a_r___f_i_n_d_e_r___f_u_n_c = std::size_t(std::string_view haystack, std::size_t │ │ │ │ │ - start) │ │ │ │ │ +_u_s_i_n_g  _c_h_a_r___f_i_n_d_e_r___f_u_n_c = std::size_t(std::string_view _h_a_y_s_t_a_c_k, std::size_t │ │ │ │ │ + _s_t_a_r_t) │ │ │ │ │   Function type: "find first occurrence of specific any of ASCII │ │ │ │ │ characters.". │ │ │ │ │   │ │ │ │ │ -template │ │ │ │ │ -using  aarrggss__tt = decltype(_a_r_g_s___f(std::declval< CALLABLE >())) │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _C_A_L_L_A_B_L_E > │ │ │ │ │ +_u_s_i_n_g  aarrggss__tt = _d_e_c_l_t_y_p_e(_a_r_g_s___f(std::declval< _C_A_L_L_A_B_L_E >())) │ │ │ │ │   A callable's parameter types, as a tuple. │ │ │ │ │   │ │ │ │ │ template │ │ │ │ │ -using  ssttrriipp__ttyyppeess__tt = decltype(_s_t_r_i_p___t_y_p_e_s(std::declval< TYPES... >())) │ │ │ │ │ +_u_s_i_n_g  ssttrriipp__ttyyppeess__tt = _d_e_c_l_t_y_p_e(_s_t_r_i_p___t_y_p_e_s(std::declval< TYPES... >())) │ │ │ │ │   Take a tuple type and apply _s_t_r_i_p___t to its component types. │ │ │ │ │   │ │ │ │ │ EEnnuummeerraattiioonnss │ │ │ │ │ enum class   eennccooddiinngg__ggrroouupp { │ │ │ │ │   MMOONNOOBBYYTTEE , BBIIGG55 , EEUUCC__CCNN , EEUUCC__JJPP , │ │ │ │ │   EEUUCC__KKRR , EEUUCC__TTWW , GGBB1188003300 , GGBBKK , │ │ │ │ │   JJOOHHAABB , MMUULLEE__IINNTTEERRNNAALL , SSJJIISS , UUHHCC , │ │ │ │ │   UUTTFF88 │ │ │ │ │ } │ │ │ │ │   │ │ │ │ │ FFuunnccttiioonnss │ │ │ │ │ pqxx::internal::encoding_group  eenncc__ggrroouupp (std::string_view │ │ │ │ │ - encoding_name) │ │ │ │ │ + _e_n_c_o_d_i_n_g___n_a_m_e) │ │ │ │ │   Convert libpq encoding name to its │ │ │ │ │ libpqxx encoding group. │ │ │ │ │   │ │ │ │ │ -   ____aattttrriibbuuttee____ ((pure)) char const │ │ │ │ │ - *_n_a_m_e___e_n_c_o_d_i_n_g(int encoding_id) │ │ │ │ │ +   ____aattttrriibbuuttee____ ((_p_u_r_e)) _c_h_a_r _c_o_n_s_t │ │ │ │ │ + *_n_a_m_e___e_n_c_o_d_i_n_g(_i_n_t encoding_id) │ │ │ │ │   │ │ │ │ │ - encoding_group  eenncc__ggrroouupp (int) │ │ │ │ │ + encoding_group  eenncc__ggrroouupp (_i_n_t) │ │ │ │ │   Convert libpq encoding enum value to │ │ │ │ │ its libpqxx group. │ │ │ │ │   │ │ │ │ │ - std::string  ddeemmaannggllee__ttyyppee__nnaammee (char const []) │ │ │ │ │ + std::string  ddeemmaannggllee__ttyyppee__nnaammee (_c_h_a_r _c_o_n_s_t []) │ │ │ │ │   Attempt to demangle std::type_info:: │ │ │ │ │ name() to something human-readable. │ │ │ │ │   │ │ │ │ │ - void  tthhrrooww__nnuullll__ccoonnvveerrssiioonn (std::string │ │ │ │ │ - const &type) │ │ │ │ │ + _v_o_i_d  tthhrrooww__nnuullll__ccoonnvveerrssiioonn (std::string │ │ │ │ │ + _c_o_n_s_t &type) │ │ │ │ │   Throw exception for attempt to convert │ │ │ │ │ SQL NULL to given type. │ │ │ │ │   │ │ │ │ │ - void  tthhrrooww__nnuullll__ccoonnvveerrssiioonn (std::string_view │ │ │ │ │ + _v_o_i_d  tthhrrooww__nnuullll__ccoonnvveerrssiioonn (std::string_view │ │ │ │ │ type) │ │ │ │ │   Throw exception for attempt to convert │ │ │ │ │ SQL NULL to given type. │ │ │ │ │   │ │ │ │ │ - std::string  _s_t_a_t_e___b_u_f_f_e_r___o_v_e_r_r_u_n (int have_bytes, │ │ │ │ │ - int need_bytes) │ │ │ │ │ + std::string  _s_t_a_t_e___b_u_f_f_e_r___o_v_e_r_r_u_n (_i_n_t _h_a_v_e___b_y_t_e_s, │ │ │ │ │ + _i_n_t _n_e_e_d___b_y_t_e_s) │ │ │ │ │   Summarize buffer overrun. │ │ │ │ │   │ │ │ │ │ -template │ │ │ │ │ - std::string  ttoo__ssttrriinngg__ffllooaatt (T value) │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _T > │ │ │ │ │ + std::string  ttoo__ssttrriinngg__ffllooaatt (_T value) │ │ │ │ │   Floating-point implementations for │ │ │ │ │ _p_q_x_x_:_:_t_o___s_t_r_i_n_g_(_). │ │ │ │ │   │ │ │ │ │ - template std::string  ttoo__ssttrriinngg__ffllooaatt (float) │ │ │ │ │ + _t_e_m_p_l_a_t_e std::string  ttoo__ssttrriinngg__ffllooaatt (_f_l_o_a_t) │ │ │ │ │   │ │ │ │ │ - template std::string  ttoo__ssttrriinngg__ffllooaatt (double) │ │ │ │ │ + _t_e_m_p_l_a_t_e std::string  ttoo__ssttrriinngg__ffllooaatt (_d_o_u_b_l_e) │ │ │ │ │   │ │ │ │ │ - template std::string  ttoo__ssttrriinngg__ffllooaatt (long double) │ │ │ │ │ + _t_e_m_p_l_a_t_e std::string  ttoo__ssttrriinngg__ffllooaatt (_l_o_n_g _d_o_u_b_l_e) │ │ │ │ │   │ │ │ │ │ -   ____aattttrriibbuuttee____ ((visibility("default"))) │ │ │ │ │ - int _c_h_e_c_k___p_q_x_x___v_e_r_s_i_o_n___7___1_0() noexcept │ │ │ │ │ +   ____aattttrriibbuuttee____ ((_v_i_s_i_b_i_l_i_t_y("default"))) │ │ │ │ │ + _i_n_t _c_h_e_c_k___p_q_x_x___v_e_r_s_i_o_n___7___1_0() _n_o_e_x_c_e_p_t │ │ │ │ │   │ │ │ │ │ - void PQXX_COLD PQXX_LIBEXPORT  _s_k_i_p___i_n_i_t___s_s_l (int skips) noexcept │ │ │ │ │ + _v_o_i_d PQXX_COLD PQXX_LIBEXPORT  _s_k_i_p___i_n_i_t___s_s_l (_i_n_t _s_k_i_p_s) _n_o_e_x_c_e_p_t │ │ │ │ │   Control OpenSSL/crypto library │ │ │ │ │ initialisation. │ │ │ │ │   │ │ │ │ │ template │ │ │ │ │ - std::size_t  _s_c_a_n___d_o_u_b_l_e___q_u_o_t_e_d___s_t_r_i_n_g (char const │ │ │ │ │ - input[], std::size_t size, std::size_t │ │ │ │ │ + std::size_t  _s_c_a_n___d_o_u_b_l_e___q_u_o_t_e_d___s_t_r_i_n_g (_c_h_a_r _c_o_n_s_t │ │ │ │ │ + _i_n_p_u_t[], std::size_t size, std::size_t │ │ │ │ │ pos) │ │ │ │ │   │ │ │ │ │ template │ │ │ │ │ - std::string  ppaarrssee__ddoouubbllee__qquuootteedd__ssttrriinngg (char const │ │ │ │ │ - input[], std::size_t end, std::size_t │ │ │ │ │ + std::string  ppaarrssee__ddoouubbllee__qquuootteedd__ssttrriinngg (_c_h_a_r _c_o_n_s_t │ │ │ │ │ + _i_n_p_u_t[], std::size_t end, std::size_t │ │ │ │ │ pos) │ │ │ │ │   Un-quote and un-escape a double-quoted │ │ │ │ │ SQL string. │ │ │ │ │   │ │ │ │ │ template │ │ │ │ │ - std::size_t  _s_c_a_n___u_n_q_u_o_t_e_d___s_t_r_i_n_g (char const input │ │ │ │ │ + std::size_t  _s_c_a_n___u_n_q_u_o_t_e_d___s_t_r_i_n_g (_c_h_a_r _c_o_n_s_t _i_n_p_u_t │ │ │ │ │ [], std::size_t size, std::size_t pos) │ │ │ │ │   Find the end of an unquoted string in │ │ │ │ │ an array or composite-type value. │ │ │ │ │   │ │ │ │ │ template │ │ │ │ │ - std::string_view  ppaarrssee__uunnqquuootteedd__ssttrriinngg (char const input │ │ │ │ │ + std::string_view  ppaarrssee__uunnqquuootteedd__ssttrriinngg (_c_h_a_r _c_o_n_s_t _i_n_p_u_t │ │ │ │ │ [], std::size_t end, std::size_t pos) │ │ │ │ │   Parse an unquoted array entry or cfield │ │ │ │ │ of a composite-type field. │ │ │ │ │   │ │ │ │ │ -template │ │ │ │ │ - void  _p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d (std::size_t │ │ │ │ │ - &index, std::string_view input, std:: │ │ │ │ │ - size_t &pos, T &_f_i_e_l_d, std::size_t │ │ │ │ │ - last_field) │ │ │ │ │ +template │ │ │ │ │ + _v_o_i_d  _p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d (std::size_t │ │ │ │ │ + &index, std::string_view _i_n_p_u_t, std:: │ │ │ │ │ + size_t &pos, _T &_f_i_e_l_d, std::size_t │ │ │ │ │ + _l_a_s_t___f_i_e_l_d) │ │ │ │ │   Parse a field of a composite-type │ │ │ │ │ value. │ │ │ │ │   │ │ │ │ │ template │ │ │ │ │ _c_o_m_p_o_s_i_t_e___f_i_e_l_d___p_a_r_s_e_r< T >  ssppeecciiaalliizzee__ppaarrssee__ccoommppoossiittee__ffiieelldd │ │ │ │ │ (encoding_group enc) │ │ │ │ │   Look up implementation of │ │ │ │ │ parse_composite_field for ENC. │ │ │ │ │   │ │ │ │ │ -template │ │ │ │ │ - std::size_t  ssiizzee__ccoommppoossiittee__ffiieelldd__bbuuffffeerr (T const │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _T > │ │ │ │ │ + std::size_t  ssiizzee__ccoommppoossiittee__ffiieelldd__bbuuffffeerr (_T _c_o_n_s_t │ │ │ │ │ &_f_i_e_l_d) │ │ │ │ │   Conservatively estimate buffer size │ │ │ │ │ needed for a composite field. │ │ │ │ │   │ │ │ │ │ -template │ │ │ │ │ - void  wwrriittee__ccoommppoossiittee__ffiieelldd (char *&pos, char │ │ │ │ │ - *end, T const &_f_i_e_l_d) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - void  rreennddeerr__iitteemm (TYPE const &item, char │ │ │ │ │ - *&here, char *end) │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _T > │ │ │ │ │ + _v_o_i_d  wwrriittee__ccoommppoossiittee__ffiieelldd (_c_h_a_r *&pos, _c_h_a_r │ │ │ │ │ + *end, _T _c_o_n_s_t &_f_i_e_l_d) │ │ │ │ │ +  │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _T_Y_P_E > │ │ │ │ │ + _v_o_i_d  rreennddeerr__iitteemm (_T_Y_P_E _c_o_n_s_t &_i_t_e_m, _c_h_a_r │ │ │ │ │ + *&_h_e_r_e, _c_h_a_r *end) │ │ │ │ │   Convert item to a string, write it into │ │ │ │ │ [here, end). │ │ │ │ │   │ │ │ │ │ template │ │ │ │ │ - std::string  _c_o_n_c_a_t (TYPE... item) │ │ │ │ │ + std::string  _c_o_n_c_a_t (TYPE... _i_t_e_m) │ │ │ │ │   Efficiently combine a bunch of items │ │ │ │ │ into one big string. │ │ │ │ │   │ │ │ │ │ - constexpr char  nnuummbbeerr__ttoo__ddiiggiitt (int i) noexcept │ │ │ │ │ + _c_o_n_s_t_e_x_p_r _c_h_a_r  nnuummbbeerr__ttoo__ddiiggiitt (_i_n_t _i) _n_o_e_x_c_e_p_t │ │ │ │ │   Convert a number in [0, 9] to its ASCII │ │ │ │ │ digit. │ │ │ │ │   │ │ │ │ │ - constexpr int  ddiiggiitt__ttoo__nnuummbbeerr (char c) noexcept │ │ │ │ │ + _c_o_n_s_t_e_x_p_r _i_n_t  ddiiggiitt__ttoo__nnuummbbeerr (_c_h_a_r _c) _n_o_e_x_c_e_p_t │ │ │ │ │   Compute numeric value of given textual │ │ │ │ │ digit (assuming that it is a digit). │ │ │ │ │   │ │ │ │ │ -template │ │ │ │ │ - std::string  ssttaattee__bbuuffffeerr__oovveerrrruunn (HAVE have_bytes, │ │ │ │ │ - NEED need_bytes) │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _H_A_V_E , _t_y_p_e_n_a_m_e _N_E_E_D > │ │ │ │ │ + std::string  ssttaattee__bbuuffffeerr__oovveerrrruunn (_H_A_V_E _h_a_v_e___b_y_t_e_s, │ │ │ │ │ + _N_E_E_D _n_e_e_d___b_y_t_e_s) │ │ │ │ │   │ │ │ │ │ -template │ │ │ │ │ - PQXX_LIBEXPORT std::string  ttoo__ssttrriinngg__ffllooaatt (T) │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _T > │ │ │ │ │ + PQXX_LIBEXPORT std::string  ttoo__ssttrriinngg__ffllooaatt (_T) │ │ │ │ │   Floating-point implementations for │ │ │ │ │ _p_q_x_x_:_:_t_o___s_t_r_i_n_g_(_). │ │ │ │ │   │ │ │ │ │ -template │ │ │ │ │ - char *  ggeenneerriicc__iinnttoo__bbuuff (char *begin, char │ │ │ │ │ - *end, T const &value) │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _T > │ │ │ │ │ + _c_h_a_r *  ggeenneerriicc__iinnttoo__bbuuff (_c_h_a_r *begin, _c_h_a_r │ │ │ │ │ + *end, _T _c_o_n_s_t &value) │ │ │ │ │   Generic implementation for into_buf, on │ │ │ │ │ top of to_buf. │ │ │ │ │   │ │ │ │ │ - PQXX_PURE char const *  nnaammee__eennccooddiinngg (int encoding_id) │ │ │ │ │ + PQXX_PURE _c_h_a_r _c_o_n_s_t *  nnaammee__eennccooddiinngg (_i_n_t encoding_id) │ │ │ │ │   Return PostgreSQL's name for encoding │ │ │ │ │ enum value. │ │ │ │ │   │ │ │ │ │ PQXX_LIBEXPORT _g_l_y_p_h___s_c_a_n_n_e_r___f_u_n_c *  _g_e_t___g_l_y_p_h___s_c_a_n_n_e_r (encoding_group) │ │ │ │ │   Look up the glyph scanner function for │ │ │ │ │ a given encoding group. │ │ │ │ │   │ │ │ │ │ template │ │ │ │ │ - std::size_t  _f_i_n_d___c_h_a_r (_g_l_y_p_h___s_c_a_n_n_e_r___f_u_n_c *scanner, │ │ │ │ │ - std::string_view haystack, std::size_t │ │ │ │ │ - here=0u) │ │ │ │ │ + std::size_t  _f_i_n_d___c_h_a_r (_g_l_y_p_h___s_c_a_n_n_e_r___f_u_n_c *_s_c_a_n_n_e_r, │ │ │ │ │ + std::string_view _h_a_y_s_t_a_c_k, std::size_t │ │ │ │ │ + _h_e_r_e=0u) │ │ │ │ │   Find any of the ASCII characters NEEDLE │ │ │ │ │ in haystack. │ │ │ │ │   │ │ │ │ │ -template │ │ │ │ │ - void  _f_o_r___g_l_y_p_h_s (encoding_group enc, │ │ │ │ │ - CALLABLE callback, char const buffer[], │ │ │ │ │ - std::size_t buffer_len, std::size_t │ │ │ │ │ - start=0) │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _C_A_L_L_A_B_L_E > │ │ │ │ │ + _v_o_i_d  _f_o_r___g_l_y_p_h_s (encoding_group _e_n_c, │ │ │ │ │ + _C_A_L_L_A_B_L_E _c_a_l_l_b_a_c_k, _c_h_a_r _c_o_n_s_t _b_u_f_f_e_r[], │ │ │ │ │ + std::size_t _b_u_f_f_e_r___l_e_n, std::size_t │ │ │ │ │ + _s_t_a_r_t=0) │ │ │ │ │   Iterate over the glyphs in a buffer. │ │ │ │ │   │ │ │ │ │ template │ │ │ │ │ PQXX_PURE std::size_t  _f_i_n_d___s___a_s_c_i_i___c_h_a_r (std::string_view │ │ │ │ │ - haystack, std::size_t here) │ │ │ │ │ + _h_a_y_s_t_a_c_k, std::size_t _h_e_r_e) │ │ │ │ │   Find first of NEEDLE ASCII chars in │ │ │ │ │ haystack. │ │ │ │ │   │ │ │ │ │ - constexpr encoding_group  _m_a_p___a_s_c_i_i___s_e_a_r_c_h___g_r_o_u_p (encoding_group │ │ │ │ │ - enc) noexcept │ │ │ │ │ + _c_o_n_s_t_e_x_p_r encoding_group  _m_a_p___a_s_c_i_i___s_e_a_r_c_h___g_r_o_u_p (encoding_group │ │ │ │ │ + _e_n_c) _n_o_e_x_c_e_p_t │ │ │ │ │   Just for searching an ASCII character, │ │ │ │ │ what encoding can we use here? │ │ │ │ │   │ │ │ │ │ template │ │ │ │ │ -PQXX_PURE constexpr _c_h_a_r___f_i_n_d_e_r___f_u_n_c *  _g_e_t___c_h_a_r___f_i_n_d_e_r (encoding_group enc) │ │ │ │ │ +PQXX_PURE _c_o_n_s_t_e_x_p_r _c_h_a_r___f_i_n_d_e_r___f_u_n_c *  _g_e_t___c_h_a_r___f_i_n_d_e_r (encoding_group _e_n_c) │ │ │ │ │   Look up a character search function for │ │ │ │ │ an encoding group. │ │ │ │ │   │ │ │ │ │ template │ │ │ │ │ -PQXX_PURE constexpr _c_h_a_r___f_i_n_d_e_r___f_u_n_c *  _g_e_t___s___c_h_a_r___f_i_n_d_e_r (encoding_group enc) │ │ │ │ │ +PQXX_PURE _c_o_n_s_t_e_x_p_r _c_h_a_r___f_i_n_d_e_r___f_u_n_c *  _g_e_t___s___c_h_a_r___f_i_n_d_e_r (encoding_group _e_n_c) │ │ │ │ │   Look up a "sentry" character search │ │ │ │ │ function for an encoding group. │ │ │ │ │   │ │ │ │ │ PQXX_LIBEXPORT _r_e_s_u_l_t___s_i_z_e___t_y_p_e  oobbttaaiinn__ssttaatteelleessss__ccuurrssoorr__ssiizzee │ │ │ │ │ (_s_q_l___c_u_r_s_o_r &) │ │ │ │ │   │ │ │ │ │ PQXX_LIBEXPORT _r_e_s_u_l_t  ssttaatteelleessss__ccuurrssoorr__rreettrriieevvee (_s_q_l___c_u_r_s_o_r │ │ │ │ │ &, result::difference_type size, │ │ │ │ │ - result::difference_type begin_pos, │ │ │ │ │ - result::difference_type end_pos) │ │ │ │ │ + result::difference_type _b_e_g_i_n___p_o_s, │ │ │ │ │ + result::difference_type _e_n_d___p_o_s) │ │ │ │ │   │ │ │ │ │ template │ │ │ │ │ - bool  ooppeerraattoorr==== (_s_t_r_e_a_m___q_u_e_r_y___e_n_d___i_t_e_r_a_t_o_r, │ │ │ │ │ + _b_o_o_l  ooppeerraattoorr==== (_s_t_r_e_a_m___q_u_e_r_y___e_n_d___i_t_e_r_a_t_o_r, │ │ │ │ │ _s_t_r_e_a_m___q_u_e_r_y___i_n_p_u_t___i_t_e_r_a_t_o_r< TYPE... > │ │ │ │ │ - const &i) │ │ │ │ │ + _c_o_n_s_t &_i) │ │ │ │ │   │ │ │ │ │ template │ │ │ │ │ - bool  ooppeerraattoorr!!== (_s_t_r_e_a_m___q_u_e_r_y___e_n_d___i_t_e_r_a_t_o_r, │ │ │ │ │ + _b_o_o_l  ooppeerraattoorr!!== (_s_t_r_e_a_m___q_u_e_r_y___e_n_d___i_t_e_r_a_t_o_r, │ │ │ │ │ _s_t_r_e_a_m___q_u_e_r_y___i_n_p_u_t___i_t_e_r_a_t_o_r< TYPE... > │ │ │ │ │ - const &i) │ │ │ │ │ + _c_o_n_s_t &_i) │ │ │ │ │   │ │ │ │ │ - void PQXX_LIBEXPORT  _w_a_i_t___f_o_r (unsigned int microseconds) │ │ │ │ │ + _v_o_i_d PQXX_LIBEXPORT  _w_a_i_t___f_o_r (_u_n_s_i_g_n_e_d _i_n_t _m_i_c_r_o_s_e_c_o_n_d_s) │ │ │ │ │   Wait. │ │ │ │ │   │ │ │ │ │ - PQXX_LIBEXPORT void  wwaaiitt__ffdd (int fd, bool for_read, bool │ │ │ │ │ - for_write, unsigned seconds=1, unsigned │ │ │ │ │ - microseconds=0) │ │ │ │ │ + PQXX_LIBEXPORT _v_o_i_d  wwaaiitt__ffdd (_i_n_t _f_d, _b_o_o_l _f_o_r___r_e_a_d, _b_o_o_l │ │ │ │ │ + _f_o_r___w_r_i_t_e, _u_n_s_i_g_n_e_d _s_e_c_o_n_d_s=1, _u_n_s_i_g_n_e_d │ │ │ │ │ + _m_i_c_r_o_s_e_c_o_n_d_s=0) │ │ │ │ │   Wait for a socket to be ready for │ │ │ │ │ reading/writing, or timeout. │ │ │ │ │   │ │ │ │ │ - PQXX_LIBEXPORT void  cclleeaarr__rreessuulltt (pq::PGresult const *) │ │ │ │ │ - noexcept │ │ │ │ │ + PQXX_LIBEXPORT _v_o_i_d  cclleeaarr__rreessuulltt (pq::PGresult _c_o_n_s_t *) │ │ │ │ │ + _n_o_e_x_c_e_p_t │ │ │ │ │   C++ wrapper for libpq's PQclear. │ │ │ │ │   │ │ │ │ │ -template │ │ │ │ │ - constexpr bool  ccmmpp__lleessss (LEFT lhs, RIGHT rhs) noexcept │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _L_E_F_T , _t_y_p_e_n_a_m_e _R_I_G_H_T > │ │ │ │ │ + _c_o_n_s_t_e_x_p_r _b_o_o_l  ccmmpp__lleessss (_L_E_F_T _l_h_s, _R_I_G_H_T _r_h_s) _n_o_e_x_c_e_p_t │ │ │ │ │   Same as std::cmp_less, or a workaround │ │ │ │ │ where that's not available. │ │ │ │ │   │ │ │ │ │ -template │ │ │ │ │ - constexpr bool  ccmmpp__ggrreeaatteerr (LEFT lhs, RIGHT rhs) │ │ │ │ │ - noexcept │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _L_E_F_T , _t_y_p_e_n_a_m_e _R_I_G_H_T > │ │ │ │ │ + _c_o_n_s_t_e_x_p_r _b_o_o_l  ccmmpp__ggrreeaatteerr (_L_E_F_T _l_h_s, _R_I_G_H_T _r_h_s) │ │ │ │ │ + _n_o_e_x_c_e_p_t │ │ │ │ │   C++20 std::cmp_greater, or workaround │ │ │ │ │ if not available. │ │ │ │ │   │ │ │ │ │ -template │ │ │ │ │ - constexpr bool  ccmmpp__lleessss__eeqquuaall (LEFT lhs, RIGHT rhs) │ │ │ │ │ - noexcept │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _L_E_F_T , _t_y_p_e_n_a_m_e _R_I_G_H_T > │ │ │ │ │ + _c_o_n_s_t_e_x_p_r _b_o_o_l  ccmmpp__lleessss__eeqquuaall (_L_E_F_T _l_h_s, _R_I_G_H_T _r_h_s) │ │ │ │ │ + _n_o_e_x_c_e_p_t │ │ │ │ │   C++20 std::cmp_less_equal, or │ │ │ │ │ workaround if not available. │ │ │ │ │   │ │ │ │ │ -template │ │ │ │ │ - constexpr bool  ccmmpp__ggrreeaatteerr__eeqquuaall (LEFT lhs, RIGHT rhs) │ │ │ │ │ - noexcept │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _L_E_F_T , _t_y_p_e_n_a_m_e _R_I_G_H_T > │ │ │ │ │ + _c_o_n_s_t_e_x_p_r _b_o_o_l  ccmmpp__ggrreeaatteerr__eeqquuaall (_L_E_F_T _l_h_s, _R_I_G_H_T _r_h_s) │ │ │ │ │ + _n_o_e_x_c_e_p_t │ │ │ │ │   C++20 std::cmp_greater_equal, or │ │ │ │ │ workaround if not available. │ │ │ │ │   │ │ │ │ │ - std::string  _c_a_t_2 (std::string_view x, std:: │ │ │ │ │ - string_view y) │ │ │ │ │ + std::string  _c_a_t_2 (std::string_view _x, std:: │ │ │ │ │ + string_view _y) │ │ │ │ │   Efficiently concatenate two strings. │ │ │ │ │   │ │ │ │ │ -template │ │ │ │ │ - constexpr bool  _i_s___d_i_g_i_t (CHAR c) noexcept │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _C_H_A_R > │ │ │ │ │ + _c_o_n_s_t_e_x_p_r _b_o_o_l  _i_s___d_i_g_i_t (_C_H_A_R _c) _n_o_e_x_c_e_p_t │ │ │ │ │   A safer and more generic replacement │ │ │ │ │ for std::isdigit. │ │ │ │ │   │ │ │ │ │ std::string  _d_e_s_c_r_i_b_e___o_b_j_e_c_t (std::string_view │ │ │ │ │ - class_name, std::string_view name) │ │ │ │ │ + _c_l_a_s_s___n_a_m_e, std::string_view name) │ │ │ │ │   Describe an object for humans, based on │ │ │ │ │ class name and optional name. │ │ │ │ │   │ │ │ │ │ - void  _c_h_e_c_k___u_n_i_q_u_e___r_e_g_i_s_t_e_r (void const │ │ │ │ │ - *old_guest, std::string_view old_class, │ │ │ │ │ - std::string_view old_name, void const │ │ │ │ │ - *new_guest, std::string_view new_class, │ │ │ │ │ - std::string_view new_name) │ │ │ │ │ + _v_o_i_d  _c_h_e_c_k___u_n_i_q_u_e___r_e_g_i_s_t_e_r (_v_o_i_d _c_o_n_s_t │ │ │ │ │ + *_o_l_d___g_u_e_s_t, std::string_view _o_l_d___c_l_a_s_s, │ │ │ │ │ + std::string_view _o_l_d___n_a_m_e, _v_o_i_d _c_o_n_s_t │ │ │ │ │ + *_n_e_w___g_u_e_s_t, std::string_view _n_e_w___c_l_a_s_s, │ │ │ │ │ + std::string_view _n_e_w___n_a_m_e) │ │ │ │ │   Check validity of registering a new │ │ │ │ │ "guest" in a "host.". │ │ │ │ │   │ │ │ │ │ - void  _c_h_e_c_k___u_n_i_q_u_e___u_n_r_e_g_i_s_t_e_r (void const │ │ │ │ │ - *old_guest, std::string_view old_class, │ │ │ │ │ - std::string_view old_name, void const │ │ │ │ │ - *new_guest, std::string_view new_class, │ │ │ │ │ - std::string_view new_name) │ │ │ │ │ + _v_o_i_d  _c_h_e_c_k___u_n_i_q_u_e___u_n_r_e_g_i_s_t_e_r (_v_o_i_d _c_o_n_s_t │ │ │ │ │ + *_o_l_d___g_u_e_s_t, std::string_view _o_l_d___c_l_a_s_s, │ │ │ │ │ + std::string_view _o_l_d___n_a_m_e, _v_o_i_d _c_o_n_s_t │ │ │ │ │ + *_n_e_w___g_u_e_s_t, std::string_view _n_e_w___c_l_a_s_s, │ │ │ │ │ + std::string_view _n_e_w___n_a_m_e) │ │ │ │ │   Like _c_h_e_c_k___u_n_i_q_u_e___r_e_g_i_s_t_e_r, but for un- │ │ │ │ │ registering a guest. │ │ │ │ │   │ │ │ │ │ - constexpr std::size_t  _s_i_z_e___e_s_c___b_i_n (std::size_t binary_bytes) │ │ │ │ │ - noexcept │ │ │ │ │ + _c_o_n_s_t_e_x_p_r std::size_t  _s_i_z_e___e_s_c___b_i_n (std::size_t _b_i_n_a_r_y___b_y_t_e_s) │ │ │ │ │ + _n_o_e_x_c_e_p_t │ │ │ │ │   Compute buffer size needed to escape │ │ │ │ │ binary data for use as a BYTEA. │ │ │ │ │   │ │ │ │ │ - constexpr std::size_t  _s_i_z_e___u_n_e_s_c___b_i_n (std::size_t │ │ │ │ │ - escaped_bytes) noexcept │ │ │ │ │ + _c_o_n_s_t_e_x_p_r std::size_t  _s_i_z_e___u_n_e_s_c___b_i_n (std::size_t │ │ │ │ │ + _e_s_c_a_p_e_d___b_y_t_e_s) _n_o_e_x_c_e_p_t │ │ │ │ │   Compute binary size from the size of │ │ │ │ │ its escaped version. │ │ │ │ │   │ │ │ │ │ - void PQXX_LIBEXPORT  _e_s_c___b_i_n (_b_y_t_e_s___v_i_e_w binary_data, char │ │ │ │ │ - buffer[]) noexcept │ │ │ │ │ + _v_o_i_d PQXX_LIBEXPORT  _e_s_c___b_i_n (_b_y_t_e_s___v_i_e_w _b_i_n_a_r_y___d_a_t_a, _c_h_a_r │ │ │ │ │ + _b_u_f_f_e_r[]) _n_o_e_x_c_e_p_t │ │ │ │ │   Hex-escape binary data into a buffer. │ │ │ │ │   │ │ │ │ │ - std::string PQXX_LIBEXPORT  eesscc__bbiinn (_b_y_t_e_s___v_i_e_w binary_data) │ │ │ │ │ + std::string PQXX_LIBEXPORT  eesscc__bbiinn (_b_y_t_e_s___v_i_e_w _b_i_n_a_r_y___d_a_t_a) │ │ │ │ │   Hex-escape binary data into a std:: │ │ │ │ │ string. │ │ │ │ │   │ │ │ │ │ - void PQXX_LIBEXPORT  uunneesscc__bbiinn (std::string_view │ │ │ │ │ - escaped_data, std::byte buffer[]) │ │ │ │ │ + _v_o_i_d PQXX_LIBEXPORT  uunneesscc__bbiinn (std::string_view │ │ │ │ │ + _e_s_c_a_p_e_d___d_a_t_a, std::byte _b_u_f_f_e_r[]) │ │ │ │ │   Reconstitute binary data from its │ │ │ │ │ escaped version. │ │ │ │ │   │ │ │ │ │ _b_y_t_e_s PQXX_LIBEXPORT  uunneesscc__bbiinn (std::string_view │ │ │ │ │ - escaped_data) │ │ │ │ │ + _e_s_c_a_p_e_d___d_a_t_a) │ │ │ │ │   Reconstitute binary data from its │ │ │ │ │ escaped version. │ │ │ │ │   │ │ │ │ │ -template │ │ │ │ │ - auto  ssssiizzee (T const &c) │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _T > │ │ │ │ │ + _a_u_t_o  ssssiizzee (_T _c_o_n_s_t &_c) │ │ │ │ │   Transitional: std::ssize(), or custom │ │ │ │ │ implementation if not available. │ │ │ │ │   │ │ │ │ │ -template │ │ │ │ │ - std::tuple< ARGS... >  _a_r_g_s___f (RETURN(&func)(ARGS...)) │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _R_E_T_U_R_N , typename... ARGS> │ │ │ │ │ + std::tuple< ARGS... >  _a_r_g_s___f (_R_E_T_U_R_N(&_f_u_n_c)(ARGS...)) │ │ │ │ │   Helper for determining a function's │ │ │ │ │ parameter types. │ │ │ │ │   │ │ │ │ │ -template │ │ │ │ │ - std::tuple< ARGS... >  _a_r_g_s___f (std::function< RETURN(ARGS...)> │ │ │ │ │ - const &) │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _R_E_T_U_R_N , typename... ARGS> │ │ │ │ │ + std::tuple< ARGS... >  _a_r_g_s___f (std::function< _R_E_T_U_R_N(ARGS...)> │ │ │ │ │ + _c_o_n_s_t &) │ │ │ │ │   Helper for determining a std:: │ │ │ │ │ function's parameter types. │ │ │ │ │   │ │ │ │ │ -template │ │ │ │ │ - std::tuple< ARGS... >  _m_e_m_b_e_r___a_r_g_s___f (RETURN(CLASS::*) │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _C_L_A_S_S , _t_y_p_e_n_a_m_e _R_E_T_U_R_N , typename... ARGS> │ │ │ │ │ + std::tuple< ARGS... >  _m_e_m_b_e_r___a_r_g_s___f (_R_E_T_U_R_N(CLASS::*) │ │ │ │ │ (ARGS...)) │ │ │ │ │   Helper for determining a member │ │ │ │ │ function's parameter types. │ │ │ │ │   │ │ │ │ │ -template │ │ │ │ │ - auto  _a_r_g_s___f (CALLABLE const &f) -> decltype │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _C_A_L_L_A_B_L_E > │ │ │ │ │ + _a_u_t_o  _a_r_g_s___f (_C_A_L_L_A_B_L_E _c_o_n_s_t &_f) -> _d_e_c_l_t_y_p_e │ │ │ │ │ (_m_e_m_b_e_r___a_r_g_s___f(&CALLABLE::operator())) │ │ │ │ │   Helper for determining a callable │ │ │ │ │ type's parameter types. │ │ │ │ │   │ │ │ │ │ template │ │ │ │ │ - std::tuple< _s_t_r_i_p___t< TYPES >... >  _s_t_r_i_p___t_y_p_e_s (std::tuple< TYPES... > │ │ │ │ │ - const &) │ │ │ │ │ + std::tuple< _s_t_r_i_p___t< _T_Y_P_E_S >... >  _s_t_r_i_p___t_y_p_e_s (std::tuple< TYPES... > │ │ │ │ │ + _c_o_n_s_t &) │ │ │ │ │   Helper: Apply strip_t to each of a │ │ │ │ │ tuple type's component types. │ │ │ │ │   │ │ │ │ │ - constexpr char  uunneessccaappee__cchhaarr (char escaped) noexcept │ │ │ │ │ + _c_o_n_s_t_e_x_p_r _c_h_a_r  uunneessccaappee__cchhaarr (_c_h_a_r _e_s_c_a_p_e_d) _n_o_e_x_c_e_p_t │ │ │ │ │   Return original byte for escaped │ │ │ │ │ character. │ │ │ │ │   │ │ │ │ │ template │ │ │ │ │ - char const *PQXX_COLD  eerrrroorr__ssttrriinngg (int err_num, std::array< │ │ │ │ │ - char, BYTES > &buffer) │ │ │ │ │ + _c_h_a_r _c_o_n_s_t *PQXX_COLD  eerrrroorr__ssttrriinngg (_i_n_t _e_r_r___n_u_m, std::array< │ │ │ │ │ + _c_h_a_r, _B_Y_T_E_S > &_b_u_f_f_e_r) │ │ │ │ │   Get error string for a given errno │ │ │ │ │ value. │ │ │ │ │   │ │ │ │ │ - PQXX_LIBEXPORT int  _c_h_e_c_k___p_q_x_x___v_e_r_s_i_o_n___7___1_0 () noexcept │ │ │ │ │ + PQXX_LIBEXPORT _i_n_t  _c_h_e_c_k___p_q_x_x___v_e_r_s_i_o_n___7___1_0 () _n_o_e_x_c_e_p_t │ │ │ │ │   Library version check stub. │ │ │ │ │   │ │ │ │ │ - constexpr char const *  aass__cc__ssttrriinngg (char const str[]) noexcept │ │ │ │ │ + _c_o_n_s_t_e_x_p_r _c_h_a_r _c_o_n_s_t *  aass__cc__ssttrriinngg (_c_h_a_r _c_o_n_s_t str[]) _n_o_e_x_c_e_p_t │ │ │ │ │   Get a raw C string pointer. │ │ │ │ │   │ │ │ │ │ template │ │ │ │ │ - constexpr char const *  aass__cc__ssttrriinngg (char(&str)[N]) noexcept │ │ │ │ │ + _c_o_n_s_t_e_x_p_r _c_h_a_r _c_o_n_s_t *  aass__cc__ssttrriinngg (_c_h_a_r(&str)[_N]) _n_o_e_x_c_e_p_t │ │ │ │ │   Get a raw C string pointer. │ │ │ │ │   │ │ │ │ │ - constexpr char const *  aass__cc__ssttrriinngg (_p_q_x_x_:_:_z_v_i_e_w str) noexcept │ │ │ │ │ + _c_o_n_s_t_e_x_p_r _c_h_a_r _c_o_n_s_t *  aass__cc__ssttrriinngg (_p_q_x_x_:_:_z_v_i_e_w str) _n_o_e_x_c_e_p_t │ │ │ │ │   Get a raw C string pointer. │ │ │ │ │   │ │ │ │ │ - char const *  aass__cc__ssttrriinngg (std::string const &str) │ │ │ │ │ - noexcept │ │ │ │ │ + _c_h_a_r _c_o_n_s_t *  aass__cc__ssttrriinngg (std::string _c_o_n_s_t &str) │ │ │ │ │ + _n_o_e_x_c_e_p_t │ │ │ │ │   Get a raw C string pointer. │ │ │ │ │   │ │ │ │ │ VVaarriiaabblleess │ │ │ │ │ - constexpr char  eemmppttyy__ccoommppoossiittee__ssttrr [] {"()"} │ │ │ │ │ + _c_o_n_s_t_e_x_p_r _c_h_a_r  eemmppttyy__ccoommppoossiittee__ssttrr [] {"()"} │ │ │ │ │   │ │ │ │ │ -template │ │ │ │ │ -constexpr auto const  _i_t_e_r_a_t_o_r___i_d_e_n_t_i_t_y │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _I_T_E_R_A_T_O_R > │ │ │ │ │ +_c_o_n_s_t_e_x_p_r _a_u_t_o _c_o_n_s_t  _i_t_e_r_a_t_o_r___i_d_e_n_t_i_t_y │ │ │ │ │   │ │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ Internal items for libpqxx' own use. Do not use these yourself. │ │ │ │ │ Private namespace for libpqxx's internal use; do not access. │ │ │ │ │ Version check. │ │ │ │ │ Copyright (c) 2000-2024, Jeroen T. Vermeulen. │ │ │ │ │ See COPYING for copyright license. If you did not receive a file called COPYING │ │ │ │ │ @@ -515,70 +515,70 @@ │ │ │ │ │ =============================================================================== │ │ │ │ │ ********** CCllaassss DDooccuummeennttaattiioonn ********** │ │ │ │ │ ********** _?◆_? ppqqxxxx::::iinntteerrnnaall::::ssttrreeaamm__qquueerryy__eenndd__iitteerraattoorr ********** │ │ │ │ │ class pqxx::internal::stream_query_end_iterator │ │ │ │ │ The end() iterator for a _s_t_r_e_a_m___q_u_e_r_y. │ │ │ │ │ ********** TTyyppeeddeeff DDooccuummeennttaattiioonn ********** │ │ │ │ │ ********** _?◆_? cchhaarr__ffiinnddeerr__ffuunncc ********** │ │ │ │ │ -using _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_c_h_a_r___f_i_n_d_e_r___f_u_n_c = typedef std::size_t(std::string_view │ │ │ │ │ -haystack, std::size_t start) │ │ │ │ │ +_u_s_i_n_g _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_c_h_a_r___f_i_n_d_e_r___f_u_n_c = _t_y_p_e_d_e_f std::size_t(std::string_view │ │ │ │ │ +_h_a_y_s_t_a_c_k, std::size_t _s_t_a_r_t) │ │ │ │ │ Function type: "find first occurrence of specific any of ASCII characters.". │ │ │ │ │ This type of function takes a text buffer, and a location in that buffer, and │ │ │ │ │ returns the location of the first occurrence within that string of any of a │ │ │ │ │ specific set of ASCII characters. │ │ │ │ │ For efficiency, it's up to the function to know which those special ASCII │ │ │ │ │ characters are. │ │ │ │ │ The start offset marks the beginning of the current glyph. It must fall within │ │ │ │ │ the buffer. │ │ │ │ │ Returns the offset of the first matching character, or if there is none, the │ │ │ │ │ end of haystack. │ │ │ │ │ ********** _?◆_? ggllyypphh__ssccaannnneerr__ffuunncc ********** │ │ │ │ │ -using _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_g_l_y_p_h___s_c_a_n_n_e_r___f_u_n_c = typedef std::size_t(char const │ │ │ │ │ -buffer[], std::size_t buffer_len, std::size_t start) │ │ │ │ │ +_u_s_i_n_g _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_g_l_y_p_h___s_c_a_n_n_e_r___f_u_n_c = _t_y_p_e_d_e_f std::size_t(_c_h_a_r _c_o_n_s_t │ │ │ │ │ +_b_u_f_f_e_r[], std::size_t _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │ Function type: "find the end of the current glyph.". │ │ │ │ │ This type of function takes a text buffer, and a location in that buffer, and │ │ │ │ │ returns the location one byte past the end of the current glyph. │ │ │ │ │ The start offset marks the beginning of the current glyph. It must fall within │ │ │ │ │ the buffer. │ │ │ │ │ There are multiple different glyph scanner implementations, for different kinds │ │ │ │ │ of encodings. │ │ │ │ │ ********** FFuunnccttiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ │ ********** _?◆_? aarrggss__ff(()) [[11//33]] ********** │ │ │ │ │ -template │ │ │ │ │ -auto pqxx::internal::args_f ( CALLABLE const &  ff ) -> decltype(_m_e_m_b_e_r___a_r_g_s___f │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _C_A_L_L_A_B_L_E > │ │ │ │ │ +_a_u_t_o pqxx::internal::args_f ( _C_A_L_L_A_B_L_E _c_o_n_s_t &  ff ) -> _d_e_c_l_t_y_p_e(_m_e_m_b_e_r___a_r_g_s___f │ │ │ │ │ (&CALLABLE::operator())) │ │ │ │ │ Helper for determining a callable type's parameter types. │ │ │ │ │ This specialisation should work for lambdas. │ │ │ │ │ This function has no definition. It's not meant to be actually called. It's │ │ │ │ │ just there for pattern-matching in the compiler, so we can use its hypothetical │ │ │ │ │ return value. │ │ │ │ │ ********** _?◆_? aarrggss__ff(()) [[22//33]] ********** │ │ │ │ │ -template │ │ │ │ │ -std::tuple< ARGS... > pqxx::internal::args_f ( RETURN(&)(ARGS...)  ffuunncc ) │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _R_E_T_U_R_N , typename... ARGS> │ │ │ │ │ +std::tuple< ARGS... > pqxx::internal::args_f ( _R_E_T_U_R_N(&)(ARGS...)  ffuunncc ) │ │ │ │ │ Helper for determining a function's parameter types. │ │ │ │ │ This function has no definition. It's not meant to be actually called. It's │ │ │ │ │ just there for pattern-matching in the compiler, so we can use its hypothetical │ │ │ │ │ return value. │ │ │ │ │ ********** _?◆_? aarrggss__ff(()) [[33//33]] ********** │ │ │ │ │ -template │ │ │ │ │ -std::tuple< ARGS... > pqxx:: ( std::function< RETURN(ARGS...)> const ) │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _R_E_T_U_R_N , typename... ARGS> │ │ │ │ │ +std::tuple< ARGS... > pqxx:: ( std::function< _R_E_T_U_R_N(ARGS...)> _c_o_n_s_t ) │ │ │ │ │ internal::args_f &  │ │ │ │ │ Helper for determining a std::function's parameter types. │ │ │ │ │ This function has no definition. It's not meant to be actually called. It's │ │ │ │ │ just there for pattern-matching in the compiler, so we can use its hypothetical │ │ │ │ │ return value. │ │ │ │ │ ********** _?◆_? ccaatt22(()) ********** │ │ │ │ │ std::string pqxx::internal::cat2 ( std::string_view  xx, │ │ │ │ │ std::string_view  yy  inline │ │ │ │ │ ) │ │ │ │ │ Efficiently concatenate two strings. │ │ │ │ │ -This is a special case of concatenate(), needed because dependency management │ │ │ │ │ +This is a special case of _c_o_n_c_a_t_e_n_a_t_e_(_), needed because dependency management │ │ │ │ │ does not let us use that function here. │ │ │ │ │ ********** _?◆_? cchheecckk__ppqqxxxx__vveerrssiioonn__77__1100(()) ********** │ │ │ │ │ -PQXX_LIBEXPORT int pqxx::internal:: ( ) noexcept │ │ │ │ │ +PQXX_LIBEXPORT _i_n_t pqxx::internal:: ( ) noexcept │ │ │ │ │ check_pqxx_version_7_10 │ │ │ │ │ Library version check stub. │ │ │ │ │ Helps detect version mismatches between libpqxx headers and the libpqxx library │ │ │ │ │ binary. │ │ │ │ │ Sometimes users run into trouble linking their code against libpqxx because │ │ │ │ │ they build their own libpqxx, but the system also has a different version │ │ │ │ │ installed. The declarations in the headers against which they compile their │ │ │ │ │ @@ -591,35 +591,35 @@ │ │ │ │ │ whose name contains the libpqxx version as found in the headers. (The library │ │ │ │ │ build process will use its own local headers even if another version of the │ │ │ │ │ headers is installed on the system.) │ │ │ │ │ If the libpqxx binary was compiled for a different version than the user's │ │ │ │ │ code, linking will fail with an error: check_pqxx_version_*_* will not exist │ │ │ │ │ for the given version number. │ │ │ │ │ ********** _?◆_? cchheecckk__uunniiqquuee__rreeggiisstteerr(()) ********** │ │ │ │ │ -void pqxx::internal::check_unique_register ( void const *  oolldd__gguueesstt, │ │ │ │ │ +_v_o_i_d pqxx::internal::check_unique_register ( _v_o_i_d _c_o_n_s_t *  oolldd__gguueesstt, │ │ │ │ │ std::string_view  oolldd__ccllaassss, │ │ │ │ │ std::string_view  oolldd__nnaammee, │ │ │ │ │ - void const *  nneeww__gguueesstt, │ │ │ │ │ + _v_o_i_d _c_o_n_s_t *  nneeww__gguueesstt, │ │ │ │ │ std::string_view  nneeww__ccllaassss, │ │ │ │ │ std::string_view  nneeww__nnaammee  │ │ │ │ │ ) │ │ │ │ │ Check validity of registering a new "guest" in a "host.". │ │ │ │ │ The host might be e.g. a connection, and the guest a transaction. The host can │ │ │ │ │ only have one guest at a time, so it is an error to register a new guest while │ │ │ │ │ the host already has a guest. │ │ │ │ │ If the new registration is an error, this function throws a descriptive │ │ │ │ │ exception. │ │ │ │ │ Pass the old guest (if any) and the new guest (if any), for both, a type name │ │ │ │ │ (at least if the guest is not null), and optionally an object name (but which │ │ │ │ │ may be omitted if the caller did not assign one). │ │ │ │ │ ********** _?◆_? cchheecckk__uunniiqquuee__uunnrreeggiisstteerr(()) ********** │ │ │ │ │ -void pqxx::internal::check_unique_unregister ( void const *  oolldd__gguueesstt, │ │ │ │ │ +_v_o_i_d pqxx::internal::check_unique_unregister ( _v_o_i_d _c_o_n_s_t *  oolldd__gguueesstt, │ │ │ │ │ std::string_view  oolldd__ccllaassss, │ │ │ │ │ std::string_view  oolldd__nnaammee, │ │ │ │ │ - void const *  nneeww__gguueesstt, │ │ │ │ │ + _v_o_i_d _c_o_n_s_t *  nneeww__gguueesstt, │ │ │ │ │ std::string_view  nneeww__ccllaassss, │ │ │ │ │ std::string_view  nneeww__nnaammee  │ │ │ │ │ ) │ │ │ │ │ Like _c_h_e_c_k___u_n_i_q_u_e___r_e_g_i_s_t_e_r, but for un-registering a guest. │ │ │ │ │ Pass the guest which was registered, as well as the guest which is being │ │ │ │ │ unregistered, so that the function can check that they are the same one. │ │ │ │ │ ********** _?◆_? ccoonnccaatt(()) ********** │ │ │ │ │ @@ -635,16 +635,16 @@ │ │ │ │ │ ********** _?◆_? ddeessccrriibbee__oobbjjeecctt(()) ********** │ │ │ │ │ std::string pqxx::internal::describe_object ( std::string_view  ccllaassss__nnaammee, │ │ │ │ │ std::string_view  nnaammee  │ │ │ │ │ ) │ │ │ │ │ Describe an object for humans, based on class name and optional name. │ │ │ │ │ Interprets an empty name as "no name given." │ │ │ │ │ ********** _?◆_? eesscc__bbiinn(()) ********** │ │ │ │ │ -void pqxx::internal::esc_bin ( _b_y_t_e_s___v_i_e_w  bbiinnaarryy__ddaattaa, │ │ │ │ │ - char  bbuuffffeerr[]  noexcept │ │ │ │ │ +_v_o_i_d pqxx::internal::esc_bin ( _b_y_t_e_s___v_i_e_w  bbiinnaarryy__ddaattaa, │ │ │ │ │ + _c_h_a_r  bbuuffffeerr[]  noexcept │ │ │ │ │ ) │ │ │ │ │ Hex-escape binary data into a buffer. │ │ │ │ │ The buffer must be able to accommodate size_esc_bin(std::size(binary_data)) │ │ │ │ │ bytes, and the function will write exactly that number of bytes into the │ │ │ │ │ buffer. This includes a trailing zero. │ │ │ │ │ ********** _?◆_? ffiinndd__cchhaarr(()) ********** │ │ │ │ │ template │ │ │ │ │ @@ -663,27 +663,27 @@ │ │ │ │ │ std::size_t  hheerree  │ │ │ │ │ ) │ │ │ │ │ Find first of NEEDLE ASCII chars in haystack. │ │ │ │ │ Warning │ │ │ │ │ This assumes that one of the NEEDLE characters is actually present. It │ │ │ │ │ does not check for buffer overruns, so make sure that there's a sentinel. │ │ │ │ │ ********** _?◆_? ffoorr__ggllyypphhss(()) ********** │ │ │ │ │ -template │ │ │ │ │ -void pqxx::internal::for_glyphs ( encoding_group  eenncc, │ │ │ │ │ - CALLABLE  ccaallllbbaacckk, │ │ │ │ │ - char const  bbuuffffeerr[], inline │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _C_A_L_L_A_B_L_E > │ │ │ │ │ +_v_o_i_d pqxx::internal::for_glyphs ( encoding_group  eenncc, │ │ │ │ │ + _C_A_L_L_A_B_L_E  ccaallllbbaacckk, │ │ │ │ │ + _c_h_a_r _c_o_n_s_t  bbuuffffeerr[], inline │ │ │ │ │ std::size_t  bbuuffffeerr__lleenn, │ │ │ │ │ std::size_t  ssttaarrtt = 0  │ │ │ │ │ ) │ │ │ │ │ Iterate over the glyphs in a buffer. │ │ │ │ │ Scans the glyphs in the buffer, and for each, passes its begin and its one- │ │ │ │ │ past-end pointers to callback. │ │ │ │ │ ********** _?◆_? ggeett__cchhaarr__ffiinnddeerr(()) ********** │ │ │ │ │ template │ │ │ │ │ -PQXX_PURE constexpr _c_h_a_r___f_i_n_d_e_r___f_u_n_c ( encoding_group  eenncc ) inlineconstexpr │ │ │ │ │ +PQXX_PURE _c_o_n_s_t_e_x_p_r _c_h_a_r___f_i_n_d_e_r___f_u_n_c ( encoding_group  eenncc ) inlineconstexpr │ │ │ │ │ * pqxx::internal::get_char_finder │ │ │ │ │ Look up a character search function for an encoding group. │ │ │ │ │ We only define a few individual instantiations of this function, as needed. │ │ │ │ │ Returns a pointer to a function which looks for the first instance of any of │ │ │ │ │ the ASCII characters in NEEDLE. Returns its offset, or the end of the haystack │ │ │ │ │ if it found none. │ │ │ │ │ ********** _?◆_? ggeett__ggllyypphh__ssccaannnneerr(()) ********** │ │ │ │ │ @@ -691,29 +691,29 @@ │ │ │ │ │ get_glyph_scanner │ │ │ │ │ Look up the glyph scanner function for a given encoding group. │ │ │ │ │ To identify the glyph boundaries in a buffer, call this to obtain the scanner │ │ │ │ │ function appropriate for the buffer's encoding. Then, repeatedly call the │ │ │ │ │ scanner function to find the glyphs. │ │ │ │ │ ********** _?◆_? ggeett__ss__cchhaarr__ffiinnddeerr(()) ********** │ │ │ │ │ template │ │ │ │ │ -PQXX_PURE constexpr _c_h_a_r___f_i_n_d_e_r___f_u_n_c ( encoding_group  eenncc ) inlineconstexpr │ │ │ │ │ +PQXX_PURE _c_o_n_s_t_e_x_p_r _c_h_a_r___f_i_n_d_e_r___f_u_n_c ( encoding_group  eenncc ) inlineconstexpr │ │ │ │ │ * pqxx::internal::get_s_char_finder │ │ │ │ │ Look up a "sentry" character search function for an encoding group. │ │ │ │ │ This version returns a finder function that does not check buffer bounds. It │ │ │ │ │ just assumes that one of the NEEDLE characters will be there. │ │ │ │ │ ********** _?◆_? iiss__ddiiggiitt(()) ********** │ │ │ │ │ -template │ │ │ │ │ -constexpr bool pqxx::internal:: ( CHAR  cc ) inlineconstexprnoexcept │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _C_H_A_R > │ │ │ │ │ +_c_o_n_s_t_e_x_p_r _b_o_o_l pqxx::internal:: ( _C_H_A_R  cc ) inlineconstexprnoexcept │ │ │ │ │ is_digit │ │ │ │ │ A safer and more generic replacement for std::isdigit. │ │ │ │ │ Turns out std::isdigit isn't as easy to use as it sounds. It takes an int, but │ │ │ │ │ requires it to be nonnegative. Which means it's an outright liability on │ │ │ │ │ systems where char is signed. │ │ │ │ │ ********** _?◆_? mmaapp__aasscciiii__sseeaarrcchh__ggrroouupp(()) ********** │ │ │ │ │ -constexpr │ │ │ │ │ +_c_o_n_s_t_e_x_p_r │ │ │ │ │ encoding_group pqxx:: ( encoding_group  eenncc ) inlineconstexprnoexcept │ │ │ │ │ internal:: │ │ │ │ │ map_ascii_search_group │ │ │ │ │ Just for searching an ASCII character, what encoding can we use here? │ │ │ │ │ Maps an encoding group to an encoding group that we can apply for the specific │ │ │ │ │ purpose of looking for a given ASCII character. │ │ │ │ │ The "difficult" encoding groups will map to themselves. But the ones that work │ │ │ │ │ @@ -721,29 +721,29 @@ │ │ │ │ │ character cannot contain a byte that happens to be in the ASCII range. This │ │ │ │ │ holds for the single-byte encodings, for example, but also for UTF-8. │ │ │ │ │ For those encodings, we can just pretend that we're dealing with a single-byte │ │ │ │ │ encoding and scan byte-by-byte until we find a byte with the value we're │ │ │ │ │ looking for. We don't actually need to know where the boundaries between the │ │ │ │ │ characters are. │ │ │ │ │ ********** _?◆_? mmeemmbbeerr__aarrggss__ff(()) ********** │ │ │ │ │ -template │ │ │ │ │ -std::tuple< ARGS... > pqxx::internal:: ( RETURN(CLASS::*)(ARGS...)  ) │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _C_L_A_S_S , _t_y_p_e_n_a_m_e _R_E_T_U_R_N , typename... ARGS> │ │ │ │ │ +std::tuple< ARGS... > pqxx::internal:: ( _R_E_T_U_R_N(CLASS::*)(ARGS...)  ) │ │ │ │ │ member_args_f │ │ │ │ │ Helper for determining a member function's parameter types. │ │ │ │ │ Helper for determining a const member function's parameter types. │ │ │ │ │ This function has no definition. It's not meant to be actually called. It's │ │ │ │ │ just there for pattern-matching in the compiler, so we can use its hypothetical │ │ │ │ │ return value. │ │ │ │ │ ********** _?◆_? ppaarrssee__ccoommppoossiittee__ffiieelldd(()) ********** │ │ │ │ │ -template │ │ │ │ │ -void pqxx::internal:: ( std::size_t &  iinnddeexx, │ │ │ │ │ +template │ │ │ │ │ +_v_o_i_d pqxx::internal:: ( std::size_t &  iinnddeexx, │ │ │ │ │ parse_composite_field │ │ │ │ │ std::string_view  iinnppuutt, │ │ │ │ │ std::size_t &  ppooss, inline │ │ │ │ │ - T &  ffiieelldd, │ │ │ │ │ + _T &  ffiieelldd, │ │ │ │ │ std::size_t  llaasstt__ffiieelldd  │ │ │ │ │ ) │ │ │ │ │ Parse a field of a composite-type value. │ │ │ │ │ T is the C++ type of the field we're parsing, and index is its zero-based │ │ │ │ │ number. │ │ │ │ │ Strip off the leading parenthesis or bracket yourself before parsing. However, │ │ │ │ │ this function will parse the lcosing parenthesis or bracket. │ │ │ │ │ @@ -761,82 +761,82 @@ │ │ │ │ │ otherwise. │ │ │ │ │ field Destination for the parsed value. │ │ │ │ │ scan Glyph scanning function for the relevant encoding type. │ │ │ │ │ last_field Number of the last field in the value (zero-based). When │ │ │ │ │ parsing the last field, this will equal index. │ │ │ │ │ ********** _?◆_? ssccaann__ddoouubbllee__qquuootteedd__ssttrriinngg(()) ********** │ │ │ │ │ template │ │ │ │ │ -std::size_t pqxx::internal:: ( char const  iinnppuutt[], │ │ │ │ │ +std::size_t pqxx::internal:: ( _c_h_a_r _c_o_n_s_t  iinnppuutt[], │ │ │ │ │ scan_double_quoted_string │ │ │ │ │ std::size_t  ssiizzee, inline │ │ │ │ │ std::size_t  ppooss  │ │ │ │ │ ) │ │ │ │ │ input[pos] must be the opening double quote. │ │ │ │ │ The backend double-quotes strings in composites or arrays, when needed. Special │ │ │ │ │ characters are escaped using backslashes. │ │ │ │ │ Returns the offset of the first position after the closing quote. │ │ │ │ │ ********** _?◆_? ssccaann__uunnqquuootteedd__ssttrriinngg(()) ********** │ │ │ │ │ template │ │ │ │ │ -std::size_t pqxx::internal::scan_unquoted_string ( char const  iinnppuutt[], │ │ │ │ │ +std::size_t pqxx::internal::scan_unquoted_string ( _c_h_a_r _c_o_n_s_t  iinnppuutt[], │ │ │ │ │ std::size_t  ssiizzee, inline │ │ │ │ │ std::size_t  ppooss  │ │ │ │ │ ) │ │ │ │ │ Find the end of an unquoted string in an array or composite-type value. │ │ │ │ │ Stops when it gets to the end of the input; or when it sees any of the │ │ │ │ │ characters in STOP which has not been escaped. │ │ │ │ │ For array values, STOP is an array element separator (typically comma, or │ │ │ │ │ semicolon), or a closing brace. For a value of a composite type, STOP is a │ │ │ │ │ comma or a closing parenthesis. │ │ │ │ │ ********** _?◆_? ssiizzee__eesscc__bbiinn(()) ********** │ │ │ │ │ -constexpr std:: │ │ │ │ │ +_c_o_n_s_t_e_x_p_r std:: │ │ │ │ │ size_t pqxx:: ( std::size_t  bbiinnaarryy__bbyytteess ) inlineconstexprnoexcept │ │ │ │ │ internal:: │ │ │ │ │ size_esc_bin │ │ │ │ │ Compute buffer size needed to escape binary data for use as a BYTEA. │ │ │ │ │ This uses the hex-escaping format. The return value includes room for the "\x" │ │ │ │ │ prefix. │ │ │ │ │ ********** _?◆_? ssiizzee__uunneesscc__bbiinn(()) ********** │ │ │ │ │ -constexpr std:: │ │ │ │ │ +_c_o_n_s_t_e_x_p_r std:: │ │ │ │ │ size_t pqxx:: ( std::size_t  eessccaappeedd__bbyytteess ) inlineconstexprnoexcept │ │ │ │ │ internal:: │ │ │ │ │ size_unesc_bin │ │ │ │ │ Compute binary size from the size of its escaped version. │ │ │ │ │ Do not include a terminating zero in escaped_bytes. │ │ │ │ │ ********** _?◆_? sskkiipp__iinniitt__ssssll(()) ********** │ │ │ │ │ -void PQXX_COLD PQXX_LIBEXPORT pqxx:: ( int  sskkiippss ) noexcept │ │ │ │ │ +_v_o_i_d PQXX_COLD PQXX_LIBEXPORT pqxx:: ( _i_n_t  sskkiippss ) noexcept │ │ │ │ │ internal::skip_init_ssl │ │ │ │ │ Control OpenSSL/crypto library initialisation. │ │ │ │ │ This is an internal helper. Unless you're working on libpqxx itself, use _p_q_x_x_:_: │ │ │ │ │ _s_k_i_p___i_n_i_t___s_s_l instead. │ │ │ │ │ Parameters │ │ │ │ │ flags a bitmask of 1 << flag for each of the skip_init flags. │ │ │ │ │ Ignores the _s_k_i_p___i_n_i_t_:_:_n_o_t_h_i_n_g flag. │ │ │ │ │ ********** _?◆_? ssttaattee__bbuuffffeerr__oovveerrrruunn(()) ********** │ │ │ │ │ -std::string PQXX_LIBEXPORT pqxx::internal:: ( int  hhaavvee__bbyytteess, │ │ │ │ │ +std::string PQXX_LIBEXPORT pqxx::internal:: ( _i_n_t  hhaavvee__bbyytteess, │ │ │ │ │ state_buffer_overrun │ │ │ │ │ - int  nneeeedd__bbyytteess  │ │ │ │ │ + _i_n_t  nneeeedd__bbyytteess  │ │ │ │ │ ) │ │ │ │ │ Summarize buffer overrun. │ │ │ │ │ Don't worry about the exact parameter types: the sizes will be reasonably │ │ │ │ │ small, and nonnegative. │ │ │ │ │ ********** _?◆_? ssttrriipp__ttyyppeess(()) ********** │ │ │ │ │ template │ │ │ │ │ -std::tuple< _s_t_r_i_p___t< TYPES >... > pqxx:: ( std::tuple< TYPES... > const &  ) │ │ │ │ │ +std::tuple< _s_t_r_i_p___t< _T_Y_P_E_S >... > pqxx:: ( std::tuple< TYPES... > _c_o_n_s_t &  ) │ │ │ │ │ internal::strip_types │ │ │ │ │ Helper: Apply strip_t to each of a tuple type's component types. │ │ │ │ │ This function has no definition. It is not meant to be called, only to be used │ │ │ │ │ to deduce the right types. │ │ │ │ │ ********** _?◆_? wwaaiitt__ffoorr(()) ********** │ │ │ │ │ -void pqxx::internal::wait_for ( unsigned int  mmiiccrroosseeccoonnddss ) │ │ │ │ │ +_v_o_i_d pqxx::internal::wait_for ( _u_n_s_i_g_n_e_d _i_n_t  mmiiccrroosseeccoonnddss ) │ │ │ │ │ Wait. │ │ │ │ │ This is normally std::this_thread::sleep_for(). But MinGW's thread header │ │ │ │ │ doesn't work, so we must be careful about including it. │ │ │ │ │ ********** VVaarriiaabbllee DDooccuummeennttaattiioonn ********** │ │ │ │ │ ********** _?◆_? iitteerraattoorr__iiddeennttiittyy ********** │ │ │ │ │ -template │ │ │ │ │ -constexpr auto const pqxx::internal::iterator_identity inlineconstexpr │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _I_T_E_R_A_T_O_R > │ │ │ │ │ +_c_o_n_s_t_e_x_p_r _a_u_t_o _c_o_n_s_t pqxx::internal::iterator_identity inlineconstexpr │ │ │ │ │ IInniittiiaall vvaalluuee:: │ │ │ │ │ { │ │ │ │ │ [](decltype(*std::declval()) x) { return x; }} │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/namespacepqxx_1_1internal_1_1pq.html │ │ │ │ @@ -99,31 +99,31 @@ │ │ │ │ │ │ │ │

Forward declarations of libpq types as needed in libpqxx headers. │ │ │ │ More...

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +using  │ │ │ │ │ │ │ │ │ │ │ │ +using  │ │ │ │ │ │ │ │ │ │ │ │ +using  │ │ │ │ │ │ │ │ │ │ │ │ +using  │ │ │ │ │ │ │ │

│ │ │ │ Typedefs

│ │ │ │ -using PGconn = pg_conn
PGconn = pg_conn
 
│ │ │ │ -using PGresult = pg_result
PGresult = pg_result
 
│ │ │ │ -using PGnotify = pgNotify
PGnotify = pgNotify
 
│ │ │ │ -using PQnoticeProcessor = void(*)(void *, char const *)
PQnoticeProcessor = void(*)(void *, char const *)
 
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ +void  │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Functions

│ │ │ │ -void pqfreemem (void const *) noexcept
 Wrapper for PQfreemem(), with C++ linkage.
pqfreemem (void const *) noexcept
 Wrapper for PQfreemem(), with C++ linkage.
 
│ │ │ │

Detailed Description

│ │ │ │

Forward declarations of libpq types as needed in libpqxx headers.

│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -3,25 +3,25 @@ │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _T_y_p_e_d_e_f_s | _F_u_n_c_t_i_o_n_s │ │ │ │ │ pqxx::internal::pq Namespace Reference │ │ │ │ │ Forward declarations of libpq types as needed in libpqxx headers. _M_o_r_e_._._. │ │ │ │ │ TTyyppeeddeeffss │ │ │ │ │ -using  PPGGccoonnnn = pg_conn │ │ │ │ │ +_u_s_i_n_g  PPGGccoonnnn = _p_g___c_o_n_n │ │ │ │ │   │ │ │ │ │ -using  PPGGrreessuulltt = pg_result │ │ │ │ │ +_u_s_i_n_g  PPGGrreessuulltt = _p_g___r_e_s_u_l_t │ │ │ │ │   │ │ │ │ │ -using  PPGGnnoottiiffyy = pgNotify │ │ │ │ │ +_u_s_i_n_g  PPGGnnoottiiffyy = _p_g_N_o_t_i_f_y │ │ │ │ │   │ │ │ │ │ -using  PPQQnnoottiicceePPrroocceessssoorr = void(*)(void *, char const *) │ │ │ │ │ +_u_s_i_n_g  PPQQnnoottiicceePPrroocceessssoorr = _v_o_i_d(*)(_v_o_i_d *, _c_h_a_r _c_o_n_s_t *) │ │ │ │ │   │ │ │ │ │ FFuunnccttiioonnss │ │ │ │ │ -void  ppqqffrreeeemmeemm (void const *) noexcept │ │ │ │ │ -  Wrapper for PQfreemem(), with C++ linkage. │ │ │ │ │ +_v_o_i_d  ppqqffrreeeemmeemm (_v_o_i_d _c_o_n_s_t *) _n_o_e_x_c_e_p_t │ │ │ │ │ +  Wrapper for _P_Q_f_r_e_e_m_e_m_(_), with C++ linkage. │ │ │ │ │   │ │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ Forward declarations of libpq types as needed in libpqxx headers. │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ │ │ * _p_q │ │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/namespacepqxx_1_1prepare.html │ │ │ │ @@ -90,15 +90,15 @@ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
pqxx::prepare Namespace Reference
│ │ │ │
│ │ │ │
│ │ │ │

Detailed Description

│ │ │ │ -
Deprecated:
The new params class replaces all of this.
│ │ │ │ +
Deprecated:
The new params class replaces all of this.
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

Inserting the 101 in there is awkward and even dangerous. We'll get to that in a moment. Here's how you do it better, using parameters:

│ │ │ │
pqxx::result r = tx.exec("SELECT name FROM employee WHERE id=$1", {101});
│ │ │ │

That second argument to exec(), the {101}, constructs a pqxx::params object. The exec() call will fill this value in where the query says $1.

│ │ │ │

Doing this saves you work. If you don't use statement parameters, you'll need to quote and escape your values (see connection::quote() and friends) as you insert them into your query as literal values.

│ │ │ │

Or if you forget to do that, you leave yourself open to horrible SQL injection attacks. Trust me, I was born in a town whose name started with an apostrophe!

│ │ │ │

With parameters you can pass your values as they are, and they will go across the wire to the database in a safe format.

│ │ │ │

In some cases it may even be faster! When a parameter represents binary data (as in the SQL BYTEA type), libpqxx will send it directly as binary, which is a bit more efficient than the standard textual format in which the data normally gets sent to the database. If you insert the binary data directly in your query text, your CPU will have some extra work to do, converting the data into a text format, escaping it, and adding quotes; and the data will take up more bytes, which take time to transmit.

│ │ │ │ -

│ │ │ │ +

│ │ │ │ Multiple parameters

│ │ │ │

The pqxx::params class is quite fleixble. It can contain any number of parameter values, of many different types.

│ │ │ │

You can pass them in while constructing the params object:

│ │ │ │
pqxx::params{23, "acceptance", 3.14159}
│ │ │ │
Build a parameter list for a parameterised or prepared statement.
Definition params.hxx:33
│ │ │ │

Or you can add them one by one:

│ │ │ │
│ │ │ │ @@ -117,15 +117,15 @@ │ │ │ │
p.append("acceptance");
│ │ │ │
p.append(3.14159);
│ │ │ │
void append() &
Append a null value.
Definition params.cxx:32
│ │ │ │

You can also combine the two, passing some values int the constructor and adding the rest later. You can even insert a params into a params:

│ │ │ │
│ │ │ │
p.append(params{"acceptance", 3.14159});
│ │ │ │

Each of these examples will produce the same list of parameters.

│ │ │ │ -

│ │ │ │ +

│ │ │ │ Generating placeholders

│ │ │ │

If your code gets particularly complex, it may sometimes happen that it becomes hard to track which parameter value belongs with which placeholder. Did you intend to pass this numeric value as $7, or as $8? The answer may depend on an if that happened earlier in a different function.

│ │ │ │

(Generally if things get that complex, it's a good idea to look for simpler solutions. But especially when performance matters, sometimes you can't avoid complexity like that.)

│ │ │ │

There's a little helper class called placeholders. You can use it as a counter which produces those placeholder strings, $1, $2, $3, et cetera. When you start generating a complex statement, you can create both a params and a placeholders:

│ │ │ │
pqxx::params values;
│ │ │ │ │ │ │ │
Generate parameter placeholders for use in an SQL statement.
Definition params.hxx:206
│ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/prepared.html │ │ │ │ @@ -91,15 +91,15 @@ │ │ │ │ │ │ │ │
│ │ │ │
Prepared statements
│ │ │ │
│ │ │ │
│ │ │ │

Prepared statements are SQL queries that you define once and then invoke as many times as you like, typically with varying parameters. It's a lot like a function that you can define ad hoc, within the scope of one connection.

│ │ │ │

If you have an SQL statement that you're going to execute many times in quick succession, it may (but see below!) be more efficient to prepare it once and reuse it. This saves the database backend the effort of parsing the SQL and figuring out an efficient execution plan.

│ │ │ │ -

│ │ │ │ +

│ │ │ │ Preparing a statement

│ │ │ │

You create a prepared statement by preparing it on the connection (using the pqxx::connection::prepare functions), passing an identifying name for the statement, and its SQL text.

│ │ │ │

The statement's name should consist of ASCII letters, digits, and underscores only, and start with an ASCII letter. The name is case-sensitive.

│ │ │ │
void prepare_my_statement(pqxx::connection &cx)
│ │ │ │
{
│ │ │ │
cx.prepare(
│ │ │ │
"my_statement",
│ │ │ │ @@ -112,15 +112,15 @@ │ │ │ │
{
│ │ │ │
return t.exec(pqxx::prepped{"my_statement"});
│ │ │ │
}
│ │ │ │
A string that is the name of a prepared statement.
Definition prepared_statement.hxx:70
│ │ │ │
Result set containing data returned by a query or command.
Definition result.hxx:92
│ │ │ │
result exec(std::string_view query, std::string_view desc)
Execute a command.
Definition transaction_base.cxx:249
│ │ │ │
Interface definition (and common code) for "transaction" classes.
Definition transaction_base.hxx:151
│ │ │ │ -

│ │ │ │ +

│ │ │ │ Parameters

│ │ │ │

You can pass parameters to a prepared statemet, just like you can with a regular statement. The query text can contain $1, $2 etc. as placeholders for parameter values that you will provide when you invoke the prepared satement.

│ │ │ │

See Statement parameters for more about this. And here's a simple example of preparing a statement and invoking it with parameters:

│ │ │ │
void prepare_find(pqxx::connection &cx)
│ │ │ │
{
│ │ │ │
// Prepare a statement called "find" that looks for employees with a
│ │ │ │
// given name (parameter 1) whose salary exceeds a given number
│ │ │ │ @@ -131,24 +131,24 @@ │ │ │ │
}
│ │ │ │

This example looks up the prepared statement "find," passes name and min_salary as parameters, and invokes the statement with those values:

│ │ │ │
pqxx::result execute_find(
│ │ │ │
pqxx::transaction_base &tx, std::string name, int min_salary)
│ │ │ │
{
│ │ │ │
return tx.exec(pqxx::prepped{"find"}, name, min_salary);
│ │ │ │
}
│ │ │ │ -

│ │ │ │ +

│ │ │ │ A special prepared statement

│ │ │ │

There is one special case: the nameless prepared statement. You may prepare a statement without a name, i.e. whose name is an empty string. The unnamed statement can be redefined at any time, without un-preparing it first.

│ │ │ │ -

│ │ │ │ +

│ │ │ │ Performance note

│ │ │ │

Don't assume that using prepared statements will speed up your application. There are cases where prepared statements are actually slower than plain SQL.

│ │ │ │

The reason is that the backend can often produce a better execution plan when it knows the statement's actual parameter values.

│ │ │ │

For example, say you've got a web application and you're querying for users with status "inactive" who have email addresses in a given domain name X. If X is a very popular provider, the best way for the database engine to plan the query may be to list the inactive users first and then filter for the email addresses you're looking for. But in other cases, it may be much faster to find matching email addresses first and then see which of their owners are "inactive." A prepared statement must be planned to fit either case, but a direct query will be optimised based on table statistics, partial indexes, etc.

│ │ │ │

So, as with any optimisation... measure where your real performance problems are before you start making changes, and then afterwards, measure whether your changes actually helped. Don't complicate your code unless it solves a real problem. Knuth's Law applies.

│ │ │ │ -

│ │ │ │ +

│ │ │ │ Zero bytes

│ │ │ │
Warning
Beware of zero ("nul") bytes!
│ │ │ │

Since libpqxx is a wrapper around libpq, the C-level client library, most strings you pass to the library should be compatible with C-style strings. So they must end with a single byte with value 0, and the text within them cannot contain any such zero bytes.

│ │ │ │

(The pqxx::zview type exists specifically to tell libpqxx: "this is a │ │ │ │ C-compatible string, containing no zero bytes but ending in a zero byte.")

│ │ │ │

One example is prepared statement names. But the same also goes for the parameters values. Any string you pass as a parameter will end at the first char with value zero. If you pass a string that contains a zero byte, the last byte in the value will be the one just before the zero.

│ │ │ │

So, if you need a zero byte in a string, consider that it's really a binary string, which is not the same thing as a text string. SQL represents binary data as the BYTEA type, or in binary large objects ("blobs").

│ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/range_8hxx_source.html │ │ │ │ @@ -554,15 +554,15 @@ │ │ │ │
477 static constexpr std::size_t last{1};
│ │ │ │
478 // Current parsing position. We skip the opening parenthesis or bracket.
│ │ │ │
479 std::size_t pos{1};
│ │ │ │
480 // The string may leave out either bound to indicate that it's unlimited.
│ │ │ │
481 std::optional<TYPE> lower, upper;
│ │ │ │
482 // We reuse the same field parser we use for composite values and arrays.
│ │ │ │
483 auto const field_parser{
│ │ │ │ -
484 pqxx::internal::specialize_parse_composite_field<std::optional<TYPE>>(
│ │ │ │ + │ │ │ │
485 pqxx::internal::encoding_group::UTF8)};
│ │ │ │
486 field_parser(index, text, pos, lower, last);
│ │ │ │
487 field_parser(index, text, pos, upper, last);
│ │ │ │
488
│ │ │ │
489 // We need one more character: the closing parenthesis or bracket.
│ │ │ │
490 if (pos != std::size(text))
│ │ │ │
491 throw pqxx::conversion_error{err_bad_input(text)};
│ │ │ │ @@ -645,14 +645,15 @@ │ │ │ │
constexpr range() noexcept(noexcept(exclusive_bound< TYPE >{TYPE{}}))
Create an empty range.
Definition range.hxx:266
│ │ │ │
Marker-type wrapper: zero-terminated std::string_view.
Definition zview.hxx:38
│ │ │ │
Invalid argument passed to libpqxx, similar to std::invalid_argument.
Definition except.hxx:266
│ │ │ │
Value conversion failed, e.g. when converting "Hello" to int.
Definition except.hxx:283
│ │ │ │
Could not convert value to string: not enough buffer space.
Definition except.hxx:313
│ │ │ │
Something is out of range, similar to std::out_of_range.
Definition except.hxx:326
│ │ │ │
std::string concat(TYPE... item)
Efficiently combine a bunch of items into one big string.
Definition concat.hxx:31
│ │ │ │ +
composite_field_parser< T > specialize_parse_composite_field(encoding_group enc)
Look up implementation of parse_composite_field for ENC.
Definition array-composite.hxx:274
│ │ │ │
The home of all libpqxx classes, functions, templates, etc.
Definition array.cxx:27
│ │ │ │
T from_string(field const &value)
Convert a field's value to type T.
Definition field.hxx:548
│ │ │ │
An unlimited boundary value to a pqxx::range.
Definition range.hxx:24
│ │ │ │
Nullness traits describing a type which does not have a null value.
Definition strconv.hxx:113
│ │ │ │
Traits describing a type's "null value," if any.
Definition strconv.hxx:91
│ │ │ │
Traits class for use in string conversions.
Definition strconv.hxx:154
│ │ │ │
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -418,15 +418,15 @@ │ │ │ │ │ 477 static constexpr std::size_t last{1}; │ │ │ │ │ 478 // Current parsing position. We skip the opening parenthesis or bracket. │ │ │ │ │ 479 std::size_t pos{1}; │ │ │ │ │ 480 // The string may leave out either bound to indicate that it's unlimited. │ │ │ │ │ 481 std::optional lower, upper; │ │ │ │ │ 482 // We reuse the same field parser we use for composite values and arrays. │ │ │ │ │ 483 auto const field_parser{ │ │ │ │ │ -484 pqxx::internal::specialize_parse_composite_field>( │ │ │ │ │ +484 _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_s_p_e_c_i_a_l_i_z_e___p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d_<_s_t_d_:_:_o_p_t_i_o_n_a_l_<_T_Y_P_E_>>( │ │ │ │ │ 485 pqxx::internal::encoding_group::UTF8)}; │ │ │ │ │ 486 field_parser(index, text, pos, lower, last); │ │ │ │ │ 487 field_parser(index, text, pos, upper, last); │ │ │ │ │ 488 │ │ │ │ │ 489 // We need one more character: the closing parenthesis or bracket. │ │ │ │ │ 490 if (pos != std::size(text)) │ │ │ │ │ 491 throw _p_q_x_x_:_:_c_o_n_v_e_r_s_i_o_n___e_r_r_o_r{err_bad_input(text)}; │ │ │ │ │ @@ -584,14 +584,19 @@ │ │ │ │ │ _p_q_x_x_:_:_r_a_n_g_e___e_r_r_o_r │ │ │ │ │ Something is out of range, similar to std::out_of_range. │ │ │ │ │ DDeeffiinniittiioonn except.hxx:326 │ │ │ │ │ _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_c_o_n_c_a_t │ │ │ │ │ std::string concat(TYPE... item) │ │ │ │ │ Efficiently combine a bunch of items into one big string. │ │ │ │ │ DDeeffiinniittiioonn concat.hxx:31 │ │ │ │ │ +_p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_s_p_e_c_i_a_l_i_z_e___p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d │ │ │ │ │ +composite_field_parser< T > specialize_parse_composite_field(encoding_group │ │ │ │ │ +enc) │ │ │ │ │ +Look up implementation of parse_composite_field for ENC. │ │ │ │ │ +DDeeffiinniittiioonn array-composite.hxx:274 │ │ │ │ │ _p_q_x_x │ │ │ │ │ The home of all libpqxx classes, functions, templates, etc. │ │ │ │ │ DDeeffiinniittiioonn array.cxx:27 │ │ │ │ │ _p_q_x_x_:_:_f_r_o_m___s_t_r_i_n_g │ │ │ │ │ T from_string(field const &value) │ │ │ │ │ Convert a field's value to type T. │ │ │ │ │ DDeeffiinniittiioonn field.hxx:548 │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/result_8hxx_source.html │ │ │ │ @@ -149,15 +149,15 @@ │ │ │ │
49
│ │ │ │
50namespace pqxx::internal
│ │ │ │
51{
│ │ │ │
52// 9.0: Remove this, just use the notice handler in connection/result.
│ │ │ │
│ │ │ │ │ │ │ │
55{
│ │ │ │ -
56 std::function<void(zview)> notice_handler;
│ │ │ │ +
56 std::function<void(zview)> notice_handler;
│ │ │ │
57 std::list<errorhandler *> errorhandlers;
│ │ │ │
58
│ │ │ │
59 notice_waiters() = default;
│ │ │ │
60 notice_waiters(notice_waiters const &) = delete;
│ │ │ │
61 notice_waiters(notice_waiters &&) = delete;
│ │ │ │
62 notice_waiters &operator=(notice_waiters const &) = delete;
│ │ │ │
63 notice_waiters &operator=(notice_waiters &&) = delete;
│ │ │ │ @@ -423,14 +423,15 @@ │ │ │ │
result no_rows() const
Expect that result contains no rows. Return result for convenience.
Definition result.hxx:353
│ │ │ │
Reference to one row in a result.
Definition row.hxx:47
│ │ │ │
Marker-type wrapper: zero-terminated std::string_view.
Definition zview.hxx:38
│ │ │ │
Query returned an unexpected number of rows.
Definition except.hxx:343
│ │ │ │
Error in usage of libpqxx library, similar to std::logic_error.
Definition except.hxx:249
│ │ │ │
Internal items for libpqxx' own use. Do not use these yourself.
Definition encodings.cxx:33
│ │ │ │
std::string concat(TYPE... item)
Efficiently combine a bunch of items into one big string.
Definition concat.hxx:31
│ │ │ │ +
composite_field_parser< T > specialize_parse_composite_field(encoding_group enc)
Look up implementation of parse_composite_field for ENC.
Definition array-composite.hxx:274
│ │ │ │
PQXX_LIBEXPORT void clear_result(pq::PGresult const *) noexcept
C++ wrapper for libpq's PQclear.
Definition result.cxx:42
│ │ │ │
The home of all libpqxx classes, functions, templates, etc.
Definition array.cxx:27
│ │ │ │
int row_size_type
Number of fields in a row of database data.
Definition types.hxx:34
│ │ │ │
int result_difference_type
Difference between result sizes.
Definition types.hxx:31
│ │ │ │
int result_size_type
Number of rows in a result set.
Definition types.hxx:28
│ │ │ │
unsigned int oid
PostgreSQL database row identifier.
Definition libpq-forward.hxx:33
│ │ │ │
Various callbacks waiting for a notice to come in.
Definition result.hxx:55
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -54,15 +54,15 @@ │ │ │ │ │ 48 │ │ │ │ │ 49 │ │ │ │ │ 50namespace _p_q_x_x_:_:_i_n_t_e_r_n_a_l │ │ │ │ │ 51{ │ │ │ │ │ 52// 9.0: Remove this, just use the notice handler in connection/result. │ │ │ │ │ _5_4struct _n_o_t_i_c_e___w_a_i_t_e_r_s │ │ │ │ │ 55{ │ │ │ │ │ -56 std::function notice_handler; │ │ │ │ │ +56 std::function<_v_o_i_d(_z_v_i_e_w)> notice_handler; │ │ │ │ │ 57 std::list errorhandlers; │ │ │ │ │ 58 │ │ │ │ │ 59 _n_o_t_i_c_e___w_a_i_t_e_r_s() = default; │ │ │ │ │ 60 _n_o_t_i_c_e___w_a_i_t_e_r_s(_n_o_t_i_c_e___w_a_i_t_e_r_s const &) = delete; │ │ │ │ │ 61 _n_o_t_i_c_e___w_a_i_t_e_r_s(_n_o_t_i_c_e___w_a_i_t_e_r_s &&) = delete; │ │ │ │ │ 62 _n_o_t_i_c_e___w_a_i_t_e_r_s &operator=(_n_o_t_i_c_e___w_a_i_t_e_r_s const &) = delete; │ │ │ │ │ 63 _n_o_t_i_c_e___w_a_i_t_e_r_s &operator=(_n_o_t_i_c_e___w_a_i_t_e_r_s &&) = delete; │ │ │ │ │ @@ -358,14 +358,19 @@ │ │ │ │ │ _p_q_x_x_:_:_i_n_t_e_r_n_a_l │ │ │ │ │ Internal items for libpqxx' own use. Do not use these yourself. │ │ │ │ │ DDeeffiinniittiioonn encodings.cxx:33 │ │ │ │ │ _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_c_o_n_c_a_t │ │ │ │ │ std::string concat(TYPE... item) │ │ │ │ │ Efficiently combine a bunch of items into one big string. │ │ │ │ │ DDeeffiinniittiioonn concat.hxx:31 │ │ │ │ │ +_p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_s_p_e_c_i_a_l_i_z_e___p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d │ │ │ │ │ +composite_field_parser< T > specialize_parse_composite_field(encoding_group │ │ │ │ │ +enc) │ │ │ │ │ +Look up implementation of parse_composite_field for ENC. │ │ │ │ │ +DDeeffiinniittiioonn array-composite.hxx:274 │ │ │ │ │ _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_c_l_e_a_r___r_e_s_u_l_t │ │ │ │ │ PQXX_LIBEXPORT void clear_result(pq::PGresult const *) noexcept │ │ │ │ │ C++ wrapper for libpq's PQclear. │ │ │ │ │ DDeeffiinniittiioonn result.cxx:42 │ │ │ │ │ _p_q_x_x │ │ │ │ │ The home of all libpqxx classes, functions, templates, etc. │ │ │ │ │ DDeeffiinniittiioonn array.cxx:27 │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/result__iter_8hxx_source.html │ │ │ │ @@ -112,25 +112,25 @@ │ │ │ │
19} // namespace pqxx
│ │ │ │
20
│ │ │ │
21
│ │ │ │
22namespace pqxx::internal
│ │ │ │
23{
│ │ │ │
24// C++20: Replace with generator?
│ │ │ │
│ │ │ │ -
26template<typename... TYPE> class result_iter
│ │ │ │ +
26template<typename... TYPE> class result_iter
│ │ │ │
27{
│ │ │ │
28public:
│ │ │ │ -
29 using value_type = std::tuple<TYPE...>;
│ │ │ │ +
29 using value_type = std::tuple<TYPE...>;
│ │ │ │
30
│ │ │ │
32 result_iter() = default;
│ │ │ │
33
│ │ │ │
34 explicit result_iter(result const &home) :
│ │ │ │
35 m_home{&home}, m_size{std::size(home)}
│ │ │ │
36 {
│ │ │ │ -
37 if (not std::empty(home))
│ │ │ │ +
37 if (not std::empty(home))
│ │ │ │
38 read();
│ │ │ │
39 }
│ │ │ │
40 result_iter(result_iter const &) = default;
│ │ │ │
41
│ │ │ │
42 result_iter &operator++()
│ │ │ │
43 {
│ │ │ │
44 m_index++;
│ │ │ │ @@ -138,20 +138,20 @@ │ │ │ │
46 m_home = nullptr;
│ │ │ │
47 else
│ │ │ │
48 read();
│ │ │ │
49 return *this;
│ │ │ │
50 }
│ │ │ │
51
│ │ │ │
│ │ │ │ -
53 bool operator==(result_iter const &rhs) const
│ │ │ │ +
53 bool operator==(result_iter const &rhs) const
│ │ │ │
54 {
│ │ │ │ -
55 return m_home == rhs.m_home;
│ │ │ │ +
55 return m_home == rhs.m_home;
│ │ │ │
56 }
│ │ │ │
│ │ │ │ -
57 bool operator!=(result_iter const &rhs) const { return not(*this == rhs); }
│ │ │ │ +
57 bool operator!=(result_iter const &rhs) const { return not(*this == rhs); }
│ │ │ │
58
│ │ │ │
59 value_type const &operator*() const { return m_value; }
│ │ │ │
60
│ │ │ │
61private:
│ │ │ │
62 void read() { (*m_home)[m_index].convert(m_value); }
│ │ │ │
63
│ │ │ │
64 result const *m_home{nullptr};
│ │ │ │ @@ -159,22 +159,22 @@ │ │ │ │
66 result::size_type m_size;
│ │ │ │
67 value_type m_value;
│ │ │ │
68};
│ │ │ │
│ │ │ │
69
│ │ │ │
70
│ │ │ │
│ │ │ │ -
71template<typename... TYPE> class result_iteration
│ │ │ │ +
71template<typename... TYPE> class result_iteration
│ │ │ │
72{
│ │ │ │
73public:
│ │ │ │ -
74 using iterator = result_iter<TYPE...>;
│ │ │ │ +
74 using iterator = result_iter<TYPE...>;
│ │ │ │
75
│ │ │ │
76 explicit result_iteration(result const &home) : m_home{home}
│ │ │ │
77 {
│ │ │ │ -
78 m_home.expect_columns(sizeof...(TYPE));
│ │ │ │ +
78 m_home.expect_columns(sizeof...(TYPE));
│ │ │ │
79 }
│ │ │ │
80
│ │ │ │
81 iterator begin() const
│ │ │ │
82 {
│ │ │ │
83 if (std::size(m_home) == 0)
│ │ │ │
84 return end();
│ │ │ │
85 else
│ │ │ │ @@ -227,14 +227,15 @@ │ │ │ │
void for_each(CALLABLE &&func) const
Run func on each row, passing the row's fields as parameters.
Definition result_iter.hxx:103
│ │ │ │
result expect_columns(row_size_type cols) const
Expect that result consists of exactly cols columns.
Definition result.hxx:363
│ │ │ │
auto iter() const
Iterate rows, reading them directly into a tuple of "TYPE...".
Definition result_iter.hxx:96
│ │ │ │
Error in usage of libpqxx library, similar to std::logic_error.
Definition except.hxx:249
│ │ │ │
Internal items for libpqxx' own use. Do not use these yourself.
Definition encodings.cxx:33
│ │ │ │
std::string concat(TYPE... item)
Efficiently combine a bunch of items into one big string.
Definition concat.hxx:31
│ │ │ │
decltype(strip_types(std::declval< TYPES... >())) strip_types_t
Take a tuple type and apply strip_t to its component types.
Definition util.hxx:629
│ │ │ │ +
composite_field_parser< T > specialize_parse_composite_field(encoding_group enc)
Look up implementation of parse_composite_field for ENC.
Definition array-composite.hxx:274
│ │ │ │
decltype(args_f(std::declval< CALLABLE >())) args_t
A callable's parameter types, as a tuple.
Definition util.hxx:616
│ │ │ │
The home of all libpqxx classes, functions, templates, etc.
Definition array.cxx:27
│ │ │ │
strip_t< decltype(*std::begin(std::declval< CONTAINER >()))> value_type
The type of a container's elements.
Definition types.hxx:96
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -27,15 +27,15 @@ │ │ │ │ │ 21#include "pqxx/field.hxx" │ │ │ │ │ 22#include "pqxx/result.hxx" │ │ │ │ │ 23 │ │ │ │ │ 24#include "pqxx/internal/concat.hxx" │ │ │ │ │ 25 │ │ │ │ │ 26namespace _p_q_x_x_:_:_i_n_t_e_r_n_a_l │ │ │ │ │ 27{ │ │ │ │ │ -28template class result_iter; │ │ │ │ │ +28template class result_iter; │ │ │ │ │ 29} // namespace pqxx::internal │ │ │ │ │ 30 │ │ │ │ │ 31 │ │ │ │ │ 32namespace _p_q_x_x │ │ │ │ │ 33{ │ │ │ │ │ 35 │ │ │ │ │ _4_6class PQXX_LIBEXPORT _r_o_w │ │ │ │ │ @@ -523,14 +523,19 @@ │ │ │ │ │ DDeeffiinniittiioonn zview.hxx:38 │ │ │ │ │ _p_q_x_x_:_:_u_s_a_g_e___e_r_r_o_r │ │ │ │ │ Error in usage of libpqxx library, similar to std::logic_error. │ │ │ │ │ DDeeffiinniittiioonn except.hxx:249 │ │ │ │ │ _p_q_x_x_:_:_i_n_t_e_r_n_a_l │ │ │ │ │ Internal items for libpqxx' own use. Do not use these yourself. │ │ │ │ │ DDeeffiinniittiioonn encodings.cxx:33 │ │ │ │ │ +_p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_s_p_e_c_i_a_l_i_z_e___p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d │ │ │ │ │ +composite_field_parser< T > specialize_parse_composite_field(encoding_group │ │ │ │ │ +enc) │ │ │ │ │ +Look up implementation of parse_composite_field for ENC. │ │ │ │ │ +DDeeffiinniittiioonn array-composite.hxx:274 │ │ │ │ │ _p_q_x_x │ │ │ │ │ The home of all libpqxx classes, functions, templates, etc. │ │ │ │ │ DDeeffiinniittiioonn array.cxx:27 │ │ │ │ │ _p_q_x_x_:_:_r_o_w___s_i_z_e___t_y_p_e │ │ │ │ │ int row_size_type │ │ │ │ │ Number of fields in a row of database data. │ │ │ │ │ DDeeffiinniittiioonn types.hxx:34 │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_0.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ │ var searchData = [ │ │ │ │ │ - ['a_20new_20type_0', ['Supporting a new type', ['../datatypes.html#autotoc_md2', 1, '']]], │ │ │ │ │ - ['a_20query_20em_1', ['Streaming data <em>from a query</em>', ['../streams.html#autotoc_md23', 1, '']]], │ │ │ │ │ - ['a_20special_20prepared_20statement_2', ['A special prepared statement', ['../prepared.html#autotoc_md19', 1, '']]], │ │ │ │ │ - ['a_20statement_3', ['Preparing a statement', ['../prepared.html#autotoc_md17', 1, '']]], │ │ │ │ │ - ['a_20table_20em_4', ['Streaming data <em>into a table</em>', ['../streams.html#autotoc_md25', 1, '']]], │ │ │ │ │ + ['a_20new_20type_0', ['Supporting a new type', ['../datatypes.html#autotoc_md5', 1, '']]], │ │ │ │ │ + ['a_20query_20em_1', ['Streaming data <em>from a query</em>', ['../streams.html#autotoc_md26', 1, '']]], │ │ │ │ │ + ['a_20special_20prepared_20statement_2', ['A special prepared statement', ['../prepared.html#autotoc_md22', 1, '']]], │ │ │ │ │ + ['a_20statement_3', ['Preparing a statement', ['../prepared.html#autotoc_md20', 1, '']]], │ │ │ │ │ + ['a_20table_20em_4', ['Streaming data <em>into a table</em>', ['../streams.html#autotoc_md28', 1, '']]], │ │ │ │ │ ['abort_5', ['abort', ['../group__transactions.html#a955f2497216d9eae268ac662b46d5a45', 1, 'pqxx::transaction_base']]], │ │ │ │ │ ['access_5fpolicy_6', ['access_policy', ['../classpqxx_1_1cursor__base.html#ab2dbdc503c97b0200dd3eca6ae22f0a2', 1, 'pqxx::cursor_base']]], │ │ │ │ │ ['accessing_20results_20and_20result_20rows_7', ['Accessing results and result rows', ['../accessing-results.html', 1, '']]], │ │ │ │ │ ['additional_20data_20types_8', ['Supporting additional data types', ['../datatypes.html', 1, '']]], │ │ │ │ │ ['adorn_5fname_9', ['adorn_name', ['../classpqxx_1_1connection.html#ab4cbd2e2d30694fcaf0969c33fbeaa8f', 1, 'pqxx::connection']]], │ │ │ │ │ ['affected_5frows_10', ['affected_rows', ['../classpqxx_1_1result.html#af73d036566ef69618f8b22ba9a220a2e', 1, 'pqxx::result']]], │ │ │ │ │ ['all_11', ['all', ['../classpqxx_1_1cursor__base.html#a8ce6273da334bfd0a571c47a7eece137', 1, 'pqxx::cursor_base']]], │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_1.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -36,13 +36,13 @@ │ │ │ │ │ ['../classpqxx_1_1blob.html#a3c1c5fcc157476dfe938c6901059502f', 1, 'pqxx::blob::blob()=default'], │ │ │ │ │ ['../classpqxx_1_1blob.html#aafa3ce93f6401c592f8985217be1d416', 1, 'pqxx::blob::blob(blob &&)'] │ │ │ │ │ ]], │ │ │ │ │ ['broken_5fconnection_16', ['broken_connection', ['../group__exception.html#structpqxx_1_1broken__connection', 1, 'pqxx']]], │ │ │ │ │ ['byte_5fchar_5ftraits_17', ['byte_char_traits', ['../structpqxx_1_1byte__char__traits.html', 1, 'pqxx']]], │ │ │ │ │ ['bytes_18', ['bytes', ['../group__escaping-functions.html#a9c32ded06d7701f6aec265699b09a3d7', 1, 'pqxx::binarystring::bytes()'], │ │ │ │ │ ['../namespacepqxx.html#ac5e2f3e80ccc3a5f58bab7d699c9be05', 1, 'pqxx::bytes'], │ │ │ │ │ - ['../prepared.html#autotoc_md21', 1, 'Zero bytes'] │ │ │ │ │ + ['../prepared.html#autotoc_md24', 1, 'Zero bytes'] │ │ │ │ │ ]], │ │ │ │ │ ['bytes_5fview_19', ['bytes_view', ['../group__escaping-functions.html#a896578493ce8e0a82e1b2de5fc786c17', 1, 'pqxx::binarystring::bytes_view()'], │ │ │ │ │ ['../namespacepqxx.html#adf98e8b2ed585c586f9575928421e07d', 1, 'pqxx::bytes_view'] │ │ │ │ │ ]] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_10.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -21,16 +21,16 @@ │ │ │ │ │ ['register_5ftransaction_11', ['register_transaction', ['../group__transactions.html#aae93291a592dc93c7a569f922a8a10e0', 1, 'pqxx::transaction_base']]], │ │ │ │ │ ['release_5fraw_5fconnection_12', ['release_raw_connection', ['../classpqxx_1_1connection.html#a84ca9d29d5d2cb1d35fde324a7b3fc71', 1, 'pqxx::connection']]], │ │ │ │ │ ['remove_13', ['remove', ['../classpqxx_1_1blob.html#a04dba3c567afabaf21474a487ee16ed3', 1, 'pqxx::blob::remove()'], │ │ │ │ │ ['../classpqxx_1_1largeobject.html#a12f426d5cd7f173de01551fa1629ddf4', 1, 'pqxx::largeobject::remove()'], │ │ │ │ │ ['../classpqxx_1_1largeobjectaccess.html#a12f426d5cd7f173de01551fa1629ddf4', 1, 'pqxx::largeobjectaccess::remove()'] │ │ │ │ │ ]], │ │ │ │ │ ['render_5fitem_14', ['render_item', ['../namespacepqxx_1_1internal.html#aad2e696d48b72821c43c7ee968fac155', 1, 'pqxx::internal']]], │ │ │ │ │ - ['reserve_15', ['reserve', ['../classpqxx_1_1params.html#af736445f5bb035a646ed84f8843c91e4', 1, 'pqxx::params::reserve()'], │ │ │ │ │ - ['../structpqxx_1_1internal_1_1c__params.html#aa0700df147dee1b1a38c37c43f268ba3', 1, 'pqxx::internal::c_params::reserve()'] │ │ │ │ │ + ['reserve_15', ['reserve', ['../structpqxx_1_1internal_1_1c__params.html#aa0700df147dee1b1a38c37c43f268ba3', 1, 'pqxx::internal::c_params::reserve()'], │ │ │ │ │ + ['../classpqxx_1_1params.html#af736445f5bb035a646ed84f8843c91e4', 1, 'pqxx::params::reserve()'] │ │ │ │ │ ]], │ │ │ │ │ ['resize_16', ['resize', ['../classpqxx_1_1blob.html#a2066f1b112029d66c2a7880592a199e2', 1, 'pqxx::blob']]], │ │ │ │ │ ['restrict_5fviolation_17', ['restrict_violation', ['../group__exception.html#structpqxx_1_1restrict__violation', 1, 'pqxx']]], │ │ │ │ │ ['result_18', ['result', ['../classpqxx_1_1result.html', 1, 'pqxx']]], │ │ │ │ │ ['result_20rows_19', ['Accessing results and result rows', ['../accessing-results.html', 1, '']]], │ │ │ │ │ ['result_5fconnection_20', ['result_connection', ['../classpqxx_1_1internal_1_1gate_1_1result__connection.html', 1, 'pqxx::internal::gate']]], │ │ │ │ │ ['result_5fcreation_21', ['result_creation', ['../classpqxx_1_1internal_1_1gate_1_1result__creation.html', 1, 'pqxx::internal::gate']]], │ │ │ │ │ @@ -39,31 +39,31 @@ │ │ │ │ │ ['../classpqxx_1_1internal_1_1result__iter.html#a0c920149f5043b7d03b7ac765447a929', 1, 'pqxx::internal::result_iter::result_iter()'] │ │ │ │ │ ]], │ │ │ │ │ ['result_5fiteration_24', ['result_iteration', ['../classpqxx_1_1internal_1_1result__iteration.html', 1, 'pqxx::internal']]], │ │ │ │ │ ['result_5fpipeline_25', ['result_pipeline', ['../classpqxx_1_1internal_1_1gate_1_1result__pipeline.html', 1, 'pqxx::internal::gate']]], │ │ │ │ │ ['result_5fsize_5ftype_26', ['result_size_type', ['../namespacepqxx.html#a937d9f67d0bc04774b85efa58736852b', 1, 'pqxx']]], │ │ │ │ │ ['result_5fsql_5fcursor_27', ['result_sql_cursor', ['../classpqxx_1_1internal_1_1gate_1_1result__sql__cursor.html', 1, 'pqxx::internal::gate']]], │ │ │ │ │ ['results_20and_20result_20rows_28', ['Accessing results and result rows', ['../accessing-results.html', 1, '']]], │ │ │ │ │ - ['results_20with_20metadata_29', ['Results with metadata', ['../accessing-results.html#autotoc_md32', 1, '']]], │ │ │ │ │ + ['results_20with_20metadata_29', ['Results with metadata', ['../accessing-results.html#autotoc_md2', 1, '']]], │ │ │ │ │ ['resume_30', ['resume', ['../classpqxx_1_1pipeline.html#a06667e2e73b597586e61cae8533a2874', 1, 'pqxx::pipeline']]], │ │ │ │ │ ['retain_31', ['retain', ['../classpqxx_1_1pipeline.html#a5de968e394d7d9b68cfd84f9ae93f5bb', 1, 'pqxx::pipeline']]], │ │ │ │ │ ['retrieve_32', ['retrieve', ['../classpqxx_1_1pipeline.html#a5f8dfe951c18c19f24dd2e7a30ef276d', 1, 'pqxx::pipeline::retrieve()'], │ │ │ │ │ ['../classpqxx_1_1pipeline.html#a19c508710d0025993e41512f23de56be', 1, 'pqxx::pipeline::retrieve(query_id qid)'], │ │ │ │ │ ['../classpqxx_1_1stateless__cursor.html#a97046479f709ae621473c48ed7a0932d', 1, 'pqxx::stateless_cursor::retrieve()'] │ │ │ │ │ ]], │ │ │ │ │ - ['right_20for_20my_20query_33', ['Is streaming right for my query?', ['../streams.html#autotoc_md24', 1, '']]], │ │ │ │ │ - ['row_34', ['row', ['../classpqxx_1_1row.html', 1, 'pqxx::row'], │ │ │ │ │ - ['../classpqxx_1_1row.html#a5bd8864f453d45f83984ed858fb68880', 1, 'pqxx::row::row()'] │ │ │ │ │ + ['right_20for_20my_20query_33', ['Is streaming right for my query?', ['../streams.html#autotoc_md27', 1, '']]], │ │ │ │ │ + ['row_34', ['row', ['../classpqxx_1_1row.html#a5bd8864f453d45f83984ed858fb68880', 1, 'pqxx::row::row()'], │ │ │ │ │ + ['../classpqxx_1_1row.html', 1, 'pqxx::row'] │ │ │ │ │ ]], │ │ │ │ │ ['row_5fdifference_5ftype_35', ['row_difference_type', ['../namespacepqxx.html#a3269cdd94e1966b5d9e5d175f27741db', 1, 'pqxx']]], │ │ │ │ │ ['row_5fend_36', ['row_end', ['../classpqxx_1_1array__parser.html#a039577d83d313a6daf35fd7c273e189eab11c3eff6dd36f1f7136020d32b38051', 1, 'pqxx::array_parser']]], │ │ │ │ │ ['row_5fsize_5ftype_37', ['row_size_type', ['../namespacepqxx.html#a2dedde27863671a16a59f2625bf03d03', 1, 'pqxx']]], │ │ │ │ │ ['row_5fstart_38', ['row_start', ['../classpqxx_1_1array__parser.html#a039577d83d313a6daf35fd7c273e189ea776234b9f0a5c0e802f2790824042092', 1, 'pqxx::array_parser']]], │ │ │ │ │ ['rownumber_39', ['rownumber', ['../classpqxx_1_1const__reverse__result__iterator.html#aadd30c2141060d954c16301e3711a02c', 1, 'pqxx::const_reverse_result_iterator::rownumber()'], │ │ │ │ │ ['../classpqxx_1_1const__result__iterator.html#aadd30c2141060d954c16301e3711a02c', 1, 'pqxx::const_result_iterator::rownumber()'], │ │ │ │ │ ['../classpqxx_1_1row.html#aadd30c2141060d954c16301e3711a02c', 1, 'pqxx::row::rownumber()'] │ │ │ │ │ ]], │ │ │ │ │ ['rows_40', ['rows', ['../accessing-results.html', 1, 'Accessing results and result rows'], │ │ │ │ │ - ['../accessing-results.html#autotoc_md31', 1, 'Streaming rows'] │ │ │ │ │ + ['../accessing-results.html#autotoc_md1', 1, 'Streaming rows'] │ │ │ │ │ ]], │ │ │ │ │ - ['rows_20of_20data_41', ['Querying rows of data', ['../accessing-results.html#autotoc_md30', 1, '']]] │ │ │ │ │ + ['rows_20of_20data_41', ['Querying rows of data', ['../accessing-results.html#autotoc_md0', 1, '']]] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_11.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -6,117 +6,117 @@ │ │ │ │ │ ['scan_5funquoted_5fstring_4', ['scan_unquoted_string', ['../namespacepqxx_1_1internal.html#aa04370763622b6a3a101c9f3a9094f31', 1, 'pqxx::internal']]], │ │ │ │ │ ['seek_5', ['seek', ['../classpqxx_1_1largeobjectaccess.html#ae74922e23584d6410cf37f89f10c1a53', 1, 'pqxx::largeobjectaccess']]], │ │ │ │ │ ['seek_5fabs_6', ['seek_abs', ['../classpqxx_1_1blob.html#aca130d3433032b610ea94136968d16e5', 1, 'pqxx::blob']]], │ │ │ │ │ ['seek_5fend_7', ['seek_end', ['../classpqxx_1_1blob.html#aff777e2a1736d1a24b07e410e846181e', 1, 'pqxx::blob']]], │ │ │ │ │ ['seek_5frel_8', ['seek_rel', ['../classpqxx_1_1blob.html#ac95d070901a97d46659806edd6687f53', 1, 'pqxx::blob']]], │ │ │ │ │ ['seekdir_9', ['seekdir', ['../classpqxx_1_1largeobjectaccess.html#a9230026566fa1f7c32d2abcc2a5571eb', 1, 'pqxx::largeobjectaccess']]], │ │ │ │ │ ['seize_5fraw_5fconnection_10', ['seize_raw_connection', ['../classpqxx_1_1connection.html#a9636dca79690132730383a663aab52c8', 1, 'pqxx::connection']]], │ │ │ │ │ - ['sensitivity_11', ['Case sensitivity', ['../classpqxx_1_1connection.html#autotoc_md26', 1, '']]], │ │ │ │ │ - ['separated_5flist_12', ['separated_list', ['../namespacepqxx.html#a20d624ee29b5c66c68a515da3a56d5e8', 1, 'pqxx::separated_list(std::string_view sep, ITER begin, ITER end, ACCESS access)'], │ │ │ │ │ - ['../namespacepqxx.html#a043b0acb60e5e805b5d6af403da4fafc', 1, 'pqxx::separated_list(std::string_view sep, ITER begin, ITER end)'], │ │ │ │ │ + ['sensitivity_11', ['Case sensitivity', ['../classpqxx_1_1connection.html#autotoc_md29', 1, '']]], │ │ │ │ │ + ['separated_5flist_12', ['separated_list', ['../namespacepqxx.html#a2645d7a8c25d93e6b573cb4055dbb7a4', 1, 'pqxx::separated_list(std::string_view, TUPLE const &t, ACCESS const &access)'], │ │ │ │ │ ['../namespacepqxx.html#a6923c65ab691ca5039a5f391119e63ae', 1, 'pqxx::separated_list(std::string_view sep, CONTAINER const &c) -> typename std::enable_if<(not std::is_void< decltype(std::begin(c))>::value and not std::is_void< decltype(std::end(c))>::value), std::string >::type'], │ │ │ │ │ - ['../namespacepqxx.html#a2645d7a8c25d93e6b573cb4055dbb7a4', 1, 'pqxx::separated_list(std::string_view, TUPLE const &t, ACCESS const &access)'] │ │ │ │ │ + ['../namespacepqxx.html#a043b0acb60e5e805b5d6af403da4fafc', 1, 'pqxx::separated_list(std::string_view sep, ITER begin, ITER end)'], │ │ │ │ │ + ['../namespacepqxx.html#a20d624ee29b5c66c68a515da3a56d5e8', 1, 'pqxx::separated_list(std::string_view sep, ITER begin, ITER end, ACCESS access)'] │ │ │ │ │ ]], │ │ │ │ │ ['serialization_5ffailure_13', ['serialization_failure', ['../group__exception.html#structpqxx_1_1serialization__failure', 1, 'pqxx']]], │ │ │ │ │ ['server_5fversion_14', ['server_version', ['../classpqxx_1_1connection.html#ae217a0eb7197724be22beeb01b841a5a', 1, 'pqxx::connection']]], │ │ │ │ │ - ['set_5fclient_5fencoding_15', ['set_client_encoding', ['../classpqxx_1_1connection.html#a3b8266efbb47eb4be0acae9ba198459d', 1, 'pqxx::connection::set_client_encoding(zview encoding) &'], │ │ │ │ │ - ['../classpqxx_1_1connection.html#a2da006fb42b49b72f1261b774aaf6e10', 1, 'pqxx::connection::set_client_encoding(char const encoding[]) &'] │ │ │ │ │ + ['set_5fclient_5fencoding_15', ['set_client_encoding', ['../classpqxx_1_1connection.html#a2da006fb42b49b72f1261b774aaf6e10', 1, 'pqxx::connection::set_client_encoding(char const encoding[]) &'], │ │ │ │ │ + ['../classpqxx_1_1connection.html#a3b8266efbb47eb4be0acae9ba198459d', 1, 'pqxx::connection::set_client_encoding(zview encoding) &'] │ │ │ │ │ ]], │ │ │ │ │ ['set_5fnotice_5fhandler_16', ['set_notice_handler', ['../classpqxx_1_1connection.html#a3eb2374848e1ddf85fe8dfa5f58826f3', 1, 'pqxx::connection']]], │ │ │ │ │ ['set_5frollback_5fcmd_17', ['set_rollback_cmd', ['../group__transactions.html#a35e81ec0048df68ba4a5e1c0a2ece777', 1, 'pqxx::transaction_base']]], │ │ │ │ │ ['set_5fsession_5fvar_18', ['set_session_var', ['../classpqxx_1_1connection.html#ae23a5c19af62349c1924ec26d93c81d5', 1, 'pqxx::connection']]], │ │ │ │ │ - ['set_5fvariable_19', ['set_variable', ['../classpqxx_1_1connection.html#a59295a47049b03ab949b3781dd60ed42', 1, 'pqxx::connection::set_variable()'], │ │ │ │ │ - ['../group__transactions.html#ae3983af92a76767c75b9889ac9c52a8b', 1, 'pqxx::transaction_base::set_variable()'] │ │ │ │ │ + ['set_5fvariable_19', ['set_variable', ['../group__transactions.html#ae3983af92a76767c75b9889ac9c52a8b', 1, 'pqxx::transaction_base::set_variable()'], │ │ │ │ │ + ['../classpqxx_1_1connection.html#a59295a47049b03ab949b3781dd60ed42', 1, 'pqxx::connection::set_variable(std::string_view var, std::string_view value) &'] │ │ │ │ │ ]], │ │ │ │ │ ['set_5fverbosity_20', ['set_verbosity', ['../classpqxx_1_1connection.html#a024851ed6f2ee32fa00e0fcf53cf37ac', 1, 'pqxx::connection']]], │ │ │ │ │ ['size_21', ['size', ['../group__escaping-functions.html#afa6be7a52ce16a143ce6ebf640ff3aea', 1, 'pqxx::binarystring::size()'], │ │ │ │ │ - ['../classpqxx_1_1stateless__cursor.html#ae278f24bab98d3946061934a48992067', 1, 'pqxx::stateless_cursor::size()'], │ │ │ │ │ - ['../classpqxx_1_1field.html#a20ceb9e1dd63c481e412af866e88ccaa', 1, 'pqxx::field::size()'], │ │ │ │ │ ['../classpqxx_1_1params.html#a1a3ca8939fbeec4db4f7d69c8014a937', 1, 'pqxx::params::size()'], │ │ │ │ │ - ['../classpqxx_1_1array.html#a592afe2ec16fbb793501e84d805c87eb', 1, 'pqxx::array::size()'] │ │ │ │ │ + ['../classpqxx_1_1field.html#a20ceb9e1dd63c481e412af866e88ccaa', 1, 'pqxx::field::size()'], │ │ │ │ │ + ['../classpqxx_1_1array.html#a592afe2ec16fbb793501e84d805c87eb', 1, 'pqxx::array::size()'], │ │ │ │ │ + ['../classpqxx_1_1stateless__cursor.html#ae278f24bab98d3946061934a48992067', 1, 'pqxx::stateless_cursor::size()'] │ │ │ │ │ ]], │ │ │ │ │ ['size_5fbuffer_22', ['size_buffer', ['../structpqxx_1_1string__traits.html#a16b9aef87d46bafdcfcfdaca42f2f73f', 1, 'pqxx::string_traits']]], │ │ │ │ │ - ['size_5fbuffer_20tt_23', ['<tt>size_buffer</tt>', ['../datatypes.html#autotoc_md10', 1, '']]], │ │ │ │ │ + ['size_5fbuffer_20tt_23', ['<tt>size_buffer</tt>', ['../datatypes.html#autotoc_md13', 1, '']]], │ │ │ │ │ ['size_5fcomposite_5ffield_5fbuffer_24', ['size_composite_field_buffer', ['../namespacepqxx_1_1internal.html#a28ae4ea69fdef1f1eba5a771ccd1dc2f', 1, 'pqxx::internal']]], │ │ │ │ │ ['size_5fesc_5fbin_25', ['size_esc_bin', ['../namespacepqxx_1_1internal.html#a297e2d7f026b9baf4b8a57872ea345fc', 1, 'pqxx::internal']]], │ │ │ │ │ ['size_5funesc_5fbin_26', ['size_unesc_bin', ['../namespacepqxx_1_1internal.html#aff5de6ade6ae7234093bac118bf7ab8c', 1, 'pqxx::internal']]], │ │ │ │ │ ['sizes_27', ['sizes', ['../classpqxx_1_1array.html#ad0bf0e010691f056bebaa506f9e034dc', 1, 'pqxx::array']]], │ │ │ │ │ ['skip_5finit_28', ['skip_init', ['../namespacepqxx.html#adabe80e8385e85d663acc6e44332070d', 1, 'pqxx']]], │ │ │ │ │ ['skip_5finit_5fssl_29', ['skip_init_ssl', ['../namespacepqxx_1_1internal.html#a2ff078037fe1e6ca2b76fd9e0ac94b87', 1, 'pqxx::internal::skip_init_ssl()'], │ │ │ │ │ ['../namespacepqxx.html#a71f4fd3d06b6e0a849c58a8160380a86', 1, 'pqxx::skip_init_ssl()'] │ │ │ │ │ ]], │ │ │ │ │ ['slice_30', ['slice', ['../classpqxx_1_1row.html#a4195a594e4f11829637820cd89e39c7b', 1, 'pqxx::row']]], │ │ │ │ │ - ['sock_31', ['sock', ['../classpqxx_1_1connecting.html#a26fe754177b77ce5d62a7de871d79b7b', 1, 'pqxx::connecting::sock()'], │ │ │ │ │ - ['../classpqxx_1_1connection.html#af312d26f21b1cfd4d063e3b591fb7579', 1, 'pqxx::connection::sock()'] │ │ │ │ │ + ['sock_31', ['sock', ['../classpqxx_1_1connection.html#af312d26f21b1cfd4d063e3b591fb7579', 1, 'pqxx::connection::sock()'], │ │ │ │ │ + ['../classpqxx_1_1connecting.html#a26fe754177b77ce5d62a7de871d79b7b', 1, 'pqxx::connecting::sock()'] │ │ │ │ │ ]], │ │ │ │ │ - ['special_20prepared_20statement_32', ['A special prepared statement', ['../prepared.html#autotoc_md19', 1, '']]], │ │ │ │ │ - ['specialise_20tt_20is_5funquoted_5fsafe_20tt_33', ['Optional: Specialise <tt>is_unquoted_safe</tt>', ['../datatypes.html#autotoc_md11', 1, '']]], │ │ │ │ │ - ['specialise_20tt_20nullness_20tt_34', ['Specialise <tt>nullness</tt>', ['../datatypes.html#autotoc_md5', 1, '']]], │ │ │ │ │ - ['specialise_20tt_20param_5fformat_20tt_35', ['Optional: Specialise <tt>param_format</tt>', ['../datatypes.html#autotoc_md12', 1, '']]], │ │ │ │ │ - ['specialise_20tt_20string_5ftraits_20tt_36', ['Specialise <tt>string_traits</tt>', ['../datatypes.html#autotoc_md6', 1, '']]], │ │ │ │ │ - ['specialise_20tt_20type_5fname_20tt_37', ['Specialise <tt>type_name</tt>', ['../datatypes.html#autotoc_md4', 1, '']]], │ │ │ │ │ + ['special_20prepared_20statement_32', ['A special prepared statement', ['../prepared.html#autotoc_md22', 1, '']]], │ │ │ │ │ + ['specialise_20tt_20is_5funquoted_5fsafe_20tt_33', ['Optional: Specialise <tt>is_unquoted_safe</tt>', ['../datatypes.html#autotoc_md14', 1, '']]], │ │ │ │ │ + ['specialise_20tt_20nullness_20tt_34', ['Specialise <tt>nullness</tt>', ['../datatypes.html#autotoc_md8', 1, '']]], │ │ │ │ │ + ['specialise_20tt_20param_5fformat_20tt_35', ['Optional: Specialise <tt>param_format</tt>', ['../datatypes.html#autotoc_md15', 1, '']]], │ │ │ │ │ + ['specialise_20tt_20string_5ftraits_20tt_36', ['Specialise <tt>string_traits</tt>', ['../datatypes.html#autotoc_md9', 1, '']]], │ │ │ │ │ + ['specialise_20tt_20type_5fname_20tt_37', ['Specialise <tt>type_name</tt>', ['../datatypes.html#autotoc_md7', 1, '']]], │ │ │ │ │ ['specialize_5fparse_5fcomposite_5ffield_38', ['specialize_parse_composite_field', ['../namespacepqxx_1_1internal.html#ab1007038de5942f048d5da32e49b6b07', 1, 'pqxx::internal']]], │ │ │ │ │ - ['sql_20injection_39', ['SQL injection', ['../escaping.html#autotoc_md13', 1, '']]], │ │ │ │ │ + ['sql_20injection_39', ['SQL injection', ['../escaping.html#autotoc_md16', 1, '']]], │ │ │ │ │ ['sql_5fcursor_40', ['sql_cursor', ['../classpqxx_1_1internal_1_1sql__cursor.html', 1, 'pqxx::internal']]], │ │ │ │ │ ['sql_5ferror_41', ['sql_error', ['../group__exception.html#classpqxx_1_1sql__error', 1, 'pqxx']]], │ │ │ │ │ ['sqlstate_42', ['sqlstate', ['../group__exception.html#a31ffc7a42e9a388eb2b7cb46647e4282', 1, 'pqxx::sql_error']]], │ │ │ │ │ ['ssize_43', ['ssize', ['../classpqxx_1_1params.html#ab23b2a3b2a58bfd03fca36022ebce8b4', 1, 'pqxx::params::ssize()'], │ │ │ │ │ - ['../classpqxx_1_1array.html#a707b514df7835fa198a29ae68897efd8', 1, 'pqxx::array::ssize()'], │ │ │ │ │ - ['../namespacepqxx_1_1internal.html#af21d8461eaf6d185ed98ab88b2edac6e', 1, 'pqxx::internal::ssize()'] │ │ │ │ │ + ['../namespacepqxx_1_1internal.html#af21d8461eaf6d185ed98ab88b2edac6e', 1, 'pqxx::internal::ssize()'], │ │ │ │ │ + ['../classpqxx_1_1array.html#a707b514df7835fa198a29ae68897efd8', 1, 'pqxx::array::ssize()'] │ │ │ │ │ ]], │ │ │ │ │ ['started_44', ['Getting started', ['../getting-started.html', 1, '']]], │ │ │ │ │ ['state_5fbuffer_5foverrun_45', ['state_buffer_overrun', ['../namespacepqxx_1_1internal.html#ac32dacb4b6c712d3d7b1de9ebad0e1d5', 1, 'pqxx::internal']]], │ │ │ │ │ - ['stateless_5fcursor_46', ['stateless_cursor', ['../classpqxx_1_1stateless__cursor.html#afe5492d726a1765647985874d17f4149', 1, 'pqxx::stateless_cursor::stateless_cursor()'], │ │ │ │ │ - ['../classpqxx_1_1stateless__cursor.html', 1, 'pqxx::stateless_cursor< up, op >'], │ │ │ │ │ - ['../classpqxx_1_1stateless__cursor.html#ad77d68832afb8572fd976fc816bec89a', 1, 'pqxx::stateless_cursor::stateless_cursor()'] │ │ │ │ │ + ['stateless_5fcursor_46', ['stateless_cursor', ['../classpqxx_1_1stateless__cursor.html#afe5492d726a1765647985874d17f4149', 1, 'pqxx::stateless_cursor::stateless_cursor(transaction_base &tx, std::string_view adopted_cursor)'], │ │ │ │ │ + ['../classpqxx_1_1stateless__cursor.html#ad77d68832afb8572fd976fc816bec89a', 1, 'pqxx::stateless_cursor::stateless_cursor(transaction_base &tx, std::string_view query, std::string_view cname, bool hold)'], │ │ │ │ │ + ['../classpqxx_1_1stateless__cursor.html', 1, 'pqxx::stateless_cursor< up, op >'] │ │ │ │ │ ]], │ │ │ │ │ - ['statement_47', ['statement', ['../prepared.html#autotoc_md19', 1, 'A special prepared statement'], │ │ │ │ │ - ['../prepared.html#autotoc_md17', 1, 'Preparing a statement'] │ │ │ │ │ + ['statement_47', ['statement', ['../prepared.html#autotoc_md22', 1, 'A special prepared statement'], │ │ │ │ │ + ['../prepared.html#autotoc_md20', 1, 'Preparing a statement'] │ │ │ │ │ ]], │ │ │ │ │ ['statement_20parameters_48', ['Statement parameters', ['../parameters.html', 1, '']]], │ │ │ │ │ ['statement_5fcompletion_5funknown_49', ['statement_completion_unknown', ['../group__exception.html#structpqxx_1_1statement__completion__unknown', 1, 'pqxx']]], │ │ │ │ │ ['statements_50', ['Prepared statements', ['../prepared.html', 1, '']]], │ │ │ │ │ ['str_51', ['str', ['../group__escaping-functions.html#a9686dbe184806d5e115d9842aa3484dd', 1, 'pqxx::binarystring']]], │ │ │ │ │ - ['stream_52', ['stream', ['../group__transactions.html#aec4d0f102c2c0fab8fa1a48f452abc0f', 1, 'pqxx::transaction_base::stream(std::string_view query) &'], │ │ │ │ │ - ['../group__transactions.html#a742319e1c35632e9e3b14b91b64d5b4b', 1, 'pqxx::transaction_base::stream(std::string_view query, params parms) &'] │ │ │ │ │ + ['stream_52', ['stream', ['../group__transactions.html#a742319e1c35632e9e3b14b91b64d5b4b', 1, 'pqxx::transaction_base::stream(std::string_view query, params parms) &'], │ │ │ │ │ + ['../group__transactions.html#aec4d0f102c2c0fab8fa1a48f452abc0f', 1, 'pqxx::transaction_base::stream(std::string_view query) &'] │ │ │ │ │ ]], │ │ │ │ │ - ['stream_5ffrom_53', ['stream_from', ['../classpqxx_1_1stream__from.html', 1, 'pqxx::stream_from'], │ │ │ │ │ + ['stream_5ffrom_53', ['stream_from', ['../classpqxx_1_1stream__from.html#a832fe2b217cf7e1a5496d35f75dcd15c', 1, 'pqxx::stream_from::stream_from(transaction_base &tx, from_table_t, std::string_view table, Columns const &columns)'], │ │ │ │ │ ['../classpqxx_1_1stream__from.html#a11a6e30a28260f10fa9bfbd6f7ea36c4', 1, 'pqxx::stream_from::stream_from(transaction_base &, from_query_t, std::string_view query)'], │ │ │ │ │ ['../classpqxx_1_1stream__from.html#a3c4cd42c50e3e90282ea5570ddb19e70', 1, 'pqxx::stream_from::stream_from(transaction_base &, from_table_t, std::string_view table)'], │ │ │ │ │ ['../classpqxx_1_1stream__from.html#a0f32402331d7f2b8ed73419f1eed22ba', 1, 'pqxx::stream_from::stream_from(transaction_base &, from_table_t, std::string_view table, Iter columns_begin, Iter columns_end)'], │ │ │ │ │ - ['../classpqxx_1_1stream__from.html#a832fe2b217cf7e1a5496d35f75dcd15c', 1, 'pqxx::stream_from::stream_from(transaction_base &tx, from_table_t, std::string_view table, Columns const &columns)'], │ │ │ │ │ ['../classpqxx_1_1stream__from.html#abcfe96b18d9e2c4177799248fe143807', 1, 'pqxx::stream_from::stream_from(transaction_base &tx, std::string_view table)'], │ │ │ │ │ ['../classpqxx_1_1stream__from.html#a38b17b7198ed153d01e42d5873cdf070', 1, 'pqxx::stream_from::stream_from(transaction_base &tx, std::string_view table, Columns const &columns)'], │ │ │ │ │ - ['../classpqxx_1_1stream__from.html#a6afe5f8cdb8f158b46fa9c616c7864bf', 1, 'pqxx::stream_from::stream_from(transaction_base &, std::string_view table, Iter columns_begin, Iter columns_end)'] │ │ │ │ │ + ['../classpqxx_1_1stream__from.html#a6afe5f8cdb8f158b46fa9c616c7864bf', 1, 'pqxx::stream_from::stream_from(transaction_base &, std::string_view table, Iter columns_begin, Iter columns_end)'], │ │ │ │ │ + ['../classpqxx_1_1stream__from.html', 1, 'pqxx::stream_from'] │ │ │ │ │ ]], │ │ │ │ │ - ['stream_5ffrom_5finput_5fiterator_54', ['stream_from_input_iterator', ['../classpqxx_1_1internal_1_1stream__from__input__iterator.html#a6ee371294bb42b9e604d7313d0878a61', 1, 'pqxx::internal::stream_from_input_iterator::stream_from_input_iterator()'], │ │ │ │ │ - ['../classpqxx_1_1internal_1_1stream__from__input__iterator.html', 1, 'pqxx::internal::stream_from_input_iterator< TYPE >'] │ │ │ │ │ + ['stream_5ffrom_5finput_5fiterator_54', ['stream_from_input_iterator', ['../classpqxx_1_1internal_1_1stream__from__input__iterator.html', 1, 'pqxx::internal::stream_from_input_iterator< TYPE >'], │ │ │ │ │ + ['../classpqxx_1_1internal_1_1stream__from__input__iterator.html#a6ee371294bb42b9e604d7313d0878a61', 1, 'pqxx::internal::stream_from_input_iterator::stream_from_input_iterator()'] │ │ │ │ │ ]], │ │ │ │ │ ['stream_5finput_5fiteration_55', ['stream_input_iteration', ['../classpqxx_1_1internal_1_1stream__input__iteration.html', 1, 'pqxx::internal']]], │ │ │ │ │ - ['stream_5fquery_56', ['stream_query', ['../classpqxx_1_1internal_1_1stream__query.html#a82a1a8435b756b9cb075f4a9a2fc6c09', 1, 'pqxx::internal::stream_query::stream_query()'], │ │ │ │ │ - ['../namespacepqxx.html#classpqxx_1_1stream__query', 1, 'pqxx::stream_query< TYPE >'], │ │ │ │ │ + ['stream_5fquery_56', ['stream_query', ['../namespacepqxx.html#classpqxx_1_1stream__query', 1, 'pqxx::stream_query< TYPE >'], │ │ │ │ │ ['../classpqxx_1_1internal_1_1stream__query.html', 1, 'pqxx::internal::stream_query< TYPE >'], │ │ │ │ │ - ['../classpqxx_1_1internal_1_1stream__query.html#ab7226acb2456b26777af0dd772e94bc9', 1, 'pqxx::internal::stream_query::stream_query()'] │ │ │ │ │ + ['../classpqxx_1_1internal_1_1stream__query.html#ab7226acb2456b26777af0dd772e94bc9', 1, 'pqxx::internal::stream_query::stream_query(transaction_base &tx, std::string_view query, params const &)'], │ │ │ │ │ + ['../classpqxx_1_1internal_1_1stream__query.html#a82a1a8435b756b9cb075f4a9a2fc6c09', 1, 'pqxx::internal::stream_query::stream_query(transaction_base &tx, std::string_view query)'] │ │ │ │ │ ]], │ │ │ │ │ ['stream_5fquery_5fend_5fiterator_57', ['stream_query_end_iterator', ['../namespacepqxx_1_1internal.html#classpqxx_1_1internal_1_1stream__query__end__iterator', 1, 'pqxx::internal']]], │ │ │ │ │ ['stream_5fquery_5finput_5fiterator_58', ['stream_query_input_iterator', ['../classpqxx_1_1internal_1_1stream__query__input__iterator.html', 1, 'pqxx::internal']]], │ │ │ │ │ - ['stream_5fto_59', ['stream_to', ['../classpqxx_1_1stream__to.html#a3491f56118589adff7b7fc214689ad67', 1, 'pqxx::stream_to::stream_to(transaction_base &, std::string_view table_name, Columns const &columns)'], │ │ │ │ │ - ['../classpqxx_1_1stream__to.html#a726187a18a93a4c5cc2343bcb9e97da8', 1, 'pqxx::stream_to::stream_to(transaction_base &tx, std::string_view table_name)'], │ │ │ │ │ - ['../classpqxx_1_1stream__to.html', 1, 'pqxx::stream_to'] │ │ │ │ │ - ]], │ │ │ │ │ - ['streaming_20data_20em_20from_20a_20query_20em_60', ['Streaming data <em>from a query</em>', ['../streams.html#autotoc_md23', 1, '']]], │ │ │ │ │ - ['streaming_20data_20em_20into_20a_20table_20em_61', ['Streaming data <em>into a table</em>', ['../streams.html#autotoc_md25', 1, '']]], │ │ │ │ │ - ['streaming_20right_20for_20my_20query_62', ['Is streaming right for my query?', ['../streams.html#autotoc_md24', 1, '']]], │ │ │ │ │ - ['streaming_20rows_63', ['Streaming rows', ['../accessing-results.html#autotoc_md31', 1, '']]], │ │ │ │ │ + ['stream_5fto_59', ['stream_to', ['../classpqxx_1_1stream__to.html', 1, 'pqxx::stream_to'], │ │ │ │ │ + ['../classpqxx_1_1stream__to.html#a3491f56118589adff7b7fc214689ad67', 1, 'pqxx::stream_to::stream_to(transaction_base &, std::string_view table_name, Columns const &columns)'], │ │ │ │ │ + ['../classpqxx_1_1stream__to.html#a726187a18a93a4c5cc2343bcb9e97da8', 1, 'pqxx::stream_to::stream_to(transaction_base &tx, std::string_view table_name)'] │ │ │ │ │ + ]], │ │ │ │ │ + ['streaming_20data_20em_20from_20a_20query_20em_60', ['Streaming data <em>from a query</em>', ['../streams.html#autotoc_md26', 1, '']]], │ │ │ │ │ + ['streaming_20data_20em_20into_20a_20table_20em_61', ['Streaming data <em>into a table</em>', ['../streams.html#autotoc_md28', 1, '']]], │ │ │ │ │ + ['streaming_20right_20for_20my_20query_62', ['Is streaming right for my query?', ['../streams.html#autotoc_md27', 1, '']]], │ │ │ │ │ + ['streaming_20rows_63', ['Streaming rows', ['../accessing-results.html#autotoc_md1', 1, '']]], │ │ │ │ │ ['streams_64', ['Streams', ['../streams.html', 1, '']]], │ │ │ │ │ ['string_20conversion_65', ['String conversion', ['../group__stringconversion.html', 1, '']]], │ │ │ │ │ ['string_20escaping_66', ['String escaping', ['../escaping.html', 1, '']]], │ │ │ │ │ ['string_20escaping_20functions_67', ['String-escaping functions', ['../group__escaping-functions.html', 1, '']]], │ │ │ │ │ ['string_5ftraits_68', ['string_traits', ['../structpqxx_1_1string__traits.html', 1, 'pqxx']]], │ │ │ │ │ - ['string_5ftraits_20tt_69', ['Specialise <tt>string_traits</tt>', ['../datatypes.html#autotoc_md6', 1, '']]], │ │ │ │ │ + ['string_5ftraits_20tt_69', ['Specialise <tt>string_traits</tt>', ['../datatypes.html#autotoc_md9', 1, '']]], │ │ │ │ │ ['string_5ftraits_3c_20binarystring_20_3e_70', ['string_traits< binarystring >', ['../structpqxx_1_1string__traits_3_01binarystring_01_4.html', 1, 'pqxx']]], │ │ │ │ │ ['string_5ftraits_3c_20bool_20_3e_71', ['string_traits< bool >', ['../structpqxx_1_1string__traits_3_01bool_01_4.html', 1, 'pqxx']]], │ │ │ │ │ ['string_5ftraits_3c_20bytes_20_3e_72', ['string_traits< bytes >', ['../structpqxx_1_1string__traits_3_01bytes_01_4.html', 1, 'pqxx']]], │ │ │ │ │ ['string_5ftraits_3c_20bytes_5fview_20_3e_73', ['string_traits< bytes_view >', ['../structpqxx_1_1string__traits_3_01bytes__view_01_4.html', 1, 'pqxx']]], │ │ │ │ │ ['string_5ftraits_3c_20char_20_2a_20_3e_74', ['string_traits< char * >', ['../structpqxx_1_1string__traits_3_01char_01_5_01_4.html', 1, 'pqxx']]], │ │ │ │ │ ['string_5ftraits_3c_20char_20_3e_75', ['string_traits< char >', ['../structpqxx_1_1string__traits_3_01char_01_4.html', 1, 'pqxx']]], │ │ │ │ │ ['string_5ftraits_3c_20char_20const_20_2a_20_3e_76', ['string_traits< char const * >', ['../structpqxx_1_1string__traits_3_01char_01const_01_5_01_4.html', 1, 'pqxx']]], │ │ │ │ │ @@ -155,15 +155,15 @@ │ │ │ │ │ ['strip_5ftypes_109', ['strip_types', ['../namespacepqxx_1_1internal.html#a9b4647a83a27f2d3adc9add80c55dec3', 1, 'pqxx::internal']]], │ │ │ │ │ ['strip_5ftypes_5ft_110', ['strip_types_t', ['../namespacepqxx_1_1internal.html#a8e0a910c85d42eaa8d5948fae092cf16', 1, 'pqxx::internal']]], │ │ │ │ │ ['subtransaction_111', ['subtransaction', ['../group__transactions.html#abec3848ca61ae755fab531e791ce89d8', 1, 'pqxx::subtransaction::subtransaction(dbtransaction &t, std::string_view tname=""sv)'], │ │ │ │ │ ['../group__transactions.html#aa351325206ada1be7f3db4fa69145c4d', 1, 'pqxx::subtransaction::subtransaction(subtransaction &t, std::string_view name=""sv)'], │ │ │ │ │ ['../group__transactions.html#classpqxx_1_1subtransaction', 1, 'pqxx::subtransaction'] │ │ │ │ │ ]], │ │ │ │ │ ['super_112', ['super', ['../classpqxx_1_1internal_1_1callgate.html#afb620090453fc901f4fa147ee60bde36', 1, 'pqxx::internal::callgate']]], │ │ │ │ │ - ['supporting_20a_20new_20type_113', ['Supporting a new type', ['../datatypes.html#autotoc_md2', 1, '']]], │ │ │ │ │ + ['supporting_20a_20new_20type_113', ['Supporting a new type', ['../datatypes.html#autotoc_md5', 1, '']]], │ │ │ │ │ ['supporting_20additional_20data_20types_114', ['Supporting additional data types', ['../datatypes.html', 1, '']]], │ │ │ │ │ - ['swap_115', ['swap', ['../classpqxx_1_1result.html#ad1d929a8c555ef0e4e84d4dbcf56c05e', 1, 'pqxx::result::swap()'], │ │ │ │ │ - ['../classpqxx_1_1const__result__iterator.html#a3a7cd99d4e801fca6a538dbad3c7bba6', 1, 'pqxx::const_result_iterator::swap()'], │ │ │ │ │ - ['../group__escaping-functions.html#ad6e5000885dd6f0b7bdf1f5d7f365dd9', 1, 'pqxx::binarystring::swap()'] │ │ │ │ │ + ['swap_115', ['swap', ['../group__escaping-functions.html#ad6e5000885dd6f0b7bdf1f5d7f365dd9', 1, 'pqxx::binarystring::swap()'], │ │ │ │ │ + ['../classpqxx_1_1result.html#ad1d929a8c555ef0e4e84d4dbcf56c05e', 1, 'pqxx::result::swap()'], │ │ │ │ │ + ['../classpqxx_1_1const__result__iterator.html#a3a7cd99d4e801fca6a538dbad3c7bba6', 1, 'pqxx::const_result_iterator::swap()'] │ │ │ │ │ ]], │ │ │ │ │ ['syntax_5ferror_116', ['syntax_error', ['../group__exception.html#structpqxx_1_1syntax__error', 1, 'pqxx']]] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_12.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,39 +1,39 @@ │ │ │ │ │ var searchData = [ │ │ │ │ │ ['table_0', ['table', ['../classpqxx_1_1field.html#aee9267454dca1a3457fb86e2f0046feb', 1, 'pqxx::field::table()'], │ │ │ │ │ ['../classpqxx_1_1stream__from.html#a8bd03db93560766414f74258202f86fd', 1, 'pqxx::stream_from::table()'], │ │ │ │ │ ['../classpqxx_1_1stream__to.html#a34d7ca93963c0b5733a9ebcc10f2429b', 1, 'pqxx::stream_to::table()'] │ │ │ │ │ ]], │ │ │ │ │ - ['table_20em_1', ['Streaming data <em>into a table</em>', ['../streams.html#autotoc_md25', 1, '']]], │ │ │ │ │ + ['table_20em_1', ['Streaming data <em>into a table</em>', ['../streams.html#autotoc_md28', 1, '']]], │ │ │ │ │ ['table_5fcolumn_2', ['table_column', ['../classpqxx_1_1field.html#a884880e40a43bad2733a167340896192', 1, 'pqxx::field::table_column()'], │ │ │ │ │ ['../classpqxx_1_1result.html#ae65c4fb3934978bba367ab61811aabec', 1, 'pqxx::result::table_column(row_size_type col_num) const'], │ │ │ │ │ ['../classpqxx_1_1result.html#a22161b4bebb52ef85a51509302b5a8a9', 1, 'pqxx::result::table_column(zview col_name) const'], │ │ │ │ │ ['../classpqxx_1_1row.html#a0cc2133611f007e7390988f6110245c8', 1, 'pqxx::row::table_column(size_type) const'], │ │ │ │ │ ['../classpqxx_1_1row.html#add6bd3b28ccb8178a072e8d3d19b9616', 1, 'pqxx::row::table_column(zview col_name) const'] │ │ │ │ │ ]], │ │ │ │ │ ['table_5fpath_3', ['table_path', ['../namespacepqxx.html#a7f913d1e427c805856ac303db75c1e57', 1, 'pqxx']]], │ │ │ │ │ ['tell_4', ['tell', ['../classpqxx_1_1largeobjectaccess.html#a972d8559cae789984a194c98a88b943b', 1, 'pqxx::largeobjectaccess::tell()'], │ │ │ │ │ ['../classpqxx_1_1blob.html#a88f116eb30c662386e02a1a47fd859b8', 1, 'pqxx::blob::tell()'] │ │ │ │ │ ]], │ │ │ │ │ - ['the_20esc_20functions_5', ['Using the esc functions', ['../escaping.html#autotoc_md14', 1, '']]], │ │ │ │ │ + ['the_20esc_20functions_5', ['Using the esc functions', ['../escaping.html#autotoc_md17', 1, '']]], │ │ │ │ │ ['thread_20safety_6', ['Thread safety', ['../thread-safety.html', 1, '']]], │ │ │ │ │ ['thread_5fsafety_5fmodel_7', ['thread_safety_model', ['../namespacepqxx.html#structpqxx_1_1thread__safety__model', 1, 'pqxx']]], │ │ │ │ │ ['throw_5fnull_5fconversion_8', ['throw_null_conversion', ['../namespacepqxx_1_1internal.html#ab228c862d33c75405472dccf8a34dfa3', 1, 'pqxx::internal::throw_null_conversion(std::string_view type)'], │ │ │ │ │ ['../namespacepqxx_1_1internal.html#a14aec6b418ba2b5867987eb22bd867ce', 1, 'pqxx::internal::throw_null_conversion(std::string const &type)'] │ │ │ │ │ ]], │ │ │ │ │ ['to_9', ['to', ['../classpqxx_1_1field.html#a31433b3a426646a23e1d11f3242a3885', 1, 'pqxx::field::to(T &obj, T const &default_value) const -> typename std::enable_if_t<(not std::is_pointer< T >::value or std::is_same< T, char const * >::value), bool >'], │ │ │ │ │ ['../classpqxx_1_1field.html#a1e87e9981c60d37516326e7ab6b26da6', 1, 'pqxx::field::to(char const *&obj) const'], │ │ │ │ │ ['../classpqxx_1_1row.html#ac478a252d2bac75e1fe0d65fd99f9042', 1, 'pqxx::row::to()'], │ │ │ │ │ ['../classpqxx_1_1field.html#a5c13391d9f288b83419cca7865b5be62', 1, 'pqxx::field::to()'] │ │ │ │ │ ]], │ │ │ │ │ ['to_5fbuf_10', ['to_buf', ['../classpqxx_1_1blob.html#abfc3b8c4faeab1f394422d474114e121', 1, 'pqxx::blob::to_buf()'], │ │ │ │ │ ['../structpqxx_1_1internal_1_1float__traits.html#ad1728a05cf18dfe9e200b54b9d8fb38d', 1, 'pqxx::internal::float_traits::to_buf()'], │ │ │ │ │ ['../structpqxx_1_1string__traits.html#a81b2526f70d7191c37e36fb78530b977', 1, 'pqxx::string_traits::to_buf()'] │ │ │ │ │ ]], │ │ │ │ │ - ['to_5fbuf_20tt_11', ['<tt>to_buf</tt>', ['../datatypes.html#autotoc_md8', 1, '']]], │ │ │ │ │ + ['to_5fbuf_20tt_11', ['<tt>to_buf</tt>', ['../datatypes.html#autotoc_md11', 1, '']]], │ │ │ │ │ ['to_5ffile_12', ['to_file', ['../classpqxx_1_1blob.html#a373c4d3df0068d18e75f8bdbf619ac90', 1, 'pqxx::blob::to_file()'], │ │ │ │ │ ['../classpqxx_1_1largeobject.html#a4fb862c252771c8ad4449f8badf2b26f', 1, 'pqxx::largeobject::to_file()'], │ │ │ │ │ ['../classpqxx_1_1largeobjectaccess.html#acdbc859cf3afd0ddcc4aa555ef36c35a', 1, 'pqxx::largeobjectaccess::to_file(std::string_view file) const'], │ │ │ │ │ ['../classpqxx_1_1largeobjectaccess.html#a4fb862c252771c8ad4449f8badf2b26f', 1, 'pqxx::largeobjectaccess::to_file(dbtransaction &t, std::string_view file) const'] │ │ │ │ │ ]], │ │ │ │ │ ['to_5fstring_13', ['to_string', ['../namespacepqxx.html#accab0ae142ee4c6789f5252578d0d478', 1, 'pqxx']]], │ │ │ │ │ ['to_5fstring_5ffloat_14', ['to_string_float', ['../namespacepqxx_1_1internal.html#acc9749f398f41d29c41e5b4475735f3d', 1, 'pqxx::internal::to_string_float(T)'], │ │ │ │ │ @@ -48,28 +48,28 @@ │ │ │ │ │ ['../group__transactions.html#classpqxx_1_1transaction__base', 1, 'pqxx::transaction_base'] │ │ │ │ │ ]], │ │ │ │ │ ['transaction_5fbase_3a_3aquery_5fvalue_3c_20std_3a_3astring_5fview_20_3e_19', ['query_value< std::string_view >', ['../namespacepqxx.html#a8f5d10354025255ae20e29fa024d22b3', 1, 'pqxx']]], │ │ │ │ │ ['transaction_5ffocus_20', ['transaction_focus', ['../classpqxx_1_1transaction__focus.html', 1, 'pqxx']]], │ │ │ │ │ ['transaction_5frollback_21', ['transaction_rollback', ['../group__exception.html#structpqxx_1_1transaction__rollback', 1, 'pqxx']]], │ │ │ │ │ ['transaction_5fsql_5fcursor_22', ['transaction_sql_cursor', ['../classpqxx_1_1internal_1_1gate_1_1transaction__sql__cursor.html', 1, 'pqxx::internal::gate']]], │ │ │ │ │ ['transaction_5ftransaction_5ffocus_23', ['transaction_transaction_focus', ['../classpqxx_1_1internal_1_1gate_1_1transaction__transaction__focus.html', 1, 'pqxx::internal::gate']]], │ │ │ │ │ - ['transactions_24', ['Transactions', ['../classpqxx_1_1connection.html#autotoc_md27', 1, '']]], │ │ │ │ │ + ['transactions_24', ['Transactions', ['../classpqxx_1_1connection.html#autotoc_md30', 1, '']]], │ │ │ │ │ ['transactor_20framework_25', ['Transactor framework', ['../group__transactor.html', 1, '']]], │ │ │ │ │ - ['tt_20from_5fstring_20tt_26', ['<tt>from_string</tt>', ['../datatypes.html#autotoc_md7', 1, '']]], │ │ │ │ │ - ['tt_20into_5fbuf_20tt_27', ['<tt>into_buf</tt>', ['../datatypes.html#autotoc_md9', 1, '']]], │ │ │ │ │ - ['tt_20is_5funquoted_5fsafe_20tt_28', ['Optional: Specialise <tt>is_unquoted_safe</tt>', ['../datatypes.html#autotoc_md11', 1, '']]], │ │ │ │ │ - ['tt_20nullness_20tt_29', ['Specialise <tt>nullness</tt>', ['../datatypes.html#autotoc_md5', 1, '']]], │ │ │ │ │ - ['tt_20param_5fformat_20tt_30', ['Optional: Specialise <tt>param_format</tt>', ['../datatypes.html#autotoc_md12', 1, '']]], │ │ │ │ │ - ['tt_20size_5fbuffer_20tt_31', ['<tt>size_buffer</tt>', ['../datatypes.html#autotoc_md10', 1, '']]], │ │ │ │ │ - ['tt_20string_5ftraits_20tt_32', ['Specialise <tt>string_traits</tt>', ['../datatypes.html#autotoc_md6', 1, '']]], │ │ │ │ │ - ['tt_20to_5fbuf_20tt_33', ['<tt>to_buf</tt>', ['../datatypes.html#autotoc_md8', 1, '']]], │ │ │ │ │ - ['tt_20type_5fname_20tt_34', ['Specialise <tt>type_name</tt>', ['../datatypes.html#autotoc_md4', 1, '']]], │ │ │ │ │ - ['type_35', ['type', ['../datatypes.html#autotoc_md2', 1, 'Supporting a new type'], │ │ │ │ │ + ['tt_20from_5fstring_20tt_26', ['<tt>from_string</tt>', ['../datatypes.html#autotoc_md10', 1, '']]], │ │ │ │ │ + ['tt_20into_5fbuf_20tt_27', ['<tt>into_buf</tt>', ['../datatypes.html#autotoc_md12', 1, '']]], │ │ │ │ │ + ['tt_20is_5funquoted_5fsafe_20tt_28', ['Optional: Specialise <tt>is_unquoted_safe</tt>', ['../datatypes.html#autotoc_md14', 1, '']]], │ │ │ │ │ + ['tt_20nullness_20tt_29', ['Specialise <tt>nullness</tt>', ['../datatypes.html#autotoc_md8', 1, '']]], │ │ │ │ │ + ['tt_20param_5fformat_20tt_30', ['Optional: Specialise <tt>param_format</tt>', ['../datatypes.html#autotoc_md15', 1, '']]], │ │ │ │ │ + ['tt_20size_5fbuffer_20tt_31', ['<tt>size_buffer</tt>', ['../datatypes.html#autotoc_md13', 1, '']]], │ │ │ │ │ + ['tt_20string_5ftraits_20tt_32', ['Specialise <tt>string_traits</tt>', ['../datatypes.html#autotoc_md9', 1, '']]], │ │ │ │ │ + ['tt_20to_5fbuf_20tt_33', ['<tt>to_buf</tt>', ['../datatypes.html#autotoc_md11', 1, '']]], │ │ │ │ │ + ['tt_20type_5fname_20tt_34', ['Specialise <tt>type_name</tt>', ['../datatypes.html#autotoc_md7', 1, '']]], │ │ │ │ │ + ['type_35', ['type', ['../datatypes.html#autotoc_md5', 1, 'Supporting a new type'], │ │ │ │ │ ['../classpqxx_1_1field.html#ad2da9b613fdf2b38a36e92eafd9b223a', 1, 'pqxx::field::type()'], │ │ │ │ │ - ['../datatypes.html#autotoc_md3', 1, 'Your type'] │ │ │ │ │ + ['../datatypes.html#autotoc_md6', 1, 'Your type'] │ │ │ │ │ ]], │ │ │ │ │ ['type_5fname_36', ['type_name', ['../namespacepqxx.html#a03b51dc175989959be170596670dafa4', 1, 'pqxx']]], │ │ │ │ │ - ['type_5fname_20tt_37', ['Specialise <tt>type_name</tt>', ['../datatypes.html#autotoc_md4', 1, '']]], │ │ │ │ │ - ['types_38', ['types', ['../datatypes.html#autotoc_md1', 1, 'Converting types'], │ │ │ │ │ + ['type_5fname_20tt_37', ['Specialise <tt>type_name</tt>', ['../datatypes.html#autotoc_md7', 1, '']]], │ │ │ │ │ + ['types_38', ['types', ['../datatypes.html#autotoc_md4', 1, 'Converting types'], │ │ │ │ │ ['../datatypes.html', 1, 'Supporting additional data types'] │ │ │ │ │ ]] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_13.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -18,10 +18,10 @@ │ │ │ │ │ ['unexpected_5frows_7', ['unexpected_rows', ['../group__exception.html#structpqxx_1_1unexpected__rows', 1, 'pqxx']]], │ │ │ │ │ ['unique_5fviolation_8', ['unique_violation', ['../group__exception.html#structpqxx_1_1unique__violation', 1, 'pqxx']]], │ │ │ │ │ ['unprepare_9', ['unprepare', ['../classpqxx_1_1connection.html#a5cbd8240e3c74b595ccb535c941433ae', 1, 'pqxx::connection']]], │ │ │ │ │ ['update_10', ['update', ['../classpqxx_1_1cursor__base.html#ace67894e61fba0ce9f9f6e5b9dd33083a12fa229ee3e760f1ca86d66304554b63', 1, 'pqxx::cursor_base']]], │ │ │ │ │ ['update_5fpolicy_11', ['update_policy', ['../classpqxx_1_1cursor__base.html#ace67894e61fba0ce9f9f6e5b9dd33083', 1, 'pqxx::cursor_base']]], │ │ │ │ │ ['usage_5ferror_12', ['usage_error', ['../group__exception.html#structpqxx_1_1usage__error', 1, 'pqxx']]], │ │ │ │ │ ['username_13', ['username', ['../classpqxx_1_1connection.html#a9d7c7ab0c54a258ac4fab0d562fdbacd', 1, 'pqxx::connection']]], │ │ │ │ │ - ['using_20the_20esc_20functions_14', ['Using the esc functions', ['../escaping.html#autotoc_md14', 1, '']]], │ │ │ │ │ + ['using_20the_20esc_20functions_14', ['Using the esc functions', ['../escaping.html#autotoc_md17', 1, '']]], │ │ │ │ │ ['utility_20functions_15', ['Utility functions', ['../group__utility.html', 1, '']]] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_14.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,11 +1,11 @@ │ │ │ │ │ var searchData = [ │ │ │ │ │ ['value_0', ['value', ['../classpqxx_1_1range__bound.html#a76d25b17ed6af78070b888f5effe70ba', 1, 'pqxx::range_bound']]], │ │ │ │ │ ['value_5ftype_1', ['value_type', ['../namespacepqxx.html#a934fca7aa1250b4c488ac2f09ac2bf1b', 1, 'pqxx']]], │ │ │ │ │ - ['values_2', ['values', ['../streams.html#autotoc_md22', 1, 'Interlude: null values'], │ │ │ │ │ + ['values_2', ['values', ['../streams.html#autotoc_md25', 1, 'Interlude: null values'], │ │ │ │ │ ['../structpqxx_1_1internal_1_1c__params.html#aad4eb2f440fe907fcf11467effbbff15', 1, 'pqxx::internal::c_params::values'] │ │ │ │ │ ]], │ │ │ │ │ ['variable_5fset_5fto_5fnull_3', ['variable_set_to_null', ['../group__exception.html#structpqxx_1_1variable__set__to__null', 1, 'pqxx']]], │ │ │ │ │ ['view_4', ['view', ['../group__escaping-functions.html#a882b8988b2b48a9d3d254a25c559871e', 1, 'pqxx::binarystring::view()'], │ │ │ │ │ ['../classpqxx_1_1field.html#aa05908e8ed320fac8c96b9eb4cf46813', 1, 'pqxx::field::view()'], │ │ │ │ │ ['../classpqxx_1_1placeholders.html#a92d006575732b3ead81cbaf4892197ae', 1, 'pqxx::placeholders::view()'] │ │ │ │ │ ]] │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_15.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ │ var searchData = [ │ │ │ │ │ ['wait_5ffd_0', ['wait_fd', ['../namespacepqxx_1_1internal.html#ae8a3cb88d2e0bc1f1125bee862fe100b', 1, 'pqxx::internal']]], │ │ │ │ │ ['wait_5ffor_1', ['wait_for', ['../namespacepqxx_1_1internal.html#ae95ba6e41e051ca26d13855aa2b512cb', 1, 'pqxx::internal']]], │ │ │ │ │ ['wait_5fto_5fread_2', ['wait_to_read', ['../classpqxx_1_1connecting.html#aa60ab98dc5a2702929765f05229bf160', 1, 'pqxx::connecting']]], │ │ │ │ │ ['wait_5fto_5fwrite_3', ['wait_to_write', ['../classpqxx_1_1connecting.html#a4b39dd46b61ea3e39242213bd4245eb0', 1, 'pqxx::connecting']]], │ │ │ │ │ - ['with_20metadata_4', ['Results with metadata', ['../accessing-results.html#autotoc_md32', 1, '']]], │ │ │ │ │ + ['with_20metadata_4', ['Results with metadata', ['../accessing-results.html#autotoc_md2', 1, '']]], │ │ │ │ │ ['write_5', ['write', ['../classpqxx_1_1blob.html#a28ff055c22102e0d1bda250d20d265e8', 1, 'pqxx::blob::write()'], │ │ │ │ │ ['../classpqxx_1_1largeobjectaccess.html#a60ff3072349074e732d0c00e2aefc498', 1, 'pqxx::largeobjectaccess::write(char const buf[], std::size_t len)'], │ │ │ │ │ ['../classpqxx_1_1largeobjectaccess.html#addc309fe11d4d3e29547b149e4600199', 1, 'pqxx::largeobjectaccess::write(std::string_view buf)'] │ │ │ │ │ ]], │ │ │ │ │ ['write_5fpolicy_6', ['write_policy', ['../namespacepqxx.html#a3a8103e375bc507b6e9df93e24121912', 1, 'pqxx']]], │ │ │ │ │ ['write_5frow_7', ['write_row', ['../classpqxx_1_1stream__to.html#ae628c71679b4ec6ebb4378b487e4f543', 1, 'pqxx::stream_to']]], │ │ │ │ │ ['write_5fvalues_8', ['write_values', ['../classpqxx_1_1stream__to.html#a41ffa59e4f36803f1e9473ed83b3c41d', 1, 'pqxx::stream_to']]] │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_16.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,3 +1,3 @@ │ │ │ │ │ var searchData = [ │ │ │ │ │ - ['your_20type_0', ['Your type', ['../datatypes.html#autotoc_md3', 1, '']]] │ │ │ │ │ + ['your_20type_0', ['Your type', ['../datatypes.html#autotoc_md6', 1, '']]] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_17.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,9 +1,9 @@ │ │ │ │ │ var searchData = [ │ │ │ │ │ - ['zero_20bytes_0', ['Zero bytes', ['../prepared.html#autotoc_md21', 1, '']]], │ │ │ │ │ + ['zero_20bytes_0', ['Zero bytes', ['../prepared.html#autotoc_md24', 1, '']]], │ │ │ │ │ ['zview_1', ['zview', ['../classpqxx_1_1zview.html', 1, 'pqxx::zview'], │ │ │ │ │ ['../classpqxx_1_1zview.html#a766cc45a178d43b1471fdc025f01535d', 1, 'pqxx::zview::zview(char const text[], std::ptrdiff_t len) noexcept(noexcept(std::string_view{text, static_cast< std::size_t >(len)}))'], │ │ │ │ │ ['../classpqxx_1_1zview.html#a581b8c75e8c2c0de579debfca37cd725', 1, 'pqxx::zview::zview(char text[], std::ptrdiff_t len) noexcept(noexcept(std::string_view{text, static_cast< std::size_t >(len)}))'], │ │ │ │ │ ['../classpqxx_1_1zview.html#aa713ad5896e247699dcb5be68528b0e8', 1, 'pqxx::zview::zview(std::string_view other) noexcept'], │ │ │ │ │ ['../classpqxx_1_1zview.html#a3ddf4e0ff127e96f8f68361088f96d2e', 1, 'pqxx::zview::zview(Args &&...args)'], │ │ │ │ │ ['../classpqxx_1_1zview.html#ad5928543720ef457a1ca229920f33de6', 1, 'pqxx::zview::zview(std::string const &str) noexcept'], │ │ │ │ │ ['../classpqxx_1_1zview.html#a9297b1b431ea593ea2ec6c8f0beaefa9', 1, 'pqxx::zview::zview(char const str[]) noexcept(noexcept(std::string_view{str}))'], │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_2.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -12,17 +12,17 @@ │ │ │ │ │ ['callgate_3c_20errorhandler_20_3e_6', ['callgate< errorhandler >', ['../classpqxx_1_1internal_1_1callgate.html', 1, 'pqxx::internal']]], │ │ │ │ │ ['callgate_3c_20icursor_5fiterator_20_3e_7', ['callgate< icursor_iterator >', ['../classpqxx_1_1internal_1_1callgate.html', 1, 'pqxx::internal']]], │ │ │ │ │ ['callgate_3c_20icursorstream_20_3e_8', ['callgate< icursorstream >', ['../classpqxx_1_1internal_1_1callgate.html', 1, 'pqxx::internal']]], │ │ │ │ │ ['callgate_3c_20result_20const_20_3e_9', ['callgate< result const >', ['../classpqxx_1_1internal_1_1callgate.html', 1, 'pqxx::internal']]], │ │ │ │ │ ['callgate_3c_20transaction_5fbase_20_3e_10', ['callgate< transaction_base >', ['../classpqxx_1_1internal_1_1callgate.html', 1, 'pqxx::internal']]], │ │ │ │ │ ['cancel_11', ['cancel', ['../classpqxx_1_1pipeline.html#ab375b0b4e02c7f1a48602c4186fbbbd7', 1, 'pqxx::pipeline']]], │ │ │ │ │ ['cancel_5fquery_12', ['cancel_query', ['../classpqxx_1_1connection.html#ad1719d51a24c5aa6bd58f03a328a3833', 1, 'pqxx::connection']]], │ │ │ │ │ - ['case_20sensitivity_13', ['Case sensitivity', ['../classpqxx_1_1connection.html#autotoc_md26', 1, '']]], │ │ │ │ │ + ['case_20sensitivity_13', ['Case sensitivity', ['../classpqxx_1_1connection.html#autotoc_md29', 1, '']]], │ │ │ │ │ ['cat2_14', ['cat2', ['../namespacepqxx_1_1internal.html#ae3d8bb14c1d7c63c57c59b61cf63ff09', 1, 'pqxx::internal']]], │ │ │ │ │ - ['caveats_15', ['Caveats', ['../binary.html#autotoc_md0', 1, '']]], │ │ │ │ │ + ['caveats_15', ['Caveats', ['../binary.html#autotoc_md3', 1, '']]], │ │ │ │ │ ['cbegin_16', ['cbegin', ['../classpqxx_1_1array.html#aa091e8641639a3802f44b565194d1119', 1, 'pqxx::array']]], │ │ │ │ │ ['cend_17', ['cend', ['../classpqxx_1_1array.html#a14d57111c8af2324a8e9e8e3df162d9d', 1, 'pqxx::array']]], │ │ │ │ │ ['channel_18', ['channel', ['../classpqxx_1_1notification__receiver.html#a57732bae437844782bdfe6314f829d9a', 1, 'pqxx::notification_receiver::channel()'], │ │ │ │ │ ['../namespacepqxx.html#adb60a62bb5ba0afac027989fe3f0869b', 1, 'pqxx::notification::channel'] │ │ │ │ │ ]], │ │ │ │ │ ['char_5ffinder_5ffunc_19', ['char_finder_func', ['../namespacepqxx_1_1internal.html#a93267405e140acb909fe17d58746f113', 1, 'pqxx::internal']]], │ │ │ │ │ ['check_5fcast_20', ['check_cast', ['../namespacepqxx.html#af61c9b8bf784c48b540deb2fe1c1f90c', 1, 'pqxx']]], │ │ │ │ │ @@ -115,15 +115,15 @@ │ │ │ │ │ ['contains_70', ['contains', ['../classpqxx_1_1range.html#a3f5071556ce9c0b77e6e4a006b6c51fe', 1, 'pqxx::range::contains(range< TYPE > const &other) const noexcept(noexcept((*this &other)==other))'], │ │ │ │ │ ['../classpqxx_1_1range.html#a2fa03d4ad40c545610bdc382e2aff187', 1, 'pqxx::range::contains(TYPE value) const noexcept(noexcept(m_lower.extends_down_to(value)) and noexcept(m_upper.extends_up_to(value)))'] │ │ │ │ │ ]], │ │ │ │ │ ['conversion_71', ['String conversion', ['../group__stringconversion.html', 1, '']]], │ │ │ │ │ ['conversion_5ferror_72', ['conversion_error', ['../group__exception.html#structpqxx_1_1conversion__error', 1, 'pqxx']]], │ │ │ │ │ ['conversion_5foverrun_73', ['conversion_overrun', ['../group__exception.html#structpqxx_1_1conversion__overrun', 1, 'pqxx']]], │ │ │ │ │ ['convert_74', ['convert', ['../classpqxx_1_1row.html#af81dc44f173ab151bd052f339c10521f', 1, 'pqxx::row']]], │ │ │ │ │ - ['converting_20types_75', ['Converting types', ['../datatypes.html#autotoc_md1', 1, '']]], │ │ │ │ │ + ['converting_20types_75', ['Converting types', ['../datatypes.html#autotoc_md4', 1, '']]], │ │ │ │ │ ['converts_5ffrom_5fstring_76', ['converts_from_string', ['../structpqxx_1_1string__traits.html#afc7783fd1fd1020f8d400b318f1a0c10', 1, 'pqxx::string_traits']]], │ │ │ │ │ ['converts_5fto_5fstring_77', ['converts_to_string', ['../structpqxx_1_1string__traits.html#ac537955384e39377e84fd71ad6c80bfd', 1, 'pqxx::string_traits']]], │ │ │ │ │ ['count_78', ['count', ['../classpqxx_1_1placeholders.html#a254b9519ce26aee58826afcd4dadb778', 1, 'pqxx::placeholders']]], │ │ │ │ │ ['crbegin_79', ['crbegin', ['../classpqxx_1_1array.html#a2499a20fcc7d9da7e7f303b6e16fb254', 1, 'pqxx::array']]], │ │ │ │ │ ['cread_80', ['cread', ['../classpqxx_1_1largeobjectaccess.html#ac43433ab08b3ccb34fc72ea4975bcda2', 1, 'pqxx::largeobjectaccess']]], │ │ │ │ │ ['create_81', ['create', ['../classpqxx_1_1blob.html#a008264c527d6806ea2b190dd8b75dc11', 1, 'pqxx::blob']]], │ │ │ │ │ ['crend_82', ['crend', ['../classpqxx_1_1array.html#ac2f300e0917b8e0afbc9d77bbc26534a', 1, 'pqxx::array']]], │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_3.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,14 +1,14 @@ │ │ │ │ │ var searchData = [ │ │ │ │ │ ['data_0', ['data', ['../binary.html', 1, 'Binary data'], │ │ │ │ │ ['../group__escaping-functions.html#aa8e2854a33324620fb8ba3bb0176fa51', 1, 'pqxx::binarystring::data()'], │ │ │ │ │ - ['../accessing-results.html#autotoc_md30', 1, 'Querying rows of data'] │ │ │ │ │ + ['../accessing-results.html#autotoc_md0', 1, 'Querying rows of data'] │ │ │ │ │ ]], │ │ │ │ │ - ['data_20em_20from_20a_20query_20em_1', ['Streaming data <em>from a query</em>', ['../streams.html#autotoc_md23', 1, '']]], │ │ │ │ │ - ['data_20em_20into_20a_20table_20em_2', ['Streaming data <em>into a table</em>', ['../streams.html#autotoc_md25', 1, '']]], │ │ │ │ │ + ['data_20em_20from_20a_20query_20em_1', ['Streaming data <em>from a query</em>', ['../streams.html#autotoc_md26', 1, '']]], │ │ │ │ │ + ['data_20em_20into_20a_20table_20em_2', ['Streaming data <em>into a table</em>', ['../streams.html#autotoc_md28', 1, '']]], │ │ │ │ │ ['data_20types_3', ['Supporting additional data types', ['../datatypes.html', 1, '']]], │ │ │ │ │ ['data_5fexception_4', ['data_exception', ['../group__exception.html#structpqxx_1_1data__exception', 1, 'pqxx']]], │ │ │ │ │ ['dbname_5', ['dbname', ['../classpqxx_1_1connection.html#a286e275a7701a8ac96f839cbf8205258', 1, 'pqxx::connection']]], │ │ │ │ │ ['dbtransaction_6', ['dbtransaction', ['../group__transactions.html#classpqxx_1_1dbtransaction', 1, 'pqxx::dbtransaction'], │ │ │ │ │ ['../group__transactions.html#a1a93f046a44aa6018495a537ee06e0db', 1, 'pqxx::dbtransaction::dbtransaction(connection &cx, std::string_view tname, std::shared_ptr< std::string > rollback_cmd)'], │ │ │ │ │ ['../group__transactions.html#ae58d1c6a70b3d5c87ae066c49b2cd671', 1, 'pqxx::dbtransaction::dbtransaction(connection &cx, std::string_view tname)'], │ │ │ │ │ ['../group__transactions.html#a1d75492f91f1e0de3d970af6e6127a05', 1, 'pqxx::dbtransaction::dbtransaction(connection &cx)'] │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_4.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,18 +1,18 @@ │ │ │ │ │ var searchData = [ │ │ │ │ │ - ['em_20from_20a_20query_20em_0', ['Streaming data <em>from a query</em>', ['../streams.html#autotoc_md23', 1, '']]], │ │ │ │ │ - ['em_20into_20a_20table_20em_1', ['Streaming data <em>into a table</em>', ['../streams.html#autotoc_md25', 1, '']]], │ │ │ │ │ + ['em_20from_20a_20query_20em_0', ['Streaming data <em>from a query</em>', ['../streams.html#autotoc_md26', 1, '']]], │ │ │ │ │ + ['em_20into_20a_20table_20em_1', ['Streaming data <em>into a table</em>', ['../streams.html#autotoc_md28', 1, '']]], │ │ │ │ │ ['empty_2', ['empty', ['../classpqxx_1_1row.html#a05994def0b6c7b426bb13a7a95e9e035', 1, 'pqxx::row::empty()'], │ │ │ │ │ ['../classpqxx_1_1range.html#ac91cd0e74ae28042d8f887107f0aef76', 1, 'pqxx::range::empty()'] │ │ │ │ │ ]], │ │ │ │ │ ['empty_5fresult_3', ['empty_result', ['../classpqxx_1_1internal_1_1sql__cursor.html#aa081894fff9516d7dc26a8f724db21aa', 1, 'pqxx::internal::sql_cursor']]], │ │ │ │ │ ['enc_5fgroup_4', ['enc_group', ['../namespacepqxx_1_1internal.html#a6a4fef10718297b22be8627e18e20fe0', 1, 'pqxx::internal::enc_group(std::string_view encoding_name)'], │ │ │ │ │ ['../namespacepqxx_1_1internal.html#aef85ea1bf0ba64165cf2719dc25b0424', 1, 'pqxx::internal::enc_group(int)'] │ │ │ │ │ ]], │ │ │ │ │ - ['encoding_5', ['Encoding', ['../classpqxx_1_1connection.html#autotoc_md29', 1, '']]], │ │ │ │ │ + ['encoding_5', ['Encoding', ['../classpqxx_1_1connection.html#autotoc_md32', 1, '']]], │ │ │ │ │ ['encoding_5fid_6', ['encoding_id', ['../classpqxx_1_1connection.html#a975747afe8d451004680741492b76ae5', 1, 'pqxx::connection']]], │ │ │ │ │ ['encrypt_5fpassword_7', ['encrypt_password', ['../namespacepqxx.html#a204a7f521845d2fa16035b60eab9ddbb', 1, 'pqxx::encrypt_password()'], │ │ │ │ │ ['../classpqxx_1_1connection.html#a0724de6ed0e9b65267967adaa34c4f78', 1, 'pqxx::connection::encrypt_password(zview user, zview password, zview algorithm)'], │ │ │ │ │ ['../classpqxx_1_1connection.html#aecfa98ec5ec1e783ed8e8737b587a9f0', 1, 'pqxx::connection::encrypt_password(char const user[], char const password[], char const *algorithm=nullptr)'], │ │ │ │ │ ['../namespacepqxx.html#abb5e089e78f78ecb49a5da2c802113bd', 1, 'pqxx::encrypt_password()'] │ │ │ │ │ ]], │ │ │ │ │ ['end_8', ['end', ['../classpqxx_1_1internal_1_1stream__query.html#afccfe3b559c68913f5161f3a8ee0ad80', 1, 'pqxx::internal::stream_query']]], │ │ │ │ │ @@ -30,29 +30,29 @@ │ │ │ │ │ ]], │ │ │ │ │ ['errorhandler_5fconnection_18', ['errorhandler_connection', ['../classpqxx_1_1internal_1_1gate_1_1errorhandler__connection.html', 1, 'pqxx::internal::gate']]], │ │ │ │ │ ['esc_19', ['esc', ['../classpqxx_1_1connection.html#a6e6bc476091af546f880c9c572f05375', 1, 'pqxx::connection::esc(std::string_view text) const'], │ │ │ │ │ ['../classpqxx_1_1connection.html#aa29f2e36001c4715e898f2c1a2ca9d5a', 1, 'pqxx::connection::esc(char const text[]) const'], │ │ │ │ │ ['../classpqxx_1_1connection.html#ab2fd28a1d384854642cc84dcd54cd450', 1, 'pqxx::connection::esc(char const text[], std::size_t maxlen) const'], │ │ │ │ │ ['../group__escaping-functions.html#ga6710c7298c40ae41b5d8326cbf2ad20e', 1, 'pqxx::transaction_base::esc()'] │ │ │ │ │ ]], │ │ │ │ │ - ['esc_20functions_20', ['Using the esc functions', ['../escaping.html#autotoc_md14', 1, '']]], │ │ │ │ │ + ['esc_20functions_20', ['Using the esc functions', ['../escaping.html#autotoc_md17', 1, '']]], │ │ │ │ │ ['esc_5fbin_21', ['esc_bin', ['../namespacepqxx_1_1internal.html#a842929aed32b7ff0f3178a7539b595d9', 1, 'pqxx::internal::esc_bin(bytes_view binary_data)'], │ │ │ │ │ ['../namespacepqxx_1_1internal.html#a89a78387ec5faabb426e0f519cad2b56', 1, 'pqxx::internal::esc_bin(bytes_view binary_data, char buffer[]) noexcept'] │ │ │ │ │ ]], │ │ │ │ │ ['esc_5flike_22', ['esc_like', ['../classpqxx_1_1connection.html#a7e8f054f91d4e61879039bfdff9b2889', 1, 'pqxx::connection::esc_like()'], │ │ │ │ │ ['../group__transactions.html#abb28d39ae66b1f36f7297b1e9d1c4e1a', 1, 'pqxx::transaction_base::esc_like(std::string_view bin, char escape_char='\\') const'] │ │ │ │ │ ]], │ │ │ │ │ ['esc_5fraw_23', ['esc_raw', ['../group__transactions.html#a7a64a944468f732eb1a78301ec940e29', 1, 'pqxx::transaction_base::esc_raw()'], │ │ │ │ │ ['../classpqxx_1_1connection.html#a72b6b843cbeb8555ade27ab831e6d6e9', 1, 'pqxx::connection::esc_raw(bytes_view) const'], │ │ │ │ │ ['../classpqxx_1_1connection.html#a22d2c852a4e1c159c021b04efc04f8e1', 1, 'pqxx::connection::esc_raw(unsigned char const bin[], std::size_t len) const'] │ │ │ │ │ ]], │ │ │ │ │ ['escaping_24', ['String escaping', ['../escaping.html', 1, '']]], │ │ │ │ │ ['escaping_20functions_25', ['String-escaping functions', ['../group__escaping-functions.html', 1, '']]], │ │ │ │ │ ['exception_20classes_26', ['Exception classes', ['../group__exception.html', 1, '']]], │ │ │ │ │ - ['exceptions_27', ['Exceptions', ['../classpqxx_1_1connection.html#autotoc_md28', 1, '']]], │ │ │ │ │ + ['exceptions_27', ['Exceptions', ['../classpqxx_1_1connection.html#autotoc_md31', 1, '']]], │ │ │ │ │ ['exclusive_5fbound_28', ['exclusive_bound', ['../classpqxx_1_1exclusive__bound.html', 1, 'pqxx']]], │ │ │ │ │ ['exec_29', ['exec', ['../group__transactions.html#a85f787b49568288912c3af52e29277dd', 1, 'pqxx::transaction_base::exec(std::stringstream const &query, std::string_view desc)'], │ │ │ │ │ ['../group__transactions.html#adae522da46299d4cd7c48128403e7c93', 1, 'pqxx::transaction_base::exec(std::string_view query, std::string_view desc)'], │ │ │ │ │ ['../group__transactions.html#ad453aadd28bda097281b15e1a7f6053f', 1, 'pqxx::transaction_base::exec(std::string_view query)'], │ │ │ │ │ ['../group__transactions.html#a0a8f8f741d218e84360a5d05e32d0358', 1, 'pqxx::transaction_base::exec(prepped statement)'], │ │ │ │ │ ['../group__transactions.html#ae64996a5e022cda4c9107fb70d05687f', 1, 'pqxx::transaction_base::exec(prepped statement, params const &parms)'] │ │ │ │ │ ]], │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_5.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -15,15 +15,15 @@ │ │ │ │ │ ['find_5fchar_8', ['find_char', ['../namespacepqxx_1_1internal.html#ac7f47e680c4aba12c395e1a854966a8e', 1, 'pqxx::internal']]], │ │ │ │ │ ['find_5fs_5fascii_5fchar_9', ['find_s_ascii_char', ['../namespacepqxx_1_1internal.html#a47911290f09c40ca080108ea376ffca9', 1, 'pqxx::internal']]], │ │ │ │ │ ['float_5ftraits_10', ['float_traits', ['../structpqxx_1_1internal_1_1float__traits.html', 1, 'pqxx::internal']]], │ │ │ │ │ ['float_5ftraits_3c_20double_20_3e_11', ['float_traits< double >', ['../structpqxx_1_1internal_1_1float__traits.html', 1, 'pqxx::internal']]], │ │ │ │ │ ['float_5ftraits_3c_20float_20_3e_12', ['float_traits< float >', ['../structpqxx_1_1internal_1_1float__traits.html', 1, 'pqxx::internal']]], │ │ │ │ │ ['float_5ftraits_3c_20long_20double_20_3e_13', ['float_traits< long double >', ['../structpqxx_1_1internal_1_1float__traits.html', 1, 'pqxx::internal']]], │ │ │ │ │ ['flush_14', ['flush', ['../classpqxx_1_1pipeline.html#a33a890c64efc37d76f3c649f145ff950', 1, 'pqxx::pipeline']]], │ │ │ │ │ - ['for_20my_20query_15', ['Is streaming right for my query?', ['../streams.html#autotoc_md24', 1, '']]], │ │ │ │ │ + ['for_20my_20query_15', ['Is streaming right for my query?', ['../streams.html#autotoc_md27', 1, '']]], │ │ │ │ │ ['for_5feach_16', ['for_each', ['../classpqxx_1_1result.html#a9302f9b61826f8b7b213f13b30453c0b', 1, 'pqxx::result']]], │ │ │ │ │ ['for_5fglyphs_17', ['for_glyphs', ['../namespacepqxx_1_1internal.html#a6d813d2723b73f1e674a9aa3229ab060', 1, 'pqxx::internal']]], │ │ │ │ │ ['for_5fquery_18', ['for_query', ['../group__transactions.html#aed05d9bf4a4d29e8f13ef92174489d86', 1, 'pqxx::transaction_base::for_query(zview query, CALLABLE &&func)'], │ │ │ │ │ ['../group__transactions.html#a2b72c8c8dec3714ba9bda0c4546e9c2f', 1, 'pqxx::transaction_base::for_query(zview query, CALLABLE &&func, params const &parms)'], │ │ │ │ │ ['../group__transactions.html#a08e4d94abccb520af509c2923d113c96', 1, 'pqxx::transaction_base::for_query(prepped statement, CALLABLE &&func, params const &parms={})'] │ │ │ │ │ ]], │ │ │ │ │ ['for_5fstream_19', ['for_stream', ['../group__transactions.html#aaf86f83eff8c7ca945c9921bddb75b14', 1, 'pqxx::transaction_base']]], │ │ │ │ │ @@ -33,32 +33,32 @@ │ │ │ │ │ ['forbidden_5fconversion_3c_20std_3a_3abyte_20_3e_23', ['forbidden_conversion< std::byte >', ['../structpqxx_1_1forbidden__conversion.html', 1, 'pqxx']]], │ │ │ │ │ ['forbidden_5fconversion_3c_20unsigned_20char_20_3e_24', ['forbidden_conversion< unsigned char >', ['../structpqxx_1_1forbidden__conversion.html', 1, 'pqxx']]], │ │ │ │ │ ['foreign_5fkey_5fviolation_25', ['foreign_key_violation', ['../group__exception.html#structpqxx_1_1foreign__key__violation', 1, 'pqxx']]], │ │ │ │ │ ['format_26', ['format', ['../namespacepqxx.html#afac7ada3a82bcd0e70131f9aede360ce', 1, 'pqxx']]], │ │ │ │ │ ['formats_27', ['formats', ['../structpqxx_1_1internal_1_1c__params.html#a9a6d51da90f51c90d3044ad9261616b8', 1, 'pqxx::internal::c_params']]], │ │ │ │ │ ['forward_5fonly_28', ['forward_only', ['../classpqxx_1_1cursor__base.html#ab2dbdc503c97b0200dd3eca6ae22f0a2af440221f717464c87f043899cc117cbf', 1, 'pqxx::cursor_base']]], │ │ │ │ │ ['framework_29', ['Transactor framework', ['../group__transactor.html', 1, '']]], │ │ │ │ │ - ['from_20a_20query_20em_30', ['Streaming data <em>from a query</em>', ['../streams.html#autotoc_md23', 1, '']]], │ │ │ │ │ + ['from_20a_20query_20em_30', ['Streaming data <em>from a query</em>', ['../streams.html#autotoc_md26', 1, '']]], │ │ │ │ │ ['from_5fbuf_31', ['from_buf', ['../classpqxx_1_1blob.html#ab1f3e5e083f3c69ecc32cc87aa4d8f90', 1, 'pqxx::blob']]], │ │ │ │ │ ['from_5ffile_32', ['from_file', ['../classpqxx_1_1blob.html#a41ea99b2f59cf0946986c14371915980', 1, 'pqxx::blob::from_file(dbtransaction &, char const path[])'], │ │ │ │ │ ['../classpqxx_1_1blob.html#acd468aa64cdd17c3dec34cb059721842', 1, 'pqxx::blob::from_file(dbtransaction &, char const path[], oid)'] │ │ │ │ │ ]], │ │ │ │ │ ['from_5fquery_33', ['from_query', ['../namespacepqxx.html#a31fff381823ee2bc5af1f47139b3b48c', 1, 'pqxx']]], │ │ │ │ │ ['from_5fquery_5ft_34', ['from_query_t', ['../namespacepqxx.html#structpqxx_1_1from__query__t', 1, 'pqxx']]], │ │ │ │ │ ['from_5fstring_35', ['from_string', ['../structpqxx_1_1string__traits.html#a09bce703d8e0234e84605038189381e8', 1, 'pqxx::string_traits::from_string()'], │ │ │ │ │ ['../structpqxx_1_1string__traits_3_01zview_01_4.html#a3b78a0d0dfbd5bf56c18d02e8a2ae184', 1, 'pqxx::string_traits< zview >::from_string()'], │ │ │ │ │ ['../structpqxx_1_1string__traits_3_01std_1_1string__view_01_4.html#a98acdd0a20f834be7670763ae0f93bcb', 1, 'pqxx::string_traits< std::string_view >::from_string()'], │ │ │ │ │ ['../namespacepqxx.html#ae3697fd4a0fc1fcdb40937e16e1ec878', 1, 'pqxx::from_string()'], │ │ │ │ │ ['../structpqxx_1_1string__traits_3_01char_0fN_0e_4.html#a45384953864d4858e8fa8549e4eeabf7', 1, 'pqxx::string_traits< char[N]>::from_string()'], │ │ │ │ │ ['../structpqxx_1_1string__traits_3_01char_01_5_01_4.html#af0ea80b9d8301a1a3211a1a5891521ea', 1, 'pqxx::string_traits< char * >::from_string()'], │ │ │ │ │ ['../structpqxx_1_1string__traits_3_01std_1_1variant_3_01T_8_8_8_01_4_01_4.html#a2672f0ae1c9d445d7c63929d8278b727', 1, 'pqxx::string_traits< std::variant< T... > >::from_string()'] │ │ │ │ │ ]], │ │ │ │ │ - ['from_5fstring_20tt_36', ['<tt>from_string</tt>', ['../datatypes.html#autotoc_md7', 1, '']]], │ │ │ │ │ + ['from_5fstring_20tt_36', ['<tt>from_string</tt>', ['../datatypes.html#autotoc_md10', 1, '']]], │ │ │ │ │ ['from_5fstring_3c_20std_3a_3anullptr_5ft_20_3e_37', ['from_string< std::nullptr_t >', ['../namespacepqxx.html#ac676a8d392370a92f0a2ef0f0bbf2043', 1, 'pqxx']]], │ │ │ │ │ ['from_5ftable_38', ['from_table', ['../namespacepqxx.html#a66648ed503eb162846c41247daa32660', 1, 'pqxx']]], │ │ │ │ │ ['from_5ftable_5ft_39', ['from_table_t', ['../namespacepqxx.html#structpqxx_1_1from__table__t', 1, 'pqxx']]], │ │ │ │ │ ['front_40', ['front', ['../classpqxx_1_1array.html#af0f6cbf8e3621dc46e59b9563ed436b1', 1, 'pqxx::array']]], │ │ │ │ │ ['functions_41', ['functions', ['../group__escaping-functions.html', 1, 'String-escaping functions'], │ │ │ │ │ - ['../escaping.html#autotoc_md14', 1, 'Using the esc functions'], │ │ │ │ │ + ['../escaping.html#autotoc_md17', 1, 'Using the esc functions'], │ │ │ │ │ ['../group__utility.html', 1, 'Utility functions'] │ │ │ │ │ ]] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_6.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,9 +1,9 @@ │ │ │ │ │ var searchData = [ │ │ │ │ │ - ['generating_20placeholders_0', ['Generating placeholders', ['../parameters.html#autotoc_md16', 1, '']]], │ │ │ │ │ + ['generating_20placeholders_0', ['Generating placeholders', ['../parameters.html#autotoc_md19', 1, '']]], │ │ │ │ │ ['generic_5finto_5fbuf_1', ['generic_into_buf', ['../namespacepqxx_1_1internal.html#ad36377dfe85994d97cb1aaa942100b6b', 1, 'pqxx::internal']]], │ │ │ │ │ ['get_2', ['get', ['../classpqxx_1_1placeholders.html#a4bdc5f0c544e544a62af6d2fc2309c58', 1, 'pqxx::placeholders::get()'], │ │ │ │ │ ['../classpqxx_1_1field.html#adb7ec4ecef586ebbab147b5b181dfff3', 1, 'pqxx::field::get()'], │ │ │ │ │ ['../group__escaping-functions.html#a22a65469db21930a72c82178f37b568a', 1, 'pqxx::binarystring::get()'] │ │ │ │ │ ]], │ │ │ │ │ ['get_5fchar_5ffinder_3', ['get_char_finder', ['../namespacepqxx_1_1internal.html#a16e6f54fdf88d18355e1a3a570fa175f', 1, 'pqxx::internal']]], │ │ │ │ │ ['get_5fclient_5fencoding_4', ['get_client_encoding', ['../classpqxx_1_1connection.html#a777daa7f80f3e55df9ee50e236f74653', 1, 'pqxx::connection']]], │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_8.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -3,47 +3,47 @@ │ │ │ │ │ ['icursorstream_5ficursor_5fiterator_1', ['icursorstream_icursor_iterator', ['../classpqxx_1_1internal_1_1gate_1_1icursorstream__icursor__iterator.html', 1, 'pqxx::internal::gate']]], │ │ │ │ │ ['id_2', ['id', ['../classpqxx_1_1largeobjectaccess.html#af210c3d0b39442a5ce9b3b1508d96c84', 1, 'pqxx::largeobjectaccess::id()'], │ │ │ │ │ ['../classpqxx_1_1largeobject.html#af210c3d0b39442a5ce9b3b1508d96c84', 1, 'pqxx::largeobject::id()'] │ │ │ │ │ ]], │ │ │ │ │ ['ignore_5funused_3', ['ignore_unused', ['../namespacepqxx.html#a9dd8124be2fccf97ece84ae958c175a0', 1, 'pqxx']]], │ │ │ │ │ ['in_5fdoubt_5ferror_4', ['in_doubt_error', ['../group__exception.html#structpqxx_1_1in__doubt__error', 1, 'pqxx']]], │ │ │ │ │ ['inclusive_5fbound_5', ['inclusive_bound', ['../classpqxx_1_1inclusive__bound.html', 1, 'pqxx']]], │ │ │ │ │ - ['injection_6', ['SQL injection', ['../escaping.html#autotoc_md13', 1, '']]], │ │ │ │ │ + ['injection_6', ['SQL injection', ['../escaping.html#autotoc_md16', 1, '']]], │ │ │ │ │ ['insert_7', ['insert', ['../classpqxx_1_1pipeline.html#a808f4fc39c77e490171d54a5554b337d', 1, 'pqxx::pipeline']]], │ │ │ │ │ ['inserted_5foid_8', ['inserted_oid', ['../classpqxx_1_1result.html#a5094a7be5f02f0f4c641fbd5ccb1a4da', 1, 'pqxx::result']]], │ │ │ │ │ ['insufficient_5fprivilege_9', ['insufficient_privilege', ['../group__exception.html#structpqxx_1_1insufficient__privilege', 1, 'pqxx']]], │ │ │ │ │ ['insufficient_5fresources_10', ['insufficient_resources', ['../group__exception.html#structpqxx_1_1insufficient__resources', 1, 'pqxx']]], │ │ │ │ │ ['integral_5ftraits_11', ['integral_traits', ['../structpqxx_1_1internal_1_1integral__traits.html', 1, 'pqxx::internal']]], │ │ │ │ │ ['integral_5ftraits_3c_20int_20_3e_12', ['integral_traits< int >', ['../structpqxx_1_1internal_1_1integral__traits.html', 1, 'pqxx::internal']]], │ │ │ │ │ ['integral_5ftraits_3c_20long_20_3e_13', ['integral_traits< long >', ['../structpqxx_1_1internal_1_1integral__traits.html', 1, 'pqxx::internal']]], │ │ │ │ │ ['integral_5ftraits_3c_20long_20long_20_3e_14', ['integral_traits< long long >', ['../structpqxx_1_1internal_1_1integral__traits.html', 1, 'pqxx::internal']]], │ │ │ │ │ ['integral_5ftraits_3c_20short_20_3e_15', ['integral_traits< short >', ['../structpqxx_1_1internal_1_1integral__traits.html', 1, 'pqxx::internal']]], │ │ │ │ │ ['integral_5ftraits_3c_20unsigned_20_3e_16', ['integral_traits< unsigned >', ['../structpqxx_1_1internal_1_1integral__traits.html', 1, 'pqxx::internal']]], │ │ │ │ │ ['integral_5ftraits_3c_20unsigned_20long_20_3e_17', ['integral_traits< unsigned long >', ['../structpqxx_1_1internal_1_1integral__traits.html', 1, 'pqxx::internal']]], │ │ │ │ │ ['integral_5ftraits_3c_20unsigned_20long_20long_20_3e_18', ['integral_traits< unsigned long long >', ['../structpqxx_1_1internal_1_1integral__traits.html', 1, 'pqxx::internal']]], │ │ │ │ │ ['integral_5ftraits_3c_20unsigned_20short_20_3e_19', ['integral_traits< unsigned short >', ['../structpqxx_1_1internal_1_1integral__traits.html', 1, 'pqxx::internal']]], │ │ │ │ │ ['integrity_5fconstraint_5fviolation_20', ['integrity_constraint_violation', ['../group__exception.html#structpqxx_1_1integrity__constraint__violation', 1, 'pqxx']]], │ │ │ │ │ - ['interlude_3a_20null_20values_21', ['Interlude: null values', ['../streams.html#autotoc_md22', 1, '']]], │ │ │ │ │ + ['interlude_3a_20null_20values_21', ['Interlude: null values', ['../streams.html#autotoc_md25', 1, '']]], │ │ │ │ │ ['internal_5ferror_22', ['internal_error', ['../group__exception.html#structpqxx_1_1internal__error', 1, 'pqxx']]], │ │ │ │ │ - ['into_20a_20table_20em_23', ['Streaming data <em>into a table</em>', ['../streams.html#autotoc_md25', 1, '']]], │ │ │ │ │ + ['into_20a_20table_20em_23', ['Streaming data <em>into a table</em>', ['../streams.html#autotoc_md28', 1, '']]], │ │ │ │ │ ['into_5fbuf_24', ['into_buf', ['../structpqxx_1_1string__traits.html#ad0fa1a3d75ba56a58c39822d25c14a0c', 1, 'pqxx::string_traits']]], │ │ │ │ │ - ['into_5fbuf_20tt_25', ['<tt>into_buf</tt>', ['../datatypes.html#autotoc_md9', 1, '']]], │ │ │ │ │ + ['into_5fbuf_20tt_25', ['<tt>into_buf</tt>', ['../datatypes.html#autotoc_md12', 1, '']]], │ │ │ │ │ ['invalid_5fcursor_5fname_26', ['invalid_cursor_name', ['../group__exception.html#structpqxx_1_1invalid__cursor__name', 1, 'pqxx']]], │ │ │ │ │ ['invalid_5fcursor_5fstate_27', ['invalid_cursor_state', ['../group__exception.html#structpqxx_1_1invalid__cursor__state', 1, 'pqxx']]], │ │ │ │ │ ['invalid_5fsql_5fstatement_5fname_28', ['invalid_sql_statement_name', ['../group__exception.html#structpqxx_1_1invalid__sql__statement__name', 1, 'pqxx']]], │ │ │ │ │ - ['is_20streaming_20right_20for_20my_20query_29', ['Is streaming right for my query?', ['../streams.html#autotoc_md24', 1, '']]], │ │ │ │ │ + ['is_20streaming_20right_20for_20my_20query_29', ['Is streaming right for my query?', ['../streams.html#autotoc_md27', 1, '']]], │ │ │ │ │ ['is_5fdigit_30', ['is_digit', ['../namespacepqxx_1_1internal.html#ace1c90d8dab0dafc4764c89ff09fa938', 1, 'pqxx::internal']]], │ │ │ │ │ ['is_5fexclusive_31', ['is_exclusive', ['../classpqxx_1_1range__bound.html#a5e36faad60586213187bbe1735f00c5b', 1, 'pqxx::range_bound']]], │ │ │ │ │ ['is_5ffinished_32', ['is_finished', ['../classpqxx_1_1pipeline.html#adb318eea9147fb82d67c43a430722283', 1, 'pqxx::pipeline']]], │ │ │ │ │ ['is_5finclusive_33', ['is_inclusive', ['../classpqxx_1_1range__bound.html#abe993384f178fe7ac1143e88a3dbcaeb', 1, 'pqxx::range_bound']]], │ │ │ │ │ ['is_5flimited_34', ['is_limited', ['../classpqxx_1_1range__bound.html#a62434321bfbc5f66bf3921ea2fb31274', 1, 'pqxx::range_bound']]], │ │ │ │ │ ['is_5fnull_35', ['is_null', ['../structpqxx_1_1no__null.html#ab53a311556c321a9dd10229b5b64773b', 1, 'pqxx::no_null::is_null()'], │ │ │ │ │ ['../structpqxx_1_1nullness.html#a309fcad467f815a9fbccbea0c2a6608a', 1, 'pqxx::nullness::is_null()'], │ │ │ │ │ ['../classpqxx_1_1field.html#ad3f84cc67637ba99b7128db75603d03c', 1, 'pqxx::field::is_null()'] │ │ │ │ │ ]], │ │ │ │ │ ['is_5fopen_36', ['is_open', ['../classpqxx_1_1connection.html#a1e401dd0dbd1be80176a691a864f652b', 1, 'pqxx::connection']]], │ │ │ │ │ - ['is_5funquoted_5fsafe_20tt_37', ['Optional: Specialise <tt>is_unquoted_safe</tt>', ['../datatypes.html#autotoc_md11', 1, '']]], │ │ │ │ │ + ['is_5funquoted_5fsafe_20tt_37', ['Optional: Specialise <tt>is_unquoted_safe</tt>', ['../datatypes.html#autotoc_md14', 1, '']]], │ │ │ │ │ ['isolation_5flevel_38', ['isolation_level', ['../namespacepqxx.html#a8f05a60f9e1f7dc4e4af5dce6b987c8c', 1, 'pqxx']]], │ │ │ │ │ ['iter_39', ['iter', ['../classpqxx_1_1stream__from.html#acb595a8190351f2a8b594518351c40f3', 1, 'pqxx::stream_from::iter()'], │ │ │ │ │ ['../classpqxx_1_1result.html#afb672c73ca193aaf2fc5ba4d5c8a96f8', 1, 'pqxx::result::iter()'] │ │ │ │ │ ]] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_b.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -4,11 +4,11 @@ │ │ │ │ │ ['m_5fend_2', ['m_end', ['../classpqxx_1_1row.html#a0ec7d11b9721ab7bb54ec5df113ab8f5', 1, 'pqxx::row']]], │ │ │ │ │ ['m_5findex_3', ['m_index', ['../classpqxx_1_1row.html#a859f508b95f424531247427189a529ef', 1, 'pqxx::row']]], │ │ │ │ │ ['m_5fresult_4', ['m_result', ['../classpqxx_1_1row.html#a83a21b69ee9c581fc449d24dc33d8e65', 1, 'pqxx::row']]], │ │ │ │ │ ['make_5fc_5fparams_5', ['make_c_params', ['../classpqxx_1_1params.html#a6ecf59a6ac483fe23e051ae654abc2b0', 1, 'pqxx::params']]], │ │ │ │ │ ['map_5fascii_5fsearch_5fgroup_6', ['map_ascii_search_group', ['../namespacepqxx_1_1internal.html#ae26a85861af19d77bcc12ae448531d32', 1, 'pqxx::internal']]], │ │ │ │ │ ['max_5fparams_7', ['max_params', ['../classpqxx_1_1placeholders.html#a066068da0d7ca3d0b38ee47ce0098843', 1, 'pqxx::placeholders']]], │ │ │ │ │ ['member_5fargs_5ff_8', ['member_args_f', ['../namespacepqxx_1_1internal.html#a70ec299b53c60d248d0766cc11faacf1', 1, 'pqxx::internal']]], │ │ │ │ │ - ['metadata_9', ['Results with metadata', ['../accessing-results.html#autotoc_md32', 1, '']]], │ │ │ │ │ - ['multiple_20parameters_10', ['Multiple parameters', ['../parameters.html#autotoc_md15', 1, '']]], │ │ │ │ │ - ['my_20query_11', ['Is streaming right for my query?', ['../streams.html#autotoc_md24', 1, '']]] │ │ │ │ │ + ['metadata_9', ['Results with metadata', ['../accessing-results.html#autotoc_md2', 1, '']]], │ │ │ │ │ + ['multiple_20parameters_10', ['Multiple parameters', ['../parameters.html#autotoc_md18', 1, '']]], │ │ │ │ │ + ['my_20query_11', ['Is streaming right for my query?', ['../streams.html#autotoc_md27', 1, '']]] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_c.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -2,15 +2,15 @@ │ │ │ │ │ ['name_0', ['name', ['../classpqxx_1_1cursor__base.html#a580405381178880d7804180c0c396fe5', 1, 'pqxx::cursor_base::name()'], │ │ │ │ │ ['../classpqxx_1_1stateless__cursor.html#a0be6e4435c96296ab1f91f4769235dae', 1, 'pqxx::stateless_cursor::name()'], │ │ │ │ │ ['../classpqxx_1_1field.html#accb1b29590adaf1c265279fc410b2e59', 1, 'pqxx::field::name()'], │ │ │ │ │ ['../group__transactions.html#ae59455e1e8da50f0cb5901c1f72ff66e', 1, 'pqxx::transaction_base::name()'], │ │ │ │ │ ['../classpqxx_1_1transaction__focus.html#a4ccffff2688e9e7757acc385be1d781c', 1, 'pqxx::transaction_focus::name()'] │ │ │ │ │ ]], │ │ │ │ │ ['name_5fencoding_1', ['name_encoding', ['../namespacepqxx_1_1internal.html#a51e0c4e1a45c85a3b625dc3d764684f5', 1, 'pqxx::internal']]], │ │ │ │ │ - ['new_20type_2', ['Supporting a new type', ['../datatypes.html#autotoc_md2', 1, '']]], │ │ │ │ │ + ['new_20type_2', ['Supporting a new type', ['../datatypes.html#autotoc_md5', 1, '']]], │ │ │ │ │ ['next_3', ['next', ['../classpqxx_1_1cursor__base.html#a8084649c4f6be54a3c688908c1b9edf9', 1, 'pqxx::cursor_base::next()'], │ │ │ │ │ ['../classpqxx_1_1placeholders.html#aef09cd2fcb858917f33752a85e063bde', 1, 'pqxx::placeholders::next()'] │ │ │ │ │ ]], │ │ │ │ │ ['no_5fbound_4', ['no_bound', ['../structpqxx_1_1no__bound.html', 1, 'pqxx']]], │ │ │ │ │ ['no_5fnull_5', ['no_null', ['../structpqxx_1_1no__null.html', 1, 'pqxx']]], │ │ │ │ │ ['no_5fnull_3c_20binarystring_20_3e_6', ['no_null< binarystring >', ['../structpqxx_1_1no__null.html', 1, 'pqxx']]], │ │ │ │ │ ['no_5fnull_3c_20bytes_20_3e_7', ['no_null< bytes >', ['../structpqxx_1_1no__null.html', 1, 'pqxx']]], │ │ │ │ │ @@ -27,32 +27,32 @@ │ │ │ │ │ ['no_5fnull_3c_20zview_20_3e_18', ['no_null< zview >', ['../structpqxx_1_1no__null.html', 1, 'pqxx']]], │ │ │ │ │ ['no_5frows_19', ['no_rows', ['../classpqxx_1_1result.html#aee29dae44071175c8c6dd4a046a060c5', 1, 'pqxx::result']]], │ │ │ │ │ ['nontransaction_20', ['nontransaction', ['../group__transactions.html#classpqxx_1_1nontransaction', 1, 'pqxx::nontransaction'], │ │ │ │ │ ['../group__transactions.html#ab9cf41ee092dff1c6f1e07df23ba0cfd', 1, 'pqxx::nontransaction::nontransaction()'] │ │ │ │ │ ]], │ │ │ │ │ ['not_5feof_21', ['not_eof', ['../structpqxx_1_1byte__char__traits.html#a7c89d44e821a11f8336b70dc7891d7ac', 1, 'pqxx::byte_char_traits']]], │ │ │ │ │ ['not_5fnull_5fviolation_22', ['not_null_violation', ['../group__exception.html#structpqxx_1_1not__null__violation', 1, 'pqxx']]], │ │ │ │ │ - ['note_23', ['Performance note', ['../prepared.html#autotoc_md20', 1, '']]], │ │ │ │ │ + ['note_23', ['Performance note', ['../prepared.html#autotoc_md23', 1, '']]], │ │ │ │ │ ['nothing_24', ['nothing', ['../namespacepqxx.html#adabe80e8385e85d663acc6e44332070da867e5843857acbeb150fcaf025825a6f', 1, 'pqxx']]], │ │ │ │ │ ['notice_5fwaiters_25', ['notice_waiters', ['../structpqxx_1_1internal_1_1notice__waiters.html', 1, 'pqxx::internal']]], │ │ │ │ │ ['notification_26', ['notification', ['../namespacepqxx.html#structpqxx_1_1notification', 1, 'pqxx']]], │ │ │ │ │ ['notification_5fhandler_27', ['notification_handler', ['../classpqxx_1_1connection.html#a5c68dd44c2a9e64eb2022623659ebc09', 1, 'pqxx::connection']]], │ │ │ │ │ ['notification_5freceiver_28', ['notification_receiver', ['../classpqxx_1_1notification__receiver.html#a44ffe1ed8ec8020f4106ef8427e09d17', 1, 'pqxx::notification_receiver::notification_receiver(notification_receiver const &)=delete'], │ │ │ │ │ ['../classpqxx_1_1notification__receiver.html#a4779f6b712bf7a1d5ab3253b8d274db9', 1, 'pqxx::notification_receiver::notification_receiver(connection &cx, std::string_view channel)'], │ │ │ │ │ ['../classpqxx_1_1notification__receiver.html', 1, 'pqxx::notification_receiver'] │ │ │ │ │ ]], │ │ │ │ │ ['notifications_20and_20receivers_29', ['Notifications and Receivers', ['../group__notification.html', 1, '']]], │ │ │ │ │ ['notify_30', ['notify', ['../group__transactions.html#aff9f3e6d1e0479d8c6774db391bf9b8a', 1, 'pqxx::transaction_base']]], │ │ │ │ │ ['null_31', ['null', ['../structpqxx_1_1nullness.html#a475f5e490aabd4934aa63a621ecfd0ab', 1, 'pqxx::nullness::null()'], │ │ │ │ │ ['../structpqxx_1_1nullness_3_01std_1_1variant_3_01T_8_8_8_01_4_01_4.html#a62b23c197cb393e146d9720ed4aed004', 1, 'pqxx::nullness< std::variant< T... > >::null()'] │ │ │ │ │ ]], │ │ │ │ │ - ['null_20values_32', ['Interlude: null values', ['../streams.html#autotoc_md22', 1, '']]], │ │ │ │ │ + ['null_20values_32', ['Interlude: null values', ['../streams.html#autotoc_md25', 1, '']]], │ │ │ │ │ ['null_5fvalue_33', ['null_value', ['../classpqxx_1_1array__parser.html#a039577d83d313a6daf35fd7c273e189ea9e374dadbd88854fd5b2631a6b83a295', 1, 'pqxx::array_parser']]], │ │ │ │ │ ['nullness_34', ['nullness', ['../structpqxx_1_1nullness.html', 1, 'pqxx']]], │ │ │ │ │ - ['nullness_20tt_35', ['Specialise <tt>nullness</tt>', ['../datatypes.html#autotoc_md5', 1, '']]], │ │ │ │ │ + ['nullness_20tt_35', ['Specialise <tt>nullness</tt>', ['../datatypes.html#autotoc_md8', 1, '']]], │ │ │ │ │ ['nullness_3c_20binarystring_20_3e_36', ['nullness< binarystring >', ['../structpqxx_1_1nullness_3_01binarystring_01_4.html', 1, 'pqxx']]], │ │ │ │ │ ['nullness_3c_20bytes_20_3e_37', ['nullness< bytes >', ['../structpqxx_1_1nullness_3_01bytes_01_4.html', 1, 'pqxx']]], │ │ │ │ │ ['nullness_3c_20bytes_5fview_20_3e_38', ['nullness< bytes_view >', ['../structpqxx_1_1nullness_3_01bytes__view_01_4.html', 1, 'pqxx']]], │ │ │ │ │ ['nullness_3c_20char_20_2a_20_3e_39', ['nullness< char * >', ['../structpqxx_1_1nullness_3_01char_01_5_01_4.html', 1, 'pqxx']]], │ │ │ │ │ ['nullness_3c_20char_20const_20_2a_20_3e_40', ['nullness< char const * >', ['../structpqxx_1_1nullness_3_01char_01const_01_5_01_4.html', 1, 'pqxx']]], │ │ │ │ │ ['nullness_3c_20char_5bn_5d_3e_41', ['nullness< char[N]>', ['../structpqxx_1_1nullness_3_01char_0fN_0e_4.html', 1, 'pqxx']]], │ │ │ │ │ ['nullness_3c_20enum_2c_20std_3a_3aenable_5fif_5ft_3c_20std_3a_3ais_5fenum_5fv_3c_20enum_20_3e_20_3e_20_3e_42', ['nullness< ENUM, std::enable_if_t< std::is_enum_v< ENUM > > >', ['../structpqxx_1_1nullness_3_01ENUM_00_01std_1_1enable__if__t_3_01std_1_1is__enum__v_3_01ENUM_01_4_01_4_01_4.html', 1, 'pqxx']]], │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_d.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,9 +1,9 @@ │ │ │ │ │ var searchData = [ │ │ │ │ │ - ['of_20data_0', ['Querying rows of data', ['../accessing-results.html#autotoc_md30', 1, '']]], │ │ │ │ │ + ['of_20data_0', ['Querying rows of data', ['../accessing-results.html#autotoc_md0', 1, '']]], │ │ │ │ │ ['oid_1', ['oid', ['../namespacepqxx.html#ac9eb697318d27a5b023609e0160f1ade', 1, 'pqxx']]], │ │ │ │ │ ['oid_5fnone_2', ['oid_none', ['../namespacepqxx.html#aea8d8e21558dad5b03ac2f73910c93e1', 1, 'pqxx']]], │ │ │ │ │ ['one_5ffield_3', ['one_field', ['../classpqxx_1_1result.html#a2caa168a1984a277b29d70ccbbdf50c4', 1, 'pqxx::result']]], │ │ │ │ │ ['one_5frow_4', ['one_row', ['../classpqxx_1_1result.html#a0c06b4a276d79960cfdbbfb1be070b48', 1, 'pqxx::result']]], │ │ │ │ │ ['oops_5fforbidden_5fconversion_5', ['oops_forbidden_conversion', ['../namespacepqxx.html#a807bfd03b5fb6cf1bbcd9d728f2dd4e0', 1, 'pqxx']]], │ │ │ │ │ ['open_5fr_6', ['open_r', ['../classpqxx_1_1blob.html#a0d4a50c0d8862f98ce728647987f6d51', 1, 'pqxx::blob']]], │ │ │ │ │ ['openmode_7', ['openmode', ['../classpqxx_1_1largeobjectaccess.html#a6b09598014eca3c4c4b8a0c1495185d3', 1, 'pqxx::largeobjectaccess']]], │ │ │ │ │ @@ -11,53 +11,53 @@ │ │ │ │ │ ['operator_20bool_9', ['operator bool', ['../classpqxx_1_1stream__from.html#a049c94dcc710918f0b5c7416b638aefa', 1, 'pqxx::stream_from::operator bool()'], │ │ │ │ │ ['../classpqxx_1_1stream__to.html#a46f5520a97cc4eecbc75e4fbbfc2e9e3', 1, 'pqxx::stream_to::operator bool()'] │ │ │ │ │ ]], │ │ │ │ │ ['operator_20range_3c_20dest_20_3e_10', ['operator range< DEST >', ['../classpqxx_1_1range.html#a9fd52675604651358ccc941bcf0c63fc', 1, 'pqxx::range']]], │ │ │ │ │ ['operator_21_11', ['operator!', ['../classpqxx_1_1stream__to.html#a12b525e57012cb5c2ba3481c959af914', 1, 'pqxx::stream_to::operator!()'], │ │ │ │ │ ['../classpqxx_1_1stream__from.html#afdb9ffc4e6baa48bd6f2169cba7020d0', 1, 'pqxx::stream_from::operator!()'] │ │ │ │ │ ]], │ │ │ │ │ - ['operator_21_3d_12', ['operator!=', ['../classpqxx_1_1internal_1_1stream__from__input__iterator.html#a30bf5388b274d3e8b27568a03f061762', 1, 'pqxx::internal::stream_from_input_iterator::operator!=()'], │ │ │ │ │ + ['operator_21_3d_12', ['operator!=', ['../classpqxx_1_1field.html#a768ec9ffee118b5eb5a4c371afbacc5a', 1, 'pqxx::field::operator!=()'], │ │ │ │ │ + ['../classpqxx_1_1internal_1_1stream__from__input__iterator.html#a30bf5388b274d3e8b27568a03f061762', 1, 'pqxx::internal::stream_from_input_iterator::operator!=()'], │ │ │ │ │ ['../classpqxx_1_1internal_1_1stream__query__input__iterator.html#a207326fe0c7f51eccfa61be42d20188e', 1, 'pqxx::internal::stream_query_input_iterator::operator!=()'], │ │ │ │ │ ['../classpqxx_1_1largeobject.html#ad326bef1920744c3d450406f43dbc6b5', 1, 'pqxx::largeobject::operator!=()'], │ │ │ │ │ ['../classpqxx_1_1result.html#a4e047a3746e1e9f37efd0cedfc4a891b', 1, 'pqxx::result::operator!=()'], │ │ │ │ │ - ['../classpqxx_1_1largeobjectaccess.html#ad326bef1920744c3d450406f43dbc6b5', 1, 'pqxx::largeobjectaccess::operator!=()'], │ │ │ │ │ - ['../classpqxx_1_1field.html#a768ec9ffee118b5eb5a4c371afbacc5a', 1, 'pqxx::field::operator!=()'] │ │ │ │ │ + ['../classpqxx_1_1largeobjectaccess.html#ad326bef1920744c3d450406f43dbc6b5', 1, 'pqxx::largeobjectaccess::operator!=()'] │ │ │ │ │ ]], │ │ │ │ │ ['operator_22_22_5fzv_13', ['operator""_zv', ['../namespacepqxx.html#ab7084d1a68918eb90a59bb75cc1b78e6', 1, 'pqxx']]], │ │ │ │ │ ['operator_26_14', ['operator&', ['../classpqxx_1_1range.html#a2e0b08f5564191f8c0bdc9fbdb273d62', 1, 'pqxx::range']]], │ │ │ │ │ - ['operator_28_29_15', ['operator()', ['../classpqxx_1_1notification__receiver.html#abb6fd7dd38319fc35e354e23d7f337d0', 1, 'pqxx::notification_receiver::operator()()'], │ │ │ │ │ + ['operator_28_29_15', ['operator()', ['../classpqxx_1_1errorhandler.html#a8404c336eaefab488ab326cbcb704993', 1, 'pqxx::errorhandler::operator()()'], │ │ │ │ │ ['../classpqxx_1_1quiet__errorhandler.html#a051f8a9a1019974daffc47c75addc46e', 1, 'pqxx::quiet_errorhandler::operator()()'], │ │ │ │ │ - ['../classpqxx_1_1errorhandler.html#a8404c336eaefab488ab326cbcb704993', 1, 'pqxx::errorhandler::operator()()'] │ │ │ │ │ + ['../classpqxx_1_1notification__receiver.html#abb6fd7dd38319fc35e354e23d7f337d0', 1, 'pqxx::notification_receiver::operator()()'] │ │ │ │ │ ]], │ │ │ │ │ - ['operator_2a_16', ['operator*', ['../classpqxx_1_1internal_1_1stream__query__input__iterator.html#a9c57abc31dc9b272b395c6b2c216ad7a', 1, 'pqxx::internal::stream_query_input_iterator::operator*()'], │ │ │ │ │ - ['../classpqxx_1_1const__reverse__result__iterator.html#ae87d3164c4be3ececdde872582aacc61', 1, 'pqxx::const_reverse_result_iterator::operator*()'], │ │ │ │ │ + ['operator_2a_16', ['operator*', ['../classpqxx_1_1const__reverse__result__iterator.html#ae87d3164c4be3ececdde872582aacc61', 1, 'pqxx::const_reverse_result_iterator::operator*()'], │ │ │ │ │ + ['../classpqxx_1_1internal_1_1stream__query__input__iterator.html#a9c57abc31dc9b272b395c6b2c216ad7a', 1, 'pqxx::internal::stream_query_input_iterator::operator*()'], │ │ │ │ │ ['../classpqxx_1_1const__result__iterator.html#ae87d3164c4be3ececdde872582aacc61', 1, 'pqxx::const_result_iterator::operator*()'] │ │ │ │ │ ]], │ │ │ │ │ - ['operator_2b_2b_17', ['operator++', ['../classpqxx_1_1internal_1_1stream__query__input__iterator.html#a0c261e07d71c54c3df1873bd7682f141', 1, 'pqxx::internal::stream_query_input_iterator::operator++() &'], │ │ │ │ │ - ['../classpqxx_1_1internal_1_1stream__query__input__iterator.html#abc1cf24fa7ceff09abe835eeeffdb4e2', 1, 'pqxx::internal::stream_query_input_iterator::operator++(int)'] │ │ │ │ │ + ['operator_2b_2b_17', ['operator++', ['../classpqxx_1_1internal_1_1stream__query__input__iterator.html#abc1cf24fa7ceff09abe835eeeffdb4e2', 1, 'pqxx::internal::stream_query_input_iterator::operator++(int)'], │ │ │ │ │ + ['../classpqxx_1_1internal_1_1stream__query__input__iterator.html#a0c261e07d71c54c3df1873bd7682f141', 1, 'pqxx::internal::stream_query_input_iterator::operator++() &'] │ │ │ │ │ ]], │ │ │ │ │ - ['operator_2d_18', ['operator-', ['../classpqxx_1_1const__reverse__result__iterator.html#a4ce5bf0280d6dce47212969b614c483a', 1, 'pqxx::const_reverse_result_iterator::operator-(difference_type) const'], │ │ │ │ │ - ['../classpqxx_1_1const__reverse__result__iterator.html#ab3a7ba13b137fbd1b12748b788c7b3d7', 1, 'pqxx::const_reverse_result_iterator::operator-(const_result_iterator const &) const'] │ │ │ │ │ + ['operator_2d_18', ['operator-', ['../classpqxx_1_1const__reverse__result__iterator.html#ab3a7ba13b137fbd1b12748b788c7b3d7', 1, 'pqxx::const_reverse_result_iterator::operator-(const_result_iterator const &) const'], │ │ │ │ │ + ['../classpqxx_1_1const__reverse__result__iterator.html#a4ce5bf0280d6dce47212969b614c483a', 1, 'pqxx::const_reverse_result_iterator::operator-(difference_type) const'] │ │ │ │ │ ]], │ │ │ │ │ ['operator_2d_3e_19', ['operator->', ['../classpqxx_1_1const__result__iterator.html#a858d47eebdb1b6055a9f75c32d19d4d2', 1, 'pqxx::const_result_iterator']]], │ │ │ │ │ - ['operator_3c_20', ['operator<', ['../classpqxx_1_1largeobjectaccess.html#a90efd57a423686ee47c4dbb6b5c3b187', 1, 'pqxx::largeobjectaccess::operator<()'], │ │ │ │ │ - ['../classpqxx_1_1largeobject.html#a90efd57a423686ee47c4dbb6b5c3b187', 1, 'pqxx::largeobject::operator<()'] │ │ │ │ │ + ['operator_3c_20', ['operator<', ['../classpqxx_1_1largeobject.html#a90efd57a423686ee47c4dbb6b5c3b187', 1, 'pqxx::largeobject::operator<()'], │ │ │ │ │ + ['../classpqxx_1_1largeobjectaccess.html#a90efd57a423686ee47c4dbb6b5c3b187', 1, 'pqxx::largeobjectaccess::operator<()'] │ │ │ │ │ ]], │ │ │ │ │ - ['operator_3c_3c_21', ['operator<<', ['../classpqxx_1_1stream__to.html#aa42e3e2ce5942b5d106356fe196a00a0', 1, 'pqxx::stream_to::operator<<()'], │ │ │ │ │ - ['../namespacepqxx.html#a2dbd9e7b5cda93feff6cde1629e73ff2', 1, 'pqxx::operator<<()'], │ │ │ │ │ - ['../classpqxx_1_1stream__to.html#ac25d66567d17ddd648abe02c4583d981', 1, 'pqxx::stream_to::operator<<()'] │ │ │ │ │ + ['operator_3c_3c_21', ['operator<<', ['../classpqxx_1_1stream__to.html#ac25d66567d17ddd648abe02c4583d981', 1, 'pqxx::stream_to::operator<<(Row const &row)'], │ │ │ │ │ + ['../classpqxx_1_1stream__to.html#aa42e3e2ce5942b5d106356fe196a00a0', 1, 'pqxx::stream_to::operator<<(stream_from &)'], │ │ │ │ │ + ['../namespacepqxx.html#a2dbd9e7b5cda93feff6cde1629e73ff2', 1, 'pqxx::operator<<()'] │ │ │ │ │ ]], │ │ │ │ │ ['operator_3c_3d_22', ['operator<=', ['../classpqxx_1_1largeobject.html#a4a7766ea88d7e0aa68ed78e0f4bb8cab', 1, 'pqxx::largeobject::operator<=()'], │ │ │ │ │ ['../classpqxx_1_1largeobjectaccess.html#a4a7766ea88d7e0aa68ed78e0f4bb8cab', 1, 'pqxx::largeobjectaccess::operator<=()'] │ │ │ │ │ ]], │ │ │ │ │ - ['operator_3d_23', ['operator=', ['../classpqxx_1_1notification__receiver.html#afcf701e264edd9a14513765f542b446d', 1, 'pqxx::notification_receiver::operator=()'], │ │ │ │ │ + ['operator_3d_23', ['operator=', ['../classpqxx_1_1blob.html#a95c07a00765b77f9835ca869fe43287a', 1, 'pqxx::blob::operator=()'], │ │ │ │ │ ['../classpqxx_1_1result.html#a399cde6713d4b415e229d67bfba4eccd', 1, 'pqxx::result::operator=(result &&rhs) noexcept=default'], │ │ │ │ │ ['../classpqxx_1_1result.html#ada6d82fe35f72cb45623fba4f8066279', 1, 'pqxx::result::operator=(result const &rhs) noexcept=default'], │ │ │ │ │ - ['../classpqxx_1_1connection.html#a73e86c75f2d23788c83ce931b74ec108', 1, 'pqxx::connection::operator=()'], │ │ │ │ │ - ['../classpqxx_1_1blob.html#a95c07a00765b77f9835ca869fe43287a', 1, 'pqxx::blob::operator=()'] │ │ │ │ │ + ['../classpqxx_1_1notification__receiver.html#afcf701e264edd9a14513765f542b446d', 1, 'pqxx::notification_receiver::operator=()'], │ │ │ │ │ + ['../classpqxx_1_1connection.html#a73e86c75f2d23788c83ce931b74ec108', 1, 'pqxx::connection::operator=()'] │ │ │ │ │ ]], │ │ │ │ │ ['operator_3d_3d_24', ['operator==', ['../classpqxx_1_1internal_1_1stream__query__input__iterator.html#a27cb5d24969b0b2102987fb8f3ec3b62', 1, 'pqxx::internal::stream_query_input_iterator::operator==()'], │ │ │ │ │ ['../classpqxx_1_1internal_1_1result__iter.html#ace9b554271a8b57ab7230da00ef319ea', 1, 'pqxx::internal::result_iter::operator==()'], │ │ │ │ │ ['../classpqxx_1_1field.html#a0724bd55b4cccf26db6960ef27851fe8', 1, 'pqxx::field::operator==()'], │ │ │ │ │ ['../classpqxx_1_1internal_1_1stream__from__input__iterator.html#a23573499bd91d017c08dd9438bc49ad4', 1, 'pqxx::internal::stream_from_input_iterator::operator==()'], │ │ │ │ │ ['../classpqxx_1_1largeobjectaccess.html#a00f0df981995f7ca9991ba7162bdaa16', 1, 'pqxx::largeobjectaccess::operator==()'], │ │ │ │ │ ['../classpqxx_1_1result.html#a47fef290e0e6db165a4d73b52874fd1c', 1, 'pqxx::result::operator==()'], │ │ │ │ │ @@ -74,13 +74,13 @@ │ │ │ │ │ ['../classpqxx_1_1stream__from.html#a0ea468c0d02f2a2c9c2c7ff41dbece3c', 1, 'pqxx::stream_from::operator>>(std::variant< Vs... > &)=delete'] │ │ │ │ │ ]], │ │ │ │ │ ['operator_5b_5d_28', ['operator[]', ['../classpqxx_1_1result.html#a501bfb79335ea4c51bc55f9c0aa6c75f', 1, 'pqxx::result::operator[]()'], │ │ │ │ │ ['../classpqxx_1_1row.html#aee26781d8c0000bdc1d80c1624b17c81', 1, 'pqxx::row::operator[]()'], │ │ │ │ │ ['../classpqxx_1_1array.html#a36d27b1f7e366a07944115a382aa4087', 1, 'pqxx::array::operator[]()'] │ │ │ │ │ ]], │ │ │ │ │ ['opt_5frow_29', ['opt_row', ['../classpqxx_1_1result.html#a5d0d4d8714ea814f1d80d11578976098', 1, 'pqxx::result']]], │ │ │ │ │ - ['optional_3a_20specialise_20tt_20is_5funquoted_5fsafe_20tt_30', ['Optional: Specialise <tt>is_unquoted_safe</tt>', ['../datatypes.html#autotoc_md11', 1, '']]], │ │ │ │ │ - ['optional_3a_20specialise_20tt_20param_5fformat_20tt_31', ['Optional: Specialise <tt>param_format</tt>', ['../datatypes.html#autotoc_md12', 1, '']]], │ │ │ │ │ + ['optional_3a_20specialise_20tt_20is_5funquoted_5fsafe_20tt_30', ['Optional: Specialise <tt>is_unquoted_safe</tt>', ['../datatypes.html#autotoc_md14', 1, '']]], │ │ │ │ │ + ['optional_3a_20specialise_20tt_20param_5fformat_20tt_31', ['Optional: Specialise <tt>param_format</tt>', ['../datatypes.html#autotoc_md15', 1, '']]], │ │ │ │ │ ['out_5fof_5fmemory_32', ['out_of_memory', ['../group__exception.html#structpqxx_1_1out__of__memory', 1, 'pqxx']]], │ │ │ │ │ ['owned_33', ['owned', ['../classpqxx_1_1cursor__base.html#ac06b19ea7f07f4e251560f49bee2e490a3ace6a7a5ca4ec3b486f2f35fd2420b0', 1, 'pqxx::cursor_base']]], │ │ │ │ │ ['ownership_5fpolicy_34', ['ownership_policy', ['../classpqxx_1_1cursor__base.html#ac06b19ea7f07f4e251560f49bee2e490', 1, 'pqxx::cursor_base']]] │ │ │ │ │ ]; │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_e.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,16 +1,16 @@ │ │ │ │ │ var searchData = [ │ │ │ │ │ ['param_5fformat_0', ['param_format', ['../namespacepqxx.html#a9a3f3a97fd46497a008aaca323cc1958', 1, 'pqxx::param_format(std::vector< T, Args... > const &)'], │ │ │ │ │ ['../namespacepqxx.html#a194db2bb59425a2ff10187d2e81189d3', 1, 'pqxx::param_format(std::vector< std::byte, Args... > const &)'], │ │ │ │ │ ['../namespacepqxx.html#a5a183a730292cabcf9e64fdc6eb0faa5', 1, 'pqxx::param_format(std::array< T, args... > const &)'], │ │ │ │ │ ['../namespacepqxx.html#a0eaf71a6f4744e3d401d2f179d477e4a', 1, 'pqxx::param_format(std::array< std::byte, args... > const &)'] │ │ │ │ │ ]], │ │ │ │ │ - ['param_5fformat_20tt_1', ['Optional: Specialise <tt>param_format</tt>', ['../datatypes.html#autotoc_md12', 1, '']]], │ │ │ │ │ - ['parameters_2', ['parameters', ['../parameters.html#autotoc_md15', 1, 'Multiple parameters'], │ │ │ │ │ - ['../prepared.html#autotoc_md18', 1, 'Parameters'], │ │ │ │ │ + ['param_5fformat_20tt_1', ['Optional: Specialise <tt>param_format</tt>', ['../datatypes.html#autotoc_md15', 1, '']]], │ │ │ │ │ + ['parameters_2', ['parameters', ['../parameters.html#autotoc_md18', 1, 'Multiple parameters'], │ │ │ │ │ + ['../prepared.html#autotoc_md21', 1, 'Parameters'], │ │ │ │ │ ['../parameters.html', 1, 'Statement parameters'] │ │ │ │ │ ]], │ │ │ │ │ ['params_3', ['params', ['../classpqxx_1_1params.html', 1, 'pqxx::params'], │ │ │ │ │ ['../classpqxx_1_1params.html#ad15fdabb428bc93cdb0a6c4354a9069c', 1, 'pqxx::params::params()'] │ │ │ │ │ ]], │ │ │ │ │ ['parse_5fcomposite_4', ['parse_composite', ['../namespacepqxx.html#a0cd702e0c9b6172bf07f0253b238506b', 1, 'pqxx::parse_composite(std::string_view text, T &...fields)'], │ │ │ │ │ ['../namespacepqxx.html#ac634686eb086118eade113cd71c7d5a4', 1, 'pqxx::parse_composite(pqxx::internal::encoding_group enc, std::string_view text, T &...fields)'] │ │ │ │ │ @@ -18,20 +18,20 @@ │ │ │ │ │ ['parse_5fcomposite_5ffield_5', ['parse_composite_field', ['../namespacepqxx_1_1internal.html#a1689cd1502106403a998bd0b2a283432', 1, 'pqxx::internal']]], │ │ │ │ │ ['parse_5fdouble_5fquoted_5fstring_6', ['parse_double_quoted_string', ['../namespacepqxx_1_1internal.html#ad24fb98e5aa3beaecd91d4631321fd4d', 1, 'pqxx::internal']]], │ │ │ │ │ ['parse_5fline_7', ['parse_line', ['../classpqxx_1_1internal_1_1stream__query.html#aad5061fd7b06c89a98e317ce6901ab58', 1, 'pqxx::internal::stream_query']]], │ │ │ │ │ ['parse_5funquoted_5fstring_8', ['parse_unquoted_string', ['../namespacepqxx_1_1internal.html#a93188da7c79d025bae155202f2facb18', 1, 'pqxx::internal']]], │ │ │ │ │ ['payload_9', ['payload', ['../namespacepqxx.html#af4420ee3d9ce36513a5b026903d4b191', 1, 'pqxx::notification']]], │ │ │ │ │ ['perform_10', ['perform', ['../namespacepqxx.html#a9c2faadd143f7c48353eb23b2aa24134', 1, 'pqxx']]], │ │ │ │ │ ['performance_20features_11', ['Performance features', ['../performance.html', 1, '']]], │ │ │ │ │ - ['performance_20note_12', ['Performance note', ['../prepared.html#autotoc_md20', 1, '']]], │ │ │ │ │ + ['performance_20note_12', ['Performance note', ['../prepared.html#autotoc_md23', 1, '']]], │ │ │ │ │ ['pipeline_13', ['pipeline', ['../classpqxx_1_1pipeline.html', 1, 'pqxx::pipeline'], │ │ │ │ │ ['../classpqxx_1_1pipeline.html#a0c80a5e68052b2c35089e384e3c842ce', 1, 'pqxx::pipeline::pipeline(transaction_base &t)'], │ │ │ │ │ ['../classpqxx_1_1pipeline.html#a92463b4b599f681a372016d5dbbe016d', 1, 'pqxx::pipeline::pipeline(transaction_base &t, std::string_view tname)'] │ │ │ │ │ ]], │ │ │ │ │ - ['placeholders_14', ['placeholders', ['../parameters.html#autotoc_md16', 1, 'Generating placeholders'], │ │ │ │ │ + ['placeholders_14', ['placeholders', ['../parameters.html#autotoc_md19', 1, 'Generating placeholders'], │ │ │ │ │ ['../classpqxx_1_1placeholders.html', 1, 'pqxx::placeholders< COUNTER >'] │ │ │ │ │ ]], │ │ │ │ │ ['plpgsql_5ferror_15', ['plpgsql_error', ['../group__exception.html#structpqxx_1_1plpgsql__error', 1, 'pqxx']]], │ │ │ │ │ ['plpgsql_5fno_5fdata_5ffound_16', ['plpgsql_no_data_found', ['../group__exception.html#structpqxx_1_1plpgsql__no__data__found', 1, 'pqxx']]], │ │ │ │ │ ['plpgsql_5fraise_17', ['plpgsql_raise', ['../group__exception.html#structpqxx_1_1plpgsql__raise', 1, 'pqxx']]], │ │ │ │ │ ['plpgsql_5ftoo_5fmany_5frows_18', ['plpgsql_too_many_rows', ['../group__exception.html#structpqxx_1_1plpgsql__too__many__rows', 1, 'pqxx']]], │ │ │ │ │ ['port_19', ['port', ['../classpqxx_1_1connection.html#aa517b7352ea7d8aed937281c295d1f8d', 1, 'pqxx::connection']]], │ │ │ │ │ @@ -41,17 +41,17 @@ │ │ │ │ │ ['pqxx_3a_3ainternal_23', ['internal', ['../namespacepqxx_1_1internal.html', 1, 'pqxx']]], │ │ │ │ │ ['pqxx_3a_3ainternal_3a_3apq_24', ['pq', ['../namespacepqxx_1_1internal_1_1pq.html', 1, 'pqxx::internal']]], │ │ │ │ │ ['pqxx_3a_3aprepare_25', ['prepare', ['../namespacepqxx_1_1prepare.html', 1, 'pqxx']]], │ │ │ │ │ ['prepare_26', ['prepare', ['../classpqxx_1_1connection.html#ac6888103e47fc344e18d17878cdc2bc7', 1, 'pqxx::connection::prepare(char const name[], char const definition[]) &'], │ │ │ │ │ ['../classpqxx_1_1connection.html#a140337eada7fe60e15d8b113b8599f0d', 1, 'pqxx::connection::prepare(char const definition[]) &'], │ │ │ │ │ ['../classpqxx_1_1connection.html#add8ab06057cfd57e509c1e4e1f26e944', 1, 'pqxx::connection::prepare(zview name, zview definition) &'] │ │ │ │ │ ]], │ │ │ │ │ - ['prepared_20statement_27', ['A special prepared statement', ['../prepared.html#autotoc_md19', 1, '']]], │ │ │ │ │ + ['prepared_20statement_27', ['A special prepared statement', ['../prepared.html#autotoc_md22', 1, '']]], │ │ │ │ │ ['prepared_20statements_28', ['Prepared statements', ['../prepared.html', 1, '']]], │ │ │ │ │ - ['preparing_20a_20statement_29', ['Preparing a statement', ['../prepared.html#autotoc_md17', 1, '']]], │ │ │ │ │ + ['preparing_20a_20statement_29', ['Preparing a statement', ['../prepared.html#autotoc_md20', 1, '']]], │ │ │ │ │ ['prepped_30', ['prepped', ['../classpqxx_1_1prepped.html', 1, 'pqxx']]], │ │ │ │ │ ['prior_31', ['prior', ['../classpqxx_1_1cursor__base.html#a94899901ead639033a816cb4aa0fdcd4', 1, 'pqxx::cursor_base']]], │ │ │ │ │ ['process_32', ['process', ['../classpqxx_1_1connecting.html#a58084f41892e19eb2a603a95de4f7dd9', 1, 'pqxx::connecting']]], │ │ │ │ │ ['process_5fnotice_33', ['process_notice', ['../group__transactions.html#a319425c4f02975fa2d5807963ba3dc08', 1, 'pqxx::transaction_base::process_notice(zview msg) const'], │ │ │ │ │ ['../group__transactions.html#afecae4ed72e50dd2a14fbc9c7d365297', 1, 'pqxx::transaction_base::process_notice(char const msg[]) const'], │ │ │ │ │ ['../classpqxx_1_1largeobject__streambuf.html#a9c9d53a14e148dec15f632fcb8f51366', 1, 'pqxx::largeobject_streambuf::process_notice()'], │ │ │ │ │ ['../classpqxx_1_1largeobjectaccess.html#ad539bb1d48ea71532455f56bf118a3ff', 1, 'pqxx::largeobjectaccess::process_notice()'], │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/search/all_f.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -1,39 +1,39 @@ │ │ │ │ │ var searchData = [ │ │ │ │ │ - ['query_0', ['query', ['../streams.html#autotoc_md24', 1, 'Is streaming right for my query?'], │ │ │ │ │ + ['query_0', ['query', ['../streams.html#autotoc_md27', 1, 'Is streaming right for my query?'], │ │ │ │ │ ['../group__exception.html#af011efdf2ba4459774e1e146a50c398d', 1, 'pqxx::sql_error::query()'], │ │ │ │ │ - ['../classpqxx_1_1result.html#a9d28f84628b9e8a8fecf7849f31bf1a0', 1, 'pqxx::result::query()'], │ │ │ │ │ - ['../classpqxx_1_1stream__from.html#a062c20b73f6c9d019bfc35806c432ec0', 1, 'pqxx::stream_from::query()'], │ │ │ │ │ - ['../group__transactions.html#a2b8b6bcc152f542e8cbe8e227db2ef62', 1, 'pqxx::transaction_base::query(zview query)'], │ │ │ │ │ + ['../group__transactions.html#a41080a9f7c8cbf27a888c3cbf3e9c974', 1, 'pqxx::transaction_base::query(prepped statement, params const &parms={})'], │ │ │ │ │ ['../group__transactions.html#ad765133f6133ea8de8255af804e8f81b', 1, 'pqxx::transaction_base::query(zview query, params const &parms)'], │ │ │ │ │ - ['../group__transactions.html#a41080a9f7c8cbf27a888c3cbf3e9c974', 1, 'pqxx::transaction_base::query(prepped statement, params const &parms={})'] │ │ │ │ │ + ['../classpqxx_1_1stream__from.html#a062c20b73f6c9d019bfc35806c432ec0', 1, 'pqxx::stream_from::query()'], │ │ │ │ │ + ['../classpqxx_1_1result.html#a9d28f84628b9e8a8fecf7849f31bf1a0', 1, 'pqxx::result::query()'], │ │ │ │ │ + ['../group__transactions.html#a2b8b6bcc152f542e8cbe8e227db2ef62', 1, 'pqxx::transaction_base::query()'] │ │ │ │ │ ]], │ │ │ │ │ - ['query_20em_1', ['Streaming data <em>from a query</em>', ['../streams.html#autotoc_md23', 1, '']]], │ │ │ │ │ - ['query01_2', ['query01', ['../group__transactions.html#a40ddd8e96d1dbd58b8e1355d24de5898', 1, 'pqxx::transaction_base::query01(zview query, params const &parms)'], │ │ │ │ │ - ['../group__transactions.html#aa5929c0f9068f6569c246063a6428c99', 1, 'pqxx::transaction_base::query01(zview query)'] │ │ │ │ │ + ['query_20em_1', ['Streaming data <em>from a query</em>', ['../streams.html#autotoc_md26', 1, '']]], │ │ │ │ │ + ['query01_2', ['query01', ['../group__transactions.html#aa5929c0f9068f6569c246063a6428c99', 1, 'pqxx::transaction_base::query01(zview query)'], │ │ │ │ │ + ['../group__transactions.html#a40ddd8e96d1dbd58b8e1355d24de5898', 1, 'pqxx::transaction_base::query01(zview query, params const &parms)'] │ │ │ │ │ ]], │ │ │ │ │ ['query1_3', ['query1', ['../group__transactions.html#ad2e069e118bd8b5332e37fecf6648020', 1, 'pqxx::transaction_base::query1(zview query)'], │ │ │ │ │ ['../group__transactions.html#a551bbeaed97a9c3797257dc127e2c3ab', 1, 'pqxx::transaction_base::query1(zview query, params const &parms)'] │ │ │ │ │ ]], │ │ │ │ │ ['query_5fid_4', ['query_id', ['../classpqxx_1_1pipeline.html#af21cf61fd1c13a6729f48a241cbeba37', 1, 'pqxx::pipeline']]], │ │ │ │ │ - ['query_5fn_5', ['query_n', ['../group__transactions.html#a3ddff300844031c184bceea4cf55c9dd', 1, 'pqxx::transaction_base::query_n(result::size_type rows, zview query)'], │ │ │ │ │ - ['../group__transactions.html#acfde62bb97de6c6112624acc7880b0e2', 1, 'pqxx::transaction_base::query_n(result::size_type rows, zview query, params const &parms)'] │ │ │ │ │ + ['query_5fn_5', ['query_n', ['../group__transactions.html#acfde62bb97de6c6112624acc7880b0e2', 1, 'pqxx::transaction_base::query_n(result::size_type rows, zview query, params const &parms)'], │ │ │ │ │ + ['../group__transactions.html#a3ddff300844031c184bceea4cf55c9dd', 1, 'pqxx::transaction_base::query_n(result::size_type rows, zview query)'] │ │ │ │ │ ]], │ │ │ │ │ - ['query_5fvalue_6', ['query_value', ['../group__transactions.html#a3cd56db0a41e5a08649b3f86e3c3e738', 1, 'pqxx::transaction_base::query_value(prepped statement, params const &parms={})'], │ │ │ │ │ - ['../group__transactions.html#a9088693e2337da4d75f8f624ac4fb9bc', 1, 'pqxx::transaction_base::query_value(zview query, std::string_view desc)=delete'], │ │ │ │ │ + ['query_5fvalue_6', ['query_value', ['../group__transactions.html#a4a7e907112201a77641d775fcbe49153', 1, 'pqxx::transaction_base::query_value(zview query, std::string_view desc)'], │ │ │ │ │ + ['../group__transactions.html#a7167da8b1ac61caa7e2caa0a9b0244c8', 1, 'pqxx::transaction_base::query_value(zview query)'], │ │ │ │ │ ['../group__transactions.html#a2f2f530ab83df00027ad7b09716b3bac', 1, 'pqxx::transaction_base::query_value(zview query, params const &parms)'], │ │ │ │ │ - ['../group__transactions.html#a4a7e907112201a77641d775fcbe49153', 1, 'pqxx::transaction_base::query_value(zview query, std::string_view desc)'], │ │ │ │ │ - ['../group__transactions.html#a7167da8b1ac61caa7e2caa0a9b0244c8', 1, 'pqxx::transaction_base::query_value(zview query)'] │ │ │ │ │ + ['../group__transactions.html#a3cd56db0a41e5a08649b3f86e3c3e738', 1, 'pqxx::transaction_base::query_value(prepped statement, params const &parms={})'], │ │ │ │ │ + ['../group__transactions.html#a9088693e2337da4d75f8f624ac4fb9bc', 1, 'pqxx::transaction_base::query_value(zview query, std::string_view desc)=delete'] │ │ │ │ │ ]], │ │ │ │ │ - ['querying_20rows_20of_20data_7', ['Querying rows of data', ['../accessing-results.html#autotoc_md30', 1, '']]], │ │ │ │ │ - ['quiet_5ferrorhandler_8', ['quiet_errorhandler', ['../classpqxx_1_1quiet__errorhandler.html#ac89d9cb68e28649ed53ec9d00ad75550', 1, 'pqxx::quiet_errorhandler::quiet_errorhandler()'], │ │ │ │ │ - ['../classpqxx_1_1quiet__errorhandler.html', 1, 'pqxx::quiet_errorhandler'] │ │ │ │ │ + ['querying_20rows_20of_20data_7', ['Querying rows of data', ['../accessing-results.html#autotoc_md0', 1, '']]], │ │ │ │ │ + ['quiet_5ferrorhandler_8', ['quiet_errorhandler', ['../classpqxx_1_1quiet__errorhandler.html', 1, 'pqxx::quiet_errorhandler'], │ │ │ │ │ + ['../classpqxx_1_1quiet__errorhandler.html#ac89d9cb68e28649ed53ec9d00ad75550', 1, 'pqxx::quiet_errorhandler::quiet_errorhandler()'] │ │ │ │ │ ]], │ │ │ │ │ - ['quote_9', ['quote', ['../classpqxx_1_1connection.html#aa8dd0b5e748b96a2c82152b8001bdc69', 1, 'pqxx::connection::quote()'], │ │ │ │ │ - ['../group__transactions.html#a6476b6d27bb27a6eb8767080cc3e6a49', 1, 'pqxx::transaction_base::quote()'], │ │ │ │ │ + ['quote_9', ['quote', ['../group__transactions.html#a6476b6d27bb27a6eb8767080cc3e6a49', 1, 'pqxx::transaction_base::quote()'], │ │ │ │ │ + ['../classpqxx_1_1connection.html#aa8dd0b5e748b96a2c82152b8001bdc69', 1, 'pqxx::connection::quote(bytes_view bytes) const'], │ │ │ │ │ ['../classpqxx_1_1connection.html#ae871e3c436af0ed50e1373d9157e7340', 1, 'pqxx::connection::quote(T const &t) const'] │ │ │ │ │ ]], │ │ │ │ │ ['quote_5fcolumns_10', ['quote_columns', ['../classpqxx_1_1connection.html#a6f0d42562cf2e37c1673738bf330b2b7', 1, 'pqxx::connection']]], │ │ │ │ │ ['quote_5fname_11', ['quote_name', ['../classpqxx_1_1connection.html#a98f0397793e45b0ea2d9fa4e7a454167', 1, 'pqxx::connection::quote_name()'], │ │ │ │ │ ['../group__transactions.html#ade6d268d6b59cd8684be5d127746d99f', 1, 'pqxx::transaction_base::quote_name()'] │ │ │ │ │ ]], │ │ │ │ │ ['quote_5fraw_12', ['quote_raw', ['../classpqxx_1_1connection.html#a276b3fe0ae9d3cc8e5a04f5e9b2bf1cf', 1, 'pqxx::connection::quote_raw(bytes_view) const'], │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/statement__parameters_8hxx_source.html │ │ │ │ @@ -112,62 +112,62 @@ │ │ │ │
23#include "pqxx/util.hxx"
│ │ │ │
24
│ │ │ │
25
│ │ │ │
26namespace pqxx::internal
│ │ │ │
27{
│ │ │ │
28template<typename ITERATOR>
│ │ │ │
29constexpr inline auto const iterator_identity{
│ │ │ │ -
30 [](decltype(*std::declval<ITERATOR>()) x) { return x; }};
│ │ │ │ +
30 [](decltype(*std::declval<ITERATOR>()) x) { return x; }};
│ │ │ │
31
│ │ │ │
32
│ │ │ │
34template<typename IT, typename ACCESSOR = decltype(iterator_identity<IT>)>
│ │ │ │
│ │ │ │ │ │ │ │
36{
│ │ │ │
37public:
│ │ │ │
│ │ │ │ -
39 constexpr dynamic_params(IT begin, IT end) :
│ │ │ │ -
40 m_begin(begin), m_end(end), m_accessor(iterator_identity<IT>)
│ │ │ │ +
39 constexpr dynamic_params(IT begin, IT end) :
│ │ │ │ +
40 m_begin(begin), m_end(end), m_accessor(iterator_identity<IT>)
│ │ │ │
41 {}
│ │ │ │
│ │ │ │
42
│ │ │ │
44
│ │ │ │
│ │ │ │ -
48 constexpr dynamic_params(IT begin, IT end, ACCESSOR &acc) :
│ │ │ │ -
49 m_begin(begin), m_end(end), m_accessor(acc)
│ │ │ │ +
48 constexpr dynamic_params(IT begin, IT end, ACCESSOR &acc) :
│ │ │ │ +
49 m_begin(begin), m_end(end), m_accessor(acc)
│ │ │ │
50 {}
│ │ │ │
│ │ │ │
51
│ │ │ │
53 template<typename C>
│ │ │ │
│ │ │ │ -
54 explicit constexpr dynamic_params(C &container) :
│ │ │ │ -
55 dynamic_params(std::begin(container), std::end(container))
│ │ │ │ +
54 explicit constexpr dynamic_params(C &container) :
│ │ │ │ +
55 dynamic_params(std::begin(container), std::end(container))
│ │ │ │
56 {}
│ │ │ │
│ │ │ │
57
│ │ │ │
59
│ │ │ │
63 template<typename C>
│ │ │ │
│ │ │ │ -
64 explicit constexpr dynamic_params(C &container, ACCESSOR &acc) :
│ │ │ │ -
65 dynamic_params(std::begin(container), std::end(container), acc)
│ │ │ │ +
64 explicit constexpr dynamic_params(C &container, ACCESSOR &acc) :
│ │ │ │ +
65 dynamic_params(std::begin(container), std::end(container), acc)
│ │ │ │
66 {}
│ │ │ │
│ │ │ │
67
│ │ │ │ -
68 constexpr IT begin() const noexcept { return m_begin; }
│ │ │ │ -
69 constexpr IT end() const noexcept { return m_end; }
│ │ │ │ +
68 constexpr IT begin() const noexcept { return m_begin; }
│ │ │ │ +
69 constexpr IT end() const noexcept { return m_end; }
│ │ │ │
70
│ │ │ │
71 constexpr auto access(decltype(*std::declval<IT>()) value) const
│ │ │ │
72 -> decltype(std::declval<ACCESSOR>()(value))
│ │ │ │
73 {
│ │ │ │
74 return m_accessor(value);
│ │ │ │
75 }
│ │ │ │
76
│ │ │ │
77private:
│ │ │ │ -
78 IT const m_begin, m_end;
│ │ │ │ -
79 ACCESSOR m_accessor = iterator_identity<IT>;
│ │ │ │ +
78 IT const m_begin, m_end;
│ │ │ │ + │ │ │ │
80};
│ │ │ │
│ │ │ │
81
│ │ │ │
82
│ │ │ │
84
│ │ │ │
│ │ │ │
94struct PQXX_LIBEXPORT c_params
│ │ │ │ @@ -187,14 +187,15 @@ │ │ │ │
112#endif
│ │ │ │
Definition statement_parameters.hxx:36
│ │ │ │
constexpr dynamic_params(C &container)
Wrap a container.
Definition statement_parameters.hxx:54
│ │ │ │
constexpr dynamic_params(IT begin, IT end)
Wrap a sequence of pointers or iterators.
Definition statement_parameters.hxx:39
│ │ │ │
constexpr dynamic_params(C &container, ACCESSOR &acc)
Wrap a container.
Definition statement_parameters.hxx:64
│ │ │ │
constexpr dynamic_params(IT begin, IT end, ACCESSOR &acc)
Wrap a sequence of pointers or iterators.
Definition statement_parameters.hxx:48
│ │ │ │
Internal items for libpqxx' own use. Do not use these yourself.
Definition encodings.cxx:33
│ │ │ │ +
composite_field_parser< T > specialize_parse_composite_field(encoding_group enc)
Look up implementation of parse_composite_field for ENC.
Definition array-composite.hxx:274
│ │ │ │
Internal type: encode statement parameters.
Definition statement_parameters.hxx:95
│ │ │ │
c_params(c_params const &)=delete
Copying these objects is pointless and expensive. Don't do it.
│ │ │ │
std::vector< int > lengths
As used by libpq: lengths of non-null arguments, in bytes.
Definition statement_parameters.hxx:107
│ │ │ │
std::vector< format > formats
As used by libpq: effectively boolean "is this a binary parameter?".
Definition statement_parameters.hxx:109
│ │ │ │
std::vector< char const * > values
As used by libpq: pointers to parameter values.
Definition statement_parameters.hxx:105
│ │ │ │
│ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -18,53 +18,53 @@ │ │ │ │ │ 23#include "pqxx/util.hxx" │ │ │ │ │ 24 │ │ │ │ │ 25 │ │ │ │ │ 26namespace _p_q_x_x_:_:_i_n_t_e_r_n_a_l │ │ │ │ │ 27{ │ │ │ │ │ 28template │ │ │ │ │ 29constexpr inline auto const iterator_identity{ │ │ │ │ │ -30 [](decltype(*std::declval()) x) { return x; }}; │ │ │ │ │ +30 [](decltype(*std::declval()) _x) { return _x; }}; │ │ │ │ │ 31 │ │ │ │ │ 32 │ │ │ │ │ 34template)> │ │ │ │ │ _3_5class _d_y_n_a_m_i_c___p_a_r_a_m_s │ │ │ │ │ 36{ │ │ │ │ │ 37public: │ │ │ │ │ -_3_9 constexpr _d_y_n_a_m_i_c___p_a_r_a_m_s(IT begin, IT end) : │ │ │ │ │ -40 m_begin(begin), m_end(end), m_accessor(iterator_identity) │ │ │ │ │ +_3_9 constexpr _d_y_n_a_m_i_c___p_a_r_a_m_s(_I_T begin, _I_T end) : │ │ │ │ │ +40 m_begin(begin), m_end(end), m_accessor(iterator_identity<_I_T>) │ │ │ │ │ 41 {} │ │ │ │ │ 42 │ │ │ │ │ 44 │ │ │ │ │ -_4_8 constexpr _d_y_n_a_m_i_c___p_a_r_a_m_s(IT begin, IT end, ACCESSOR &acc) : │ │ │ │ │ -49 m_begin(begin), m_end(end), m_accessor(acc) │ │ │ │ │ +_4_8 constexpr _d_y_n_a_m_i_c___p_a_r_a_m_s(_I_T begin, _I_T end, _A_C_C_E_S_S_O_R &_a_c_c) : │ │ │ │ │ +49 m_begin(begin), m_end(end), m_accessor(_a_c_c) │ │ │ │ │ 50 {} │ │ │ │ │ 51 │ │ │ │ │ 53 template │ │ │ │ │ -_5_4 explicit constexpr _d_y_n_a_m_i_c___p_a_r_a_m_s(C &container) : │ │ │ │ │ -55 _d_y_n_a_m_i_c___p_a_r_a_m_s(std::begin(container), std::end(container)) │ │ │ │ │ +_5_4 explicit constexpr _d_y_n_a_m_i_c___p_a_r_a_m_s(_C &_c_o_n_t_a_i_n_e_r) : │ │ │ │ │ +55 _d_y_n_a_m_i_c___p_a_r_a_m_s(std::begin(_c_o_n_t_a_i_n_e_r), std::end(_c_o_n_t_a_i_n_e_r)) │ │ │ │ │ 56 {} │ │ │ │ │ 57 │ │ │ │ │ 59 │ │ │ │ │ 63 template │ │ │ │ │ -_6_4 explicit constexpr _d_y_n_a_m_i_c___p_a_r_a_m_s(C &container, ACCESSOR &acc) : │ │ │ │ │ -65 _d_y_n_a_m_i_c___p_a_r_a_m_s(std::begin(container), std::end(container), acc) │ │ │ │ │ +_6_4 explicit constexpr _d_y_n_a_m_i_c___p_a_r_a_m_s(_C &_c_o_n_t_a_i_n_e_r, _A_C_C_E_S_S_O_R &_a_c_c) : │ │ │ │ │ +65 _d_y_n_a_m_i_c___p_a_r_a_m_s(std::begin(_c_o_n_t_a_i_n_e_r), std::end(_c_o_n_t_a_i_n_e_r), _a_c_c) │ │ │ │ │ 66 {} │ │ │ │ │ 67 │ │ │ │ │ -68 constexpr IT begin() const noexcept { return m_begin; } │ │ │ │ │ -69 constexpr IT end() const noexcept { return m_end; } │ │ │ │ │ +68 constexpr _I_T begin() _c_o_n_s_t _n_o_e_x_c_e_p_t { return m_begin; } │ │ │ │ │ +69 constexpr _I_T end() _c_o_n_s_t _n_o_e_x_c_e_p_t { return m_end; } │ │ │ │ │ 70 │ │ │ │ │ 71 constexpr auto access(decltype(*std::declval()) value) const │ │ │ │ │ 72 -> decltype(std::declval()(value)) │ │ │ │ │ 73 { │ │ │ │ │ 74 return m_accessor(value); │ │ │ │ │ 75 } │ │ │ │ │ 76 │ │ │ │ │ 77private: │ │ │ │ │ -78 IT const m_begin, m_end; │ │ │ │ │ -79 ACCESSOR m_accessor = iterator_identity; │ │ │ │ │ +78 _I_T const m_begin, m_end; │ │ │ │ │ +79 _A_C_C_E_S_S_O_R m_accessor = _i_t_e_r_a_t_o_r___i_d_e_n_t_i_t_y_<_I_T_>; │ │ │ │ │ 80}; │ │ │ │ │ 81 │ │ │ │ │ 82 │ │ │ │ │ 84 │ │ │ │ │ _9_4struct PQXX_LIBEXPORT _c___p_a_r_a_m_s │ │ │ │ │ 95{ │ │ │ │ │ 96 _c___p_a_r_a_m_s() = default; │ │ │ │ │ @@ -96,14 +96,19 @@ │ │ │ │ │ _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_d_y_n_a_m_i_c___p_a_r_a_m_s_:_:_d_y_n_a_m_i_c___p_a_r_a_m_s │ │ │ │ │ constexpr dynamic_params(IT begin, IT end, ACCESSOR &acc) │ │ │ │ │ Wrap a sequence of pointers or iterators. │ │ │ │ │ DDeeffiinniittiioonn statement_parameters.hxx:48 │ │ │ │ │ _p_q_x_x_:_:_i_n_t_e_r_n_a_l │ │ │ │ │ Internal items for libpqxx' own use. Do not use these yourself. │ │ │ │ │ DDeeffiinniittiioonn encodings.cxx:33 │ │ │ │ │ +_p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_s_p_e_c_i_a_l_i_z_e___p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d │ │ │ │ │ +composite_field_parser< T > specialize_parse_composite_field(encoding_group │ │ │ │ │ +enc) │ │ │ │ │ +Look up implementation of parse_composite_field for ENC. │ │ │ │ │ +DDeeffiinniittiioonn array-composite.hxx:274 │ │ │ │ │ _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_c___p_a_r_a_m_s │ │ │ │ │ Internal type: encode statement parameters. │ │ │ │ │ DDeeffiinniittiioonn statement_parameters.hxx:95 │ │ │ │ │ _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_c___p_a_r_a_m_s_:_:_c___p_a_r_a_m_s │ │ │ │ │ c_params(c_params const &)=delete │ │ │ │ │ Copying these objects is pointless and expensive. Don't do it. │ │ │ │ │ _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_c___p_a_r_a_m_s_:_:_l_e_n_g_t_h_s │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/strconv_8hxx_source.html │ │ │ │ @@ -298,38 +298,38 @@ │ │ │ │
361{
│ │ │ │
362 using impl_type = std::underlying_type_t<ENUM>;
│ │ │ │ │ │ │ │
364
│ │ │ │
365 static constexpr bool converts_to_string{true};
│ │ │ │
366 static constexpr bool converts_from_string{true};
│ │ │ │
367
│ │ │ │ -
368 [[nodiscard]] static constexpr zview
│ │ │ │ -
369 to_buf(char *begin, char *end, ENUM const &value)
│ │ │ │ +
368 [[nodiscard]] static constexpr zview
│ │ │ │ +
369 to_buf(char *begin, char *end, ENUM const &value)
│ │ │ │
370 {
│ │ │ │
371 return impl_traits::to_buf(begin, end, to_underlying(value));
│ │ │ │
372 }
│ │ │ │
373
│ │ │ │ -
374 static constexpr char *into_buf(char *begin, char *end, ENUM const &value)
│ │ │ │ +
374 static constexpr char *into_buf(char *begin, char *end, ENUM const &value)
│ │ │ │
375 {
│ │ │ │
376 return impl_traits::into_buf(begin, end, to_underlying(value));
│ │ │ │
377 }
│ │ │ │
378
│ │ │ │ -
379 [[nodiscard]] static ENUM from_string(std::string_view text)
│ │ │ │ +
379 [[nodiscard]] static ENUM from_string(std::string_view text)
│ │ │ │
380 {
│ │ │ │ -
381 return static_cast<ENUM>(impl_traits::from_string(text));
│ │ │ │ +
381 return static_cast<ENUM>(impl_traits::from_string(text));
│ │ │ │
382 }
│ │ │ │
383
│ │ │ │ -
384 [[nodiscard]] static std::size_t size_buffer(ENUM const &value) noexcept
│ │ │ │ +
384 [[nodiscard]] static std::size_t size_buffer(ENUM const &value) noexcept
│ │ │ │
385 {
│ │ │ │
386 return impl_traits::size_buffer(to_underlying(value));
│ │ │ │
387 }
│ │ │ │
388
│ │ │ │
389private:
│ │ │ │
390 // C++23: Replace with std::to_underlying.
│ │ │ │ -
391 static constexpr impl_type to_underlying(ENUM const &value) noexcept
│ │ │ │ +
391 static constexpr impl_type to_underlying(ENUM const &value) noexcept
│ │ │ │
392 {
│ │ │ │
393 return static_cast<impl_type>(value);
│ │ │ │
394 }
│ │ │ │
395};
│ │ │ │ │ │ │ │
396} // namespace pqxx::internal
│ │ │ │
397
│ │ │ │ @@ -453,14 +453,15 @@ │ │ │ │
612} // namespace pqxx
│ │ │ │
613
│ │ │ │
614
│ │ │ │
615#include "pqxx/internal/conversions.hxx"
│ │ │ │
616#endif
│ │ │ │
Marker-type wrapper: zero-terminated std::string_view.
Definition zview.hxx:38
│ │ │ │
Internal items for libpqxx' own use. Do not use these yourself.
Definition encodings.cxx:33
│ │ │ │ +
composite_field_parser< T > specialize_parse_composite_field(encoding_group enc)
Look up implementation of parse_composite_field for ENC.
Definition array-composite.hxx:274
│ │ │ │
std::string demangle_type_name(char const raw[])
Attempt to demangle std::type_info::name() to something human-readable.
Definition strconv.cxx:226
│ │ │ │
The home of all libpqxx classes, functions, templates, etc.
Definition array.cxx:27
│ │ │ │
std::string const type_name
A human-readable name for a type, used in error messages and such.
Definition strconv.hxx:80
│ │ │ │
void oops_forbidden_conversion() noexcept
Nonexistent function to indicate a disallowed type conversion.
│ │ │ │
PQXX_LIBEXPORT std::string to_string(field const &value)
Convert a field to a string.
Definition result.cxx:628
│ │ │ │
T from_string(field const &value)
Convert a field's value to type T.
Definition field.hxx:548
│ │ │ │
format
Format code: is data text or binary?
Definition types.hxx:70
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -186,38 +186,38 @@ │ │ │ │ │ 361{ │ │ │ │ │ 362 using impl_type = std::underlying_type_t; │ │ │ │ │ 363 using _i_m_p_l___t_r_a_i_t_s = _s_t_r_i_n_g___t_r_a_i_t_s_<_i_m_p_l___t_y_p_e_>; │ │ │ │ │ 364 │ │ │ │ │ 365 static constexpr bool converts_to_string{true}; │ │ │ │ │ 366 static constexpr bool converts_from_string{true}; │ │ │ │ │ 367 │ │ │ │ │ -368 [[nodiscard]] static constexpr _z_v_i_e_w │ │ │ │ │ -369 to_buf(char *begin, char *end, ENUM const &value) │ │ │ │ │ +368 [[_n_o_d_i_s_c_a_r_d]] static constexpr _z_v_i_e_w │ │ │ │ │ +369 to_buf(char *begin, char *end, _E_N_U_M const &value) │ │ │ │ │ 370 { │ │ │ │ │ 371 return _i_m_p_l___t_r_a_i_t_s_:_:_t_o___b_u_f(begin, end, to_underlying(value)); │ │ │ │ │ 372 } │ │ │ │ │ 373 │ │ │ │ │ -374 static constexpr char *into_buf(char *begin, char *end, ENUM const &value) │ │ │ │ │ +374 static constexpr char *into_buf(char *begin, char *end, _E_N_U_M const &value) │ │ │ │ │ 375 { │ │ │ │ │ 376 return _i_m_p_l___t_r_a_i_t_s_:_:_i_n_t_o___b_u_f(begin, end, to_underlying(value)); │ │ │ │ │ 377 } │ │ │ │ │ 378 │ │ │ │ │ -379 [[nodiscard]] static ENUM from_string(std::string_view text) │ │ │ │ │ +379 [[_n_o_d_i_s_c_a_r_d]] static _E_N_U_M from_string(std::string_view text) │ │ │ │ │ 380 { │ │ │ │ │ -381 return static_cast(_i_m_p_l___t_r_a_i_t_s_:_:_f_r_o_m___s_t_r_i_n_g(text)); │ │ │ │ │ +381 return static_cast<_E_N_U_M>(_i_m_p_l___t_r_a_i_t_s_:_:_f_r_o_m___s_t_r_i_n_g(text)); │ │ │ │ │ 382 } │ │ │ │ │ 383 │ │ │ │ │ -384 [[nodiscard]] static std::size_t size_buffer(ENUM const &value) noexcept │ │ │ │ │ +384 [[_n_o_d_i_s_c_a_r_d]] static std::size_t size_buffer(_E_N_U_M const &value) noexcept │ │ │ │ │ 385 { │ │ │ │ │ 386 return _i_m_p_l___t_r_a_i_t_s_:_:_s_i_z_e___b_u_f_f_e_r(to_underlying(value)); │ │ │ │ │ 387 } │ │ │ │ │ 388 │ │ │ │ │ 389private: │ │ │ │ │ 390 // C++23: Replace with std::to_underlying. │ │ │ │ │ -391 static constexpr impl_type to_underlying(ENUM const &value) noexcept │ │ │ │ │ +391 static constexpr impl_type to_underlying(_E_N_U_M const &value) noexcept │ │ │ │ │ 392 { │ │ │ │ │ 393 return static_cast(value); │ │ │ │ │ 394 } │ │ │ │ │ 395}; │ │ │ │ │ 396} // namespace pqxx::internal │ │ │ │ │ 397 │ │ │ │ │ 398 │ │ │ │ │ @@ -347,14 +347,19 @@ │ │ │ │ │ 616#endif │ │ │ │ │ _p_q_x_x_:_:_z_v_i_e_w │ │ │ │ │ Marker-type wrapper: zero-terminated std::string_view. │ │ │ │ │ DDeeffiinniittiioonn zview.hxx:38 │ │ │ │ │ _p_q_x_x_:_:_i_n_t_e_r_n_a_l │ │ │ │ │ Internal items for libpqxx' own use. Do not use these yourself. │ │ │ │ │ DDeeffiinniittiioonn encodings.cxx:33 │ │ │ │ │ +_p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_s_p_e_c_i_a_l_i_z_e___p_a_r_s_e___c_o_m_p_o_s_i_t_e___f_i_e_l_d │ │ │ │ │ +composite_field_parser< T > specialize_parse_composite_field(encoding_group │ │ │ │ │ +enc) │ │ │ │ │ +Look up implementation of parse_composite_field for ENC. │ │ │ │ │ +DDeeffiinniittiioonn array-composite.hxx:274 │ │ │ │ │ _p_q_x_x_:_:_i_n_t_e_r_n_a_l_:_:_d_e_m_a_n_g_l_e___t_y_p_e___n_a_m_e │ │ │ │ │ std::string demangle_type_name(char const raw[]) │ │ │ │ │ Attempt to demangle std::type_info::name() to something human-readable. │ │ │ │ │ DDeeffiinniittiioonn strconv.cxx:226 │ │ │ │ │ _p_q_x_x │ │ │ │ │ The home of all libpqxx classes, functions, templates, etc. │ │ │ │ │ DDeeffiinniittiioonn array.cxx:27 │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/stream__iterator_8hxx_source.html │ │ │ │ @@ -111,20 +111,20 @@ │ │ │ │
18
│ │ │ │
19
│ │ │ │
20namespace pqxx::internal
│ │ │ │
21{
│ │ │ │
22// C++20: Replace with generator?
│ │ │ │
24
│ │ │ │
│ │ │ │ -
27template<typename... TYPE> class stream_from_input_iterator
│ │ │ │ +
27template<typename... TYPE> class stream_from_input_iterator
│ │ │ │
28{
│ │ │ │
29 using stream_t = stream_from;
│ │ │ │
30
│ │ │ │
31public:
│ │ │ │ -
32 using value_type = std::tuple<TYPE...>;
│ │ │ │ +
32 using value_type = std::tuple<TYPE...>;
│ │ │ │
33
│ │ │ │ │ │ │ │
36
│ │ │ │
37 explicit stream_from_input_iterator(stream_t &home) : m_home(&home)
│ │ │ │
38 {
│ │ │ │
39 advance();
│ │ │ │
40 }
│ │ │ │ @@ -135,48 +135,48 @@ │ │ │ │
45 advance();
│ │ │ │
46 return *this;
│ │ │ │
47 }
│ │ │ │
48
│ │ │ │
49 value_type const &operator*() const { return m_value; }
│ │ │ │
50
│ │ │ │
│ │ │ │ - │ │ │ │ + │ │ │ │
53 {
│ │ │ │ -
54 return m_home == rhs.m_home;
│ │ │ │ +
54 return m_home == rhs.m_home;
│ │ │ │
55 }
│ │ │ │
│ │ │ │
│ │ │ │ - │ │ │ │ + │ │ │ │
58 {
│ │ │ │ -
59 return not(*this == rhs);
│ │ │ │ +
59 return not(*this == rhs);
│ │ │ │
60 }
│ │ │ │
│ │ │ │
61
│ │ │ │
62private:
│ │ │ │
63 void advance()
│ │ │ │
64 {
│ │ │ │
65 if (m_home == nullptr)
│ │ │ │
66 throw usage_error{"Moving stream_from iterator beyond end()."};
│ │ │ │ -
67 if (not((*m_home) >> m_value))
│ │ │ │ +
67 if (not((*m_home) >> m_value))
│ │ │ │
68 m_home = nullptr;
│ │ │ │
69 }
│ │ │ │
70
│ │ │ │
71 stream_t *m_home{nullptr};
│ │ │ │
72 value_type m_value;
│ │ │ │
73};
│ │ │ │
│ │ │ │
74
│ │ │ │
75
│ │ │ │
76// C++20: Replace with generator?
│ │ │ │
│ │ │ │ -
78template<typename... TYPE> class stream_input_iteration
│ │ │ │ +
78template<typename... TYPE> class stream_input_iteration
│ │ │ │
79{
│ │ │ │
80public:
│ │ │ │
81 using stream_t = stream_from;
│ │ │ │ -
82 using iterator = stream_from_input_iterator<TYPE...>;
│ │ │ │ + │ │ │ │
83 explicit stream_input_iteration(stream_t &home) : m_home{home} {}
│ │ │ │
84 iterator begin() const { return iterator{m_home}; }
│ │ │ │
85 iterator end() const { return {}; }
│ │ │ │
86
│ │ │ │
87private:
│ │ │ │
88 stream_t &m_home;
│ │ │ │
89};
│ │ │ │ @@ -187,14 +187,15 @@ │ │ │ │
bool operator==(stream_from_input_iterator const &rhs) const
Comparison only works for comparing to end().
Definition stream_iterator.hxx:52
│ │ │ │
bool operator!=(stream_from_input_iterator const &rhs) const
Comparison only works for comparing to end().
Definition stream_iterator.hxx:57
│ │ │ │
stream_from_input_iterator()=default
Construct an "end" iterator.
│ │ │ │
Iteration over a stream_query.
Definition stream_iterator.hxx:79
│ │ │ │
Stream data from the database.
Definition stream_from.hxx:79
│ │ │ │
Error in usage of libpqxx library, similar to std::logic_error.
Definition except.hxx:249
│ │ │ │
Internal items for libpqxx' own use. Do not use these yourself.
Definition encodings.cxx:33
│ │ │ │ +
composite_field_parser< T > specialize_parse_composite_field(encoding_group enc)
Look up implementation of parse_composite_field for ENC.
Definition array-composite.hxx:274
│ │ │ │
The home of all libpqxx classes, functions, templates, etc.
Definition array.cxx:27
│ │ │ │
strip_t< decltype(*std::begin(std::declval< CONTAINER >()))> value_type
The type of a container's elements.
Definition types.hxx:96
│ │ │ │
Definition stream_iterator.hxx:16
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
48
│ │ │ │
49
│ │ │ │
50// C++20: Can we use generators, and maybe get speedup from HALO?
│ │ │ │
52
│ │ │ │
│ │ │ │ -
79template<typename... TYPE> class stream_query : transaction_focus
│ │ │ │ +
79template<typename... TYPE> class stream_query : transaction_focus
│ │ │ │
80{
│ │ │ │
81public:
│ │ │ │ -
82 using line_handle = std::unique_ptr<char, void (*)(void const *)>;
│ │ │ │ +
82 using line_handle = std::unique_ptr<char, void (*)(void const *)>;
│ │ │ │
83
│ │ │ │ -
85 inline stream_query(transaction_base &tx, std::string_view query);
│ │ │ │ +
85 inline stream_query(transaction_base &tx, std::string_view query);
│ │ │ │
87 inline stream_query(
│ │ │ │ -
88 transaction_base &tx, std::string_view query, params const &);
│ │ │ │ +
88 transaction_base &tx, std::string_view query, params const &);
│ │ │ │
89
│ │ │ │
90 stream_query(stream_query &&) = delete;
│ │ │ │
91 stream_query &operator=(stream_query &&) = delete;
│ │ │ │
92
│ │ │ │
93 ~stream_query() noexcept
│ │ │ │
94 {
│ │ │ │
95 try
│ │ │ │
96 {
│ │ │ │
97 close();
│ │ │ │
98 }
│ │ │ │ -
99 catch (std::exception const &e)
│ │ │ │ +
99 catch (std::exception const &e)
│ │ │ │
100 {
│ │ │ │ -
101 reg_pending_error(e.what());
│ │ │ │ +
101 reg_pending_error(e.what());
│ │ │ │
102 }
│ │ │ │
103 }
│ │ │ │
104
│ │ │ │ -
106 bool done() const & noexcept { return m_char_finder == nullptr; }
│ │ │ │ +
106 bool done() const & noexcept { return m_char_finder == nullptr; }
│ │ │ │
107
│ │ │ │
109 inline auto begin() &;
│ │ │ │
111
│ │ │ │ -
115 auto end() const & { return stream_query_end_iterator{}; }
│ │ │ │ +
115 auto end() const & { return stream_query_end_iterator{}; }
│ │ │ │
116
│ │ │ │
│ │ │ │ -
118 std::tuple<TYPE...> parse_line(zview line) &
│ │ │ │ +
118 std::tuple<TYPE...> parse_line(zview line) &
│ │ │ │
119 {
│ │ │ │ -
120 assert(not done());
│ │ │ │ +
120 assert(not done());
│ │ │ │
121
│ │ │ │ -
122 auto const line_size{std::size(line)};
│ │ │ │ +
122 auto const line_size{std::size(line)};
│ │ │ │
123
│ │ │ │
124 // This function uses m_row as a buffer, across calls. The only reason for
│ │ │ │
125 // it to carry over across calls is to avoid reallocation.
│ │ │ │
126
│ │ │ │
127 // Make room for unescaping the line. It's a pessimistic size.
│ │ │ │
128 // Unusually, we're storing terminating zeroes *inside* the string.
│ │ │ │
129 // This is the only place where we modify m_row. MAKE SURE THE BUFFER DOES
│ │ │ │
130 // NOT GET RESIZED while we're working, because we're working with views
│ │ │ │
131 // into its buffer.
│ │ │ │ -
132 m_row.resize(line_size + 1);
│ │ │ │ +
132 m_row.resize(line_size + 1);
│ │ │ │
133
│ │ │ │ -
134 std::size_t offset{0u};
│ │ │ │ +
134 std::size_t offset{0u};
│ │ │ │
135 char *write{m_row.data()};
│ │ │ │
136
│ │ │ │
137 // DO NOT shrink m_row to fit. We're carrying views pointing into the
│ │ │ │
138 // buffer. (Also, how useful would shrinking really be?)
│ │ │ │
139
│ │ │ │
140 // Folding expression: scan and unescape each field, and convert it to its
│ │ │ │
141 // requested type.
│ │ │ │ -
142 std::tuple<TYPE...> data{parse_field<TYPE>(line, offset, write)...};
│ │ │ │ +
142 std::tuple<TYPE...> data{parse_field<TYPE>(line, offset, write)...};
│ │ │ │
143
│ │ │ │ -
144 assert(offset == line_size + 1u);
│ │ │ │ +
144 assert(offset == line_size + 1u);
│ │ │ │
145 return data;
│ │ │ │
146 }
│ │ │ │
│ │ │ │
147
│ │ │ │
149 std::pair<line_handle, std::size_t> read_line() &;
│ │ │ │
150
│ │ │ │
151private:
│ │ │ │
153
│ │ │ │ -
156 static inline char_finder_func *get_finder(transaction_base const &tx);
│ │ │ │ +
156 static inline char_finder_func *get_finder(transaction_base const &tx);
│ │ │ │
157
│ │ │ │
159
│ │ │ │
173 std::tuple<std::size_t, char *, zview>
│ │ │ │ -
174 read_field(zview line, std::size_t offset, char *write)
│ │ │ │ +
174 read_field(zview line, std::size_t offset, char *write)
│ │ │ │
175 {
│ │ │ │
176#if !defined(NDEBUG)
│ │ │ │ -
177 auto const line_size{std::size(line)};
│ │ │ │ +
177 auto const line_size{std::size(line)};
│ │ │ │
178#endif
│ │ │ │
179
│ │ │ │ -
180 assert(offset <= line_size);
│ │ │ │ + │ │ │ │
181
│ │ │ │ -
182 char const *lp{std::data(line)};
│ │ │ │ +
182 char const *lp{std::data(line)};
│ │ │ │
183
│ │ │ │
184 // The COPY line now ends in a tab. (We replace the trailing newline with
│ │ │ │
185 // that to simplify the loop here.)
│ │ │ │ -
186 assert(lp[line_size] == '\t');
│ │ │ │ -
187 assert(lp[line_size + 1] == '\0');
│ │ │ │ +
186 assert(lp[line_size] == '\t');
│ │ │ │ +
187 assert(lp[line_size + 1] == '\0');
│ │ │ │
188
│ │ │ │ -
189 if ((lp[offset] == '\\') and (lp[offset + 1] == 'N'))
│ │ │ │ +
189 if ((lp[offset] == '\\') and (lp[offset + 1] == 'N'))
│ │ │ │
190 {
│ │ │ │
191 // Null field. Consume the "\N" and the field separator.
│ │ │ │ -
192 offset += 3;
│ │ │ │ -
193 assert(offset <= (line_size + 1));
│ │ │ │ -
194 assert(lp[offset - 1] == '\t');
│ │ │ │ +
192 offset += 3;
│ │ │ │ +
193 assert(offset <= (line_size + 1));
│ │ │ │ +
194 assert(lp[offset - 1] == '\t');
│ │ │ │
195 // Return a null value. There's nothing to write into m_row.
│ │ │ │ -
196 return {offset, write, {}};
│ │ │ │ +
196 return {offset, write, {}};
│ │ │ │
197 }
│ │ │ │
198
│ │ │ │
199 // Beginning of the field text in the row buffer.
│ │ │ │ -
200 char const *const field_begin{write};
│ │ │ │ +
200 char const *const field_begin{write};
│ │ │ │
201
│ │ │ │
202 // We're relying on several assumptions just for making the main loop
│ │ │ │
203 // condition work:
│ │ │ │
204 // * The COPY line ends in a newline.
│ │ │ │
205 // * Multibyte characters never start with an ASCII-range byte.
│ │ │ │
206 // * We can index a view beyond its bounds (but within its address space).
│ │ │ │
207 //
│ │ │ │
208 // Effectively, the newline acts as a final field separator.
│ │ │ │ -
209 while (lp[offset] != '\t')
│ │ │ │ +
209 while (lp[offset] != '\t')
│ │ │ │
210 {
│ │ │ │ -
211 assert(lp[offset] != '\0');
│ │ │ │ +
211 assert(lp[offset] != '\0');
│ │ │ │
212
│ │ │ │
213 // Beginning of the next character of interest (or the end of the line).
│ │ │ │ -
214 auto const stop_char{m_char_finder(line, offset)};
│ │ │ │ -
215 PQXX_ASSUME(stop_char > offset);
│ │ │ │ -
216 assert(stop_char < (line_size + 1));
│ │ │ │ +
214 auto const stop_char{m_char_finder(line, offset)};
│ │ │ │ +
215 PQXX_ASSUME(stop_char > offset);
│ │ │ │ +
216 assert(stop_char < (line_size + 1));
│ │ │ │
217
│ │ │ │
218 // Copy the text we have so far. It's got no special characters in it.
│ │ │ │ -
219 std::memcpy(write, &lp[offset], stop_char - offset);
│ │ │ │ -
220 write += (stop_char - offset);
│ │ │ │ -
221 offset = stop_char;
│ │ │ │ +
219 std::memcpy(write, &lp[offset], stop_char - offset);
│ │ │ │ +
220 write += (stop_char - offset);
│ │ │ │ + │ │ │ │
222
│ │ │ │
223 // We're still within the line.
│ │ │ │ -
224 char const special{lp[offset]};
│ │ │ │ -
225 if (special == '\\')
│ │ │ │ +
224 char const special{lp[offset]};
│ │ │ │ +
225 if (special == '\\')
│ │ │ │
226 {
│ │ │ │
227 // Escape sequence.
│ │ │ │
228 // Consume the backslash.
│ │ │ │ -
229 ++offset;
│ │ │ │ -
230 assert(offset < line_size);
│ │ │ │ +
229 ++offset;
│ │ │ │ + │ │ │ │
231
│ │ │ │
232 // The database will only escape ASCII characters, so we assume that
│ │ │ │
233 // we're dealing with a single-byte character.
│ │ │ │ -
234 char const escaped{lp[offset]};
│ │ │ │ -
235 assert((escaped >> 7) == 0);
│ │ │ │ -
236 ++offset;
│ │ │ │ -
237 *write++ = unescape_char(escaped);
│ │ │ │ +
234 char const escaped{lp[offset]};
│ │ │ │ +
235 assert((escaped >> 7) == 0);
│ │ │ │ +
236 ++offset;
│ │ │ │ +
237 *write++ = unescape_char(escaped);
│ │ │ │
238 }
│ │ │ │
239 else
│ │ │ │
240 {
│ │ │ │
241 // Field separator. Fall out of the loop.
│ │ │ │ -
242 assert(special == '\t');
│ │ │ │ +
242 assert(special == '\t');
│ │ │ │
243 }
│ │ │ │
244 }
│ │ │ │
245
│ │ │ │
246 // Hit the end of the field.
│ │ │ │ -
247 assert(lp[offset] == '\t');
│ │ │ │ +
247 assert(lp[offset] == '\t');
│ │ │ │
248 *write = '\0';
│ │ │ │
249 ++write;
│ │ │ │ -
250 ++offset;
│ │ │ │ -
251 return {offset, write, {field_begin, write - field_begin - 1}};
│ │ │ │ +
250 ++offset;
│ │ │ │ +
251 return {offset, write, {field_begin, write - field_begin - 1}};
│ │ │ │
252 }
│ │ │ │
253
│ │ │ │
255
│ │ │ │
268 template<typename TARGET>
│ │ │ │ -
269 TARGET parse_field(zview line, std::size_t &offset, char *&write)
│ │ │ │ +
269 TARGET parse_field(zview line, std::size_t &offset, char *&write)
│ │ │ │
270 {
│ │ │ │ -
271 using field_type = strip_t<TARGET>;
│ │ │ │ -
272 using nullity = nullness<field_type>;
│ │ │ │ + │ │ │ │ + │ │ │ │
273
│ │ │ │ -
274 assert(offset <= std::size(line));
│ │ │ │ +
274 assert(offset <= std::size(line));
│ │ │ │
275
│ │ │ │ -
276 auto [new_offset, new_write, text]{read_field(line, offset, write)};
│ │ │ │ -
277 PQXX_ASSUME(new_offset > offset);
│ │ │ │ -
278 PQXX_ASSUME(new_write >= write);
│ │ │ │ -
279 offset = new_offset;
│ │ │ │ -
280 write = new_write;
│ │ │ │ +
276 auto [new_offset, new_write, text]{read_field(line, offset, write)};
│ │ │ │ +
277 PQXX_ASSUME(new_offset > offset);
│ │ │ │ +
278 PQXX_ASSUME(new_write >= write);
│ │ │ │ + │ │ │ │ +
280 write = new_write;
│ │ │ │
281 if constexpr (nullity::always_null)
│ │ │ │
282 {
│ │ │ │
283 if (std::data(text) != nullptr)
│ │ │ │
284 throw conversion_error{concat(
│ │ │ │ -
285 "Streaming a non-null value into a ", type_name<field_type>,
│ │ │ │ +
285 "Streaming a non-null value into a ", type_name<field_type>,
│ │ │ │
286 ", which must always be null.")};
│ │ │ │
287 }
│ │ │ │
288 else if (std::data(text) == nullptr)
│ │ │ │
289 {
│ │ │ │
290 if constexpr (nullity::has_null)
│ │ │ │
291 return nullity::null();
│ │ │ │
292 else
│ │ │ │ -
293 internal::throw_null_conversion(type_name<field_type>);
│ │ │ │ + │ │ │ │
294 }
│ │ │ │
295 else
│ │ │ │
296 {
│ │ │ │
297 // Don't ever try to convert a non-null value to nullptr_t!
│ │ │ │ -
298 return from_string<field_type>(text);
│ │ │ │ +
298 return from_string<field_type>(text);
│ │ │ │
299 }
│ │ │ │
300 }
│ │ │ │
301
│ │ │ │ -
303 void close() noexcept
│ │ │ │ +
303 void close() noexcept
│ │ │ │
304 {
│ │ │ │ -
305 if (not done())
│ │ │ │ +
305 if (not done())
│ │ │ │
306 {
│ │ │ │
307 m_char_finder = nullptr;
│ │ │ │
308 unregister_me();
│ │ │ │
309 }
│ │ │ │
310 }
│ │ │ │
311
│ │ │ │
313
│ │ │ │ @@ -364,14 +364,15 @@ │ │ │ │
Base class for things that monopolise a transaction's attention.
Definition transaction_focus.hxx:29
│ │ │ │
Marker-type wrapper: zero-terminated std::string_view.
Definition zview.hxx:38
│ │ │ │
Interface definition (and common code) for "transaction" classes.
Definition transaction_base.hxx:151
│ │ │ │
Internal items for libpqxx' own use. Do not use these yourself.
Definition encodings.cxx:33
│ │ │ │
std::string concat(TYPE... item)
Efficiently combine a bunch of items into one big string.
Definition concat.hxx:31
│ │ │ │
void throw_null_conversion(std::string const &type)
Throw exception for attempt to convert SQL NULL to given type.
Definition strconv.cxx:248
│ │ │ │
std::size_t(std::string_view haystack, std::size_t start) char_finder_func
Function type: "find first occurrence of specific any of ASCII characters.".
Definition encoding_group.hxx:71
│ │ │ │ +
composite_field_parser< T > specialize_parse_composite_field(encoding_group enc)
Look up implementation of parse_composite_field for ENC.
Definition array-composite.hxx:274
│ │ │ │
constexpr char unescape_char(char escaped) noexcept
Return original byte for escaped character.
Definition util.hxx:633
│ │ │ │
The end() iterator for a stream_query.
Definition stream_query.hxx:47
│ │ │ │
The home of all libpqxx classes, functions, templates, etc.
Definition array.cxx:27
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,16 +2,16 @@ │ │ │ │ │ The C++ client library for PostgreSQL │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _S_t_a_t_i_c_ _P_u_b_l_i_c_ _M_e_m_b_e_r_ _F_u_n_c_t_i_o_n_s | _L_i_s_t_ _o_f_ _a_l_l_ _m_e_m_b_e_r_s │ │ │ │ │ pqxx::internal::glyph_scanner< encoding_group::EUC_KR > Struct Reference │ │ │ │ │ SSttaattiicc PPuubblliicc MMeemmbbeerr FFuunnccttiioonnss │ │ │ │ │ -static PQXX_PURE std::size_t  ccaallll (char const buffer[], std::size_t │ │ │ │ │ - buffer_len, std::size_t start) │ │ │ │ │ +_s_t_a_t_i_c PQXX_PURE std::size_t  ccaallll (_c_h_a_r _c_o_n_s_t _b_u_f_f_e_r[], std::size_t │ │ │ │ │ + _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this struct was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/ │ │ │ │ │ _e_n_c_o_d_i_n_g_s_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1EUC__TW_01_4.html │ │ │ │ @@ -96,15 +96,15 @@ │ │ │ │
pqxx::internal::glyph_scanner< encoding_group::EUC_TW > Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +static PQXX_PURE std::size_t  │ │ │ │ │ │ │ │

│ │ │ │ Static Public Member Functions

│ │ │ │ -static PQXX_PURE std::size_t call (char const buffer[], std::size_t buffer_len, std::size_t start)
call (char const buffer[], std::size_t buffer_len, std::size_t start)
 
│ │ │ │
The documentation for this struct was generated from the following file:
    │ │ │ │
  • /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/encodings.hxx
  • │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,16 +2,16 @@ │ │ │ │ │ The C++ client library for PostgreSQL │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _S_t_a_t_i_c_ _P_u_b_l_i_c_ _M_e_m_b_e_r_ _F_u_n_c_t_i_o_n_s | _L_i_s_t_ _o_f_ _a_l_l_ _m_e_m_b_e_r_s │ │ │ │ │ pqxx::internal::glyph_scanner< encoding_group::EUC_TW > Struct Reference │ │ │ │ │ SSttaattiicc PPuubblliicc MMeemmbbeerr FFuunnccttiioonnss │ │ │ │ │ -static PQXX_PURE std::size_t  ccaallll (char const buffer[], std::size_t │ │ │ │ │ - buffer_len, std::size_t start) │ │ │ │ │ +_s_t_a_t_i_c PQXX_PURE std::size_t  ccaallll (_c_h_a_r _c_o_n_s_t _b_u_f_f_e_r[], std::size_t │ │ │ │ │ + _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this struct was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/ │ │ │ │ │ _e_n_c_o_d_i_n_g_s_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1GB18030_01_4.html │ │ │ │ @@ -96,15 +96,15 @@ │ │ │ │
pqxx::internal::glyph_scanner< encoding_group::GB18030 > Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +static PQXX_PURE std::size_t  │ │ │ │ │ │ │ │

│ │ │ │ Static Public Member Functions

│ │ │ │ -static PQXX_PURE std::size_t call (char const buffer[], std::size_t buffer_len, std::size_t start)
call (char const buffer[], std::size_t buffer_len, std::size_t start)
 
│ │ │ │
The documentation for this struct was generated from the following file:
    │ │ │ │
  • /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/encodings.hxx
  • │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,16 +2,16 @@ │ │ │ │ │ The C++ client library for PostgreSQL │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _S_t_a_t_i_c_ _P_u_b_l_i_c_ _M_e_m_b_e_r_ _F_u_n_c_t_i_o_n_s | _L_i_s_t_ _o_f_ _a_l_l_ _m_e_m_b_e_r_s │ │ │ │ │ pqxx::internal::glyph_scanner< encoding_group::GB18030 > Struct Reference │ │ │ │ │ SSttaattiicc PPuubblliicc MMeemmbbeerr FFuunnccttiioonnss │ │ │ │ │ -static PQXX_PURE std::size_t  ccaallll (char const buffer[], std::size_t │ │ │ │ │ - buffer_len, std::size_t start) │ │ │ │ │ +_s_t_a_t_i_c PQXX_PURE std::size_t  ccaallll (_c_h_a_r _c_o_n_s_t _b_u_f_f_e_r[], std::size_t │ │ │ │ │ + _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this struct was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/ │ │ │ │ │ _e_n_c_o_d_i_n_g_s_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1GBK_01_4.html │ │ │ │ @@ -96,15 +96,15 @@ │ │ │ │
pqxx::internal::glyph_scanner< encoding_group::GBK > Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +static PQXX_PURE std::size_t  │ │ │ │ │ │ │ │

│ │ │ │ Static Public Member Functions

│ │ │ │ -static PQXX_PURE std::size_t call (char const buffer[], std::size_t buffer_len, std::size_t start)
call (char const buffer[], std::size_t buffer_len, std::size_t start)
 
│ │ │ │
The documentation for this struct was generated from the following file:
    │ │ │ │
  • /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/encodings.hxx
  • │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,16 +2,16 @@ │ │ │ │ │ The C++ client library for PostgreSQL │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _S_t_a_t_i_c_ _P_u_b_l_i_c_ _M_e_m_b_e_r_ _F_u_n_c_t_i_o_n_s | _L_i_s_t_ _o_f_ _a_l_l_ _m_e_m_b_e_r_s │ │ │ │ │ pqxx::internal::glyph_scanner< encoding_group::GBK > Struct Reference │ │ │ │ │ SSttaattiicc PPuubblliicc MMeemmbbeerr FFuunnccttiioonnss │ │ │ │ │ -static PQXX_PURE std::size_t  ccaallll (char const buffer[], std::size_t │ │ │ │ │ - buffer_len, std::size_t start) │ │ │ │ │ +_s_t_a_t_i_c PQXX_PURE std::size_t  ccaallll (_c_h_a_r _c_o_n_s_t _b_u_f_f_e_r[], std::size_t │ │ │ │ │ + _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this struct was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/ │ │ │ │ │ _e_n_c_o_d_i_n_g_s_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1JOHAB_01_4.html │ │ │ │ @@ -96,15 +96,15 @@ │ │ │ │
pqxx::internal::glyph_scanner< encoding_group::JOHAB > Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +static PQXX_PURE std::size_t  │ │ │ │ │ │ │ │

│ │ │ │ Static Public Member Functions

│ │ │ │ -static PQXX_PURE std::size_t call (char const buffer[], std::size_t buffer_len, std::size_t start)
call (char const buffer[], std::size_t buffer_len, std::size_t start)
 
│ │ │ │
The documentation for this struct was generated from the following file:
    │ │ │ │
  • /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/encodings.hxx
  • │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,16 +2,16 @@ │ │ │ │ │ The C++ client library for PostgreSQL │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _S_t_a_t_i_c_ _P_u_b_l_i_c_ _M_e_m_b_e_r_ _F_u_n_c_t_i_o_n_s | _L_i_s_t_ _o_f_ _a_l_l_ _m_e_m_b_e_r_s │ │ │ │ │ pqxx::internal::glyph_scanner< encoding_group::JOHAB > Struct Reference │ │ │ │ │ SSttaattiicc PPuubblliicc MMeemmbbeerr FFuunnccttiioonnss │ │ │ │ │ -static PQXX_PURE std::size_t  ccaallll (char const buffer[], std::size_t │ │ │ │ │ - buffer_len, std::size_t start) │ │ │ │ │ +_s_t_a_t_i_c PQXX_PURE std::size_t  ccaallll (_c_h_a_r _c_o_n_s_t _b_u_f_f_e_r[], std::size_t │ │ │ │ │ + _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this struct was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/ │ │ │ │ │ _e_n_c_o_d_i_n_g_s_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1MONOBYTE_01_4.html │ │ │ │ @@ -96,15 +96,15 @@ │ │ │ │
pqxx::internal::glyph_scanner< encoding_group::MONOBYTE > Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +static PQXX_PURE constexpr std::size_t  │ │ │ │ │ │ │ │

│ │ │ │ Static Public Member Functions

│ │ │ │ -static PQXX_PURE constexpr std::size_t call (char const [], std::size_t buffer_len, std::size_t start)
call (char const [], std::size_t buffer_len, std::size_t start)
 
│ │ │ │
The documentation for this struct was generated from the following file:
    │ │ │ │
  • /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/encodings.hxx
  • │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,16 +2,16 @@ │ │ │ │ │ The C++ client library for PostgreSQL │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _S_t_a_t_i_c_ _P_u_b_l_i_c_ _M_e_m_b_e_r_ _F_u_n_c_t_i_o_n_s | _L_i_s_t_ _o_f_ _a_l_l_ _m_e_m_b_e_r_s │ │ │ │ │ pqxx::internal::glyph_scanner< encoding_group::MONOBYTE > Struct Reference │ │ │ │ │ SSttaattiicc PPuubblliicc MMeemmbbeerr FFuunnccttiioonnss │ │ │ │ │ -static PQXX_PURE constexpr std::size_t  ccaallll (char const [], std::size_t │ │ │ │ │ - buffer_len, std::size_t start) │ │ │ │ │ +_s_t_a_t_i_c PQXX_PURE _c_o_n_s_t_e_x_p_r std::size_t  ccaallll (_c_h_a_r _c_o_n_s_t [], std::size_t │ │ │ │ │ + _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this struct was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/ │ │ │ │ │ _e_n_c_o_d_i_n_g_s_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1MULE__INTERNAL_01_4.html │ │ │ │ @@ -96,15 +96,15 @@ │ │ │ │
pqxx::internal::glyph_scanner< encoding_group::MULE_INTERNAL > Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +static PQXX_PURE std::size_t  │ │ │ │ │ │ │ │

│ │ │ │ Static Public Member Functions

│ │ │ │ -static PQXX_PURE std::size_t call (char const buffer[], std::size_t buffer_len, std::size_t start)
call (char const buffer[], std::size_t buffer_len, std::size_t start)
 
│ │ │ │
The documentation for this struct was generated from the following file:
    │ │ │ │
  • /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/encodings.hxx
  • │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,16 +2,16 @@ │ │ │ │ │ The C++ client library for PostgreSQL │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _S_t_a_t_i_c_ _P_u_b_l_i_c_ _M_e_m_b_e_r_ _F_u_n_c_t_i_o_n_s | _L_i_s_t_ _o_f_ _a_l_l_ _m_e_m_b_e_r_s │ │ │ │ │ pqxx::internal::glyph_scanner< encoding_group::MULE_INTERNAL > Struct Reference │ │ │ │ │ SSttaattiicc PPuubblliicc MMeemmbbeerr FFuunnccttiioonnss │ │ │ │ │ -static PQXX_PURE std::size_t  ccaallll (char const buffer[], std::size_t │ │ │ │ │ - buffer_len, std::size_t start) │ │ │ │ │ +_s_t_a_t_i_c PQXX_PURE std::size_t  ccaallll (_c_h_a_r _c_o_n_s_t _b_u_f_f_e_r[], std::size_t │ │ │ │ │ + _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this struct was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/ │ │ │ │ │ _e_n_c_o_d_i_n_g_s_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1SJIS_01_4.html │ │ │ │ @@ -96,15 +96,15 @@ │ │ │ │
pqxx::internal::glyph_scanner< encoding_group::SJIS > Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +static PQXX_PURE std::size_t  │ │ │ │ │ │ │ │

│ │ │ │ Static Public Member Functions

│ │ │ │ -static PQXX_PURE std::size_t call (char const buffer[], std::size_t buffer_len, std::size_t start)
call (char const buffer[], std::size_t buffer_len, std::size_t start)
 
│ │ │ │
The documentation for this struct was generated from the following file:
    │ │ │ │
  • /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/encodings.hxx
  • │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,16 +2,16 @@ │ │ │ │ │ The C++ client library for PostgreSQL │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _S_t_a_t_i_c_ _P_u_b_l_i_c_ _M_e_m_b_e_r_ _F_u_n_c_t_i_o_n_s | _L_i_s_t_ _o_f_ _a_l_l_ _m_e_m_b_e_r_s │ │ │ │ │ pqxx::internal::glyph_scanner< encoding_group::SJIS > Struct Reference │ │ │ │ │ SSttaattiicc PPuubblliicc MMeemmbbeerr FFuunnccttiioonnss │ │ │ │ │ -static PQXX_PURE std::size_t  ccaallll (char const buffer[], std::size_t │ │ │ │ │ - buffer_len, std::size_t start) │ │ │ │ │ +_s_t_a_t_i_c PQXX_PURE std::size_t  ccaallll (_c_h_a_r _c_o_n_s_t _b_u_f_f_e_r[], std::size_t │ │ │ │ │ + _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this struct was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/ │ │ │ │ │ _e_n_c_o_d_i_n_g_s_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1UHC_01_4.html │ │ │ │ @@ -96,15 +96,15 @@ │ │ │ │
pqxx::internal::glyph_scanner< encoding_group::UHC > Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +static PQXX_PURE std::size_t  │ │ │ │ │ │ │ │

│ │ │ │ Static Public Member Functions

│ │ │ │ -static PQXX_PURE std::size_t call (char const buffer[], std::size_t buffer_len, std::size_t start)
call (char const buffer[], std::size_t buffer_len, std::size_t start)
 
│ │ │ │
The documentation for this struct was generated from the following file:
    │ │ │ │
  • /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/encodings.hxx
  • │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,16 +2,16 @@ │ │ │ │ │ The C++ client library for PostgreSQL │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _S_t_a_t_i_c_ _P_u_b_l_i_c_ _M_e_m_b_e_r_ _F_u_n_c_t_i_o_n_s | _L_i_s_t_ _o_f_ _a_l_l_ _m_e_m_b_e_r_s │ │ │ │ │ pqxx::internal::glyph_scanner< encoding_group::UHC > Struct Reference │ │ │ │ │ SSttaattiicc PPuubblliicc MMeemmbbeerr FFuunnccttiioonnss │ │ │ │ │ -static PQXX_PURE std::size_t  ccaallll (char const buffer[], std::size_t │ │ │ │ │ - buffer_len, std::size_t start) │ │ │ │ │ +_s_t_a_t_i_c PQXX_PURE std::size_t  ccaallll (_c_h_a_r _c_o_n_s_t _b_u_f_f_e_r[], std::size_t │ │ │ │ │ + _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this struct was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/ │ │ │ │ │ _e_n_c_o_d_i_n_g_s_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1glyph__scanner_3_01encoding__group_1_1UTF8_01_4.html │ │ │ │ @@ -96,15 +96,15 @@ │ │ │ │
pqxx::internal::glyph_scanner< encoding_group::UTF8 > Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +static PQXX_PURE std::size_t  │ │ │ │ │ │ │ │

│ │ │ │ Static Public Member Functions

│ │ │ │ -static PQXX_PURE std::size_t call (char const buffer[], std::size_t buffer_len, std::size_t start)
call (char const buffer[], std::size_t buffer_len, std::size_t start)
 
│ │ │ │
The documentation for this struct was generated from the following file:
    │ │ │ │
  • /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/encodings.hxx
  • │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,16 +2,16 @@ │ │ │ │ │ The C++ client library for PostgreSQL │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _S_t_a_t_i_c_ _P_u_b_l_i_c_ _M_e_m_b_e_r_ _F_u_n_c_t_i_o_n_s | _L_i_s_t_ _o_f_ _a_l_l_ _m_e_m_b_e_r_s │ │ │ │ │ pqxx::internal::glyph_scanner< encoding_group::UTF8 > Struct Reference │ │ │ │ │ SSttaattiicc PPuubblliicc MMeemmbbeerr FFuunnccttiioonnss │ │ │ │ │ -static PQXX_PURE std::size_t  ccaallll (char const buffer[], std::size_t │ │ │ │ │ - buffer_len, std::size_t start) │ │ │ │ │ +_s_t_a_t_i_c PQXX_PURE std::size_t  ccaallll (_c_h_a_r _c_o_n_s_t _b_u_f_f_e_r[], std::size_t │ │ │ │ │ + _b_u_f_f_e_r___l_e_n, std::size_t _s_t_a_r_t) │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this struct was generated from the following file: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/ │ │ │ │ │ _e_n_c_o_d_i_n_g_s_._h_x_x │ │ │ │ │ * _p_q_x_x │ │ │ │ │ * _i_n_t_e_r_n_a_l │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1integral__traits.html │ │ │ │ @@ -100,37 +100,37 @@ │ │ │ │ │ │ │ │

String traits for builtin integral types (though not bool). │ │ │ │ More...

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +static PQXX_LIBEXPORT T  │ │ │ │ │ │ │ │ │ │ │ │ +static PQXX_LIBEXPORT zview  │ │ │ │ │ │ │ │ │ │ │ │ +static PQXX_LIBEXPORT char *  │ │ │ │ │ │ │ │ │ │ │ │ +staticconstexpr std::size_t  │ │ │ │ │ │ │ │

│ │ │ │ Static Public Member Functions

│ │ │ │ -static PQXX_LIBEXPORT T from_string (std::string_view text)
from_string (std::string_view text)
 
│ │ │ │ -static PQXX_LIBEXPORT zview to_buf (char *begin, char *end, T const &value)
to_buf (char *begin, char *end, T const &value)
 
│ │ │ │ -static PQXX_LIBEXPORT char * into_buf (char *begin, char *end, T const &value)
into_buf (char *begin, char *end, T const &value)
 
│ │ │ │ -static constexpr std::size_t size_buffer (T const &) noexcept
size_buffer (T const &) noexcept
 
│ │ │ │ │ │ │ │ │ │ │ │ +staticconstexprbool  │ │ │ │ │ │ │ │ │ │ │ │ +staticconstexprbool  │ │ │ │ │ │ │ │

│ │ │ │ Static Public Attributes

│ │ │ │ -static constexpr bool converts_to_string {true}
converts_to_string {true}
 
│ │ │ │ -static constexpr bool converts_from_string {true}
converts_from_string {true}
 
│ │ │ │

Detailed Description

│ │ │ │ -
template<typename T>
│ │ │ │ +
template<typename T>
│ │ │ │ struct pqxx::internal::integral_traits< T >

String traits for builtin integral types (though not bool).

│ │ │ │

The documentation for this struct was generated from the following files:
    │ │ │ │
  • /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/conversions.hxx
  • │ │ │ │
  • /build/reproducible-path/libpqxx-7.10.0/src/strconv.cxx
  • │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -3,29 +3,29 @@ │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _S_t_a_t_i_c_ _P_u_b_l_i_c_ _M_e_m_b_e_r_ _F_u_n_c_t_i_o_n_s | _S_t_a_t_i_c_ _P_u_b_l_i_c_ _A_t_t_r_i_b_u_t_e_s | _L_i_s_t_ _o_f_ _a_l_l_ _m_e_m_b_e_r_s │ │ │ │ │ pqxx::internal::integral_traits< T > Struct Template Reference │ │ │ │ │ String traits for builtin integral types (though not bool). _M_o_r_e_._._. │ │ │ │ │ SSttaattiicc PPuubblliicc MMeemmbbeerr FFuunnccttiioonnss │ │ │ │ │ - static PQXX_LIBEXPORT T  ffrroomm__ssttrriinngg (std::string_view text) │ │ │ │ │ + _s_t_a_t_i_c PQXX_LIBEXPORT _T  ffrroomm__ssttrriinngg (std::string_view text) │ │ │ │ │   │ │ │ │ │ - static PQXX_LIBEXPORT _z_v_i_e_w  ttoo__bbuuff (char *begin, char *end, T const &value) │ │ │ │ │ + _s_t_a_t_i_c PQXX_LIBEXPORT _z_v_i_e_w  ttoo__bbuuff (_c_h_a_r *begin, _c_h_a_r *end, _T _c_o_n_s_t &value) │ │ │ │ │   │ │ │ │ │ -static PQXX_LIBEXPORT char *  iinnttoo__bbuuff (char *begin, char *end, T const &value) │ │ │ │ │ +_s_t_a_t_i_c PQXX_LIBEXPORT _c_h_a_r *  iinnttoo__bbuuff (_c_h_a_r *begin, _c_h_a_r *end, _T _c_o_n_s_t &value) │ │ │ │ │   │ │ │ │ │ -static constexpr std::size_t  ssiizzee__bbuuffffeerr (T const &) noexcept │ │ │ │ │ +_s_t_a_t_i_c _c_o_n_s_t_e_x_p_r std::size_t  ssiizzee__bbuuffffeerr (_T _c_o_n_s_t &) _n_o_e_x_c_e_p_t │ │ │ │ │   │ │ │ │ │ SSttaattiicc PPuubblliicc AAttttrriibbuutteess │ │ │ │ │ -static constexpr bool  ccoonnvveerrttss__ttoo__ssttrriinngg {true} │ │ │ │ │ +_s_t_a_t_i_c _c_o_n_s_t_e_x_p_r _b_o_o_l  ccoonnvveerrttss__ttoo__ssttrriinngg {_t_r_u_e} │ │ │ │ │   │ │ │ │ │ -static constexpr bool  ccoonnvveerrttss__ffrroomm__ssttrriinngg {true} │ │ │ │ │ +_s_t_a_t_i_c _c_o_n_s_t_e_x_p_r _b_o_o_l  ccoonnvveerrttss__ffrroomm__ssttrriinngg {_t_r_u_e} │ │ │ │ │   │ │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ -template │ │ │ │ │ +template<_t_y_p_e_n_a_m_e _T> │ │ │ │ │ struct pqxx::internal::integral_traits< T > │ │ │ │ │ String traits for builtin integral types (though not bool). │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this struct was generated from the following files: │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/include/pqxx/internal/ │ │ │ │ │ _c_o_n_v_e_r_s_i_o_n_s_._h_x_x │ │ │ │ │ * /build/reproducible-path/libpqxx-7.10.0/src/ssttrrccoonnvv..ccxxxx │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/structpqxx_1_1internal_1_1notice__waiters.html │ │ │ │ @@ -100,30 +100,30 @@ │ │ │ │ │ │ │ │

Various callbacks waiting for a notice to come in. │ │ │ │ More...

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +  │ │ │ │ │ │ │ │ │ │ │ │ +  │ │ │ │ │ │ │ │ │ │ │ │ +notice_waiters &  │ │ │ │ │ │ │ │ │ │ │ │ +notice_waiters &  │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

│ │ │ │ - notice_waiters (notice_waiters const &)=delete
notice_waiters (notice_waiters const &)=delete
 
│ │ │ │ - notice_waiters (notice_waiters &&)=delete
notice_waiters (notice_waiters &&)=delete
 
│ │ │ │ -notice_waitersoperator= (notice_waiters const &)=delete
operator= (notice_waiters const &)=delete
 
│ │ │ │ -notice_waitersoperator= (notice_waiters &&)=delete
operator= (notice_waiters &&)=delete
 
│ │ │ │ │ │ │ │ │ │ │ │ +std::function< void(zview)>  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Attributes

│ │ │ │ -std::function< void(zview)> notice_handler
notice_handler
 
│ │ │ │ std::list< errorhandler * > errorhandlers
 
│ │ │ │

Detailed Description

│ │ │ │

Various callbacks waiting for a notice to come in.

│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -3,24 +3,24 @@ │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ _P_u_b_l_i_c_ _M_e_m_b_e_r_ _F_u_n_c_t_i_o_n_s | _P_u_b_l_i_c_ _A_t_t_r_i_b_u_t_e_s | _L_i_s_t_ _o_f_ _a_l_l_ _m_e_m_b_e_r_s │ │ │ │ │ pqxx::internal::notice_waiters Struct Reference │ │ │ │ │ Various callbacks waiting for a notice to come in. _M_o_r_e_._._. │ │ │ │ │ PPuubblliicc MMeemmbbeerr FFuunnccttiioonnss │ │ │ │ │ -   nnoottiiccee__wwaaiitteerrss (_n_o_t_i_c_e___w_a_i_t_e_r_s const &)=delete │ │ │ │ │ +   nnoottiiccee__wwaaiitteerrss (_n_o_t_i_c_e___w_a_i_t_e_r_s _c_o_n_s_t &)=_d_e_l_e_t_e │ │ │ │ │   │ │ │ │ │ -   nnoottiiccee__wwaaiitteerrss (_n_o_t_i_c_e___w_a_i_t_e_r_s &&)=delete │ │ │ │ │ +   nnoottiiccee__wwaaiitteerrss (_n_o_t_i_c_e___w_a_i_t_e_r_s &&)=_d_e_l_e_t_e │ │ │ │ │   │ │ │ │ │ -_n_o_t_i_c_e___w_a_i_t_e_r_s &  ooppeerraattoorr== (_n_o_t_i_c_e___w_a_i_t_e_r_s const &)=delete │ │ │ │ │ +_n_o_t_i_c_e___w_a_i_t_e_r_s &  ooppeerraattoorr== (_n_o_t_i_c_e___w_a_i_t_e_r_s _c_o_n_s_t &)=_d_e_l_e_t_e │ │ │ │ │   │ │ │ │ │ -_n_o_t_i_c_e___w_a_i_t_e_r_s &  ooppeerraattoorr== (_n_o_t_i_c_e___w_a_i_t_e_r_s &&)=delete │ │ │ │ │ +_n_o_t_i_c_e___w_a_i_t_e_r_s &  ooppeerraattoorr== (_n_o_t_i_c_e___w_a_i_t_e_r_s &&)=_d_e_l_e_t_e │ │ │ │ │   │ │ │ │ │ PPuubblliicc AAttttrriibbuutteess │ │ │ │ │ -std::function< void(_z_v_i_e_w)>  nnoottiiccee__hhaannddlleerr │ │ │ │ │ +std::function< _v_o_i_d(_z_v_i_e_w)>  nnoottiiccee__hhaannddlleerr │ │ │ │ │   │ │ │ │ │ std::list< _e_r_r_o_r_h_a_n_d_l_e_r * >  eerrrroorrhhaannddlleerrss │ │ │ │ │   │ │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ Various callbacks waiting for a notice to come in. │ │ │ │ │ =============================================================================== │ │ │ │ │ The documentation for this struct was generated from the following file: │ │ │ ├── ./usr/share/doc/libpqxx-doc/doxygen-html/transaction__base_8hxx_source.html │ │ │ │ @@ -137,17 +137,17 @@ │ │ │ │
37#include "pqxx/prepared_statement.hxx"
│ │ │ │
38#include "pqxx/result.hxx"
│ │ │ │
39#include "pqxx/row.hxx"
│ │ │ │
40#include "pqxx/util.hxx"
│ │ │ │
41
│ │ │ │
42namespace pqxx::internal::gate
│ │ │ │
43{
│ │ │ │ -
44class transaction_subtransaction;
│ │ │ │ + │ │ │ │
45class transaction_sql_cursor;
│ │ │ │ -
46class transaction_stream_to;
│ │ │ │ + │ │ │ │
47class transaction_transaction_focus;
│ │ │ │
48} // namespace pqxx::internal::gate
│ │ │ │
49
│ │ │ │
50
│ │ │ │
51namespace pqxx
│ │ │ │
52{
│ │ │ │
53using namespace std::literals;
│ │ │ │ @@ -787,30 +787,30 @@ │ │ │ │
1163namespace pqxx::internal
│ │ │ │
1164{
│ │ │ │
1166template<pqxx::isolation_level isolation, pqxx::write_policy rw>
│ │ │ │
1167extern const zview begin_cmd;
│ │ │ │
1168
│ │ │ │
1169// These are not static members, so "constexpr" does not imply "inline".
│ │ │ │
1170template<>
│ │ │ │ -
1171inline constexpr zview begin_cmd<read_committed, write_policy::read_write>{
│ │ │ │ + │ │ │ │
1172 "BEGIN"_zv};
│ │ │ │
1173template<>
│ │ │ │ -
1174inline constexpr zview begin_cmd<read_committed, write_policy::read_only>{
│ │ │ │ + │ │ │ │
1175 "BEGIN READ ONLY"_zv};
│ │ │ │
1176template<>
│ │ │ │ -
1177inline constexpr zview begin_cmd<repeatable_read, write_policy::read_write>{
│ │ │ │ + │ │ │ │
1178 "BEGIN ISOLATION LEVEL REPEATABLE READ"_zv};
│ │ │ │
1179template<>
│ │ │ │ -
1180inline constexpr zview begin_cmd<repeatable_read, write_policy::read_only>{
│ │ │ │ + │ │ │ │
1181 "BEGIN ISOLATION LEVEL REPEATABLE READ READ ONLY"_zv};
│ │ │ │
1182template<>
│ │ │ │ -
1183inline constexpr zview begin_cmd<serializable, write_policy::read_write>{
│ │ │ │ + │ │ │ │
1184 "BEGIN ISOLATION LEVEL SERIALIZABLE"_zv};
│ │ │ │
1185template<>
│ │ │ │ -
1186inline constexpr zview begin_cmd<serializable, write_policy::read_only>{
│ │ │ │ + │ │ │ │
1187 "BEGIN ISOLATION LEVEL SERIALIZABLE READ ONLY"_zv};
│ │ │ │
1188} // namespace pqxx::internal
│ │ │ │
1189
│ │ │ │
1190#include "pqxx/internal/stream_query_impl.hxx"
│ │ │ │
1191#endif
│ │ │ │
Connection to a database.
Definition connection.hxx:279
│ │ │ │
Definition transaction-transaction_focus.hxx:8
│ │ │ │ @@ -875,14 +875,15 @@ │ │ │ │
result exec_params_n(std::size_t rows, zview query, Args &&...args)
Definition transaction_base.hxx:759
│ │ │ │
auto stream(std::string_view query) &
Execute a query, in streaming fashion; loop over the results row by row.
Definition transaction_base.hxx:569
│ │ │ │
void for_query(zview query, CALLABLE &&func)
Execute a query, load the full result, and perform func for each row.
Definition transaction_base.hxx:686
│ │ │ │
void process_notice(char const msg[]) const
Have connection process a warning message.
Definition transaction_base.hxx:1011
│ │ │ │
Interface definition (and common code) for "transaction" classes.
Definition transaction_base.hxx:151
│ │ │ │
Internal items for libpqxx' own use. Do not use these yourself.
Definition encodings.cxx:33
│ │ │ │
decltype(strip_types(std::declval< TYPES... >())) strip_types_t
Take a tuple type and apply strip_t to its component types.
Definition util.hxx:629
│ │ │ │ +
composite_field_parser< T > specialize_parse_composite_field(encoding_group enc)
Look up implementation of parse_composite_field for ENC.
Definition array-composite.hxx:274
│ │ │ │
The home of all libpqxx classes, functions, templates, etc.
Definition array.cxx:27
│ │ │ │
bytes_view binary_cast(TYPE const &data)
Cast binary data to a type that libpqxx will recognise as binary.
Definition util.hxx:409
│ │ │ │
std::conditional< has_generic_bytes_char_traits, std::basic_string< std::byte >, std::basic_string< std::byte, byte_char_traits > >::type bytes
Type alias for a container containing bytes.
Definition util.hxx:375
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
150template<std::size_t N>
│ │ │ │
│ │ │ │ -
151inline constexpr char const *as_c_string(char (&str)[N]) noexcept
│ │ │ │ +
151inline constexpr char const *as_c_string(char (&str)[N]) noexcept
│ │ │ │
152{
│ │ │ │
153 return str;
│ │ │ │
154}
│ │ │ │
│ │ │ │
│ │ │ │
156inline constexpr char const *as_c_string(pqxx::zview str) noexcept
│ │ │ │
157{
│ │ │ │ @@ -251,14 +251,15 @@ │ │ │ │
constexpr zview(char text[], std::ptrdiff_t len) noexcept(noexcept(std::string_view{text, static_cast< std::size_t >(len)}))
Convenience overload: construct using pointer and signed length.
Definition zview.hxx:49
│ │ │ │
constexpr zview(char const text[], std::ptrdiff_t len) noexcept(noexcept(std::string_view{text, static_cast< std::size_t >(len)}))
Convenience overload: construct using pointer and signed length.
Definition zview.hxx:43
│ │ │ │
constexpr zview(char const str[]) noexcept(noexcept(std::string_view{str}))
Construct a zview from a C-style string.
Definition zview.hxx:78
│ │ │ │
constexpr zview(std::string_view other) noexcept
Explicitly promote a string_view to a zview.
Definition zview.hxx:55
│ │ │ │
zview(std::string const &str) noexcept
Definition zview.hxx:69
│ │ │ │
Internal items for libpqxx' own use. Do not use these yourself.
Definition encodings.cxx:33
│ │ │ │
constexpr char const * as_c_string(char const str[]) noexcept
Get a raw C string pointer.
Definition zview.hxx:145
│ │ │ │ +
composite_field_parser< T > specialize_parse_composite_field(encoding_group enc)
Look up implementation of parse_composite_field for ENC.
Definition array-composite.hxx:274
│ │ │ │
The home of all libpqxx classes, functions, templates, etc.
Definition array.cxx:27
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │