iris-pgwire 1.2.34__tar.gz → 1.3.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 (115) hide show
  1. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/CHANGELOG.md +14 -0
  2. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/PKG-INFO +10 -1
  3. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/README.md +9 -0
  4. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/__init__.py +1 -1
  5. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/backend_selector.py +1 -1
  6. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/dbapi_executor.py +517 -237
  7. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/integratedml.py +19 -6
  8. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/iris_executor.py +231 -197
  9. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/models/dbapi_connection.py +3 -2
  10. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/protocol.py +211 -212
  11. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/boolean_translator.py +18 -14
  12. iris_pgwire-1.3.0/src/iris_pgwire/sql_translator/default_values.py +453 -0
  13. iris_pgwire-1.3.0/src/iris_pgwire/sql_translator/metadata_cache.py +112 -0
  14. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/normalizer.py +15 -5
  15. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/pipeline.py +6 -2
  16. iris_pgwire-1.3.0/src/iris_pgwire/sql_translator/refiner.py +245 -0
  17. iris_pgwire-1.3.0/src/iris_pgwire/sql_translator/returning_plan.py +322 -0
  18. iris_pgwire-1.2.34/src/iris_pgwire/sql_translator/default_values.py +0 -57
  19. iris_pgwire-1.2.34/src/iris_pgwire/sql_translator/refiner.py +0 -102
  20. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/.gitignore +0 -0
  21. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/LICENSE +0 -0
  22. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/docs/VECTOR_PARAMETER_BINDING.md +0 -0
  23. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/examples/BI_TOOLS_SETUP.md +0 -0
  24. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/examples/async_sqlalchemy_demo.py +0 -0
  25. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/examples/bi_tools_demo.py +0 -0
  26. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/examples/client_demonstrations.py +0 -0
  27. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/examples/client_demos.py +0 -0
  28. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/examples/translation_api_demo.py +0 -0
  29. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/pyproject.toml +0 -0
  30. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/auth/__init__.py +0 -0
  31. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/auth/auth_selector.py +0 -0
  32. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/auth/gssapi_auth.py +0 -0
  33. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/auth/oauth_bridge.py +0 -0
  34. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/auth/scram.py +0 -0
  35. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/auth/wallet_credentials.py +0 -0
  36. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/bulk_executor.py +0 -0
  37. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/catalog/__init__.py +0 -0
  38. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/catalog/catalog_functions.py +0 -0
  39. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/catalog/catalog_router.py +0 -0
  40. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/catalog/oid_generator.py +0 -0
  41. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/catalog/pg_attrdef.py +0 -0
  42. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/catalog/pg_attribute.py +0 -0
  43. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/catalog/pg_class.py +0 -0
  44. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/catalog/pg_constraint.py +0 -0
  45. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/catalog/pg_index.py +0 -0
  46. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/catalog/pg_namespace.py +0 -0
  47. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/catalog/pg_type.py +0 -0
  48. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/column_validator.py +0 -0
  49. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/config_schema.py +0 -0
  50. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/constitutional.py +0 -0
  51. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/conversions/__init__.py +0 -0
  52. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/conversions/bulk_insert.py +0 -0
  53. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/conversions/date_horolog.py +0 -0
  54. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/conversions/ddl_idempotency.py +0 -0
  55. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/conversions/ddl_splitter.py +0 -0
  56. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/conversions/json_path.py +0 -0
  57. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/conversions/vector_syntax.py +0 -0
  58. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/copy_handler.py +0 -0
  59. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/csv_processor.py +0 -0
  60. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/dbapi_connection_pool.py +0 -0
  61. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/debug_tracer.py +0 -0
  62. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/health_checker.py +0 -0
  63. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/iris_constructs.py +0 -0
  64. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/iris_log_handler.py +0 -0
  65. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/iris_user_management.py +0 -0
  66. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/models/__init__.py +0 -0
  67. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/models/backend_config.py +0 -0
  68. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/models/connection_pool_state.py +0 -0
  69. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/models/ipm_metadata.py +0 -0
  70. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/models/vector_query_request.py +0 -0
  71. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/observability.py +0 -0
  72. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/performance_monitor.py +0 -0
  73. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/quality/__init__.py +0 -0
  74. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/quality/__main__.py +0 -0
  75. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/quality/code_quality_validator.py +0 -0
  76. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/quality/documentation_validator.py +0 -0
  77. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/quality/package_metadata_validator.py +0 -0
  78. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/quality/security_validator.py +0 -0
  79. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/quality/validator.py +0 -0
  80. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/schema_mapper.py +0 -0
  81. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/server.py +0 -0
  82. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/__init__.py +0 -0
  83. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/alias_extractor.py +0 -0
  84. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/api.py +0 -0
  85. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/cache.py +0 -0
  86. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/confidence_analyzer.py +0 -0
  87. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/config.py +0 -0
  88. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/copy_parser.py +0 -0
  89. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/date_translator.py +0 -0
  90. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/debug.py +0 -0
  91. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/enum_registry.py +0 -0
  92. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/enum_translator.py +0 -0
  93. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/error_handler.py +0 -0
  94. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/identifier_normalizer.py +0 -0
  95. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/interceptor.py +0 -0
  96. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/logging_config.py +0 -0
  97. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/mappings/__init__.py +0 -0
  98. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/mappings/constructs.py +0 -0
  99. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/mappings/datatypes.py +0 -0
  100. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/mappings/document_filters.py +0 -0
  101. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/mappings/functions.py +0 -0
  102. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/metrics.py +0 -0
  103. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/models.py +0 -0
  104. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/parser.py +0 -0
  105. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/performance_monitor.py +0 -0
  106. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/skipped_table_set.py +0 -0
  107. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/statement_filter.py +0 -0
  108. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/transaction_translator.py +0 -0
  109. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/translator.py +0 -0
  110. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/sql_translator/validator.py +0 -0
  111. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/testing/__init__.py +0 -0
  112. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/testing/base_fixture_builder.py +0 -0
  113. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/type_mapping.py +0 -0
  114. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/vector_metrics.py +0 -0
  115. {iris_pgwire-1.2.34 → iris_pgwire-1.3.0}/src/iris_pgwire/vector_optimizer.py +0 -0
@@ -5,6 +5,20 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.3.0] - 2025-02-06
9
+
10
+ ### Added
11
+ - **IRIS 2024.2+ compatibility**: Automatic `%EXACT` wrapping for `SELECT DISTINCT` and `UNION` preserves PostgreSQL set semantics on IRIS 2024.2+.
12
+ - **Enhanced RETURNING emulation**: Multi-column and `RETURNING *` workflows now return metadata-rich results without forcing separate queries.
13
+ - **ON CONFLICT support**: `DO NOTHING` and `DO UPDATE` branches replay IRIS-safe logic while keeping the client-facing `RETURNING` output consistent.
14
+ - **Metadata-driven DEFAULTs**: Translators consult IRIS metadata to expand `DEFAULT` references in INSERT/UPDATE statements.
15
+ - **Global boolean literals**: PostgreSQL `true`/`false` constants are translated into IRIS equivalents everywhere in the pipeline.
16
+ - **DBAPI session pinning**: Connections remain tied to their originating session so identity lookups (`LAST_IDENTITY()`/`%EXACT` selects) stay accurate.
17
+
18
+ ### Fixed
19
+ - **TypeError in DBAPIConnection**: Connection age calculations no longer raise `TypeError` when the pool is drained.
20
+ - **IntegratedML decorators**: Signature mismatches in `IntegratedML` wrappers were corrected so they proxy arguments without losing positional context.
21
+
8
22
  ## [1.2.23] - 2026-01-25
9
23
 
10
24
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iris-pgwire
3
- Version: 1.2.34
3
+ Version: 1.3.0
4
4
  Summary: PostgreSQL Wire Protocol Server for InterSystems IRIS - Connect BI tools, Python frameworks, and PostgreSQL clients to IRIS databases
5
5
  Project-URL: Homepage, https://github.com/intersystems-community/iris-pgwire
6
6
  Project-URL: Documentation, https://github.com/intersystems-community/iris-pgwire#readme
@@ -197,6 +197,15 @@ See [Client Compatibility Guide](https://github.com/intersystems-community/iris-
197
197
 
198
198
  - **Performance**: ~4ms protocol overhead, dual backend (DBAPI/Embedded), async SQLAlchemy support. See [Performance Benchmarks](https://github.com/intersystems-community/iris-pgwire/blob/main/docs/PERFORMANCE.md)
199
199
 
200
+ ## 🎉 Release 1.3.0 / IRIS 2024.2+ Compatibility
201
+
202
+ - **Full IRIS 2024.2+ compatibility**: Automatic `%EXACT` wrapping for `SELECT DISTINCT` and `UNION` ensures parity with PostgreSQL set semantics.
203
+ - **Enhanced RETURNING emulation**: Multi-column and `RETURNING *` pipelines are handled with richer metadata, supplemental selects, and session-local lookups.
204
+ - **ON CONFLICT support**: `DO NOTHING` and `DO UPDATE` branches map to IRIS logic while preserving consistent `RETURNING` output.
205
+ - **Metadata-driven DEFAULTs**: The translator now resolves `DEFAULT` references via IRIS metadata so that INSERT/UPDATE statements stay intact.
206
+ - **Global boolean translation**: PostgreSQL `true`/`false` literals translate to their IRIS equivalents automatically across all SQL paths.
207
+ - **Session pinning for DBAPI**: Connections stay bound to the original session to maintain identity lookups (`LAST_IDENTITY()`, `%EXACT`, etc.) during emulation.
208
+
200
209
  ---
201
210
 
202
211
  ## 💻 Usage Examples
@@ -114,6 +114,15 @@ See [Client Compatibility Guide](https://github.com/intersystems-community/iris-
114
114
 
115
115
  - **Performance**: ~4ms protocol overhead, dual backend (DBAPI/Embedded), async SQLAlchemy support. See [Performance Benchmarks](https://github.com/intersystems-community/iris-pgwire/blob/main/docs/PERFORMANCE.md)
116
116
 
117
+ ## 🎉 Release 1.3.0 / IRIS 2024.2+ Compatibility
118
+
119
+ - **Full IRIS 2024.2+ compatibility**: Automatic `%EXACT` wrapping for `SELECT DISTINCT` and `UNION` ensures parity with PostgreSQL set semantics.
120
+ - **Enhanced RETURNING emulation**: Multi-column and `RETURNING *` pipelines are handled with richer metadata, supplemental selects, and session-local lookups.
121
+ - **ON CONFLICT support**: `DO NOTHING` and `DO UPDATE` branches map to IRIS logic while preserving consistent `RETURNING` output.
122
+ - **Metadata-driven DEFAULTs**: The translator now resolves `DEFAULT` references via IRIS metadata so that INSERT/UPDATE statements stay intact.
123
+ - **Global boolean translation**: PostgreSQL `true`/`false` literals translate to their IRIS equivalents automatically across all SQL paths.
124
+ - **Session pinning for DBAPI**: Connections stay bound to the original session to maintain identity lookups (`LAST_IDENTITY()`, `%EXACT`, etc.) during emulation.
125
+
117
126
  ---
118
127
 
119
128
  ## 💻 Usage Examples
@@ -6,7 +6,7 @@ Based on the specification from docs/iris_pgwire_plan.md and proven patterns fro
6
6
  caretdev/sqlalchemy-iris.
7
7
  """
8
8
 
9
- __version__ = "1.2.34"
9
+ __version__ = "1.3.0"
10
10
  __author__ = "Thomas Dyar <thomas.dyar@intersystems.com>"
11
11
 
12
12
  # Don't import server/protocol in __init__ to avoid sys.modules conflicts
@@ -47,7 +47,7 @@ class Executor(Protocol):
47
47
  """Set the IRIS namespace for a specific session."""
48
48
  ...
49
49
 
50
- def close_session(self, session_id: str) -> None:
50
+ async def close_session(self, session_id: str) -> None:
51
51
  """Close resources for a specific session."""
52
52
  ...
53
53