sqlalchemy-cratedb 0.42.0.dev2__tar.gz → 0.43.1__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.1}/CHANGES.md +29 -3
- sqlalchemy_cratedb-0.43.1/CLAUDE.md +73 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/DEVELOP.md +13 -0
- {sqlalchemy_cratedb-0.42.0.dev2/src/sqlalchemy_cratedb.egg-info → sqlalchemy_cratedb-0.43.1}/PKG-INFO +11 -14
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/backlog.md +2 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/pyproject.toml +66 -92
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/src/sqlalchemy_cratedb/compat/core20.py +24 -6
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/src/sqlalchemy_cratedb/compiler.py +8 -8
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/src/sqlalchemy_cratedb/dialect.py +40 -18
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/src/sqlalchemy_cratedb/sa_version.py +1 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/src/sqlalchemy_cratedb/support/polyfill.py +4 -2
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/src/sqlalchemy_cratedb/type/__init__.py +0 -2
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/src/sqlalchemy_cratedb/type/array.py +1 -0
- sqlalchemy_cratedb-0.43.1/src/sqlalchemy_cratedb/util.py +27 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1/src/sqlalchemy_cratedb.egg-info}/PKG-INFO +11 -14
- sqlalchemy_cratedb-0.43.1/src/sqlalchemy_cratedb.egg-info/SOURCES.txt +45 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/src/sqlalchemy_cratedb.egg-info/requires.txt +8 -8
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/tests/test_error_handling.py +5 -6
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/tests/test_schema.py +0 -4
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/tests/test_support_pandas.py +32 -3
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/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.1}/CODE_OF_CONDUCT.md +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/CONTRIBUTING.md +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/LICENSE +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/MANIFEST.in +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/NOTICE +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/README.md +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2/docs/.crate-docs/.build → sqlalchemy_cratedb-0.43.1/docs/_extra}/robots.txt +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/docs/requirements.txt +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/setup.cfg +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/setup.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/src/sqlalchemy_cratedb/__init__.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/src/sqlalchemy_cratedb/compat/__init__.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/src/sqlalchemy_cratedb/compat/api13.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/src/sqlalchemy_cratedb/compat/core10.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/src/sqlalchemy_cratedb/compat/core14.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/src/sqlalchemy_cratedb/predicate.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/src/sqlalchemy_cratedb/support/__init__.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/src/sqlalchemy_cratedb/support/pandas.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/src/sqlalchemy_cratedb/support/util.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/src/sqlalchemy_cratedb/type/geo.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/src/sqlalchemy_cratedb/type/object.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/src/sqlalchemy_cratedb/type/vector.py +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/src/sqlalchemy_cratedb.egg-info/dependency_links.txt +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/src/sqlalchemy_cratedb.egg-info/entry_points.txt +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/src/sqlalchemy_cratedb.egg-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.42.0.dev2 → sqlalchemy_cratedb-0.43.1}/tests/test_support_util.py +0 -0
|
@@ -1,9 +1,35 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## 2026/06/22 0.43.1
|
|
4
|
+
- Compiler: Fixed `AttributeError: 'CrateCompilerSA20' object has no attribute
|
|
5
|
+
'visit_on_conflict_do_update'` by forwarding calls to
|
|
6
|
+
`PGCompiler.visit_on_conflict_do_update`
|
|
7
|
+
|
|
8
|
+
## 2026/06/17 0.43.0
|
|
9
|
+
- Types: Improved support for FLOAT type, converging to FLOAT vs. DOUBLE
|
|
10
|
+
- Types: Added method `ObjectArray.as_generic` for better reverse type lookups
|
|
11
|
+
- Types: Improved type mappings for better reverse type lookups / reflections
|
|
12
|
+
- Consequently used upper-case type definitions from `sqlalchemy.types`
|
|
13
|
+
- Added `timestamp without time zone` types (scalar and array)
|
|
14
|
+
- On SQLAlchemy 2, mapped `real` and `double{_precision}` types to the
|
|
15
|
+
newly introduced `sqltypes.{DOUBLE,DOUBLE_PRECISION}` types
|
|
16
|
+
- Compiler: Made `CREATE INDEX` a no-op, only emitting `SELECT 1`, because CrateDB
|
|
17
|
+
does not support that statement
|
|
18
|
+
- Dialect: Added methods concerned with isolation levels as no-ops
|
|
19
|
+
- Types: Started emulating PostgreSQL's `JSON(B)` types using CrateDB's `OBJECT`
|
|
20
|
+
- Dialect: now uses `paramstyle = "pyformat"` supported in crate-python 2.2.1.
|
|
21
|
+
Because of this the SQL statements logged or inspected will contain
|
|
22
|
+
`%(name)s` placeholders instead of `?`.
|
|
23
|
+
- Removed support for Python versions < 3.10
|
|
24
|
+
|
|
25
|
+
## 2026/05/28 0.42.0
|
|
26
|
+
- Added support for SQL Alchemy 2.1
|
|
27
|
+
- Added support for Python 3.14
|
|
4
28
|
- Added canonical [PostgreSQL client parameter `sslmode`], implementing
|
|
5
|
-
`sslmode=
|
|
6
|
-
verifying the host name.
|
|
29
|
+
`sslmode=require` to connect to SSL-enabled CrateDB instances without
|
|
30
|
+
verifying the host name. The previous `ssl=true` parameter is flagged
|
|
31
|
+
for deprecation, therefore `sslmode` takes precedence while both
|
|
32
|
+
options coexist.
|
|
7
33
|
|
|
8
34
|
[PostgreSQL client parameter `sslmode`]: https://www.postgresql.org/docs/current/libpq-ssl.html#LIBPQ-SSL-PROTECTION
|
|
9
35
|
|
|
@@ -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
|
|
@@ -32,6 +32,19 @@ Format code:
|
|
|
32
32
|
|
|
33
33
|
poe format
|
|
34
34
|
|
|
35
|
+
## Pre-commit hooks
|
|
36
|
+
|
|
37
|
+
The repository ships a `.pre-commit-config.yaml` that runs the same linters
|
|
38
|
+
as CI (`ruff check` + `ruff format --check`) on every commit. To install:
|
|
39
|
+
|
|
40
|
+
pip install pre-commit
|
|
41
|
+
pre-commit install
|
|
42
|
+
|
|
43
|
+
After that, linting runs automatically before each `git commit`. To run it
|
|
44
|
+
manually across all files:
|
|
45
|
+
|
|
46
|
+
pre-commit run --all-files
|
|
47
|
+
|
|
35
48
|
|
|
36
49
|
## Preparing a release
|
|
37
50
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlalchemy-cratedb
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.43.1
|
|
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.1}/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.1}/src/sqlalchemy_cratedb/compiler.py
RENAMED
|
@@ -225,6 +225,9 @@ class CrateTypeCompiler(compiler.GenericTypeCompiler):
|
|
|
225
225
|
def visit_DECIMAL(self, type_, **kw):
|
|
226
226
|
return "DOUBLE"
|
|
227
227
|
|
|
228
|
+
def visit_double(self, type_, **kw):
|
|
229
|
+
return "DOUBLE"
|
|
230
|
+
|
|
228
231
|
def visit_BIGINT(self, type_, **kw):
|
|
229
232
|
return "LONG"
|
|
230
233
|
|
|
@@ -265,9 +268,6 @@ class CrateTypeCompiler(compiler.GenericTypeCompiler):
|
|
|
265
268
|
"""
|
|
266
269
|
return "TIMESTAMP %s" % ((type_.timezone and "WITH" or "WITHOUT") + " TIME ZONE",)
|
|
267
270
|
|
|
268
|
-
def visit_BLOB(self, type_, **kw):
|
|
269
|
-
return "STRING"
|
|
270
|
-
|
|
271
271
|
def visit_FLOAT(self, type_, **kw):
|
|
272
272
|
"""
|
|
273
273
|
From `sqlalchemy.sql.sqltypes.Float`.
|
|
@@ -282,12 +282,9 @@ class CrateTypeCompiler(compiler.GenericTypeCompiler):
|
|
|
282
282
|
``DOUBLE PRECISION``. Other third party dialects may have similar
|
|
283
283
|
behavior.
|
|
284
284
|
"""
|
|
285
|
-
if
|
|
286
|
-
return "FLOAT"
|
|
287
|
-
elif type_.precision <= 24:
|
|
288
|
-
return "FLOAT"
|
|
289
|
-
else:
|
|
285
|
+
if type_.precision and type_.precision > 24:
|
|
290
286
|
return "DOUBLE"
|
|
287
|
+
return "FLOAT"
|
|
291
288
|
|
|
292
289
|
def visit_JSON(self, type_, **kw):
|
|
293
290
|
return "OBJECT"
|
|
@@ -297,6 +294,9 @@ class CrateTypeCompiler(compiler.GenericTypeCompiler):
|
|
|
297
294
|
|
|
298
295
|
|
|
299
296
|
class CrateCompiler(compiler.SQLCompiler):
|
|
297
|
+
visit_on_conflict_do_update = PGCompiler.visit_on_conflict_do_update
|
|
298
|
+
_on_conflict_target = PGCompiler._on_conflict_target
|
|
299
|
+
|
|
300
300
|
def visit_getitem_binary(self, binary, operator, **kw):
|
|
301
301
|
return "{0}['{1}']".format(self.process(binary.left, **kw), binary.right.value)
|
|
302
302
|
|