sqlalchemy-cratedb 0.41.0.dev2__tar.gz → 0.42.0.dev1__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.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/CHANGES.md +7 -0
- {sqlalchemy_cratedb-0.41.0.dev2/src/sqlalchemy_cratedb.egg-info → sqlalchemy_cratedb-0.42.0.dev1}/PKG-INFO +13 -11
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/pyproject.toml +18 -16
- sqlalchemy_cratedb-0.42.0.dev1/setup.cfg +4 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb/__init__.py +15 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb/compat/core14.py +1 -5
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb/compiler.py +41 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb/dialect.py +56 -28
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb/type/__init__.py +2 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb/type/array.py +5 -0
- sqlalchemy_cratedb-0.42.0.dev1/src/sqlalchemy_cratedb/type/binary.py +44 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1/src/sqlalchemy_cratedb.egg-info}/PKG-INFO +13 -11
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb.egg-info/SOURCES.txt +1 -1
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb.egg-info/requires.txt +12 -11
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/tests/test_schema.py +4 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/tests/test_support_pandas.py +46 -0
- sqlalchemy_cratedb-0.41.0.dev2/setup.cfg +0 -7
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/CODE_OF_CONDUCT.md +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/CONTRIBUTING.md +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/DEVELOP.md +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/LICENSE +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/MANIFEST.in +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/NOTICE +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/README.md +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/backlog.md +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.build/_sources/advanced-querying.rst.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.build/_sources/crud.rst.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.build/_sources/data-types.rst.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.build/_sources/dataframe.rst.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.build/_sources/getting-started.rst.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.build/_sources/index-all.rst.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.build/_sources/index.rst.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.build/_sources/inspection-reflection.rst.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.build/_sources/install.rst.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.build/_sources/migrate-from-crate-client.md.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.build/_sources/overview.rst.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.build/_sources/support.md.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.build/_sources/working-with-types.rst.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.build/_static/bundle/main.js.LICENSE.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.build/_static/vendor/furo/scripts/furo.js.LICENSE.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.build/output.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.build/robots.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/MarkupSafe-3.0.2.dist-info/LICENSE.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/MarkupSafe-3.0.2.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/PyYAML-6.0.2.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/alabaster-0.7.16.dist-info/entry_points.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/babel-2.16.0.dist-info/entry_points.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/babel-2.16.0.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/certifi-2024.8.30.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/charset_normalizer-3.4.0.dist-info/entry_points.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/charset_normalizer-3.4.0.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/colorama-0.4.6.dist-info/licenses/LICENSE.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/crate/theme/rtd/crate/static/bundle/main.js.LICENSE.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/crate/theme/rtd/crate/static/vendor/furo/scripts/furo.js.LICENSE.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/crate_docs_theme-0.36.1.dist-info/namespace_packages.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/crate_docs_theme-0.36.1.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/README.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isoamsa.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isoamsb.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isoamsc.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isoamsn.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isoamso.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isoamsr.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isobox.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isocyr1.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isocyr2.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isodia.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isogrk1.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isogrk2.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isogrk3.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isogrk4-wide.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isogrk4.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isolat1.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isolat2.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isomfrk-wide.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isomfrk.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isomopf-wide.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isomopf.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isomscr-wide.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isomscr.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isonum.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isopub.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isotech.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/mmlalias.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/mmlextra-wide.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/mmlextra.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/s5defs.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/xhtml1-lat1.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/xhtml1-special.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/xhtml1-symbol.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/writers/html4css1/template.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/writers/html5_polyglot/template.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/writers/pep_html/template.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/writers/s5_html/themes/README.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils-0.19.dist-info/COPYING.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils-0.19.dist-info/entry_points.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils-0.19.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils_stubs-0.0.22.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/furo/theme/furo/static/scripts/furo.js.LICENSE.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/furo-2024.5.6.dist-info/entry_points.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/imagesize-1.4.1.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/importlib_metadata-8.5.0.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/jinja2-3.1.4.dist-info/LICENSE.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/jinja2-3.1.4.dist-info/entry_points.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/linkify_it_py-2.0.3.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/livereload-2.7.0.dist-info/entry_points.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/livereload-2.7.0.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/markdown_it_py-3.0.0.dist-info/entry_points.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/myst_parser-3.0.1.dist-info/entry_points.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/pip/_vendor/vendor.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/pip-24.3.1.dist-info/AUTHORS.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/pip-24.3.1.dist-info/LICENSE.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/pip-24.3.1.dist-info/entry_points.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/pip-24.3.1.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/pygments-2.18.0.dist-info/entry_points.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/requests-2.32.3.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/setuptools-58.1.0.dist-info/entry_points.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/setuptools-58.1.0.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/snowballstemmer-2.2.0.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx-7.1.2.dist-info/entry_points.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx_autobuild-2021.3.14.dist-info/entry_points.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx_basic_ng-1.0.0b2.dist-info/entry_points.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx_basic_ng-1.0.0b2.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx_copybutton-0.5.2.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx_design/compiled/material-icons_VERSION.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx_design_elements-0.4.0.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx_sitemap-2.6.0.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx_togglebutton-0.3.2.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinxcontrib_jsmath-1.0.1.dist-info/namespace_packages.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinxcontrib_jsmath-1.0.1.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinxcontrib_mermaid-1.0.0.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinxcontrib_plantuml-0.30.dist-info/namespace_packages.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinxcontrib_plantuml-0.30.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinxext_opengraph-0.9.1.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/tornado/test/static/robots.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/tornado/test/static_foo.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/tornado-6.4.1.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/uc_micro_py-1.0.3.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/urllib3-2.2.3.dist-info/licenses/LICENSE.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/wheel/vendored/vendor.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/wheel-0.45.0.dist-info/LICENSE.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/wheel-0.45.0.dist-info/entry_points.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/.venv/lib/python3.9/site-packages/zipp-3.21.0.dist-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/common-build/requirements.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/docs/_extra/robots.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/docs/requirements.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/.crate-docs/helpers/preview/etc/requirements.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/_extra/robots.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/docs/requirements.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/setup.py +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb/compat/__init__.py +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb/compat/api13.py +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb/compat/core10.py +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb/compat/core20.py +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb/predicate.py +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb/sa_version.py +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb/support/__init__.py +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb/support/pandas.py +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb/support/polyfill.py +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb/support/util.py +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb/type/geo.py +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb/type/object.py +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb/type/vector.py +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb.egg-info/dependency_links.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb.egg-info/entry_points.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb.egg-info/top_level.txt +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/tests/test_error_handling.py +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/tests/test_support_polyfill.py +0 -0
- {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/tests/test_support_util.py +0 -0
@@ -1,6 +1,13 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
3
|
## Unreleased
|
4
|
+
- Added canonical [PostgreSQL client parameter `sslmode`], implementing
|
5
|
+
`sslmode=prefer` to connect to SSL-enabled CrateDB instances without
|
6
|
+
verifying the host name.
|
7
|
+
|
8
|
+
[PostgreSQL client parameter `sslmode`]: https://www.postgresql.org/docs/current/libpq-ssl.html#LIBPQ-SSL-PROTECTION
|
9
|
+
|
10
|
+
## 2025/01/30 0.41.0
|
4
11
|
- Dependencies: Updated to `crate-2.0.0`, which uses `orjson` for JSON marshalling
|
5
12
|
|
6
13
|
## 2024/11/04 0.40.1
|
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: sqlalchemy-cratedb
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.42.0.dev1
|
4
4
|
Summary: SQLAlchemy dialect for CrateDB.
|
5
5
|
Author-email: "Crate.io" <office@crate.io>
|
6
6
|
License: Apache License 2.0
|
@@ -64,19 +64,20 @@ Description-Content-Type: text/markdown
|
|
64
64
|
License-File: LICENSE
|
65
65
|
License-File: NOTICE
|
66
66
|
Requires-Dist: backports.zoneinfo<1; python_version < "3.9"
|
67
|
-
Requires-Dist: crate<3,>=2
|
67
|
+
Requires-Dist: crate<3,>=2
|
68
68
|
Requires-Dist: geojson<4,>=2.5
|
69
|
+
Requires-Dist: importlib-metadata; python_version < "3.8"
|
69
70
|
Requires-Dist: importlib-resources; python_version < "3.9"
|
70
71
|
Requires-Dist: sqlalchemy<2.1,>=1
|
71
|
-
Requires-Dist: verlib2
|
72
|
+
Requires-Dist: verlib2<0.4
|
72
73
|
Provides-Extra: all
|
73
74
|
Requires-Dist: sqlalchemy-cratedb[vector]; extra == "all"
|
74
75
|
Provides-Extra: develop
|
75
|
-
Requires-Dist: mypy<1.
|
76
|
-
Requires-Dist: poethepoet<
|
77
|
-
Requires-Dist: pyproject-fmt<
|
78
|
-
Requires-Dist: ruff<0.
|
79
|
-
Requires-Dist: validate-pyproject<
|
76
|
+
Requires-Dist: mypy<1.16; extra == "develop"
|
77
|
+
Requires-Dist: poethepoet<1; extra == "develop"
|
78
|
+
Requires-Dist: pyproject-fmt<3; extra == "develop"
|
79
|
+
Requires-Dist: ruff<0.12; extra == "develop"
|
80
|
+
Requires-Dist: validate-pyproject<1; extra == "develop"
|
80
81
|
Provides-Extra: doc
|
81
82
|
Requires-Dist: crate-docs-theme>=0.26.5; extra == "doc"
|
82
83
|
Requires-Dist: sphinx<9,>=3.5; extra == "doc"
|
@@ -85,14 +86,15 @@ Requires-Dist: build<2; extra == "release"
|
|
85
86
|
Requires-Dist: twine<7; extra == "release"
|
86
87
|
Provides-Extra: test
|
87
88
|
Requires-Dist: cratedb-toolkit[testing]; extra == "test"
|
88
|
-
Requires-Dist: dask[dataframe];
|
89
|
-
Requires-Dist: pandas<2.3; extra == "test"
|
89
|
+
Requires-Dist: dask[dataframe]; extra == "test"
|
90
|
+
Requires-Dist: pandas[test]<2.3; extra == "test"
|
90
91
|
Requires-Dist: pueblo>=0.0.7; extra == "test"
|
91
92
|
Requires-Dist: pytest<9; extra == "test"
|
92
93
|
Requires-Dist: pytest-cov<7; extra == "test"
|
93
94
|
Requires-Dist: pytest-mock<4; extra == "test"
|
94
95
|
Provides-Extra: vector
|
95
96
|
Requires-Dist: numpy; extra == "vector"
|
97
|
+
Dynamic: license-file
|
96
98
|
|
97
99
|
# SQLAlchemy dialect for CrateDB
|
98
100
|
|
@@ -7,7 +7,10 @@ requires = [
|
|
7
7
|
|
8
8
|
[project]
|
9
9
|
name = "sqlalchemy-cratedb"
|
10
|
-
|
10
|
+
#dynamic = [
|
11
|
+
# "version",
|
12
|
+
#]
|
13
|
+
version = "0.42.0.dev1"
|
11
14
|
description = "SQLAlchemy dialect for CrateDB."
|
12
15
|
readme = "README.md"
|
13
16
|
keywords = [
|
@@ -78,26 +81,24 @@ classifiers = [
|
|
78
81
|
"Topic :: Text Processing",
|
79
82
|
"Topic :: Utilities",
|
80
83
|
]
|
81
|
-
#dynamic = [
|
82
|
-
# "version",
|
83
|
-
#]
|
84
84
|
dependencies = [
|
85
85
|
"backports.zoneinfo<1; python_version<'3.9'",
|
86
|
-
"crate>=2
|
87
|
-
"geojson
|
86
|
+
"crate>=2,<3",
|
87
|
+
"geojson>=2.5,<4",
|
88
|
+
"importlib-metadata; python_version<'3.8'",
|
88
89
|
"importlib-resources; python_version<'3.9'",
|
89
|
-
"sqlalchemy
|
90
|
-
"verlib2
|
90
|
+
"sqlalchemy>=1,<2.1",
|
91
|
+
"verlib2<0.4",
|
91
92
|
]
|
92
93
|
optional-dependencies.all = [
|
93
94
|
"sqlalchemy-cratedb[vector]",
|
94
95
|
]
|
95
96
|
optional-dependencies.develop = [
|
96
|
-
"mypy<1.
|
97
|
-
"poethepoet<
|
98
|
-
"pyproject-fmt<
|
99
|
-
"ruff<0.
|
100
|
-
"validate-pyproject<
|
97
|
+
"mypy<1.16",
|
98
|
+
"poethepoet<1",
|
99
|
+
"pyproject-fmt<3",
|
100
|
+
"ruff<0.12",
|
101
|
+
"validate-pyproject<1",
|
101
102
|
]
|
102
103
|
optional-dependencies.doc = [
|
103
104
|
"crate-docs-theme>=0.26.5",
|
@@ -109,8 +110,8 @@ optional-dependencies.release = [
|
|
109
110
|
]
|
110
111
|
optional-dependencies.test = [
|
111
112
|
"cratedb-toolkit[testing]",
|
112
|
-
"dask[dataframe]
|
113
|
-
"pandas<2.3",
|
113
|
+
"dask[dataframe]",
|
114
|
+
"pandas[test]<2.3",
|
114
115
|
"pueblo>=0.0.7",
|
115
116
|
"pytest<9",
|
116
117
|
"pytest-cov<7",
|
@@ -253,8 +254,9 @@ non_interactive = true
|
|
253
254
|
# enable_recursive_aliases = true
|
254
255
|
|
255
256
|
[tool.versioningit.vcs]
|
256
|
-
method = "git"
|
257
|
+
method = "git-archive"
|
257
258
|
default-tag = "0.0.0"
|
259
|
+
describe-subst = "$Format:%(describe:tags)$"
|
258
260
|
|
259
261
|
# ===================
|
260
262
|
# Tasks configuration
|
{sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb/__init__.py
RENAMED
@@ -52,7 +52,22 @@ if SA_VERSION < SA_1_4:
|
|
52
52
|
monkeypatch_add_exec_driver_sql()
|
53
53
|
|
54
54
|
|
55
|
+
try:
|
56
|
+
from importlib.metadata import PackageNotFoundError, version
|
57
|
+
except (ImportError, ModuleNotFoundError): # pragma:nocover
|
58
|
+
from importlib_metadata import ( # type: ignore[assignment,no-redef,unused-ignore]
|
59
|
+
PackageNotFoundError,
|
60
|
+
version,
|
61
|
+
)
|
62
|
+
|
63
|
+
try:
|
64
|
+
__version__ = version("sqlalchemy-cratedb")
|
65
|
+
except PackageNotFoundError: # pragma: no cover
|
66
|
+
__version__ = "unknown"
|
67
|
+
|
68
|
+
|
55
69
|
__all__ = [
|
70
|
+
__version__,
|
56
71
|
dialect,
|
57
72
|
FloatVector,
|
58
73
|
Geopoint,
|
@@ -317,11 +317,7 @@ def _get_crud_params(compiler, stmt, compile_state, **kw):
|
|
317
317
|
_column_as_key,
|
318
318
|
kw,
|
319
319
|
)
|
320
|
-
elif
|
321
|
-
not values
|
322
|
-
and compiler.for_executemany # noqa: W503
|
323
|
-
and compiler.dialect.supports_default_metavalue # noqa: W503
|
324
|
-
):
|
320
|
+
elif not values and compiler.for_executemany and compiler.dialect.supports_default_metavalue:
|
325
321
|
# convert an "INSERT DEFAULT VALUES"
|
326
322
|
# into INSERT (firstcol) VALUES (DEFAULT) which can be turned
|
327
323
|
# into an in-place multi values. This supports
|
{sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb/compiler.py
RENAMED
@@ -200,6 +200,17 @@ class CrateDDLCompiler(compiler.DDLCompiler):
|
|
200
200
|
)
|
201
201
|
return
|
202
202
|
|
203
|
+
def visit_create_index(self, create, **kw) -> str:
|
204
|
+
"""
|
205
|
+
CrateDB does not support `CREATE INDEX` statements.
|
206
|
+
"""
|
207
|
+
warnings.warn(
|
208
|
+
"CrateDB does not support `CREATE INDEX` statements, "
|
209
|
+
"they will be omitted when generating DDL statements.",
|
210
|
+
stacklevel=2,
|
211
|
+
)
|
212
|
+
return "SELECT 1"
|
213
|
+
|
203
214
|
|
204
215
|
class CrateTypeCompiler(compiler.GenericTypeCompiler):
|
205
216
|
def visit_string(self, type_, **kw):
|
@@ -254,6 +265,36 @@ class CrateTypeCompiler(compiler.GenericTypeCompiler):
|
|
254
265
|
"""
|
255
266
|
return "TIMESTAMP %s" % ((type_.timezone and "WITH" or "WITHOUT") + " TIME ZONE",)
|
256
267
|
|
268
|
+
def visit_BLOB(self, type_, **kw):
|
269
|
+
return "STRING"
|
270
|
+
|
271
|
+
def visit_FLOAT(self, type_, **kw):
|
272
|
+
"""
|
273
|
+
From `sqlalchemy.sql.sqltypes.Float`.
|
274
|
+
|
275
|
+
When a :paramref:`.Float.precision` is not provided in a
|
276
|
+
:class:`_types.Float` type some backend may compile this type as
|
277
|
+
an 8 bytes / 64 bit float datatype. To use a 4 bytes / 32 bit float
|
278
|
+
datatype a precision <= 24 can usually be provided or the
|
279
|
+
:class:`_types.REAL` type can be used.
|
280
|
+
This is known to be the case in the PostgreSQL and MSSQL dialects
|
281
|
+
that render the type as ``FLOAT`` that's in both an alias of
|
282
|
+
``DOUBLE PRECISION``. Other third party dialects may have similar
|
283
|
+
behavior.
|
284
|
+
"""
|
285
|
+
if not type_.precision:
|
286
|
+
return "FLOAT"
|
287
|
+
elif type_.precision <= 24:
|
288
|
+
return "FLOAT"
|
289
|
+
else:
|
290
|
+
return "DOUBLE"
|
291
|
+
|
292
|
+
def visit_JSON(self, type_, **kw):
|
293
|
+
return "OBJECT"
|
294
|
+
|
295
|
+
def visit_JSONB(self, type_, **kw):
|
296
|
+
return "OBJECT"
|
297
|
+
|
257
298
|
|
258
299
|
class CrateCompiler(compiler.SQLCompiler):
|
259
300
|
def visit_getitem_binary(self, binary, operator, **kw):
|
{sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/src/sqlalchemy_cratedb/dialect.py
RENAMED
@@ -34,46 +34,60 @@ from .compiler import (
|
|
34
34
|
)
|
35
35
|
from .sa_version import SA_1_4, SA_2_0, SA_VERSION
|
36
36
|
from .type import FloatVector, ObjectArray, ObjectType
|
37
|
+
from .type.binary import LargeBinary
|
37
38
|
|
39
|
+
# For SQLAlchemy >= 1.1.
|
38
40
|
TYPES_MAP = {
|
39
|
-
"boolean": sqltypes.
|
40
|
-
"short": sqltypes.
|
41
|
-
"smallint": sqltypes.
|
42
|
-
"timestamp": sqltypes.TIMESTAMP
|
43
|
-
"timestamp with time zone": sqltypes.TIMESTAMP(timezone=
|
41
|
+
"boolean": sqltypes.BOOLEAN,
|
42
|
+
"short": sqltypes.SMALLINT,
|
43
|
+
"smallint": sqltypes.SMALLINT,
|
44
|
+
"timestamp": sqltypes.TIMESTAMP,
|
45
|
+
"timestamp with time zone": sqltypes.TIMESTAMP(timezone=False),
|
46
|
+
"timestamp without time zone": sqltypes.TIMESTAMP(timezone=True),
|
44
47
|
"object": ObjectType,
|
45
|
-
"
|
46
|
-
"
|
47
|
-
"
|
48
|
+
"object_array": ObjectArray, # TODO: Can this also be improved to use `sqltypes.ARRAY`?
|
49
|
+
"integer": sqltypes.INTEGER,
|
50
|
+
"long": sqltypes.BIGINT,
|
51
|
+
"bigint": sqltypes.BIGINT,
|
52
|
+
"float": sqltypes.FLOAT,
|
48
53
|
"double": sqltypes.DECIMAL,
|
49
54
|
"double precision": sqltypes.DECIMAL,
|
50
|
-
"
|
51
|
-
"
|
52
|
-
"
|
53
|
-
"string": sqltypes.String,
|
54
|
-
"text": sqltypes.String,
|
55
|
+
"real": sqltypes.REAL,
|
56
|
+
"string": sqltypes.VARCHAR,
|
57
|
+
"text": sqltypes.VARCHAR,
|
55
58
|
"float_vector": FloatVector,
|
56
59
|
}
|
57
60
|
|
58
|
-
#
|
59
|
-
# TODO: Dissolve.
|
61
|
+
# For SQLAlchemy >= 1.4.
|
60
62
|
try:
|
61
63
|
from sqlalchemy.types import ARRAY
|
62
64
|
|
63
|
-
TYPES_MAP["integer_array"] = ARRAY(sqltypes.
|
64
|
-
TYPES_MAP["boolean_array"] = ARRAY(sqltypes.
|
65
|
-
TYPES_MAP["short_array"] = ARRAY(sqltypes.
|
66
|
-
TYPES_MAP["smallint_array"] = ARRAY(sqltypes.
|
65
|
+
TYPES_MAP["integer_array"] = ARRAY(sqltypes.INTEGER)
|
66
|
+
TYPES_MAP["boolean_array"] = ARRAY(sqltypes.BOOLEAN)
|
67
|
+
TYPES_MAP["short_array"] = ARRAY(sqltypes.SMALLINT)
|
68
|
+
TYPES_MAP["smallint_array"] = ARRAY(sqltypes.SMALLINT)
|
69
|
+
TYPES_MAP["timestamp_array"] = ARRAY(sqltypes.TIMESTAMP)
|
67
70
|
TYPES_MAP["timestamp_array"] = ARRAY(sqltypes.TIMESTAMP(timezone=False))
|
68
71
|
TYPES_MAP["timestamp with time zone_array"] = ARRAY(sqltypes.TIMESTAMP(timezone=True))
|
69
|
-
TYPES_MAP["long_array"] = ARRAY(sqltypes.
|
70
|
-
TYPES_MAP["bigint_array"] = ARRAY(sqltypes.
|
71
|
-
TYPES_MAP["
|
72
|
-
TYPES_MAP["
|
73
|
-
TYPES_MAP["
|
74
|
-
TYPES_MAP["
|
75
|
-
|
76
|
-
|
72
|
+
TYPES_MAP["long_array"] = ARRAY(sqltypes.BIGINT)
|
73
|
+
TYPES_MAP["bigint_array"] = ARRAY(sqltypes.BIGINT)
|
74
|
+
TYPES_MAP["float_array"] = ARRAY(sqltypes.FLOAT)
|
75
|
+
TYPES_MAP["real_array"] = ARRAY(sqltypes.REAL)
|
76
|
+
TYPES_MAP["string_array"] = ARRAY(sqltypes.VARCHAR)
|
77
|
+
TYPES_MAP["text_array"] = ARRAY(sqltypes.VARCHAR)
|
78
|
+
except Exception: # noqa: S110
|
79
|
+
pass
|
80
|
+
|
81
|
+
# For SQLAlchemy >= 2.0.
|
82
|
+
try:
|
83
|
+
from sqlalchemy.types import DOUBLE, DOUBLE_PRECISION
|
84
|
+
|
85
|
+
TYPES_MAP["real"] = DOUBLE
|
86
|
+
TYPES_MAP["real_array"] = ARRAY(DOUBLE)
|
87
|
+
TYPES_MAP["double"] = DOUBLE
|
88
|
+
TYPES_MAP["double_array"] = ARRAY(DOUBLE)
|
89
|
+
TYPES_MAP["double precision"] = DOUBLE_PRECISION
|
90
|
+
TYPES_MAP["double precision_array"] = ARRAY(DOUBLE_PRECISION)
|
77
91
|
except Exception: # noqa: S110
|
78
92
|
pass
|
79
93
|
|
@@ -158,6 +172,7 @@ colspecs = {
|
|
158
172
|
sqltypes.Date: Date,
|
159
173
|
sqltypes.DateTime: DateTime,
|
160
174
|
sqltypes.TIMESTAMP: DateTime,
|
175
|
+
sqltypes.LargeBinary: LargeBinary,
|
161
176
|
}
|
162
177
|
|
163
178
|
|
@@ -206,6 +221,15 @@ class CrateDialect(default.DefaultDialect):
|
|
206
221
|
# start with _. Adding it here causes sqlalchemy to quote such columns.
|
207
222
|
self.identifier_preparer.illegal_initial_characters.add("_")
|
208
223
|
|
224
|
+
def get_isolation_level_values(self, dbapi_conn):
|
225
|
+
return ()
|
226
|
+
|
227
|
+
def set_isolation_level(self, dbapi_connection, level):
|
228
|
+
pass
|
229
|
+
|
230
|
+
def get_isolation_level(self, dbapi_connection):
|
231
|
+
return "NONE"
|
232
|
+
|
209
233
|
def initialize(self, connection):
|
210
234
|
# get lowest server version
|
211
235
|
self.server_version_info = self._get_server_version_info(connection)
|
@@ -228,8 +252,12 @@ class CrateDialect(default.DefaultDialect):
|
|
228
252
|
servers = to_list(server)
|
229
253
|
if servers:
|
230
254
|
use_ssl = asbool(kwargs.pop("ssl", False))
|
231
|
-
|
255
|
+
# TODO: Switch to the canonical default `sslmode=prefer` later.
|
256
|
+
sslmode = kwargs.pop("sslmode", "disable")
|
257
|
+
if use_ssl or sslmode in ["allow", "prefer", "require", "verify-ca", "verify-full"]:
|
232
258
|
servers = ["https://" + server for server in servers]
|
259
|
+
if sslmode == "require":
|
260
|
+
kwargs["verify_ssl_cert"] = False
|
233
261
|
return self.dbapi.connect(servers=servers, **kwargs)
|
234
262
|
return self.dbapi.connect(**kwargs)
|
235
263
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
from .array import ObjectArray
|
2
|
+
from .binary import LargeBinary
|
2
3
|
from .geo import Geopoint, Geoshape
|
3
4
|
from .object import ObjectType
|
4
5
|
from .vector import FloatVector, knn_match
|
@@ -6,6 +7,7 @@ from .vector import FloatVector, knn_match
|
|
6
7
|
__all__ = [
|
7
8
|
Geopoint,
|
8
9
|
Geoshape,
|
10
|
+
LargeBinary,
|
9
11
|
ObjectArray,
|
10
12
|
ObjectType,
|
11
13
|
FloatVector,
|
@@ -96,6 +96,8 @@ class Any(expression.ColumnElement):
|
|
96
96
|
self.operator = operator
|
97
97
|
|
98
98
|
|
99
|
+
# TODO: Should this be inherited from PostgreSQL's
|
100
|
+
# `ARRAY`, in order to improve type checking?
|
99
101
|
class _ObjectArray(sqltypes.UserDefinedType):
|
100
102
|
cache_ok = True
|
101
103
|
|
@@ -139,5 +141,8 @@ class _ObjectArray(sqltypes.UserDefinedType):
|
|
139
141
|
def get_col_spec(self, **kws):
|
140
142
|
return "ARRAY(OBJECT)"
|
141
143
|
|
144
|
+
def as_generic(self, **kwargs):
|
145
|
+
return sqltypes.ARRAY
|
146
|
+
|
142
147
|
|
143
148
|
ObjectArray = MutableList.as_mutable(_ObjectArray)
|
@@ -0,0 +1,44 @@
|
|
1
|
+
import base64
|
2
|
+
|
3
|
+
import sqlalchemy as sa
|
4
|
+
|
5
|
+
|
6
|
+
class LargeBinary(sa.String):
|
7
|
+
"""A type for large binary byte data.
|
8
|
+
|
9
|
+
The :class:`.LargeBinary` type corresponds to a large and/or unlengthed
|
10
|
+
binary type for the target platform, such as BLOB on MySQL and BYTEA for
|
11
|
+
PostgreSQL. It also handles the necessary conversions for the DBAPI.
|
12
|
+
|
13
|
+
"""
|
14
|
+
|
15
|
+
__visit_name__ = "large_binary"
|
16
|
+
|
17
|
+
def bind_processor(self, dialect):
|
18
|
+
if dialect.dbapi is None:
|
19
|
+
return None
|
20
|
+
|
21
|
+
# TODO: DBAPIBinary = dialect.dbapi.Binary
|
22
|
+
|
23
|
+
def process(value):
|
24
|
+
if value is not None:
|
25
|
+
# TODO: return DBAPIBinary(value)
|
26
|
+
return base64.b64encode(value).decode()
|
27
|
+
else:
|
28
|
+
return None
|
29
|
+
|
30
|
+
return process
|
31
|
+
|
32
|
+
# Python 3 has native bytes() type
|
33
|
+
# both sqlite3 and pg8000 seem to return it,
|
34
|
+
# psycopg2 as of 2.5 returns 'memoryview'
|
35
|
+
def result_processor(self, dialect, coltype):
|
36
|
+
if dialect.returns_native_bytes:
|
37
|
+
return None
|
38
|
+
|
39
|
+
def process(value):
|
40
|
+
if value is not None:
|
41
|
+
return base64.b64decode(value)
|
42
|
+
return value
|
43
|
+
|
44
|
+
return process
|
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: sqlalchemy-cratedb
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.42.0.dev1
|
4
4
|
Summary: SQLAlchemy dialect for CrateDB.
|
5
5
|
Author-email: "Crate.io" <office@crate.io>
|
6
6
|
License: Apache License 2.0
|
@@ -64,19 +64,20 @@ Description-Content-Type: text/markdown
|
|
64
64
|
License-File: LICENSE
|
65
65
|
License-File: NOTICE
|
66
66
|
Requires-Dist: backports.zoneinfo<1; python_version < "3.9"
|
67
|
-
Requires-Dist: crate<3,>=2
|
67
|
+
Requires-Dist: crate<3,>=2
|
68
68
|
Requires-Dist: geojson<4,>=2.5
|
69
|
+
Requires-Dist: importlib-metadata; python_version < "3.8"
|
69
70
|
Requires-Dist: importlib-resources; python_version < "3.9"
|
70
71
|
Requires-Dist: sqlalchemy<2.1,>=1
|
71
|
-
Requires-Dist: verlib2
|
72
|
+
Requires-Dist: verlib2<0.4
|
72
73
|
Provides-Extra: all
|
73
74
|
Requires-Dist: sqlalchemy-cratedb[vector]; extra == "all"
|
74
75
|
Provides-Extra: develop
|
75
|
-
Requires-Dist: mypy<1.
|
76
|
-
Requires-Dist: poethepoet<
|
77
|
-
Requires-Dist: pyproject-fmt<
|
78
|
-
Requires-Dist: ruff<0.
|
79
|
-
Requires-Dist: validate-pyproject<
|
76
|
+
Requires-Dist: mypy<1.16; extra == "develop"
|
77
|
+
Requires-Dist: poethepoet<1; extra == "develop"
|
78
|
+
Requires-Dist: pyproject-fmt<3; extra == "develop"
|
79
|
+
Requires-Dist: ruff<0.12; extra == "develop"
|
80
|
+
Requires-Dist: validate-pyproject<1; extra == "develop"
|
80
81
|
Provides-Extra: doc
|
81
82
|
Requires-Dist: crate-docs-theme>=0.26.5; extra == "doc"
|
82
83
|
Requires-Dist: sphinx<9,>=3.5; extra == "doc"
|
@@ -85,14 +86,15 @@ Requires-Dist: build<2; extra == "release"
|
|
85
86
|
Requires-Dist: twine<7; extra == "release"
|
86
87
|
Provides-Extra: test
|
87
88
|
Requires-Dist: cratedb-toolkit[testing]; extra == "test"
|
88
|
-
Requires-Dist: dask[dataframe];
|
89
|
-
Requires-Dist: pandas<2.3; extra == "test"
|
89
|
+
Requires-Dist: dask[dataframe]; extra == "test"
|
90
|
+
Requires-Dist: pandas[test]<2.3; extra == "test"
|
90
91
|
Requires-Dist: pueblo>=0.0.7; extra == "test"
|
91
92
|
Requires-Dist: pytest<9; extra == "test"
|
92
93
|
Requires-Dist: pytest-cov<7; extra == "test"
|
93
94
|
Requires-Dist: pytest-mock<4; extra == "test"
|
94
95
|
Provides-Extra: vector
|
95
96
|
Requires-Dist: numpy; extra == "vector"
|
97
|
+
Dynamic: license-file
|
96
98
|
|
97
99
|
# SQLAlchemy dialect for CrateDB
|
98
100
|
|
@@ -8,7 +8,6 @@ NOTICE
|
|
8
8
|
README.md
|
9
9
|
backlog.md
|
10
10
|
pyproject.toml
|
11
|
-
setup.cfg
|
12
11
|
setup.py
|
13
12
|
docs/requirements.txt
|
14
13
|
docs/.crate-docs/.build/output.txt
|
@@ -156,6 +155,7 @@ src/sqlalchemy_cratedb/support/polyfill.py
|
|
156
155
|
src/sqlalchemy_cratedb/support/util.py
|
157
156
|
src/sqlalchemy_cratedb/type/__init__.py
|
158
157
|
src/sqlalchemy_cratedb/type/array.py
|
158
|
+
src/sqlalchemy_cratedb/type/binary.py
|
159
159
|
src/sqlalchemy_cratedb/type/geo.py
|
160
160
|
src/sqlalchemy_cratedb/type/object.py
|
161
161
|
src/sqlalchemy_cratedb/type/vector.py
|
@@ -1,7 +1,10 @@
|
|
1
|
-
crate<3,>=2
|
1
|
+
crate<3,>=2
|
2
2
|
geojson<4,>=2.5
|
3
3
|
sqlalchemy<2.1,>=1
|
4
|
-
verlib2
|
4
|
+
verlib2<0.4
|
5
|
+
|
6
|
+
[:python_version < "3.8"]
|
7
|
+
importlib-metadata
|
5
8
|
|
6
9
|
[:python_version < "3.9"]
|
7
10
|
backports.zoneinfo<1
|
@@ -11,11 +14,11 @@ importlib-resources
|
|
11
14
|
sqlalchemy-cratedb[vector]
|
12
15
|
|
13
16
|
[develop]
|
14
|
-
mypy<1.
|
15
|
-
poethepoet<
|
16
|
-
pyproject-fmt<
|
17
|
-
ruff<0.
|
18
|
-
validate-pyproject<
|
17
|
+
mypy<1.16
|
18
|
+
poethepoet<1
|
19
|
+
pyproject-fmt<3
|
20
|
+
ruff<0.12
|
21
|
+
validate-pyproject<1
|
19
22
|
|
20
23
|
[doc]
|
21
24
|
crate-docs-theme>=0.26.5
|
@@ -27,14 +30,12 @@ twine<7
|
|
27
30
|
|
28
31
|
[test]
|
29
32
|
cratedb-toolkit[testing]
|
30
|
-
|
33
|
+
dask[dataframe]
|
34
|
+
pandas[test]<2.3
|
31
35
|
pueblo>=0.0.7
|
32
36
|
pytest<9
|
33
37
|
pytest-cov<7
|
34
38
|
pytest-mock<4
|
35
39
|
|
36
|
-
[test:python_version < "3.13"]
|
37
|
-
dask[dataframe]
|
38
|
-
|
39
40
|
[vector]
|
40
41
|
numpy
|
@@ -1,8 +1,12 @@
|
|
1
|
+
from unittest import skipIf
|
2
|
+
|
1
3
|
import sqlalchemy as sa
|
2
4
|
|
5
|
+
from sqlalchemy_cratedb.sa_version import SA_1_4, SA_VERSION
|
3
6
|
from tests.conftest import TESTDRIVE_DATA_SCHEMA
|
4
7
|
|
5
8
|
|
9
|
+
@skipIf(SA_VERSION < SA_1_4, "Does not work correctly on SQLAlchemy 1.3")
|
6
10
|
def test_correct_schema(cratedb_service):
|
7
11
|
"""
|
8
12
|
Tests that the correct schema is being picked up.
|
{sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev1}/tests/test_support_pandas.py
RENAMED
@@ -1,7 +1,10 @@
|
|
1
1
|
import re
|
2
2
|
import sys
|
3
3
|
|
4
|
+
import pandas as pd
|
4
5
|
import pytest
|
6
|
+
import sqlalchemy as sa
|
7
|
+
from pandas._testing import assert_equal
|
5
8
|
from pueblo.testing.pandas import makeTimeDataFrame
|
6
9
|
from sqlalchemy.exc import ProgrammingError
|
7
10
|
|
@@ -15,6 +18,18 @@ INSERT_RECORDS = 42
|
|
15
18
|
df = makeTimeDataFrame(nper=INSERT_RECORDS, freq="S")
|
16
19
|
df["time"] = df.index
|
17
20
|
|
21
|
+
float_double_data = {
|
22
|
+
"col_1": [19556.88, 629414.27, 51570.0, 2933.52, 20338.98],
|
23
|
+
"col_2": [
|
24
|
+
15379.920000000002,
|
25
|
+
1107140.42,
|
26
|
+
8081.999999999999,
|
27
|
+
1570.0300000000002,
|
28
|
+
29468.539999999997,
|
29
|
+
],
|
30
|
+
}
|
31
|
+
float_double_df = pd.DataFrame.from_dict(float_double_data)
|
32
|
+
|
18
33
|
|
19
34
|
@pytest.mark.skipif(
|
20
35
|
sys.version_info < (3, 8), reason="Feature not supported on Python 3.7 and earlier"
|
@@ -113,3 +128,34 @@ def test_table_kwargs_unknown(cratedb_service):
|
|
113
128
|
"passed to [ALTER | CREATE] TABLE statement]"
|
114
129
|
)
|
115
130
|
)
|
131
|
+
|
132
|
+
|
133
|
+
@pytest.mark.skipif(
|
134
|
+
sys.version_info < (3, 8), reason="Feature not supported on Python 3.7 and earlier"
|
135
|
+
)
|
136
|
+
@pytest.mark.skipif(
|
137
|
+
SA_VERSION < SA_2_0, reason="Feature not supported on SQLAlchemy 1.4 and earlier"
|
138
|
+
)
|
139
|
+
def test_float_double(cratedb_service):
|
140
|
+
"""
|
141
|
+
Validate I/O with floating point numbers, specifically DOUBLE types.
|
142
|
+
|
143
|
+
Motto: Do not lose precision when DOUBLE is required.
|
144
|
+
"""
|
145
|
+
tablename = "pandas_double"
|
146
|
+
engine = cratedb_service.database.engine
|
147
|
+
float_double_df.to_sql(
|
148
|
+
tablename,
|
149
|
+
engine,
|
150
|
+
if_exists="replace",
|
151
|
+
index=False,
|
152
|
+
)
|
153
|
+
with engine.connect() as conn:
|
154
|
+
conn.execute(sa.text(f"REFRESH TABLE {tablename}"))
|
155
|
+
df_load = pd.read_sql_table(tablename, engine)
|
156
|
+
|
157
|
+
before = float_double_df.sort_values(by="col_1", ignore_index=True)
|
158
|
+
after = df_load.sort_values(by="col_1", ignore_index=True)
|
159
|
+
|
160
|
+
pd.options.display.float_format = "{:.12f}".format
|
161
|
+
assert_equal(before, after, check_exact=True)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|