Skip to content

v3.37.0

Latest

Choose a tag to compare

@github-actions github-actions released this 29 Sep 14:51
· 421 commits to master since this release
v3.37.0
d6fe836

v3.37.0 is a minor release of the 3.x maintenance line. It backports the SQLAlchemy ARRAY support and fixes from master (#893). The 3.x line keeps supporting Python 3.10 and sqlalchemy>=1.0.0.

SQLAlchemy

  • Reflected array<...> columns are AthenaArray with their element types, instead of String, and types.ARRAY maps to AthenaArray (#774).
  • SQLAlchemy ARRAY values, expressions (indexing, slices, concatenation, ANY/ALL), and partial updates are supported (#774, #775, #776).
  • Behavior changes for SQLAlchemy queries that select ARRAY values (#774):
    • Typed SELECT results are decoded through a JSON projection, so rewritten queries need explicit SELECT columns, and literal SQL expressions need labels.
    • Textual ORDER BY supports selected names, lists of them, and ordinals. Use SQLAlchemy expressions for other orderings.
    • Raw SQL and arrays with unknown element types keep the documented cursor fallback.
    • ARRAY binds of decimal values require an explicit Numeric precision and scale, to prevent silent rounding.
  • CREATE TABLE renders STRUCT column types, including STRUCT values inside MAP and ARRAY, as Hive STRUCT<name:type>. Athena rejected the previous ROW(...) output (#870, #855). Thanks to @mvanhorn for the fix and @aminghadersohi for the report. Integers inside ARRAY, MAP, and STRUCT column types render as INT. Code that compares compiled DDL strings must expect STRUCT<...> and INT.
  • CAST to Double or DOUBLE_PRECISION renders DOUBLE instead of the 32-bit REAL (#826).
  • The ARRAY support was checked at compile level on SQLAlchemy 1.4.54. The test suite runs on SQLAlchemy 2.0.

Cursors

  • CSV result sets keep binary NULLs as None (#770).

Development

  • The Test workflow runs the AWS suites only for ready pull requests, on the newest Python version (#789, #837, #863). Tests are rerun once on Athena service-side failures (#811), and each test session uses its own S3 Tables namespace (#815).
  • The Release workflow runs every suite on every supported Python version before publishing (#862).

What's Changed

New Contributors

Full Changelog: v3.36.0...v3.37.0