Fun with DataScript - Basic Operations
Basic datascript operations. Additions, updates...
by Trever Shick
HTML
<script src="https://cdn.jsdelivr.net/npm/[email protected]/datascript.js"></script>
<div id="console-log"></div>
CSS
body {
background-color:black;
color: white;
}
.console-line {
font-family: monospace;
margin: 2px;
white-space: nowrap;
margin:0;
padding:2px;
}
JavaScript
var consoleLine = "<p class=\"console-line\"></p>";
c = {
log: function (text, obj) {
var objText = obj ? JSON.stringify(obj) : "";
$("#console-log").append($(consoleLine).html(text + " " + objText));
},
reset: function() { $("#console-log").html(""); }
};
c.reset();
var d = datascript;
var conn = d.create_conn();
var tx = [ {
":db/id": -100,
"person/age": 45,
"person/name": "Trever"
} ];
var tx_report = d.transact(conn,tx);
console.group("Initial Transaction")
console.log("Tx Report", tx_report);
console.table( [tx_report.tempids]);
console.table(d.datoms(d.db(conn), ":eavt", 1));
console.groupEnd();
var q3 = '[ :find ?e, ?n :where [?e "person/age" 45] [?e "person/name" ?n]]';
var e = d.q(q3, d.db(conn));
c.log("Results -> ", e);
tx = [
[":db.fn/cas", 1, "person/age", 45, 300],
[":db/retract", 1, "person/name", "Trever"],
[":db/add", 1, "person/name", "Old Trever"]
];
tx_report = d.transact(conn, tx);
q3 = '[ :find ?e :where [?e "person/age" 300]]';
e = d.q(q3, d.db(conn));
c.log("Entity Id for 300 year old ->", e);
q3 = '[ :find ?n :where [?e "person/age" 300] [?e "person/name" ?n]]';
e = d.q(q3, d.db(conn));
c.log("Should be Old Trever ->", e);
tx = [ [ ":db.fn/retractEntity", 1 ] ];
tx_report = d.transact(conn, tx);
q3 = '[ :find ?n :where [?e "person/age" 300] [?e "person/name" ?n]]';
e = d.q(q3, d.db(conn));
c.log("Should be Empty ->", e);