Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions .openapi-generator/FILES
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ docs/DatabaseCountResponse.md
docs/DatabaseDefaultSchemaDecl.md
docs/DatabaseDefaultTableDecl.md
docs/DatabaseDetailResponse.md
docs/DatabaseLineageResponse.md
docs/DatabaseSummary.md
docs/DatabasesApi.md
docs/DeleteDatabaseBatchResponse.md
Expand All @@ -58,6 +59,7 @@ docs/FinalizeUploadPart.md
docs/FinalizeUploadRequest.md
docs/FinalizeUploadResponse.md
docs/ForkDatabaseRequest.md
docs/ForkedFromInfo.md
docs/GetConnectionResponse.md
docs/GetDatabaseContextResponse.md
docs/GetResultResponse.md
Expand All @@ -72,6 +74,8 @@ docs/JobStatus.md
docs/JobStatusResponse.md
docs/JobType.md
docs/JobsApi.md
docs/LineageAncestorInfo.md
docs/LineageForkInfo.md
docs/ListConnectionsResponse.md
docs/ListDatabaseContextsResponse.md
docs/ListDatabasesResponse.md
Expand All @@ -87,6 +91,7 @@ docs/ListWorkspacesResponse.md
docs/LoadManagedTableRequest.md
docs/LoadManagedTableResponse.md
docs/ManagedSchemaResponse.md
docs/ManagedTableConstantPerKeyResponse.md
docs/ManagedTableResponse.md
docs/MintUploadPartsRequest.md
docs/MintUploadPartsResponse.md
Expand All @@ -113,6 +118,7 @@ docs/TemporalProfileDetail.md
docs/TextProfileDetail.md
docs/UpdateEmbeddingProviderRequest.md
docs/UpdateEmbeddingProviderResponse.md
docs/UpdateManagedTableRequest.md
docs/UpdateSavedQueryRequest.md
docs/UploadSessionResponse.md
docs/UploadsApi.md
Expand Down Expand Up @@ -187,6 +193,7 @@ hotdata/models/database_count_response.py
hotdata/models/database_default_schema_decl.py
hotdata/models/database_default_table_decl.py
hotdata/models/database_detail_response.py
hotdata/models/database_lineage_response.py
hotdata/models/database_summary.py
hotdata/models/delete_database_batch_response.py
hotdata/models/discovery_status.py
Expand All @@ -197,6 +204,7 @@ hotdata/models/finalize_upload_part.py
hotdata/models/finalize_upload_request.py
hotdata/models/finalize_upload_response.py
hotdata/models/fork_database_request.py
hotdata/models/forked_from_info.py
hotdata/models/get_connection_response.py
hotdata/models/get_database_context_response.py
hotdata/models/get_result_response.py
Expand All @@ -208,6 +216,8 @@ hotdata/models/job_result.py
hotdata/models/job_status.py
hotdata/models/job_status_response.py
hotdata/models/job_type.py
hotdata/models/lineage_ancestor_info.py
hotdata/models/lineage_fork_info.py
hotdata/models/list_connections_response.py
hotdata/models/list_database_contexts_response.py
hotdata/models/list_databases_response.py
Expand All @@ -223,6 +233,7 @@ hotdata/models/list_workspaces_response.py
hotdata/models/load_managed_table_request.py
hotdata/models/load_managed_table_response.py
hotdata/models/managed_schema_response.py
hotdata/models/managed_table_constant_per_key_response.py
hotdata/models/managed_table_response.py
hotdata/models/mint_upload_parts_request.py
hotdata/models/mint_upload_parts_response.py
Expand All @@ -245,6 +256,7 @@ hotdata/models/temporal_profile_detail.py
hotdata/models/text_profile_detail.py
hotdata/models/update_embedding_provider_request.py
hotdata/models/update_embedding_provider_response.py
hotdata/models/update_managed_table_request.py
hotdata/models/update_saved_query_request.py
hotdata/models/upload_session_response.py
hotdata/models/upsert_database_context_request.py
Expand Down Expand Up @@ -301,6 +313,7 @@ test/test_database_count_response.py
test/test_database_default_schema_decl.py
test/test_database_default_table_decl.py
test/test_database_detail_response.py
test/test_database_lineage_response.py
test/test_database_summary.py
test/test_databases_api.py
test/test_delete_database_batch_response.py
Expand All @@ -313,6 +326,7 @@ test/test_finalize_upload_part.py
test/test_finalize_upload_request.py
test/test_finalize_upload_response.py
test/test_fork_database_request.py
test/test_forked_from_info.py
test/test_get_connection_response.py
test/test_get_database_context_response.py
test/test_get_result_response.py
Expand All @@ -327,6 +341,8 @@ test/test_job_status.py
test/test_job_status_response.py
test/test_job_type.py
test/test_jobs_api.py
test/test_lineage_ancestor_info.py
test/test_lineage_fork_info.py
test/test_list_connections_response.py
test/test_list_database_contexts_response.py
test/test_list_databases_response.py
Expand All @@ -342,6 +358,7 @@ test/test_list_workspaces_response.py
test/test_load_managed_table_request.py
test/test_load_managed_table_response.py
test/test_managed_schema_response.py
test/test_managed_table_constant_per_key_response.py
test/test_managed_table_response.py
test/test_mint_upload_parts_request.py
test/test_mint_upload_parts_response.py
Expand All @@ -368,6 +385,7 @@ test/test_temporal_profile_detail.py
test/test_text_profile_detail.py
test/test_update_embedding_provider_request.py
test/test_update_embedding_provider_response.py
test/test_update_managed_table_request.py
test/test_update_saved_query_request.py
test/test_upload_session_response.py
test/test_uploads_api.py
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Changed

- feat(tables): add constant-per-key configuration support

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR removes public SDK surface, but the ### Removed section above records none of it.

Removed by this diff:

  • ConnectionsApi.purge_connection_cache (hotdata/api/connections_api.py)
  • ConnectionsApi.purge_table_cache (same file)
  • CreateConnectionRequest.skip_discovery (hotdata/models/create_connection_request.py)

Failure scenario: a caller on 0.10.0 calls connections_api.purge_table_cache(conn, schema, table), upgrades, and gets AttributeError: 'ConnectionsApi' object has no attribute 'purge_table_cache'. A caller passing skip_discovery=True to CreateConnectionRequest gets a pydantic validation error. Neither caller has a release note to read.

The ### Removed block already documents three other breaking removals in this same cycle, so the convention is established. Add a **Breaking:** entry covering these three.

- chore(databases): clarify fork naming behavior
- docs: adopt "instant database" / "instant catalog" terminology in hand-written
prose. Documentation only — all public API symbols (`ManagedTableResponse`,
Expand Down
1 change: 1 addition & 0 deletions docs/AddManagedTableDecl.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ One table declaration inside an add-schema request body.

Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**constant_per_key** | **List[str]** | Columns whose value is determined by this table's `key`: for every uploaded row, every stored row sharing its key holds the same value of these columns. Declaring this lets a keyed mutation (`delete`, `update`, `upsert`) restrict its search for prior versions to the values the upload carries, which prunes far harder than the key alone when the key's own file statistics are weak. Omit (the default) for the unrestricted search. **Correctness-affecting, not a hint.** If the assertion is false, a mutation supersedes one version of a key and appends beside another, silently duplicating it. Declare it only where the invariant is established. | [optional]
**key** | **List[str]** | Columns that uniquely identify a row, enabling the key-based load modes (`delete`, `update`, `upsert`) on this table: those loads match rows by these columns' values. Omit (the default) to declare no key; the table can still be loaded with `replace` and `append`, but key-based modes are then rejected. | [optional]
**name** | **str** | |
**partition_by** | [**List[TablePartitionKey]**](TablePartitionKey.md) | Partition keys for this table, applied in order. Omit for no partitioning. Declared when the table is created and fixed thereafter. | [optional]
Expand Down
1 change: 1 addition & 0 deletions docs/AddManagedTableRequest.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ Request body for adding a table to an existing schema: `POST /v1/connections/{id

Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**constant_per_key** | **List[str]** | Columns whose value is determined by this table's `key`: for every uploaded row, every stored row sharing its key holds the same value of these columns. Declaring this lets a keyed mutation (`delete`, `update`, `upsert`) restrict its search for prior versions to the values the upload carries, which prunes far harder than the key alone when the key's own file statistics are weak. Omit (the default) for the unrestricted search. **Correctness-affecting, not a hint.** If the assertion is false, a mutation supersedes one version of a key and appends beside another, silently duplicating it. Declare it only where the invariant is established. | [optional]
**key** | **List[str]** | Columns that uniquely identify a row, enabling the key-based load modes (`delete`, `update`, `upsert`) on this table: those loads match rows by these columns' values. Omit (the default) to declare no key; the table can still be loaded with `replace` and `append`, but key-based modes are then rejected. | [optional]
**name** | **str** | |
**partition_by** | [**List[TablePartitionKey]**](TablePartitionKey.md) | Partition keys for this table, applied in order. Omit for no partitioning. Declared when the table is created and fixed thereafter. | [optional]
Expand Down
2 changes: 1 addition & 1 deletion docs/BulkCreateDatabasesRequest.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Name | Type | Description | Notes
**default_schema** | **str** | Schema that unqualified table names resolve to inside each database. | [optional]
**expires_at** | **str** | When the created databases expire. Accepts an RFC 3339 timestamp or a relative duration such as `24h`, `90m`, or `7d`. | [optional]
**idempotency_key** | **str** | Repeat this value to retry a request safely. A retry carrying a key that was already used returns the original batch — the same `batch_id` and the same databases — instead of creating a second set. The key identifies the request, not its contents: reusing a key with a different `count` or template returns the original batch unchanged rather than reporting a mismatch. Use a fresh key per distinct request. | [optional]
**name_template** | **str** | Optional display-label pattern for each database. `{index}` is replaced with the database's zero-based position — for example `tenant-{index}` produces `tenant-0`, `tenant-1`, and so on. When omitted, each database is labelled from its own ID. Labels are not identifiers and are not required to be unique. | [optional]
**name_template** | **str** | Optional display-label pattern for each database. Must contain `{index}`, which is replaced with the database's zero-based position, padded with leading zeros to the width of the batch's largest index — with a `count` of 100, `tenant-{index}` produces `tenant-00` through `tenant-99`. A pattern without `{index}` is rejected, since every database in the batch would be given the same label. Each label also carries a suffix identifying the batch, so repeating the same pattern on a later call does not reuse labels from this one. When omitted, each database is labelled from its own ID. | [optional]
**schemas** | [**List[DatabaseDefaultSchemaDecl]**](DatabaseDefaultSchemaDecl.md) | Schemas and tables to declare on every database in the batch, in the same shape a single create accepts. The declaration applies identically to each database, so a batch of 10,000 declaring one table yields 10,000 databases that each hold that table and are ready to load — with no follow-up call per database. Omitted or empty means each database starts with no tables. | [optional]

## Example
Expand Down
Loading
Loading