Skip to content

Add transact time support for schemas #223

Description

@quoll

Asami is schema-less, but during transactions it can be useful to incorporate schema information. For instance:

(transact conn {:tx-data [{:db/ident "first" :data 1}]})
(transact conn {:tx-data [{:db/ident "first" :data 42}]
                :schema {:db/ident :data
                :db/cardinality :db/cardinality/one})

By indicating a cardinality of one, this is equivalent to using an update annotation on the :data attribute.

(entity conn "first")

{:data 42}
Without the schema, this would have resulted in:
{:data #{1 42}}

Also, data integrity can be checked:

(transact conn {:tx-data [{:db/ident "first" :data "forty-two"}]
                :schema {:db/ident :data
                         :db/valueType :db.type/long})

This would throw an ExceptionInfo, with a message like:
Attribute :data cannot accept data: "forty-two". Requires Long value.

These changes will occur in asami.entities

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions