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