Choose a writable local database path in your application. The next scene names it databasePath. Open the database through the binding and arrange to release its handle after its dependent queries, rows and mutations.
The complete sequence below opens storage, creates people, queries their names, and releases the handles. The next two steps explain its patch and query inputs. Run this sequence once in a fresh example database; repeating its temporary entity names creates more entities.
Store people and query their names
seedText holds this document:
#_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:
find [?name]
where [[?e name ?name]]
orderBy [?name]
opened, err := stardust.Open(databasePath, stardust.Options{})
if err != nil {
return err
}
defer opened.Close()
seed, err := stardust.Parse(seedText, stardust.DUST)
if err != nil {
return err
}
defer seed.Close()
if _, err := opened.MergePatch(seed, nil); err != nil {
return err
}
definition, err := stardust.Parse(queryText, stardust.DUST)
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()[{name Ada} {name Bob} {name Cy}]See Database for storage options, locking and shutdown rules.