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

Draft catalog flatbuffers schema #82

Merged
merged 7 commits into from
May 19, 2020
Merged

Draft catalog flatbuffers schema #82

merged 7 commits into from
May 19, 2020

Conversation

LaurentiuCristofor
Copy link
Contributor

@LaurentiuCristofor LaurentiuCristofor commented May 6, 2020

Creating this draft catalog flatbuffers schema, for sharing ideas.

Currently, this mainly covers type and table metadata. This metadata is meant to be sufficient to construct a flatbuffers schema that can then be processed to generate accessors, etc.

See comments for details.

@LaurentiuCristofor LaurentiuCristofor requested a review from chuan May 6, 2020 18:06
scratch/laurentiu/catalog/catalog.fbs Outdated Show resolved Hide resolved
scratch/laurentiu/catalog/catalog.fbs Show resolved Hide resolved
scratch/laurentiu/catalog/catalog.fbs Outdated Show resolved Hide resolved
scratch/laurentiu/catalog/catalog.fbs Outdated Show resolved Hide resolved
scratch/laurentiu/catalog/catalog.fbs Show resolved Hide resolved
enabled: bool;

// Will require some flatbuffers modification to support.
nullable: bool;
Copy link
Contributor

Choose a reason for hiding this comment

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

Any field in a flatbuffers table is nullable by default (absence is denoted by an offset of 0 for that field in the object's vtbl).

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yes, but this was meant to track whether the field should accept null or not. In tables, you can treat null value as missing, but in structs we'd need some other approach.

Copy link
Contributor

@senderista senderista May 18, 2020

Choose a reason for hiding this comment

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

Right, in that case I think we'd need to track a user-defined "missing" sentinel value in our schema representation. Or just say that all fields in a struct are required as flatbuffers does.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Actually, missing may not work for tables either. We've had an early discussion where we've said that we'd need to avoid missing values in production, to allow in-place updates. flatc has an option to allow default values to be written in the serialization. The null discussion may need to wait until after Q2, to be fully addressed.

// Monotonically assigned identifier, to maintain the order of fields in flatbuffers schema.
//
// Do we need to support more than 65k fields?
ordering_id: ushort;
Copy link
Contributor

Choose a reason for hiding this comment

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

Flatbuffers allows you to explicitly assign integer IDs to fields ala protobufs, with the id attribute. Can that work for our field ordinal value?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I didn't think of that. The ordinal was just mean to keep the order. I'm not sure if anyone planned to assign ids for access - we could use these ordinals for that as well.

ordering_id: ushort;

// For deprecating fields.
enabled: bool;
Copy link
Contributor

Choose a reason for hiding this comment

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

Flatbuffers has a deprecated attribute which we should use.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This is exactly what this would track. Whether this field should be marked as deprecated in the schema or not. Or were you suggesting that we call it 'deprecated' as well?

Copy link
Contributor

@senderista senderista May 18, 2020

Choose a reason for hiding this comment

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

No, just wanted to confirm that this tracks the flatbuffers deprecated attribute, although I would like to know why you diverged from their terminology.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I can't remember - something made me want to invert the name, but I don't remember now. Might have been to avoid negated logic, because 'enabled = true' reads better than 'deprecated = false'. Let me think a bit about it.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I renamed it to deprecated. I also renamed a couple of other fields (type->category, count->repeated_count) for better clarity.

@LaurentiuCristofor LaurentiuCristofor merged commit 97a1c86 into master May 19, 2020
@LaurentiuCristofor LaurentiuCristofor deleted the laur_catalog branch May 19, 2020 22:54
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.

6 participants