confluent-sql 0.4.1__tar.gz → 0.4.2__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.
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/ARCHITECTURE.md +1 -1
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/CHANGELOG.md +6 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/DBAPI_EXTENSIONS.md +0 -2
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/PKG-INFO +2 -2
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/README.md +1 -1
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/STREAMING.md +0 -2
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/pyproject.toml +1 -1
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/src/confluent_sql/connection.py +0 -16
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/tests/unit/conftest.py +0 -1
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/tests/unit/test_cursor_unit.py +0 -58
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/.github/CODEOWNERS +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/.gitignore +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/.semaphore/publish_to_pypi.yml +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/.semaphore/semaphore.yml +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/CLAUDE.md +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/LICENSE.txt +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/Makefile +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/TYPES.md +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/examples/errors.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/examples/simple_append_only_streaming_query_example.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/examples/snapshot_mode_tuple_cursor_simple_example.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/service.yml +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/src/confluent_sql/__init__.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/src/confluent_sql/__version__.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/src/confluent_sql/changelog_compressor.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/src/confluent_sql/cursor.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/src/confluent_sql/exceptions.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/src/confluent_sql/execution_mode.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/src/confluent_sql/polling.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/src/confluent_sql/result_readers.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/src/confluent_sql/retry.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/src/confluent_sql/statement.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/src/confluent_sql/types.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/tests/__init__.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/tests/conftest.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/tests/integration/conftest.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/tests/integration/test_connection.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/tests/integration/test_cursor.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/tests/integration/test_fetch.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/tests/unit/test_changelog_compressor_unit.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/tests/unit/test_changelog_unit.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/tests/unit/test_connection_unit.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/tests/unit/test_connection_unit_properties.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/tests/unit/test_execution_mode_unit.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/tests/unit/test_polling_unit.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/tests/unit/test_result_readers_unit.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/tests/unit/test_retry_unit.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/tests/unit/test_statement_unit.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/tests/unit/test_types_unit.py +0 -0
- {confluent_sql-0.4.1 → confluent_sql-0.4.2}/uv.lock +0 -0
|
@@ -45,7 +45,7 @@ Every statement progresses through these phases:
|
|
|
45
45
|
|
|
46
46
|
### How Phases Progress
|
|
47
47
|
|
|
48
|
-
**Snapshot queries (the default):**
|
|
48
|
+
**Snapshot queries (the default):**
|
|
49
49
|
|
|
50
50
|
```
|
|
51
51
|
PENDING → RUNNING → COMPLETED
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this dbapi driver will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## 0.4.2, 2026-07-17
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Snapshot queries on Confluent Cloud Flink SQL are now Generally Available. Removed the Early Access warning previously emitted on first creation of a snapshot-mode cursor, along with the Early Access advisories throughout the documentation (`README.md`, `ARCHITECTURE.md`, `DBAPI_EXTENSIONS.md`, `STREAMING.md`). (#119, #160)
|
|
10
|
+
|
|
5
11
|
## 0.4.1, 2026-07-07
|
|
6
12
|
|
|
7
13
|
### Fixed
|
|
@@ -4,8 +4,6 @@ The `confluent-sql` driver extends the standard [DB-API v2](https://peps.python.
|
|
|
4
4
|
|
|
5
5
|
## Understanding Snapshot vs Streaming Modes
|
|
6
6
|
|
|
7
|
-
> **⚠️ Early Access:** [Snapshot queries](https://docs.confluent.io/cloud/current/flink/concepts/snapshot-queries.html) on Confluent Cloud Flink SQL are currently in Early Access and may be subject to change.
|
|
8
|
-
|
|
9
7
|
**By default, the driver operates in [SNAPSHOT mode](https://docs.confluent.io/cloud/current/flink/concepts/snapshot-queries.html)**, producing behavior very similar to traditional SQL databases:
|
|
10
8
|
|
|
11
9
|
- Queries execute and block until complete
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: confluent-sql
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.2
|
|
4
4
|
Summary: DB-API v2 compliant driver for Confluent Cloud Flink SQL
|
|
5
5
|
Project-URL: Repository, https://github.com/confluentinc/confluent-sql
|
|
6
6
|
Project-URL: Documentation, https://github.com/confluentinc/confluent-sql?tab=readme-ov-file#confluent-sql
|
|
@@ -245,7 +245,7 @@ This is pre-production code mainly developed as the lower level portion of a `db
|
|
|
245
245
|
|
|
246
246
|
The behavior of snapshot-mode cursors, complying with dbapi semantics, are well stable. The streaming query extensions are more of a work in progress at this time. Feedback and suggestions are welcome!
|
|
247
247
|
|
|
248
|
-
|
|
248
|
+
The driver defaults to [snapshot mode](https://docs.confluent.io/cloud/current/flink/concepts/snapshot-queries.html) for all queries unless streaming mode is explicitly requested.
|
|
249
249
|
|
|
250
250
|
## Prerequisites
|
|
251
251
|
|
|
@@ -14,7 +14,7 @@ This is pre-production code mainly developed as the lower level portion of a `db
|
|
|
14
14
|
|
|
15
15
|
The behavior of snapshot-mode cursors, complying with dbapi semantics, are well stable. The streaming query extensions are more of a work in progress at this time. Feedback and suggestions are welcome!
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
The driver defaults to [snapshot mode](https://docs.confluent.io/cloud/current/flink/concepts/snapshot-queries.html) for all queries unless streaming mode is explicitly requested.
|
|
18
18
|
|
|
19
19
|
## Prerequisites
|
|
20
20
|
|
|
@@ -4,8 +4,6 @@ The `confluent-sql` driver provides full support for continuous streaming querie
|
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
7
|
-
> **⚠️ Early Access:** [Snapshot queries](https://docs.confluent.io/cloud/current/flink/concepts/snapshot-queries.html) on Confluent Cloud Flink SQL are currently in Early Access and may be subject to change. The SNAPSHOT mode described below relies on this feature.
|
|
8
|
-
|
|
9
7
|
This driver supports two primary execution modes:
|
|
10
8
|
|
|
11
9
|
| Mode | Use Case | Query Examples | Result Behavior |
|
|
@@ -263,10 +263,6 @@ class Connection:
|
|
|
263
263
|
_row_type_registry: RowTypeRegistry
|
|
264
264
|
"""Registry for user-defined row types, see register_row_type()."""
|
|
265
265
|
|
|
266
|
-
_snapshot_warning_issued: bool
|
|
267
|
-
"""Internal flag to track whether the snapshot query early access warning has been issued.
|
|
268
|
-
Remove after snapshot queries reach open preview (expected May 2026)."""
|
|
269
|
-
|
|
270
266
|
def __init__( # noqa: PLR0913
|
|
271
267
|
self,
|
|
272
268
|
environment_id: str,
|
|
@@ -394,9 +390,6 @@ class Connection:
|
|
|
394
390
|
|
|
395
391
|
self._row_type_registry = RowTypeRegistry()
|
|
396
392
|
|
|
397
|
-
# TODO: remove after snapshot queries reach open preview (May 2026)
|
|
398
|
-
self._snapshot_warning_issued = False
|
|
399
|
-
|
|
400
393
|
def close(self) -> None:
|
|
401
394
|
"""
|
|
402
395
|
Close the connection.
|
|
@@ -509,15 +502,6 @@ class Connection:
|
|
|
509
502
|
if self._closed:
|
|
510
503
|
raise InterfaceError("Connection is closed")
|
|
511
504
|
|
|
512
|
-
# TODO: remove after snapshot queries reach open preview (May 2026)
|
|
513
|
-
if mode.is_snapshot and not self._snapshot_warning_issued:
|
|
514
|
-
self._snapshot_warning_issued = True
|
|
515
|
-
warnings.warn(
|
|
516
|
-
"Snapshot queries on Confluent Cloud Flink SQL are currently in "
|
|
517
|
-
"Early Access and may be subject to change.",
|
|
518
|
-
stacklevel=2,
|
|
519
|
-
)
|
|
520
|
-
|
|
521
505
|
return Cursor(self, as_dict=as_dict, execution_mode=mode)
|
|
522
506
|
|
|
523
507
|
def streaming_cursor(self, *, as_dict: bool = False) -> Cursor:
|
|
@@ -239,7 +239,6 @@ def mock_connection_factory(mocker, statement_response_factory) -> MockConnectio
|
|
|
239
239
|
mock_conn.closing_cursor = types.MethodType(Connection.closing_cursor, mock_conn)
|
|
240
240
|
|
|
241
241
|
mock_conn._row_type_registry = RowTypeRegistry()
|
|
242
|
-
mock_conn._snapshot_warning_issued = False
|
|
243
242
|
|
|
244
243
|
return mock_conn
|
|
245
244
|
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import re
|
|
2
2
|
import types
|
|
3
|
-
import warnings
|
|
4
3
|
|
|
5
4
|
import pytest
|
|
6
5
|
|
|
@@ -1673,63 +1672,6 @@ class TestMayHaveResults:
|
|
|
1673
1672
|
assert mock_connection_cursor.may_have_results is True
|
|
1674
1673
|
|
|
1675
1674
|
|
|
1676
|
-
@pytest.mark.unit
|
|
1677
|
-
class TestSnapshotWarning:
|
|
1678
|
-
"""Tests for the early access warning emitted when creating snapshot mode cursors."""
|
|
1679
|
-
|
|
1680
|
-
def test_snapshot_warning_emitted_once_per_connection(self, mock_connection_factory):
|
|
1681
|
-
"""Verify that snapshot mode warning is emitted exactly once per connection."""
|
|
1682
|
-
mock_connection = mock_connection_factory(None, None)
|
|
1683
|
-
|
|
1684
|
-
# First snapshot cursor should emit the warning
|
|
1685
|
-
with pytest.warns(
|
|
1686
|
-
UserWarning,
|
|
1687
|
-
match="Snapshot queries on Confluent Cloud Flink SQL are currently in Early Access",
|
|
1688
|
-
):
|
|
1689
|
-
cursor1 = mock_connection.cursor(mode=ExecutionMode.SNAPSHOT)
|
|
1690
|
-
|
|
1691
|
-
# Flag should now be set
|
|
1692
|
-
assert mock_connection._snapshot_warning_issued is True
|
|
1693
|
-
|
|
1694
|
-
# Second snapshot cursor should NOT emit warning
|
|
1695
|
-
with warnings.catch_warnings(record=True) as warning_list:
|
|
1696
|
-
warnings.simplefilter("always")
|
|
1697
|
-
cursor2 = mock_connection.cursor(mode=ExecutionMode.SNAPSHOT)
|
|
1698
|
-
|
|
1699
|
-
# Filter to only UserWarnings about snapshot
|
|
1700
|
-
snapshot_warnings = [
|
|
1701
|
-
w for w in warning_list
|
|
1702
|
-
if issubclass(w.category, UserWarning)
|
|
1703
|
-
and "Snapshot queries" in str(w.message)
|
|
1704
|
-
]
|
|
1705
|
-
assert len(snapshot_warnings) == 0
|
|
1706
|
-
|
|
1707
|
-
cursor1.close()
|
|
1708
|
-
cursor2.close()
|
|
1709
|
-
|
|
1710
|
-
def test_snapshot_warning_not_emitted_for_streaming_query_cursor(self, mock_connection_factory):
|
|
1711
|
-
"""Verify that warning is not emitted for streaming query cursors."""
|
|
1712
|
-
mock_connection = mock_connection_factory(None, None)
|
|
1713
|
-
|
|
1714
|
-
# Streaming query cursor should not emit warning
|
|
1715
|
-
with warnings.catch_warnings(record=True) as warning_list:
|
|
1716
|
-
warnings.simplefilter("always")
|
|
1717
|
-
cursor = mock_connection.cursor(mode=ExecutionMode.STREAMING_QUERY)
|
|
1718
|
-
|
|
1719
|
-
# Filter to only UserWarnings about snapshot
|
|
1720
|
-
snapshot_warnings = [
|
|
1721
|
-
w for w in warning_list
|
|
1722
|
-
if issubclass(w.category, UserWarning)
|
|
1723
|
-
and "Snapshot queries" in str(w.message)
|
|
1724
|
-
]
|
|
1725
|
-
assert len(snapshot_warnings) == 0
|
|
1726
|
-
|
|
1727
|
-
# Flag should still be False
|
|
1728
|
-
assert mock_connection._snapshot_warning_issued is False
|
|
1729
|
-
|
|
1730
|
-
cursor.close()
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
1675
|
@pytest.mark.unit
|
|
1734
1676
|
class TestComputePoolIdParameter:
|
|
1735
1677
|
"""Test the compute_pool_id parameter for Cursor.execute() and related methods."""
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{confluent_sql-0.4.1 → confluent_sql-0.4.2}/examples/simple_append_only_streaming_query_example.py
RENAMED
|
File without changes
|
{confluent_sql-0.4.1 → confluent_sql-0.4.2}/examples/snapshot_mode_tuple_cursor_simple_example.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|