vaticle / typedb

TypeDB: the polymorphic database powered by types
https://typedb.com
Mozilla Public License 2.0
3.72k stars 337 forks source link

Outline of structs as a general 'definition' system #7069

Closed flyingsilverfin closed 1 month ago

flyingsilverfin commented 1 month ago

Usage and product changes

We introduce the architecture around structs definitions, and definitions in general.

The idea of a definition is that it is a general schema construct outside the regular thing and type system - this will initially be used for structs and functions.

Definitions are interesting because their interesting payload is in the value, not the key. However, the key contains the ID of the definition. As a result, you can consider the new DefinitionKey to be analogous to TypeVertex, but the interesting data structure is the StructDefinition, which serialises a struct's content.

In doing this, we also realise that ValueType must encompass the built-in value type category, plus the ID of the struct definition, and create a new ValueTypeCategory which can map to a Prefix and doesn't contain the ID of struct definitions. Lastly, we create a the serialised form of ValueTypeBytes, which is used as the property of an attribute type's value type, including the definition ID if it exists.

What isn't implemented yet:

  1. The indexing + retrieval by name of value types through the TypeManager
  2. Serialisation of StructDefinition
  3. The data insertion and deletion pattern of struct instantiations
vaticle-bot commented 1 month ago

PR Review Checklist

Do not edit the content of this comment. The PR reviewer should simply update this comment by ticking each review item below, as they get completed.


Trivial Change

Code

Architecture