sqlalchemy-cratedb 0.42.0.dev2__tar.gz → 0.43.0__tar.gz

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