-
Notifications
You must be signed in to change notification settings - Fork 2
IbisJsonCompatStore #382
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
base: 11-26-dict-based_versioning_engine
Are you sure you want to change the base?
IbisJsonCompatStore #382
Conversation
|
Warning This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
This stack of pull requests is managed by Graphite. Learn more about stacking. |
07a119d to
48c12f9
Compare
0b0e3fb to
2c7c93a
Compare
Coverage Report (Python 3.12) •
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Coverage Report (Python 3.10) •
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Coverage Report (Python 3.11) •
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This PR introduces IbisJsonCompatStore, a new abstract base class for Ibis-based metadata stores that work with databases lacking native struct support (PostgreSQL, SQLite, MySQL). The implementation uses a dict-based versioning engine with JSON serialization at database boundaries, allowing struct-like behavior through flattened column naming conventions during computation and JSON storage in the database.
- Adds abstract base class
IbisJsonCompatStorethat extendsIbisMetadataStore - Implements JSON pack/unpack logic to serialize/deserialize struct-like columns
- Forces use of
IbisDictBasedVersioningEngineinstead of standardIbisVersioningEngine
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 5 comments.
| File | Description |
|---|---|
src/metaxy/metadata_store/ibis_json_compat.py |
New abstract base class implementing JSON-compatible metadata storage with pack/unpack methods for struct serialization |
tests/metadata_stores/test_ibis_json_compat_store.py |
Comprehensive tests for JSON pack/unpack functionality including roundtrip tests and lazy execution verification |
tests/metadata_stores/test_ibis_json_compat_store_simple.py |
Basic tests verifying abstract class behavior and dict-based engine configuration |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
2c7c93a to
4adbeef
Compare
746e47f to
98df887
Compare
4adbeef to
205f19a
Compare
6004717 to
e2c7a2d
Compare
205f19a to
262d57c
Compare
e2c7a2d to
dc79716
Compare
262d57c to
480cefc
Compare
480cefc to
f11bf5c
Compare
dc79716 to
64f20ab
Compare
danielgafni
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think in principle it makes sense.
My main problem with this PR is code quality, and the volume of LOC, it's just hard to review it this way.
Please do a pass and refactor bad code like hasattr checks or unnecessary error handling - even Opus 4.5 will help a lot here.
Consider splitting the PR to introduce the versioning engine and the store separately.
Now, the most important thing I would like to see is a sanity check: what if we implement DuckDB store with this new json code path?
It should work in the same way as the existing store.
It would be a very easy and convincing way to verify the correctness of this huge PR.
Let's add this test. This json-compatible DuckDB class can stay in _testing. It would be much better than mocked tests (I never trust them).
|
we should have a duckdb json test actually in the massive PG PR |
Well, it should be moved here, tests should not be in some other PRs |
8796207 to
7157233
Compare
085acc1 to
1d547c5
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The tests are very much not convincing. These are typical AI tests, very lengthy and test almost nothing, mostly small scope unit tests and mocks.
I was able to count one write_metadata_to_store and zero write_metadata in these tests.
A very easy thing to do is to add DuckDBJsonCompatStore to AllStoreCases. It would run it through our entire test suite.
1d547c5 to
59cdb76
Compare
7157233 to
3ae374b
Compare
59cdb76 to
8c30870
Compare
I added this. |
8c30870 to
c56c640
Compare
cd2d4ce to
059f902
Compare
c56c640 to
0f88924
Compare
059f902 to
f2ba890
Compare
0f88924 to
44a7af8
Compare
f2ba890 to
2bd72e4
Compare
44a7af8 to
d938075
Compare
2bd72e4 to
c8de19a
Compare
d938075 to
aa30ba6
Compare
c8de19a to
fc1ad5e
Compare
aa30ba6 to
7585151
Compare
fc1ad5e to
79f6e97
Compare
55b3282 to
0478363
Compare
79f6e97 to
316a4cd
Compare
Provides mixin with _pack_json_columns and _unpack_json_columns methods for handling JSON serialization of struct columns in Ibis stores. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- Add system table checks in IbisJsonCompatStore read/write methods - Improve sanitize_uri to preserve usernames while masking passwords - Add query parameter sanitization (password, pwd, pass) - Add comprehensive tests for URI sanitization These improvements apply to all Ibis JSON-compatible stores.
The sanitize_uri function now preserves usernames while masking only passwords. Update test expectations to match this behavior.
316a4cd to
8554f08
Compare
0478363 to
f61a4e3
Compare

No description provided.