Skip to content

Add transact time support for schemas #223

@quoll

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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions