You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
1.5 KiB
JavaScript

"use strict";
const unreachable = require("@joepie91/unreachable")("zapdb");
const matchValue = require("match-value");
// const createLMDBBackend = require("./backend/lmdb");
const queryBuilder = require("./query-builder");
// TODO: Type decoding hook for eg. turning decimal strings into bigints or numbers
Object.assign(module.exports, queryBuilder);
function findNodeType(nodes, type) {
let nodeIndex = nodes.findIndex((node) => node.type === type);
if (nodeIndex != null) {
return nodes[nodeIndex];
} else {
throw new Error(`Failed to locate expected '${type}' node`);
}
}
let temporaryHardcodedSchema = [
{ name: "_id", type: "bytes", required: true },
{ name: "username", type: "string", required: true },
{ name: "email", type: "string", required: true },
{ name: "activated", type: "boolean", required: true },
{ name: "notes", type: "string", required: false }
];
module.exports.createClient = function(options) {
let { schema, backend } = options;
function insertQuery(query, parameters) {
let items = findNodeType(query.clauses, "items").items;
console.log(items);
}
function selectQuery(query, parameters) {}
function updateQuery(query, parameters) {}
function deleteQuery(query, parameters) {}
return {
query: function (query, parameters) {
matchValue(query.type, {
insert: () => insertQuery(query, parameters),
update: () => updateQuery(query, parameters),
delete: () => deleteQuery(query, parameters),
select: () => selectQuery(query, parameters),
});
},
transaction: function (callback) {
}
};
};