Overview

You start with the people document, store its entities, and read their names through a query. Later pages use the same people to explain each step of that sequence.

Before you create resources, activate the core with your license token.

Example

The example follows the complete call sequence, including the release of each result.

Store people and query their names

seedText holds this document:

edn287 B
{:#_ada {:name "Ada"
         :role "engineer"
         :age  36}
 :#_bob {:name   "Bob"
         :role   "engineer"
         :age    41
         :mentor {:#link "#_ada"}}
 :#_cy  {:name "Cy"
         :role "designer"
         :age  29}
 :#_tx  {:author "smoke"
         :reason "seed"}}

queryText holds this document:

edn66 B
{:find    [?name]
 :where   [[?e "name" ?name]]
 :orderBy [?name]}
go676 B
opened, err := stardust.Open(databasePath, stardust.Options{})
if err != nil {
	return err
}
defer opened.Close()

seed, err := stardust.Parse(seedText, stardust.EDN)
if err != nil {
	return err
}
defer seed.Close()

if _, err := opened.MergePatch(seed, nil); err != nil {
	return err
}

definition, err := stardust.Parse(queryText, stardust.EDN)
if err != nil {
	return err
}
defer definition.Close()

query, err := opened.Query(definition)
if err != nil {
	return err
}
defer query.Close()

rows, err := query.Run(nil, stardust.RunOptions{}, nil)
if err != nil {
	return err
}
defer rows.Close()

result, err := rows.Next()
if err != nil {
	return err
}
defer result.Close()
Result / 51 B
{:value [{:name "Ada"} {:name "Bob"} {:name "Cy"}]}

Ownership and lifetimes

ValueLifetimeYour action
Owned resultUntil you release itRelease it when you finish with it.
Borrowed valueThe lifetime that its operation statesStop using it when that lifetime ends.
Owned documentContinues after you release the handle that produced itRelease it separately from that handle.

Each operation states its ownership rule. Use that rule to find the values that you must release.

Concurrency

Calls can overlap unless an operation requires exclusive use of its receiver. Each such operation states that requirement beside its signature.

  • Before you release a handle, stop the calls that can still use it.
  • An owned result has its own lifetime, so another call can use it after its producer finishes.

Terms

TermMeaning
documentA tree of native values that you can read, build, or serialize.
nodeOne value in a document, identified within that document.
handleA reference to a native resource with an explicit lifetime.
ownedA result whose lifetime you control and whose release you must arrange.
borrowedA value whose lifetime depends on its stated owner.
absentA value or field that the operation does not supply.
entityA database object identified independently of its field values.
transactionA committed database change that orders the recorded facts.
factA recorded field value associated with an entity and a transaction.
variableA named value supplied to an expression or document operation.
clauseOne part of a query or mutation document that specifies its behavior.
tickThe ABI unit for a duration or UTC instant: 100 ns. Time and units defines it.

Operations

OperationReturnsSummary
Versionversionversion() returns the loaded library's ABI version.
CheckVersionnonecheck_version(found) verifies that found matches this binding's ABI version.
Pluginsdocumentplugins() returns an owned array document describing the plugins this library can use, followed by any unavailable plugin libraries.
Activatenoneactivate(token) verifies a license token and licenses this process.
Licenselicenselicense() returns the process license state.

Version

go21 B
func Version() uint32

Examples

version

go28 B
result := stardust.Version()
Result / 10 B
{:value 1}

C exports: stardust_abi_version

CheckVersion

go37 B
func CheckVersion(found uint32) error

Parameters

ParameterTypeOwnershipDefaultMeaning
founduint32ValueRequiredThe ABI version to compare with this binding.

Errors

StatusWhen
StatusUnsupportedfound differs from the ABI version of the binding

Examples

check_version

go96 B
result := stardust.Version()
if err := stardust.CheckVersion(result); err != nil {
	return err
}
Result / 10 B
{:value 1}

C exports: stardust_abi_version

Plugins

go33 B
func Plugins() (*Document, error)

Errors

StatusWhen
StatusOutOfMemorynative memory is exhausted

Examples

Read the compiled plugin inventory

go84 B
result, err := stardust.Plugins()
if err != nil {
	return err
}
defer result.Close()
Result / 940 B
{:value [
   {:name            "history"
    :description     "History retention: purges entity history by each stardust/history setting"
    :version         "1"
    :willNotWorkWith ["backups"]
    :databaseHooks   true}
   {:name          "adaptive_query_planner"
    :description   "Adaptive join orders: learns from runs and stores the plans that proved better"
    :version       "1"
    :databaseHooks true}
   {:name          "objects"
    :description   "Object store: content-addressed payloads in named files and directories"
    :version       "1"
    :databaseHooks true}
   {:name          "reactors"
    :description   "Live mutations: stored mutations with live: true react to commits"
    :version       "1"
    :databaseHooks true}
   {:name          "sdk"
    :description   "SDK generation: publishes a typed package of the stored definitions while the database is open"
    :version       "1"
    :databaseHooks true}]}

C exports: stardust_plugins, stardust_result_take_document, stardust_result_error, stardust_result_release

Activate

go33 B
func Activate(token string) error

Parameters

ParameterTypeOwnershipDefaultMeaning
tokenstringValueRequiredThe PASETO v4.public license token text.

Errors

StatusWhen
StatusUnlicensedthe token is refused; the error names the reason
StatusInvalidArgumentthe token is empty or longer than 4096 bytes

Notes

A refused token preserves the current license. Activation is required before parsing, building resources or opening a database. Existing resources keep working after license replacement or expiry.

Examples

Activate the license from a token file

go227 B
token, err := os.ReadFile("license.token")
if err != nil {
	return err
}
if err := stardust.Activate(strings.TrimSpace(string(token))); err != nil {
	return err
}

result, err := stardust.License()
if err != nil {
	return err
}
Result / 396 B
{:value {:active              true
         :failure             "none"
         :support_end         72580320000000000
         :expires             nil
         :build               nil
         :refused_support_end nil
         :subject             "test"
         :license_id          "test"
         :name                ""
         :license             ""
         :tier                ""}}

C exports: stardust_activate, stardust_license

License

go35 B
func License() (LicenseInfo, error)

Examples

Read the process license

go63 B
result, err := stardust.License()
if err != nil {
	return err
}
Result / 396 B
{:value {:active              true
         :failure             "none"
         :support_end         72580320000000000
         :expires             nil
         :build               nil
         :refused_support_end nil
         :subject             "test"
         :license_id          "test"
         :name                ""
         :license             ""
         :tier                ""}}

C exports: stardust_license

license_info

This record contains the result of license. Text fields are copies.

FieldTypeUnitRangeAbsentMeaning
activeboolNoneHost type range—The process holds a verified license.
failurestringNoneHost type range—Why the last activation failed; none when it succeeded or none was tried.
support_endtime.TimeUTC instant (100 ns ticks since the Unix epoch at the ABI)Tick rangeThe zero time.TimeThe last build date the license covers, as a UTC instant.
expirestime.TimeUTC instant (100 ns ticks since the Unix epoch at the ABI)Tick rangeThe zero time.TimeThe expiry checked at activation and database open, as a UTC instant. Existing resources keep working.
buildtime.TimeUTC instant (100 ns ticks since the Unix epoch at the ABI)Tick rangeThe zero time.TimeThe build date of this library, at UTC midnight.
refused_support_endtime.TimeUTC instant (100 ns ticks since the Unix epoch at the ABI)Tick rangeThe zero time.TimeThe support end of the token the last activation refused as support_ended, as a UTC instant.
subjectstringNoneHost type range—The OAuth sign-in identity of the license. Empty when not active.
license_idstringNoneHost type range—The unique license token ID. Empty when not active.
namestringNoneHost type range—The project name, or account display name for Community. Empty when absent.
licensestringNoneHost type range—The ID of the purchased license, a ULID. Empty when absent.
tierstringNoneHost type range—The license tier: community, solo or team. Empty when absent.