Skip to content

feat: add "ThreeLevelNamespaceAdapter" for enforcing 3-level table identifiers#31

Open
shaofengshi wants to merge 1 commit intolance-format:mainfrom
shaofengshi:new_change
Open

feat: add "ThreeLevelNamespaceAdapter" for enforcing 3-level table identifiers#31
shaofengshi wants to merge 1 commit intolance-format:mainfrom
shaofengshi:new_change

Conversation

@shaofengshi
Copy link

This commit introduces a reusable adapter that enforces exactly 3 levels for table identifiers (catalog.database.table) and at most 2 levels for namespace identifiers (catalog or catalog.database).

Key features:

  • Wraps any LanceNamespace implementation using the Decorator pattern
  • Validates identifier levels before delegating operations
  • Provides clear error messages for invalid identifiers
  • Available in both Java and Python

Java implementation:

  • ThreeLevelNamespaceAdapter class in lance-namespace-impls-core
  • Comprehensive test suite with 19 test cases (all passing)
  • Throws InvalidInputException for invalid identifiers

Python implementation:

  • ThreeLevelNamespaceAdapter class exported from lance_namespace_impls
  • Comprehensive test suite using pytest
  • Raises ValueError for invalid identifiers
  • Includes usage examples

Benefits:

  • Separation of concerns: level enforcement separated from core logic
  • Reusability: any namespace implementation can be wrapped
  • Consistency: all implementations get the same validation behavior
  • Maintainability: validation logic centralized in one place

This addresses the need for strict 3-level enforcement in catalogs like Unity Catalog and Gravitino without duplicating validation logic across implementations.

This commit introduces a reusable adapter that enforces exactly 3 levels
for table identifiers (catalog.database.table) and at most 2 levels for
namespace identifiers (catalog or catalog.database).

Key features:
- Wraps any LanceNamespace implementation using the Decorator pattern
- Validates identifier levels before delegating operations
- Provides clear error messages for invalid identifiers
- Available in both Java and Python

Java implementation:
- ThreeLevelNamespaceAdapter class in lance-namespace-impls-core
- Comprehensive test suite with 19 test cases (all passing)
- Throws InvalidInputException for invalid identifiers

Python implementation:
- ThreeLevelNamespaceAdapter class exported from lance_namespace_impls
- Comprehensive test suite using pytest
- Raises ValueError for invalid identifiers
- Includes usage examples

Benefits:
- Separation of concerns: level enforcement separated from core logic
- Reusability: any namespace implementation can be wrapped
- Consistency: all implementations get the same validation behavior
- Maintainability: validation logic centralized in one place

This addresses the need for strict 3-level enforcement in catalogs like
Unity Catalog and Gravitino without duplicating validation logic across
implementations.
@github-actions
Copy link

github-actions bot commented Mar 2, 2026

ACTION NEEDED
Lance follows the Conventional Commits specification for release automation.

The PR title and description are used as the merge commit message. Please update your PR title and description to match the specification.

For details on the error please inspect the "PR Title Check" action.

@shaofengshi shaofengshi changed the title Add ThreeLevelNamespaceAdapter for enforcing 3-level table identifiers feat: Add ThreeLevelNamespaceAdapter for enforcing 3-level table identifiers Mar 2, 2026
@github-actions github-actions bot added the enhancement New feature or request label Mar 2, 2026
@shaofengshi shaofengshi changed the title feat: Add ThreeLevelNamespaceAdapter for enforcing 3-level table identifiers feat: add "ThreeLevelNamespaceAdapter" for enforcing 3-level table identifiers Mar 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request java python

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant