@worker-tools/deno-kv-storage
Version:
An implementation of the StorageArea (1,2,3) interface for Deno with an extensible system for supporting various database backends.
209 lines • 7.98 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.decode = exports.Column = void 0;
const oid_js_1 = require("./oid.js");
const decoders_js_1 = require("./decoders.js");
class Column {
constructor(name, tableOid, index, typeOid, columnLength, typeModifier, format) {
Object.defineProperty(this, "name", {
enumerable: true,
configurable: true,
writable: true,
value: name
});
Object.defineProperty(this, "tableOid", {
enumerable: true,
configurable: true,
writable: true,
value: tableOid
});
Object.defineProperty(this, "index", {
enumerable: true,
configurable: true,
writable: true,
value: index
});
Object.defineProperty(this, "typeOid", {
enumerable: true,
configurable: true,
writable: true,
value: typeOid
});
Object.defineProperty(this, "columnLength", {
enumerable: true,
configurable: true,
writable: true,
value: columnLength
});
Object.defineProperty(this, "typeModifier", {
enumerable: true,
configurable: true,
writable: true,
value: typeModifier
});
Object.defineProperty(this, "format", {
enumerable: true,
configurable: true,
writable: true,
value: format
});
}
}
exports.Column = Column;
var Format;
(function (Format) {
Format[Format["TEXT"] = 0] = "TEXT";
Format[Format["BINARY"] = 1] = "BINARY";
})(Format || (Format = {}));
const decoder = new TextDecoder();
// TODO
// Decode binary fields
function decodeBinary() {
throw new Error("Not implemented!");
}
// deno-lint-ignore no-explicit-any
function decodeText(value, typeOid) {
const strValue = decoder.decode(value);
switch (typeOid) {
case oid_js_1.Oid.bpchar:
case oid_js_1.Oid.char:
case oid_js_1.Oid.cidr:
case oid_js_1.Oid.float4:
case oid_js_1.Oid.float8:
case oid_js_1.Oid.inet:
case oid_js_1.Oid.macaddr:
case oid_js_1.Oid.name:
case oid_js_1.Oid.numeric:
case oid_js_1.Oid.oid:
case oid_js_1.Oid.regclass:
case oid_js_1.Oid.regconfig:
case oid_js_1.Oid.regdictionary:
case oid_js_1.Oid.regnamespace:
case oid_js_1.Oid.regoper:
case oid_js_1.Oid.regoperator:
case oid_js_1.Oid.regproc:
case oid_js_1.Oid.regprocedure:
case oid_js_1.Oid.regrole:
case oid_js_1.Oid.regtype:
case oid_js_1.Oid.text:
case oid_js_1.Oid.time:
case oid_js_1.Oid.timetz:
case oid_js_1.Oid.uuid:
case oid_js_1.Oid.varchar:
case oid_js_1.Oid.void:
return strValue;
case oid_js_1.Oid.bpchar_array:
case oid_js_1.Oid.char_array:
case oid_js_1.Oid.cidr_array:
case oid_js_1.Oid.float4_array:
case oid_js_1.Oid.float8_array:
case oid_js_1.Oid.inet_array:
case oid_js_1.Oid.macaddr_array:
case oid_js_1.Oid.name_array:
case oid_js_1.Oid.numeric_array:
case oid_js_1.Oid.oid_array:
case oid_js_1.Oid.regclass_array:
case oid_js_1.Oid.regconfig_array:
case oid_js_1.Oid.regdictionary_array:
case oid_js_1.Oid.regnamespace_array:
case oid_js_1.Oid.regoper_array:
case oid_js_1.Oid.regoperator_array:
case oid_js_1.Oid.regproc_array:
case oid_js_1.Oid.regprocedure_array:
case oid_js_1.Oid.regrole_array:
case oid_js_1.Oid.regtype_array:
case oid_js_1.Oid.text_array:
case oid_js_1.Oid.time_array:
case oid_js_1.Oid.timetz_array:
case oid_js_1.Oid.uuid_array:
case oid_js_1.Oid.varchar_array:
return (0, decoders_js_1.decodeStringArray)(strValue);
case oid_js_1.Oid.int2:
case oid_js_1.Oid.int4:
case oid_js_1.Oid.xid:
return (0, decoders_js_1.decodeInt)(strValue);
case oid_js_1.Oid.int2_array:
case oid_js_1.Oid.int4_array:
case oid_js_1.Oid.xid_array:
return (0, decoders_js_1.decodeIntArray)(strValue);
case oid_js_1.Oid.bool:
return (0, decoders_js_1.decodeBoolean)(strValue);
case oid_js_1.Oid.bool_array:
return (0, decoders_js_1.decodeBooleanArray)(strValue);
case oid_js_1.Oid.box:
return (0, decoders_js_1.decodeBox)(strValue);
case oid_js_1.Oid.box_array:
return (0, decoders_js_1.decodeBoxArray)(strValue);
case oid_js_1.Oid.circle:
return (0, decoders_js_1.decodeCircle)(strValue);
case oid_js_1.Oid.circle_array:
return (0, decoders_js_1.decodeCircleArray)(strValue);
case oid_js_1.Oid.bytea:
return (0, decoders_js_1.decodeBytea)(strValue);
case oid_js_1.Oid.byte_array:
return (0, decoders_js_1.decodeByteaArray)(strValue);
case oid_js_1.Oid.date:
return (0, decoders_js_1.decodeDate)(strValue);
case oid_js_1.Oid.date_array:
return (0, decoders_js_1.decodeDateArray)(strValue);
case oid_js_1.Oid.int8:
return (0, decoders_js_1.decodeBigint)(strValue);
case oid_js_1.Oid.int8_array:
return (0, decoders_js_1.decodeBigintArray)(strValue);
case oid_js_1.Oid.json:
case oid_js_1.Oid.jsonb:
return (0, decoders_js_1.decodeJson)(strValue);
case oid_js_1.Oid.json_array:
case oid_js_1.Oid.jsonb_array:
return (0, decoders_js_1.decodeJsonArray)(strValue);
case oid_js_1.Oid.line:
return (0, decoders_js_1.decodeLine)(strValue);
case oid_js_1.Oid.line_array:
return (0, decoders_js_1.decodeLineArray)(strValue);
case oid_js_1.Oid.lseg:
return (0, decoders_js_1.decodeLineSegment)(strValue);
case oid_js_1.Oid.lseg_array:
return (0, decoders_js_1.decodeLineSegmentArray)(strValue);
case oid_js_1.Oid.path:
return (0, decoders_js_1.decodePath)(strValue);
case oid_js_1.Oid.path_array:
return (0, decoders_js_1.decodePathArray)(strValue);
case oid_js_1.Oid.point:
return (0, decoders_js_1.decodePoint)(strValue);
case oid_js_1.Oid.point_array:
return (0, decoders_js_1.decodePointArray)(strValue);
case oid_js_1.Oid.polygon:
return (0, decoders_js_1.decodePolygon)(strValue);
case oid_js_1.Oid.polygon_array:
return (0, decoders_js_1.decodePolygonArray)(strValue);
case oid_js_1.Oid.tid:
return (0, decoders_js_1.decodeTid)(strValue);
case oid_js_1.Oid.tid_array:
return (0, decoders_js_1.decodeTidArray)(strValue);
case oid_js_1.Oid.timestamp:
case oid_js_1.Oid.timestamptz:
return (0, decoders_js_1.decodeDatetime)(strValue);
case oid_js_1.Oid.timestamp_array:
case oid_js_1.Oid.timestamptz_array:
return (0, decoders_js_1.decodeDatetimeArray)(strValue);
default:
// A separate category for not handled values
// They might or might not be represented correctly as strings,
// returning them to the user as raw strings allows them to parse
// them as they see fit
return strValue;
}
}
function decode(value, column) {
if (column.format === Format.BINARY) {
return decodeBinary();
}
else if (column.format === Format.TEXT) {
return decodeText(value, column.typeOid);
}
else {
throw new Error(`Unknown column format: ${column.format}`);
}
}
exports.decode = decode;
//# sourceMappingURL=decode.js.map