sqlalchemy-cratedb 0.41.0.dev2__tar.gz → 0.42.0.dev0__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.
Files changed (169) hide show
  1. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/CHANGES.md +2 -0
  2. {sqlalchemy_cratedb-0.41.0.dev2/src/sqlalchemy_cratedb.egg-info → sqlalchemy_cratedb-0.42.0.dev0}/PKG-INFO +13 -11
  3. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/pyproject.toml +18 -16
  4. sqlalchemy_cratedb-0.42.0.dev0/setup.cfg +4 -0
  5. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/src/sqlalchemy_cratedb/__init__.py +15 -0
  6. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/src/sqlalchemy_cratedb/compat/core14.py +1 -5
  7. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/src/sqlalchemy_cratedb/compiler.py +41 -0
  8. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/src/sqlalchemy_cratedb/dialect.py +42 -27
  9. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/src/sqlalchemy_cratedb/type/__init__.py +2 -0
  10. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/src/sqlalchemy_cratedb/type/array.py +5 -0
  11. sqlalchemy_cratedb-0.42.0.dev0/src/sqlalchemy_cratedb/type/binary.py +44 -0
  12. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0/src/sqlalchemy_cratedb.egg-info}/PKG-INFO +13 -11
  13. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/src/sqlalchemy_cratedb.egg-info/SOURCES.txt +1 -1
  14. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/src/sqlalchemy_cratedb.egg-info/requires.txt +12 -11
  15. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/tests/test_schema.py +4 -0
  16. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/tests/test_support_pandas.py +46 -0
  17. sqlalchemy_cratedb-0.41.0.dev2/setup.cfg +0 -7
  18. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/CODE_OF_CONDUCT.md +0 -0
  19. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/CONTRIBUTING.md +0 -0
  20. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/DEVELOP.md +0 -0
  21. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/LICENSE +0 -0
  22. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/MANIFEST.in +0 -0
  23. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/NOTICE +0 -0
  24. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/README.md +0 -0
  25. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/backlog.md +0 -0
  26. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.build/_sources/advanced-querying.rst.txt +0 -0
  27. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.build/_sources/crud.rst.txt +0 -0
  28. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.build/_sources/data-types.rst.txt +0 -0
  29. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.build/_sources/dataframe.rst.txt +0 -0
  30. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.build/_sources/getting-started.rst.txt +0 -0
  31. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.build/_sources/index-all.rst.txt +0 -0
  32. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.build/_sources/index.rst.txt +0 -0
  33. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.build/_sources/inspection-reflection.rst.txt +0 -0
  34. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.build/_sources/install.rst.txt +0 -0
  35. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.build/_sources/migrate-from-crate-client.md.txt +0 -0
  36. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.build/_sources/overview.rst.txt +0 -0
  37. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.build/_sources/support.md.txt +0 -0
  38. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.build/_sources/working-with-types.rst.txt +0 -0
  39. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.build/_static/bundle/main.js.LICENSE.txt +0 -0
  40. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.build/_static/vendor/furo/scripts/furo.js.LICENSE.txt +0 -0
  41. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.build/output.txt +0 -0
  42. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.build/robots.txt +0 -0
  43. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/MarkupSafe-3.0.2.dist-info/LICENSE.txt +0 -0
  44. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/MarkupSafe-3.0.2.dist-info/top_level.txt +0 -0
  45. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/PyYAML-6.0.2.dist-info/top_level.txt +0 -0
  46. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/alabaster-0.7.16.dist-info/entry_points.txt +0 -0
  47. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/babel-2.16.0.dist-info/entry_points.txt +0 -0
  48. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/babel-2.16.0.dist-info/top_level.txt +0 -0
  49. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/certifi-2024.8.30.dist-info/top_level.txt +0 -0
  50. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/charset_normalizer-3.4.0.dist-info/entry_points.txt +0 -0
  51. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/charset_normalizer-3.4.0.dist-info/top_level.txt +0 -0
  52. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/colorama-0.4.6.dist-info/licenses/LICENSE.txt +0 -0
  53. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/crate/theme/rtd/crate/static/bundle/main.js.LICENSE.txt +0 -0
  54. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/crate/theme/rtd/crate/static/vendor/furo/scripts/furo.js.LICENSE.txt +0 -0
  55. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/crate_docs_theme-0.36.1.dist-info/namespace_packages.txt +0 -0
  56. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/crate_docs_theme-0.36.1.dist-info/top_level.txt +0 -0
  57. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/README.txt +0 -0
  58. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isoamsa.txt +0 -0
  59. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isoamsb.txt +0 -0
  60. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isoamsc.txt +0 -0
  61. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isoamsn.txt +0 -0
  62. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isoamso.txt +0 -0
  63. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isoamsr.txt +0 -0
  64. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isobox.txt +0 -0
  65. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isocyr1.txt +0 -0
  66. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isocyr2.txt +0 -0
  67. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isodia.txt +0 -0
  68. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isogrk1.txt +0 -0
  69. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isogrk2.txt +0 -0
  70. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isogrk3.txt +0 -0
  71. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isogrk4-wide.txt +0 -0
  72. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isogrk4.txt +0 -0
  73. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isolat1.txt +0 -0
  74. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isolat2.txt +0 -0
  75. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isomfrk-wide.txt +0 -0
  76. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isomfrk.txt +0 -0
  77. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isomopf-wide.txt +0 -0
  78. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isomopf.txt +0 -0
  79. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isomscr-wide.txt +0 -0
  80. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isomscr.txt +0 -0
  81. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isonum.txt +0 -0
  82. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isopub.txt +0 -0
  83. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/isotech.txt +0 -0
  84. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/mmlalias.txt +0 -0
  85. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/mmlextra-wide.txt +0 -0
  86. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/mmlextra.txt +0 -0
  87. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/s5defs.txt +0 -0
  88. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/xhtml1-lat1.txt +0 -0
  89. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/xhtml1-special.txt +0 -0
  90. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/parsers/rst/include/xhtml1-symbol.txt +0 -0
  91. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/writers/html4css1/template.txt +0 -0
  92. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/writers/html5_polyglot/template.txt +0 -0
  93. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/writers/pep_html/template.txt +0 -0
  94. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils/writers/s5_html/themes/README.txt +0 -0
  95. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils-0.19.dist-info/COPYING.txt +0 -0
  96. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils-0.19.dist-info/entry_points.txt +0 -0
  97. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils-0.19.dist-info/top_level.txt +0 -0
  98. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/docutils_stubs-0.0.22.dist-info/top_level.txt +0 -0
  99. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/furo/theme/furo/static/scripts/furo.js.LICENSE.txt +0 -0
  100. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/furo-2024.5.6.dist-info/entry_points.txt +0 -0
  101. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/imagesize-1.4.1.dist-info/top_level.txt +0 -0
  102. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/importlib_metadata-8.5.0.dist-info/top_level.txt +0 -0
  103. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/jinja2-3.1.4.dist-info/LICENSE.txt +0 -0
  104. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/jinja2-3.1.4.dist-info/entry_points.txt +0 -0
  105. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/linkify_it_py-2.0.3.dist-info/top_level.txt +0 -0
  106. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/livereload-2.7.0.dist-info/entry_points.txt +0 -0
  107. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/livereload-2.7.0.dist-info/top_level.txt +0 -0
  108. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/markdown_it_py-3.0.0.dist-info/entry_points.txt +0 -0
  109. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/myst_parser-3.0.1.dist-info/entry_points.txt +0 -0
  110. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/pip/_vendor/vendor.txt +0 -0
  111. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/pip-24.3.1.dist-info/AUTHORS.txt +0 -0
  112. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/pip-24.3.1.dist-info/LICENSE.txt +0 -0
  113. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/pip-24.3.1.dist-info/entry_points.txt +0 -0
  114. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/pip-24.3.1.dist-info/top_level.txt +0 -0
  115. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/pygments-2.18.0.dist-info/entry_points.txt +0 -0
  116. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/requests-2.32.3.dist-info/top_level.txt +0 -0
  117. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/setuptools-58.1.0.dist-info/entry_points.txt +0 -0
  118. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/setuptools-58.1.0.dist-info/top_level.txt +0 -0
  119. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/snowballstemmer-2.2.0.dist-info/top_level.txt +0 -0
  120. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx-7.1.2.dist-info/entry_points.txt +0 -0
  121. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx_autobuild-2021.3.14.dist-info/entry_points.txt +0 -0
  122. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx_basic_ng-1.0.0b2.dist-info/entry_points.txt +0 -0
  123. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx_basic_ng-1.0.0b2.dist-info/top_level.txt +0 -0
  124. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx_copybutton-0.5.2.dist-info/top_level.txt +0 -0
  125. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx_design/compiled/material-icons_VERSION.txt +0 -0
  126. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx_design_elements-0.4.0.dist-info/top_level.txt +0 -0
  127. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx_sitemap-2.6.0.dist-info/top_level.txt +0 -0
  128. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinx_togglebutton-0.3.2.dist-info/top_level.txt +0 -0
  129. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinxcontrib_jsmath-1.0.1.dist-info/namespace_packages.txt +0 -0
  130. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinxcontrib_jsmath-1.0.1.dist-info/top_level.txt +0 -0
  131. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinxcontrib_mermaid-1.0.0.dist-info/top_level.txt +0 -0
  132. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinxcontrib_plantuml-0.30.dist-info/namespace_packages.txt +0 -0
  133. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinxcontrib_plantuml-0.30.dist-info/top_level.txt +0 -0
  134. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/sphinxext_opengraph-0.9.1.dist-info/top_level.txt +0 -0
  135. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/tornado/test/static/robots.txt +0 -0
  136. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/tornado/test/static_foo.txt +0 -0
  137. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/tornado-6.4.1.dist-info/top_level.txt +0 -0
  138. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/uc_micro_py-1.0.3.dist-info/top_level.txt +0 -0
  139. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/urllib3-2.2.3.dist-info/licenses/LICENSE.txt +0 -0
  140. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/wheel/vendored/vendor.txt +0 -0
  141. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/wheel-0.45.0.dist-info/LICENSE.txt +0 -0
  142. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/wheel-0.45.0.dist-info/entry_points.txt +0 -0
  143. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/.venv/lib/python3.9/site-packages/zipp-3.21.0.dist-info/top_level.txt +0 -0
  144. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/common-build/requirements.txt +0 -0
  145. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/docs/_extra/robots.txt +0 -0
  146. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/docs/requirements.txt +0 -0
  147. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/.crate-docs/helpers/preview/etc/requirements.txt +0 -0
  148. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/_extra/robots.txt +0 -0
  149. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/docs/requirements.txt +0 -0
  150. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/setup.py +0 -0
  151. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/src/sqlalchemy_cratedb/compat/__init__.py +0 -0
  152. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/src/sqlalchemy_cratedb/compat/api13.py +0 -0
  153. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/src/sqlalchemy_cratedb/compat/core10.py +0 -0
  154. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/src/sqlalchemy_cratedb/compat/core20.py +0 -0
  155. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/src/sqlalchemy_cratedb/predicate.py +0 -0
  156. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/src/sqlalchemy_cratedb/sa_version.py +0 -0
  157. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/src/sqlalchemy_cratedb/support/__init__.py +0 -0
  158. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/src/sqlalchemy_cratedb/support/pandas.py +0 -0
  159. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/src/sqlalchemy_cratedb/support/polyfill.py +0 -0
  160. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/src/sqlalchemy_cratedb/support/util.py +0 -0
  161. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/src/sqlalchemy_cratedb/type/geo.py +0 -0
  162. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/src/sqlalchemy_cratedb/type/object.py +0 -0
  163. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/src/sqlalchemy_cratedb/type/vector.py +0 -0
  164. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/src/sqlalchemy_cratedb.egg-info/dependency_links.txt +0 -0
  165. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/src/sqlalchemy_cratedb.egg-info/entry_points.txt +0 -0
  166. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/src/sqlalchemy_cratedb.egg-info/top_level.txt +0 -0
  167. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/tests/test_error_handling.py +0 -0
  168. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/tests/test_support_polyfill.py +0 -0
  169. {sqlalchemy_cratedb-0.41.0.dev2 → sqlalchemy_cratedb-0.42.0.dev0}/tests/test_support_util.py +0 -0
@@ -1,6 +1,8 @@
1
1
  # Changelog
2
2
 
3
3
  ## Unreleased
4
+
5
+ ## 2025/01/30 0.41.0
4
6
  - Dependencies: Updated to `crate-2.0.0`, which uses `orjson` for JSON marshalling
5
7
 
6
8
  ## 2024/11/04 0.40.1
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: sqlalchemy-cratedb
3
- Version: 0.41.0.dev2
3
+ Version: 0.42.0.dev0
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.0.0.dev6
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==0.2
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.15; extra == "develop"
76
- Requires-Dist: poethepoet<0.33; extra == "develop"
77
- Requires-Dist: pyproject-fmt<2.6; extra == "develop"
78
- Requires-Dist: ruff<0.10; extra == "develop"
79
- Requires-Dist: validate-pyproject<0.24; extra == "develop"
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]; python_version < "3.13" and extra == "test"
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
- version = "0.41.0.dev2"
10
+ #dynamic = [
11
+ # "version",
12
+ #]
13
+ version = "0.42.0.dev0"
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.0.0.dev6,<3",
87
- "geojson<4,>=2.5",
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<2.1,>=1",
90
- "verlib2==0.2",
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.15",
97
- "poethepoet<0.33",
98
- "pyproject-fmt<2.6",
99
- "ruff<0.10",
100
- "validate-pyproject<0.24",
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]; python_version<'3.13'",
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
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -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
@@ -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):
@@ -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.Boolean,
40
- "short": sqltypes.SmallInteger,
41
- "smallint": sqltypes.SmallInteger,
42
- "timestamp": sqltypes.TIMESTAMP(timezone=False),
43
- "timestamp with time zone": sqltypes.TIMESTAMP(timezone=True),
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
- "integer": sqltypes.Integer,
46
- "long": sqltypes.NUMERIC,
47
- "bigint": sqltypes.NUMERIC,
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
- "object_array": ObjectArray,
51
- "float": sqltypes.Float,
52
- "real": sqltypes.Float,
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
- # Needed for SQLAlchemy >= 1.1.
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.Integer)
64
- TYPES_MAP["boolean_array"] = ARRAY(sqltypes.Boolean)
65
- TYPES_MAP["short_array"] = ARRAY(sqltypes.SmallInteger)
66
- TYPES_MAP["smallint_array"] = ARRAY(sqltypes.SmallInteger)
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.NUMERIC)
70
- TYPES_MAP["bigint_array"] = ARRAY(sqltypes.NUMERIC)
71
- TYPES_MAP["double_array"] = ARRAY(sqltypes.DECIMAL)
72
- TYPES_MAP["double precision_array"] = ARRAY(sqltypes.DECIMAL)
73
- TYPES_MAP["float_array"] = ARRAY(sqltypes.Float)
74
- TYPES_MAP["real_array"] = ARRAY(sqltypes.Float)
75
- TYPES_MAP["string_array"] = ARRAY(sqltypes.String)
76
- TYPES_MAP["text_array"] = ARRAY(sqltypes.String)
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
 
@@ -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.2
1
+ Metadata-Version: 2.4
2
2
  Name: sqlalchemy-cratedb
3
- Version: 0.41.0.dev2
3
+ Version: 0.42.0.dev0
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.0.0.dev6
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==0.2
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.15; extra == "develop"
76
- Requires-Dist: poethepoet<0.33; extra == "develop"
77
- Requires-Dist: pyproject-fmt<2.6; extra == "develop"
78
- Requires-Dist: ruff<0.10; extra == "develop"
79
- Requires-Dist: validate-pyproject<0.24; extra == "develop"
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]; python_version < "3.13" and extra == "test"
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.0.0.dev6
1
+ crate<3,>=2
2
2
  geojson<4,>=2.5
3
3
  sqlalchemy<2.1,>=1
4
- verlib2==0.2
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
15
- poethepoet<0.33
16
- pyproject-fmt<2.6
17
- ruff<0.10
18
- validate-pyproject<0.24
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
- pandas<2.3
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.
@@ -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)
@@ -1,7 +0,0 @@
1
- [flake8]
2
- ignore = E501, C901, W503, W504
3
-
4
- [egg_info]
5
- tag_build =
6
- tag_date = 0
7
-