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);