You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
refactor: unify Reader/WriterFeature into a single TableFeature (delta-io#1345)
<!--
Thanks for sending a pull request! Here are some tips for you:
1. If this is your first time, please read our contributor guidelines:
https://github.com/delta-incubator/delta-kernel-rs/blob/main/CONTRIBUTING.md
2. Run `cargo t --all-features --all-targets` to get started testing,
and run `cargo fmt`.
3. Ensure you have added or run the appropriate tests for your PR.
4. If the PR is unfinished, add '[WIP]' in your PR title, e.g., '[WIP]
Your PR title ...'.
5. Be sure to keep the PR description updated to reflect all changes.
-->
<!--
PR title formatting:
This project uses conventional commits:
https://www.conventionalcommits.org/
Each PR corresponds to a commit on the `main` branch, with the title of
the PR (typically) being
used for the commit message on main. In order to ensure proper
formatting in the CHANGELOG please
ensure your PR title adheres to the conventional commit specification.
Examples:
- new feature PR: "feat: new API for snapshot.update()"
- bugfix PR: "fix: correctly apply DV in read-table example"
-->
## What changes are proposed in this pull request?
closesdelta-io#1340
As suggested in above issue, this pr
- adds validation check for given (reader_features, writer_features) on
`Protocol::try_new`
- refactors `ReaderFeature` `WriterFeature` into single `TableFeature`
so that we can check only writer feature like
```rust
// If protocol is created via Protocol::try_new(), then it is valid
if !protocol.has_write_feature(&TableFeature::VariantType)
```
Note that there are three feature types, and the `Unknown` variant is
for handling `TableFeature::Unknown` which is either `Writer` or
`ReaderWriter` based on its actual usage.
```rust
pub(crate) enum FeatureType {
Writer,
ReaderWriter,
Unknown,
}
```
<!--
Please clarify what changes you are proposing and why the changes are
needed.
The purpose of this section is to outline the changes, why they are
needed, and how this PR fixes the issue.
If the reason for the change is already explained clearly in an issue,
then it does not need to be restated here.
1. If you propose a new API or feature, clarify the use case for a new
API or feature.
2. If you fix a bug, you can clarify why it is a bug.
-->
<!--
Uncomment this section if there are any changes affecting public APIs:
### This PR affects the following public APIs
If there are breaking changes, please ensure the `breaking-changes`
label gets added by CI, and describe why the changes are needed.
Note that _new_ public APIs are not considered breaking.
-->
## How was this change tested?
<!--
Please make sure to add test cases that check the changes thoroughly
including negative and positive cases if possible.
If it was tested in a way different from regular unit tests, please
clarify how you tested, ideally via a reproducible test documented in
the PR description.
-->
Yes, added new test
---------
Co-authored-by: Drake Lin <drakelin18@gmail.com>
"Writer features must be Writer-only or also listed in reader features");
132
132
133
133
// Schema with VARIANT + Protocol with features = OK
134
134
validate_variant_type_feature_support(
@@ -163,20 +163,6 @@ mod tests {
163
163
&protocol_without_features,
164
164
);
165
165
assert_result_error_with_message(result,"Unsupported: Table contains VARIANT columns but does not have the required 'variantType' feature in reader and writer features");
166
-
167
-
// Schema with VARIANT + Protocol without writer feature = ERROR
168
-
let result = validate_variant_type_feature_support(
169
-
&schema_with_variant,
170
-
&protocol_without_writer_feature,
171
-
);
172
-
assert_result_error_with_message(result,"Unsupported: Table contains VARIANT columns but does not have the required 'variantType' feature in reader and writer features");
173
-
174
-
// Schema with VARIANT + Protocol without reader feature = ERROR
175
-
let result = validate_variant_type_feature_support(
176
-
&schema_with_variant,
177
-
&protocol_without_reader_feature,
178
-
);
179
-
assert_result_error_with_message(result,"Unsupported: Table contains VARIANT columns but does not have the required 'variantType' feature in reader and writer features");
0 commit comments