Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: implement InMemoryCatalog as a subclass of SqlCatalog #1140

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

hussein-awala
Copy link
Member

@hussein-awala hussein-awala commented Sep 5, 2024

closes: #1110

This PR implement a new catalog InMemoryCatalog as a subclass of SqlCatalog with SQLite in-memory.

@@ -62,21 +50,20 @@
DEFAULT_WAREHOUSE_LOCATION = "file:///tmp/warehouse"


class InMemoryCatalog(MetastoreCatalog):
class InMemoryCatalog(SqlCatalog):
Copy link
Contributor

Choose a reason for hiding this comment

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

nit, take this out of tests/

Comment on lines 77 to 79
namespace_identifier = Catalog.namespace_from(identifier)
if not self._namespace_exists(namespace_identifier):
self.create_namespace(namespace_identifier)
Copy link
Contributor

Choose a reason for hiding this comment

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

nit: instead of changing the behavior of the function, let's fix the tests

@hussein-awala hussein-awala changed the title replace InMemoryCatalog by a subclass of SqlCatalog with SQLite in-memory feat: implement InMemoryCatalog as a subclass of SqlCatalog Sep 6, 2024
@hussein-awala
Copy link
Member Author

@kevinjqliu I applied what you suggested in the comment above, could you recheck it now?

Copy link
Contributor

@kevinjqliu kevinjqliu left a comment

Choose a reason for hiding this comment

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

added some nit comments. Thanks for working on this! The in-memory catalog is used at a bunch of places in the tests, so changing it has cascading effects

This is useful for test, demo, and playground but not in production as data is not persisted.
"""

def __init__(self, name: str, warehouse: str = "file:///tmp/warehouse", **kwargs: str) -> None:
Copy link
Contributor

Choose a reason for hiding this comment

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

nit: let's use something like /tmp/iceberg/warehouse to not conflict with other tmp directories. Also I'm not sure if this works when the warehouse directory is not created yet.

Copy link
Contributor

Choose a reason for hiding this comment

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

nit: i'd like to keep this as test_base because I want to parameterize all tests to make sure all the catalogs have the same behaviors (see #813)

Comment on lines +69 to +70
DROP_NOT_EXISTING_NAMESPACE_ERROR = "Namespace does not exist: \\('com', 'organization', 'department'\\)"
NO_SUCH_NAMESPACE_ERROR = "Namespace com.organization.department does not exists"
Copy link
Contributor

Choose a reason for hiding this comment

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

nit, merge these two

tests/catalog/test_memory.py Show resolved Hide resolved
@@ -806,7 +831,7 @@ def test_json_properties_get_table_does_not_exist(catalog: InMemoryCatalog) -> N
runner = CliRunner()
result = runner.invoke(run, ["--output=json", "properties", "get", "table", "doesnotexist"])
assert result.exit_code == 1
assert result.output == """{"type": "NoSuchTableError", "message": "Table does not exist: ('doesnotexist',)"}\n"""
assert result.output == """{"type": "ValueError", "message": "Empty namespace identifier"}\n"""
Copy link
Contributor

Choose a reason for hiding this comment

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

nit: shouldnt this be NoSuchTableError? maybe the namespace needs to be created first

Copy link
Contributor

@kevinjqliu kevinjqliu left a comment

Choose a reason for hiding this comment

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

added some nit comments. Thanks for working on this! The in-memory catalog is used at a bunch of places in the tests, so changing it has cascading effects

@kevinjqliu
Copy link
Contributor

@Fokko wydt of this change? i remember we had past discussions on adding a "new" catalog implementation

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Remove InMemoryCatalog from the test-codebase
2 participants