sqlalchemy-cratedb 0.42.0.dev2__tar.gz → 0.43.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/CHANGES.md +27 -3
- sqlalchemy_cratedb-0.43.0/CLAUDE.md +73 -0
- {sqlalchemy_cratedb-0.42.0.dev2/src/sqlalchemy_cratedb.egg-info → sqlalchemy_cratedb-0.43.0}/PKG-INFO +11 -14
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/backlog.md +2 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/pyproject.toml +66 -92
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb/compat/core20.py +24 -6
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb/compiler.py +8 -8
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb/dialect.py +40 -18
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb/sa_version.py +1 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb/support/polyfill.py +4 -2
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb/type/__init__.py +0 -2
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb/type/array.py +1 -0
- sqlalchemy_cratedb-0.43.0/src/sqlalchemy_cratedb/util.py +27 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0/src/sqlalchemy_cratedb.egg-info}/PKG-INFO +11 -14
- sqlalchemy_cratedb-0.43.0/src/sqlalchemy_cratedb.egg-info/SOURCES.txt +45 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb.egg-info/requires.txt +8 -8
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/tests/test_error_handling.py +5 -6
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/tests/test_schema.py +0 -4
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/tests/test_support_pandas.py +32 -3
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/tests/test_support_polyfill.py +3 -3
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.build/_sources/advanced-querying.rst.txt +0 -335
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.build/_sources/crud.rst.txt +0 -301
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.build/_sources/data-types.rst.txt +0 -87
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.build/_sources/dataframe.rst.txt +0 -258
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.build/_sources/getting-started.rst.txt +0 -211
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.build/_sources/index-all.rst.txt +0 -21
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.build/_sources/index.rst.txt +0 -253
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.build/_sources/inspection-reflection.rst.txt +0 -126
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.build/_sources/install.rst.txt +0 -50
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.build/_sources/migrate-from-crate-client.md.txt +0 -50
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.build/_sources/overview.rst.txt +0 -761
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.build/_sources/support.md.txt +0 -243
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.build/_sources/working-with-types.rst.txt +0 -303
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.build/_static/bundle/main.js.LICENSE.txt +0 -27
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.build/_static/vendor/furo/scripts/furo.js.LICENSE.txt +0 -7
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.build/output.txt +0 -13
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/MarkupSafe-3.0.2.dist-info/LICENSE.txt +0 -28
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/MarkupSafe-3.0.2.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/PyYAML-6.0.2.dist-info/top_level.txt +0 -2
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/alabaster-0.7.16.dist-info/entry_points.txt +0 -3
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/babel-2.16.0.dist-info/entry_points.txt +0 -20
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/babel-2.16.0.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/certifi-2024.8.30.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/charset_normalizer-3.4.0.dist-info/entry_points.txt +0 -2
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/charset_normalizer-3.4.0.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/colorama-0.4.6.dist-info/licenses/LICENSE.txt +0 -27
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/crate/theme/rtd/crate/static/bundle/main.js.LICENSE.txt +0 -27
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/crate/theme/rtd/crate/static/vendor/furo/scripts/furo.js.LICENSE.txt +0 -7
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/crate_docs_theme-0.36.1.dist-info/namespace_packages.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/crate_docs_theme-0.36.1.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/README.txt +0 -17
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isoamsa.txt +0 -162
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isoamsb.txt +0 -126
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isoamsc.txt +0 -29
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isoamsn.txt +0 -96
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isoamso.txt +0 -62
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isoamsr.txt +0 -191
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isobox.txt +0 -46
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isocyr1.txt +0 -73
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isocyr2.txt +0 -32
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isodia.txt +0 -20
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isogrk1.txt +0 -55
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isogrk2.txt +0 -26
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isogrk3.txt +0 -52
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isogrk4-wide.txt +0 -49
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isogrk4.txt +0 -8
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isolat1.txt +0 -68
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isolat2.txt +0 -128
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isomfrk-wide.txt +0 -58
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isomfrk.txt +0 -11
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isomopf-wide.txt +0 -32
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isomopf.txt +0 -13
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isomscr-wide.txt +0 -58
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isomscr.txt +0 -17
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isonum.txt +0 -82
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isopub.txt +0 -90
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isotech.txt +0 -168
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/mmlalias.txt +0 -554
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/mmlextra-wide.txt +0 -113
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/mmlextra.txt +0 -87
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/s5defs.txt +0 -68
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/xhtml1-lat1.txt +0 -102
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/xhtml1-special.txt +0 -37
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/xhtml1-symbol.txt +0 -130
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/writers/html4css1/template.txt +0 -8
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/writers/html5_polyglot/template.txt +0 -8
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/writers/pep_html/template.txt +0 -25
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/writers/s5_html/themes/README.txt +0 -6
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils-0.19.dist-info/COPYING.txt +0 -157
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils-0.19.dist-info/entry_points.txt +0 -3
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils-0.19.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils_stubs-0.0.22.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/furo/theme/furo/static/scripts/furo.js.LICENSE.txt +0 -7
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/furo-2024.5.6.dist-info/entry_points.txt +0 -2
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/imagesize-1.4.1.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/importlib_metadata-8.5.0.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/jinja2-3.1.4.dist-info/LICENSE.txt +0 -28
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/jinja2-3.1.4.dist-info/entry_points.txt +0 -3
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/linkify_it_py-2.0.3.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/livereload-2.7.0.dist-info/entry_points.txt +0 -2
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/livereload-2.7.0.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/markdown_it_py-3.0.0.dist-info/entry_points.txt +0 -3
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/myst_parser-3.0.1.dist-info/entry_points.txt +0 -10
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/pip/_vendor/vendor.txt +0 -18
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/pip-24.3.1.dist-info/AUTHORS.txt +0 -799
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/pip-24.3.1.dist-info/LICENSE.txt +0 -20
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/pip-24.3.1.dist-info/entry_points.txt +0 -3
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/pip-24.3.1.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/pygments-2.18.0.dist-info/entry_points.txt +0 -2
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/requests-2.32.3.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/setuptools-58.1.0.dist-info/entry_points.txt +0 -56
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/setuptools-58.1.0.dist-info/top_level.txt +0 -3
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/snowballstemmer-2.2.0.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx-7.1.2.dist-info/entry_points.txt +0 -6
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx_autobuild-2021.3.14.dist-info/entry_points.txt +0 -3
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx_basic_ng-1.0.0b2.dist-info/entry_points.txt +0 -2
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx_basic_ng-1.0.0b2.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx_copybutton-0.5.2.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx_design/compiled/material-icons_VERSION.txt +0 -3
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx_design_elements-0.4.0.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx_sitemap-2.6.0.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx_togglebutton-0.3.2.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinxcontrib_jsmath-1.0.1.dist-info/namespace_packages.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinxcontrib_jsmath-1.0.1.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinxcontrib_mermaid-1.0.0.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinxcontrib_plantuml-0.30.dist-info/namespace_packages.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinxcontrib_plantuml-0.30.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinxext_opengraph-0.9.1.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/tornado/test/static/robots.txt +0 -2
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/tornado/test/static_foo.txt +0 -2
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/tornado-6.4.1.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/uc_micro_py-1.0.3.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/urllib3-2.2.3.dist-info/licenses/LICENSE.txt +0 -21
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/wheel/vendored/vendor.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/wheel-0.45.0.dist-info/LICENSE.txt +0 -21
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/wheel-0.45.0.dist-info/entry_points.txt +0 -6
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.venv/lib/python3.9/site-packages/zipp-3.21.0.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/common-build/requirements.txt +0 -12
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/docs/_extra/robots.txt +0 -2
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/docs/requirements.txt +0 -2
- sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/helpers/preview/etc/requirements.txt +0 -3
- sqlalchemy_cratedb-0.42.0.dev2/docs/_extra/robots.txt +0 -4
- sqlalchemy_cratedb-0.42.0.dev2/src/sqlalchemy_cratedb/type/binary.py +0 -44
- sqlalchemy_cratedb-0.42.0.dev2/src/sqlalchemy_cratedb.egg-info/SOURCES.txt +0 -166
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/CODE_OF_CONDUCT.md +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/CONTRIBUTING.md +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/DEVELOP.md +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/LICENSE +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/MANIFEST.in +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/NOTICE +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/README.md +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.build → sqlalchemy_cratedb-0.43.0/docs/_extra}/robots.txt +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/docs/requirements.txt +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/setup.cfg +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/setup.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb/__init__.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb/compat/__init__.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb/compat/api13.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb/compat/core10.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb/compat/core14.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb/predicate.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb/support/__init__.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb/support/pandas.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb/support/util.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb/type/geo.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb/type/object.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb/type/vector.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb.egg-info/dependency_links.txt +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb.egg-info/entry_points.txt +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb.egg-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/tests/test_support_util.py +0 -0
|
@@ -1,9 +1,33 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## 2026/06/17 0.43.0
|
|
4
|
+
- Types: Improved support for FLOAT type, converging to FLOAT vs. DOUBLE
|
|
5
|
+
- Types: Added method `ObjectArray.as_generic` for better reverse type lookups
|
|
6
|
+
- Types: Improved type mappings for better reverse type lookups / reflections
|
|
7
|
+
- Consequently used upper-case type definitions from `sqlalchemy.types`
|
|
8
|
+
- Added `timestamp without time zone` types (scalar and array)
|
|
9
|
+
- On SQLAlchemy 2, mapped `real` and `double{_precision}` types to the
|
|
10
|
+
newly introduced `sqltypes.{DOUBLE,DOUBLE_PRECISION}` types
|
|
11
|
+
- Compiler: Made `CREATE INDEX` a no-op, only emitting `SELECT 1`, because CrateDB
|
|
12
|
+
does not support that statement
|
|
13
|
+
- Compiler: Fixed `AttributeError: 'CrateCompilerSA20' object has no attribute
|
|
14
|
+
'visit_on_conflict_do_update'` by forwarding calls to
|
|
15
|
+
`PGCompiler.visit_on_conflict_do_update`
|
|
16
|
+
- Dialect: Added methods concerned with isolation levels as no-ops
|
|
17
|
+
- Types: Started emulating PostgreSQL's `JSON(B)` types using CrateDB's `OBJECT`
|
|
18
|
+
- Dialect: now uses `paramstyle = "pyformat"` supported in crate-python 2.2.1.
|
|
19
|
+
Because of this the SQL statements logged or inspected will contain
|
|
20
|
+
`%(name)s` placeholders instead of `?`.
|
|
21
|
+
- Removed support for Python versions < 3.10
|
|
22
|
+
|
|
23
|
+
## 2026/05/28 0.42.0
|
|
24
|
+
- Added support for SQL Alchemy 2.1
|
|
25
|
+
- Added support for Python 3.14
|
|
4
26
|
- Added canonical [PostgreSQL client parameter `sslmode`], implementing
|
|
5
|
-
`sslmode=
|
|
6
|
-
verifying the host name.
|
|
27
|
+
`sslmode=require` to connect to SSL-enabled CrateDB instances without
|
|
28
|
+
verifying the host name. The previous `ssl=true` parameter is flagged
|
|
29
|
+
for deprecation, therefore `sslmode` takes precedence while both
|
|
30
|
+
options coexist.
|
|
7
31
|
|
|
8
32
|
[PostgreSQL client parameter `sslmode`]: https://www.postgresql.org/docs/current/libpq-ssl.html#LIBPQ-SSL-PROTECTION
|
|
9
33
|
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Project Overview
|
|
6
|
+
|
|
7
|
+
`sqlalchemy-cratedb` is a SQLAlchemy dialect for CrateDB, a distributed SQL database. It supports SQLAlchemy 1.3 through 2.1 (with ongoing 2.1 compatibility work on the current branch).
|
|
8
|
+
|
|
9
|
+
## Development Setup
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
source bootstrap.sh # Creates .venv with Python 3.11, installs all deps in editable mode
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Environment variables that influence bootstrap:
|
|
16
|
+
- `CRATEDB_VERSION` (default: `5.5.1`) — CrateDB Docker image version
|
|
17
|
+
- `SQLALCHEMY_VERSION` (default: `<2.2`) — SQLAlchemy version constraint
|
|
18
|
+
- `PIP_ALLOW_PRERELEASE=true` — allow pre-release packages
|
|
19
|
+
|
|
20
|
+
## Common Commands
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
poe format # Auto-format code (ruff + black)
|
|
24
|
+
poe lint # Run linters (ruff, validate-pyproject)
|
|
25
|
+
poe test # Run pytest + integration tests
|
|
26
|
+
poe check # lint + test combined
|
|
27
|
+
|
|
28
|
+
# Run specific tests
|
|
29
|
+
pytest tests/dict_test.py
|
|
30
|
+
pytest -k SqlAlchemyCompilerTest
|
|
31
|
+
pytest -k test_score
|
|
32
|
+
|
|
33
|
+
# Run integration/doctests
|
|
34
|
+
python -m unittest -vvv tests/integration.py
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Tests require a live CrateDB instance via Docker (managed automatically by `cratedb_toolkit.testing.testcontainers`).
|
|
38
|
+
|
|
39
|
+
## Architecture
|
|
40
|
+
|
|
41
|
+
### Source layout (`src/sqlalchemy_cratedb/`)
|
|
42
|
+
|
|
43
|
+
- **`dialect.py`** — Core dialect: type mappings, Date/DateTime handling, schema reflection
|
|
44
|
+
- **`compiler.py`** — SQL/DDL compilation: `CrateDDLCompiler`, `CrateTypeCompiler`, `CrateIdentifierPreparer`, and `rewrite_update()` for partial object updates
|
|
45
|
+
- **`predicate.py`** — `match()` predicate for full-text search
|
|
46
|
+
- **`sa_version.py`** — Version detection; exports `SA_VERSION`, `SA_1_4`, `SA_2_0`, `SA_2_1` constants
|
|
47
|
+
- **`compat/`** — Multi-version SQLAlchemy compatibility: `core10.py`, `core14.py`, `core20.py`, `core21.py`, `api13.py`
|
|
48
|
+
- **`type/`** — Custom CrateDB types: `ObjectType` (JSON objects), `ObjectArray`, `FloatVector`, `Geopoint`, `Geoshape`
|
|
49
|
+
- **`support/`** — Integrations and polyfills: `pandas.py` (bulk insert), `polyfill.py` (refresh-after-DML, uniqueness, autoincrement timestamps), `util.py`
|
|
50
|
+
|
|
51
|
+
### Key architectural patterns
|
|
52
|
+
|
|
53
|
+
**Multi-version compatibility:** The `compat/` directory contains separate modules for each major SQLAlchemy version. `sa_version.py` detects the installed version at runtime using `verlib2`, and code conditionally imports from the appropriate compat module. When adding features, check whether they need version-specific handling.
|
|
54
|
+
|
|
55
|
+
**Custom types:** CrateDB types (ObjectType, FloatVector, etc.) implement SQLAlchemy's bind/result processor pattern — `bind_processor()` converts Python → SQL, `result_processor()` converts SQL → Python. The `CrateTypeCompiler` generates the SQL type strings.
|
|
56
|
+
|
|
57
|
+
**Update rewriting:** `compiler.py::rewrite_update()` transforms partial dictionary updates on `ObjectType` columns into CrateDB's subscript assignment syntax (e.g., `obj['key'] = value`).
|
|
58
|
+
|
|
59
|
+
**Polyfills:** `support/polyfill.py` monkey-patches SQLAlchemy internals to add features CrateDB doesn't natively support (e.g., `refresh_after_dml`, `uniqueness_strategy`).
|
|
60
|
+
|
|
61
|
+
### Testing
|
|
62
|
+
|
|
63
|
+
Tests in `tests/` follow two patterns:
|
|
64
|
+
- `*_test.py` files: unit/integration tests using pytest with a live CrateDB instance
|
|
65
|
+
- `tests/integration.py`: doctests for documentation examples, run with `unittest`
|
|
66
|
+
|
|
67
|
+
The `conftest.py` provides a session-scoped `cratedb_service` fixture that starts CrateDB via Docker containers.
|
|
68
|
+
|
|
69
|
+
## Code Style
|
|
70
|
+
|
|
71
|
+
- Line length: 100 characters (ruff + black)
|
|
72
|
+
- Ruff rules enforced: A, B, C4, E, ERA, F, I, PD, RET, S, T20, W, YTT
|
|
73
|
+
- Mypy strict mode is configured but not always enforced in CI
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlalchemy-cratedb
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.43.0
|
|
4
4
|
Summary: SQLAlchemy dialect for CrateDB.
|
|
5
5
|
Author-email: "Crate.io" <office@crate.io>
|
|
6
6
|
License: Apache License 2.0
|
|
@@ -26,14 +26,11 @@ Classifier: Operating System :: POSIX :: Linux
|
|
|
26
26
|
Classifier: Operating System :: Unix
|
|
27
27
|
Classifier: Programming Language :: Python
|
|
28
28
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
29
|
-
Classifier: Programming Language :: Python :: 3.6
|
|
30
|
-
Classifier: Programming Language :: Python :: 3.7
|
|
31
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
32
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
33
29
|
Classifier: Programming Language :: Python :: 3.10
|
|
34
30
|
Classifier: Programming Language :: Python :: 3.11
|
|
35
31
|
Classifier: Programming Language :: Python :: 3.12
|
|
36
32
|
Classifier: Programming Language :: Python :: 3.13
|
|
33
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
37
34
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
38
35
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
39
36
|
Classifier: Programming Language :: SQL
|
|
@@ -59,38 +56,38 @@ Classifier: Topic :: System :: Networking
|
|
|
59
56
|
Classifier: Topic :: System :: Systems Administration
|
|
60
57
|
Classifier: Topic :: Text Processing
|
|
61
58
|
Classifier: Topic :: Utilities
|
|
62
|
-
Requires-Python: >=3.
|
|
59
|
+
Requires-Python: >=3.10
|
|
63
60
|
Description-Content-Type: text/markdown
|
|
64
61
|
License-File: LICENSE
|
|
65
62
|
License-File: NOTICE
|
|
66
63
|
Requires-Dist: backports.zoneinfo<1; python_version < "3.9"
|
|
67
|
-
Requires-Dist: crate<3,>=2
|
|
64
|
+
Requires-Dist: crate<3,>=2.2.1
|
|
68
65
|
Requires-Dist: geojson<4,>=2.5
|
|
69
66
|
Requires-Dist: importlib-metadata; python_version < "3.8"
|
|
70
67
|
Requires-Dist: importlib-resources; python_version < "3.9"
|
|
71
|
-
Requires-Dist: sqlalchemy<2.
|
|
68
|
+
Requires-Dist: sqlalchemy<2.2,>=1
|
|
72
69
|
Requires-Dist: verlib2<0.4
|
|
73
70
|
Provides-Extra: all
|
|
74
71
|
Requires-Dist: sqlalchemy-cratedb[vector]; extra == "all"
|
|
75
72
|
Provides-Extra: develop
|
|
76
|
-
Requires-Dist: mypy<1.
|
|
73
|
+
Requires-Dist: mypy<1.20; extra == "develop"
|
|
77
74
|
Requires-Dist: poethepoet<1; extra == "develop"
|
|
78
75
|
Requires-Dist: pyproject-fmt<3; extra == "develop"
|
|
79
|
-
Requires-Dist: ruff<0.
|
|
76
|
+
Requires-Dist: ruff<0.16; extra == "develop"
|
|
80
77
|
Requires-Dist: validate-pyproject<1; extra == "develop"
|
|
81
78
|
Provides-Extra: doc
|
|
82
79
|
Requires-Dist: crate-docs-theme>=0.26.5; extra == "doc"
|
|
83
|
-
Requires-Dist: sphinx<
|
|
80
|
+
Requires-Dist: sphinx<10,>=3.5; extra == "doc"
|
|
84
81
|
Provides-Extra: release
|
|
85
82
|
Requires-Dist: build<2; extra == "release"
|
|
86
83
|
Requires-Dist: twine<7; extra == "release"
|
|
87
84
|
Provides-Extra: test
|
|
88
85
|
Requires-Dist: cratedb-toolkit[testing]; extra == "test"
|
|
89
86
|
Requires-Dist: dask[dataframe]; extra == "test"
|
|
90
|
-
Requires-Dist: pandas
|
|
87
|
+
Requires-Dist: pandas<2.4; extra == "test"
|
|
91
88
|
Requires-Dist: pueblo>=0.0.7; extra == "test"
|
|
92
|
-
Requires-Dist: pytest<
|
|
93
|
-
Requires-Dist: pytest-cov<
|
|
89
|
+
Requires-Dist: pytest<10; extra == "test"
|
|
90
|
+
Requires-Dist: pytest-cov<8; extra == "test"
|
|
94
91
|
Requires-Dist: pytest-mock<4; extra == "test"
|
|
95
92
|
Provides-Extra: vector
|
|
96
93
|
Requires-Dist: numpy; extra == "vector"
|
|
@@ -21,3 +21,5 @@ From dialect split-off.
|
|
|
21
21
|
- https://docs.sqlalchemy.org/en/20/core/connections.html#sqlalchemy.engine.Connection.execution_options.params.stream_results
|
|
22
22
|
- https://docs.sqlalchemy.org/en/20/core/connections.html#sqlalchemy.engine.Result.yield_per
|
|
23
23
|
- https://github.com/jamescasbon/vertica-sqlalchemy
|
|
24
|
+
- pandas: `index=True`
|
|
25
|
+
- @cratedb: test_table_kwargs_unknown => ColumnUnknownException[Column bazqux unknown]
|
|
@@ -7,10 +7,6 @@ requires = [
|
|
|
7
7
|
|
|
8
8
|
[project]
|
|
9
9
|
name = "sqlalchemy-cratedb"
|
|
10
|
-
#dynamic = [
|
|
11
|
-
# "version",
|
|
12
|
-
#]
|
|
13
|
-
version = "0.42.0.dev2"
|
|
14
10
|
description = "SQLAlchemy dialect for CrateDB."
|
|
15
11
|
readme = "README.md"
|
|
16
12
|
keywords = [
|
|
@@ -28,7 +24,7 @@ license = { text = "Apache License 2.0" }
|
|
|
28
24
|
authors = [
|
|
29
25
|
{ name = "Crate.io", email = "office@crate.io" },
|
|
30
26
|
]
|
|
31
|
-
requires-python = ">=3.
|
|
27
|
+
requires-python = ">=3.10"
|
|
32
28
|
classifiers = [
|
|
33
29
|
"Development Status :: 5 - Production/Stable",
|
|
34
30
|
"Environment :: Plugins",
|
|
@@ -47,14 +43,11 @@ classifiers = [
|
|
|
47
43
|
"Operating System :: Unix",
|
|
48
44
|
"Programming Language :: Python",
|
|
49
45
|
"Programming Language :: Python :: 3 :: Only",
|
|
50
|
-
"Programming Language :: Python :: 3.6",
|
|
51
|
-
"Programming Language :: Python :: 3.7",
|
|
52
|
-
"Programming Language :: Python :: 3.8",
|
|
53
|
-
"Programming Language :: Python :: 3.9",
|
|
54
46
|
"Programming Language :: Python :: 3.10",
|
|
55
47
|
"Programming Language :: Python :: 3.11",
|
|
56
48
|
"Programming Language :: Python :: 3.12",
|
|
57
49
|
"Programming Language :: Python :: 3.13",
|
|
50
|
+
"Programming Language :: Python :: 3.14",
|
|
58
51
|
"Programming Language :: Python :: Implementation :: CPython",
|
|
59
52
|
"Programming Language :: Python :: Implementation :: PyPy",
|
|
60
53
|
"Programming Language :: SQL",
|
|
@@ -81,28 +74,31 @@ classifiers = [
|
|
|
81
74
|
"Topic :: Text Processing",
|
|
82
75
|
"Topic :: Utilities",
|
|
83
76
|
]
|
|
77
|
+
dynamic = [
|
|
78
|
+
"version",
|
|
79
|
+
]
|
|
84
80
|
dependencies = [
|
|
85
81
|
"backports.zoneinfo<1; python_version<'3.9'",
|
|
86
|
-
"crate>=2,<3",
|
|
82
|
+
"crate>=2.2.1,<3",
|
|
87
83
|
"geojson>=2.5,<4",
|
|
88
84
|
"importlib-metadata; python_version<'3.8'",
|
|
89
85
|
"importlib-resources; python_version<'3.9'",
|
|
90
|
-
"sqlalchemy>=1,<2.
|
|
86
|
+
"sqlalchemy>=1,<2.2",
|
|
91
87
|
"verlib2<0.4",
|
|
92
88
|
]
|
|
93
89
|
optional-dependencies.all = [
|
|
94
90
|
"sqlalchemy-cratedb[vector]",
|
|
95
91
|
]
|
|
96
92
|
optional-dependencies.develop = [
|
|
97
|
-
"mypy<1.
|
|
93
|
+
"mypy<1.20",
|
|
98
94
|
"poethepoet<1",
|
|
99
95
|
"pyproject-fmt<3",
|
|
100
|
-
"ruff<0.
|
|
96
|
+
"ruff<0.16",
|
|
101
97
|
"validate-pyproject<1",
|
|
102
98
|
]
|
|
103
99
|
optional-dependencies.doc = [
|
|
104
100
|
"crate-docs-theme>=0.26.5",
|
|
105
|
-
"sphinx>=3.5,<
|
|
101
|
+
"sphinx>=3.5,<10",
|
|
106
102
|
]
|
|
107
103
|
optional-dependencies.release = [
|
|
108
104
|
"build<2",
|
|
@@ -111,10 +107,10 @@ optional-dependencies.release = [
|
|
|
111
107
|
optional-dependencies.test = [
|
|
112
108
|
"cratedb-toolkit[testing]",
|
|
113
109
|
"dask[dataframe]",
|
|
114
|
-
"pandas
|
|
110
|
+
"pandas<2.4",
|
|
115
111
|
"pueblo>=0.0.7",
|
|
116
|
-
"pytest<
|
|
117
|
-
"pytest-cov<
|
|
112
|
+
"pytest<10",
|
|
113
|
+
"pytest-cov<8",
|
|
118
114
|
"pytest-mock<4",
|
|
119
115
|
]
|
|
120
116
|
optional-dependencies.vector = [
|
|
@@ -131,10 +127,7 @@ line-length = 100
|
|
|
131
127
|
|
|
132
128
|
[tool.ruff]
|
|
133
129
|
line-length = 100
|
|
134
|
-
|
|
135
|
-
extend-exclude = [
|
|
136
|
-
]
|
|
137
|
-
|
|
130
|
+
extend-exclude = []
|
|
138
131
|
lint.select = [
|
|
139
132
|
# Builtins
|
|
140
133
|
"A",
|
|
@@ -162,7 +155,6 @@ lint.select = [
|
|
|
162
155
|
# flake8-2020
|
|
163
156
|
"YTT",
|
|
164
157
|
]
|
|
165
|
-
|
|
166
158
|
lint.extend-ignore = [
|
|
167
159
|
# zip() without an explicit strict= parameter
|
|
168
160
|
"B905",
|
|
@@ -170,8 +162,6 @@ lint.extend-ignore = [
|
|
|
170
162
|
"C402",
|
|
171
163
|
# Unnecessary `map` usage (rewrite using a `set` comprehension)
|
|
172
164
|
"C417",
|
|
173
|
-
# df is a bad variable name. Be kinder to your future self.
|
|
174
|
-
"PD901",
|
|
175
165
|
# Unnecessary variable assignment before `return` statement
|
|
176
166
|
"RET504",
|
|
177
167
|
# Unnecessary `elif` after `return` statement
|
|
@@ -181,11 +171,11 @@ lint.extend-ignore = [
|
|
|
181
171
|
# Possible SQL injection vector through string-based query construction
|
|
182
172
|
"S608",
|
|
183
173
|
]
|
|
184
|
-
|
|
185
174
|
lint.per-file-ignores."examples/*" = [
|
|
186
|
-
"
|
|
175
|
+
"E501", # Line too long
|
|
176
|
+
"ERA001", # Found commented-out code
|
|
177
|
+
"T201", # Allow `print`
|
|
187
178
|
]
|
|
188
|
-
|
|
189
179
|
lint.per-file-ignores."tests/*" = [
|
|
190
180
|
"S101", # Allow use of `assert`, and `print`
|
|
191
181
|
"S608", # Possible SQL injection vector through string-based query construction
|
|
@@ -193,106 +183,90 @@ lint.per-file-ignores."tests/*" = [
|
|
|
193
183
|
"W293", # Blank line contains whitespace
|
|
194
184
|
]
|
|
195
185
|
|
|
196
|
-
[tool.
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
186
|
+
[tool.mypy]
|
|
187
|
+
mypy_path = "src"
|
|
188
|
+
packages = [ "sqlalchemy_cratedb" ]
|
|
189
|
+
exclude = []
|
|
190
|
+
namespace_packages = true
|
|
191
|
+
explicit_package_bases = true
|
|
192
|
+
ignore_missing_imports = true
|
|
193
|
+
check_untyped_defs = true
|
|
194
|
+
implicit_optional = true
|
|
195
|
+
install_types = true
|
|
196
|
+
non_interactive = true
|
|
197
|
+
|
|
198
|
+
[tool.pytest]
|
|
199
|
+
ini_options.minversion = "2.0"
|
|
200
|
+
ini_options.testpaths = [
|
|
209
201
|
"examples",
|
|
210
202
|
"sqlalchemy_cratedb",
|
|
211
203
|
"tests",
|
|
212
204
|
]
|
|
213
|
-
|
|
214
|
-
"
|
|
215
|
-
"*_test.py",
|
|
216
|
-
]
|
|
217
|
-
xfail_strict = true
|
|
218
|
-
markers = [
|
|
205
|
+
ini_options.pythonpath = [
|
|
206
|
+
"src",
|
|
219
207
|
]
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
"src/",
|
|
208
|
+
ini_options.python_files = [
|
|
209
|
+
"*_test.py",
|
|
210
|
+
"test_*.py",
|
|
224
211
|
]
|
|
212
|
+
ini_options.addopts = """
|
|
213
|
+
-rfEXs -p pytester --strict-markers --verbosity=3
|
|
214
|
+
--cov --cov-report=term-missing --cov-report=xml
|
|
215
|
+
"""
|
|
216
|
+
ini_options.markers = []
|
|
217
|
+
ini_options.xfail_strict = true
|
|
218
|
+
ini_options.log_format = "%(asctime)-15s [%(name)-36s] %(levelname)-8s: %(message)s"
|
|
219
|
+
ini_options.log_level = "DEBUG"
|
|
220
|
+
ini_options.log_cli_level = "DEBUG"
|
|
225
221
|
|
|
226
|
-
[tool.coverage
|
|
227
|
-
branch = false
|
|
228
|
-
omit = [
|
|
222
|
+
[tool.coverage]
|
|
223
|
+
run.branch = false
|
|
224
|
+
run.omit = [
|
|
229
225
|
"tests/*",
|
|
230
226
|
]
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
exclude_lines = [
|
|
227
|
+
paths.source = [
|
|
228
|
+
"src/",
|
|
229
|
+
]
|
|
230
|
+
report.exclude_lines = [
|
|
236
231
|
"# pragma: no cover",
|
|
237
232
|
"raise NotImplemented",
|
|
238
233
|
]
|
|
234
|
+
report.fail_under = 0
|
|
235
|
+
report.show_missing = true
|
|
239
236
|
|
|
240
|
-
[tool.
|
|
241
|
-
mypy_path = "src"
|
|
242
|
-
packages = [ "sqlalchemy_cratedb" ]
|
|
243
|
-
exclude = [
|
|
244
|
-
]
|
|
245
|
-
check_untyped_defs = true
|
|
246
|
-
explicit_package_bases = true
|
|
247
|
-
ignore_missing_imports = true
|
|
248
|
-
implicit_optional = true
|
|
249
|
-
install_types = true
|
|
250
|
-
namespace_packages = true
|
|
251
|
-
non_interactive = true
|
|
252
|
-
# Needed until `mypy-0.990` for `ConverterDefinition` in `converter.py`.
|
|
253
|
-
# https://github.com/python/mypy/issues/731#issuecomment-1260976955
|
|
254
|
-
# enable_recursive_aliases = true
|
|
255
|
-
|
|
256
|
-
[tool.versioningit.vcs]
|
|
257
|
-
method = "git-archive"
|
|
258
|
-
default-tag = "0.0.0"
|
|
259
|
-
describe-subst = "$Format:%(describe:tags)$"
|
|
260
|
-
|
|
237
|
+
[tool.poe]
|
|
261
238
|
# ===================
|
|
262
239
|
# Tasks configuration
|
|
263
240
|
# ===================
|
|
264
|
-
|
|
265
|
-
[tool.poe.tasks]
|
|
266
|
-
|
|
267
|
-
check = [
|
|
241
|
+
tasks.check = [
|
|
268
242
|
"lint",
|
|
269
243
|
"test",
|
|
270
244
|
]
|
|
271
|
-
|
|
272
|
-
format = [
|
|
245
|
+
tasks.format = [
|
|
273
246
|
# Format project metadata.
|
|
274
247
|
{ cmd = "pyproject-fmt --keep-full-version pyproject.toml" },
|
|
275
|
-
|
|
276
248
|
# Format code.
|
|
277
249
|
# Configure Ruff not to auto-fix a few items that are useful in workbench mode.
|
|
278
250
|
# e.g.: unused imports (F401), unused variables (F841), `print` statements (T201), commented-out code (ERA001)
|
|
279
251
|
{ cmd = "ruff format" },
|
|
280
252
|
{ cmd = "ruff check --fix --ignore=ERA --ignore=F401 --ignore=F841 --ignore=T20 --ignore=ERA001" },
|
|
281
253
|
]
|
|
282
|
-
|
|
283
|
-
lint = [
|
|
254
|
+
tasks.lint = [
|
|
284
255
|
{ cmd = "ruff format --check" },
|
|
285
256
|
{ cmd = "ruff check" },
|
|
286
257
|
{ cmd = "validate-pyproject pyproject.toml" },
|
|
287
258
|
# { cmd = "mypy" },
|
|
288
259
|
]
|
|
289
|
-
|
|
290
|
-
release = [
|
|
260
|
+
tasks.release = [
|
|
291
261
|
{ cmd = "python -m build" },
|
|
292
262
|
{ cmd = "twine upload --skip-existing dist/*" },
|
|
293
263
|
]
|
|
294
|
-
|
|
295
|
-
test = [
|
|
264
|
+
tasks.test = [
|
|
296
265
|
{ cmd = "pytest" },
|
|
297
266
|
{ cmd = "python -m unittest -vvv tests/integration.py" },
|
|
298
267
|
]
|
|
268
|
+
|
|
269
|
+
[tool.versioningit]
|
|
270
|
+
vcs.method = "git-archive"
|
|
271
|
+
vcs.default-tag = "0.0.0"
|
|
272
|
+
vcs.describe-subst = "$Format:%(describe:tags)$"
|
{sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb/compat/core20.py
RENAMED
|
@@ -46,18 +46,31 @@ from sqlalchemy.sql.dml import DMLState, _DMLColumnElement
|
|
|
46
46
|
from sqlalchemy.sql.dml import isinsert as _compile_state_isinsert
|
|
47
47
|
|
|
48
48
|
from sqlalchemy_cratedb.compiler import CrateCompiler
|
|
49
|
+
from sqlalchemy_cratedb.sa_version import SA_2_1, SA_VERSION
|
|
49
50
|
|
|
50
51
|
|
|
51
52
|
class CrateCompilerSA20(CrateCompiler):
|
|
52
|
-
def visit_update(self, update_stmt, **kw):
|
|
53
|
+
def visit_update(self, update_stmt, visiting_cte=None, **kw):
|
|
53
54
|
compile_state = update_stmt._compile_state_factory(update_stmt, self, **kw)
|
|
54
55
|
update_stmt = compile_state.statement
|
|
55
56
|
|
|
56
|
-
#
|
|
57
|
+
# CrateDB patch.
|
|
57
58
|
if not compile_state._dict_parameters and not hasattr(update_stmt, "_crate_specific"):
|
|
58
|
-
|
|
59
|
+
if SA_VERSION >= SA_2_1:
|
|
60
|
+
return super().visit_update(update_stmt, visiting_cte=visiting_cte, **kw)
|
|
61
|
+
else:
|
|
62
|
+
return super().visit_update(update_stmt, **kw)
|
|
63
|
+
|
|
64
|
+
# SA 2.1 introduced visiting_cte for CTE support.
|
|
65
|
+
if SA_VERSION >= SA_2_1:
|
|
66
|
+
if visiting_cte is not None:
|
|
67
|
+
kw["visiting_cte"] = visiting_cte
|
|
68
|
+
toplevel = False
|
|
69
|
+
else:
|
|
70
|
+
toplevel = not self.stack
|
|
71
|
+
else:
|
|
72
|
+
toplevel = not self.stack
|
|
59
73
|
|
|
60
|
-
toplevel = not self.stack
|
|
61
74
|
if toplevel:
|
|
62
75
|
self.isupdate = True
|
|
63
76
|
if not self.dml_compile_state:
|
|
@@ -152,7 +165,11 @@ class CrateCompilerSA20(CrateCompiler):
|
|
|
152
165
|
if t:
|
|
153
166
|
text += " WHERE " + t
|
|
154
167
|
|
|
155
|
-
|
|
168
|
+
# SA 2.1 renamed update_limit_clause to update_post_criteria_clause.
|
|
169
|
+
if SA_VERSION >= SA_2_1:
|
|
170
|
+
limit_clause = self.update_post_criteria_clause(update_stmt, **kw)
|
|
171
|
+
else:
|
|
172
|
+
limit_clause = self.update_limit_clause(update_stmt)
|
|
156
173
|
if limit_clause:
|
|
157
174
|
text += " " + limit_clause
|
|
158
175
|
|
|
@@ -275,7 +292,8 @@ def _get_crud_params(
|
|
|
275
292
|
assert mp is not None
|
|
276
293
|
spd = mp[0]
|
|
277
294
|
stmt_parameter_tuples = list(spd.items())
|
|
278
|
-
elif compile_state._ordered_values:
|
|
295
|
+
elif SA_VERSION < SA_2_1 and compile_state._ordered_values:
|
|
296
|
+
# _ordered_values was removed in SA 2.1.
|
|
279
297
|
spd = compile_state._dict_parameters
|
|
280
298
|
stmt_parameter_tuples = compile_state._ordered_values
|
|
281
299
|
elif compile_state._dict_parameters:
|
{sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.0}/src/sqlalchemy_cratedb/compiler.py
RENAMED
|
@@ -213,6 +213,9 @@ class CrateDDLCompiler(compiler.DDLCompiler):
|
|
|
213
213
|
|
|
214
214
|
|
|
215
215
|
class CrateTypeCompiler(compiler.GenericTypeCompiler):
|
|
216
|
+
visit_on_conflict_do_update = PGCompiler.visit_on_conflict_do_update
|
|
217
|
+
_on_conflict_target = PGCompiler._on_conflict_target
|
|
218
|
+
|
|
216
219
|
def visit_string(self, type_, **kw):
|
|
217
220
|
return "STRING"
|
|
218
221
|
|
|
@@ -225,6 +228,9 @@ class CrateTypeCompiler(compiler.GenericTypeCompiler):
|
|
|
225
228
|
def visit_DECIMAL(self, type_, **kw):
|
|
226
229
|
return "DOUBLE"
|
|
227
230
|
|
|
231
|
+
def visit_double(self, type_, **kw):
|
|
232
|
+
return "DOUBLE"
|
|
233
|
+
|
|
228
234
|
def visit_BIGINT(self, type_, **kw):
|
|
229
235
|
return "LONG"
|
|
230
236
|
|
|
@@ -265,9 +271,6 @@ class CrateTypeCompiler(compiler.GenericTypeCompiler):
|
|
|
265
271
|
"""
|
|
266
272
|
return "TIMESTAMP %s" % ((type_.timezone and "WITH" or "WITHOUT") + " TIME ZONE",)
|
|
267
273
|
|
|
268
|
-
def visit_BLOB(self, type_, **kw):
|
|
269
|
-
return "STRING"
|
|
270
|
-
|
|
271
274
|
def visit_FLOAT(self, type_, **kw):
|
|
272
275
|
"""
|
|
273
276
|
From `sqlalchemy.sql.sqltypes.Float`.
|
|
@@ -282,12 +285,9 @@ class CrateTypeCompiler(compiler.GenericTypeCompiler):
|
|
|
282
285
|
``DOUBLE PRECISION``. Other third party dialects may have similar
|
|
283
286
|
behavior.
|
|
284
287
|
"""
|
|
285
|
-
if
|
|
286
|
-
return "FLOAT"
|
|
287
|
-
elif type_.precision <= 24:
|
|
288
|
-
return "FLOAT"
|
|
289
|
-
else:
|
|
288
|
+
if type_.precision and type_.precision > 24:
|
|
290
289
|
return "DOUBLE"
|
|
290
|
+
return "FLOAT"
|
|
291
291
|
|
|
292
292
|
def visit_JSON(self, type_, **kw):
|
|
293
293
|
return "OBJECT"
|