@sqb/connect
Version:
Multi-dialect database connection framework written with TypeScript
50 lines (49 loc) • 1.84 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.serializeColumn = serializeColumn;
const builder_1 = require("@sqb/builder");
const orm_helper_js_1 = require("./orm.helper.js");
function serializeColumn(col, v) {
if ((0, orm_helper_js_1.isColumnField)(col)) {
if (col.isArray) {
if (Array.isArray(v))
return v.map(x => serializeDataValue(col.dataType || builder_1.DataType.VARCHAR, x));
return [serializeDataValue(col.dataType || builder_1.DataType.VARCHAR, v)];
}
return serializeDataValue(col.dataType || builder_1.DataType.VARCHAR, v);
}
if (typeof v === 'object' && typeof v.toJSON === 'function')
return v.toJSON();
return v;
}
const padZero = (n) => (n < 9 ? '0' : '') + n;
function serializeDataValue(dataType, v) {
if (v == null)
return;
if (v instanceof Date &&
(dataType === builder_1.DataType.DATE || dataType === builder_1.DataType.TIMESTAMP)) {
return (v.getFullYear() +
'-' +
padZero(v.getMonth() + 1) +
'-' +
padZero(v.getDate()) +
(dataType === builder_1.DataType.TIMESTAMP
? 'T' +
padZero(v.getHours()) +
':' +
padZero(v.getMinutes()) +
':' +
padZero(v.getSeconds())
: ''));
}
if (v instanceof Buffer)
return v.toString('base64');
if (typeof v === 'number' &&
(dataType === builder_1.DataType.SMALLINT || dataType === builder_1.DataType.INTEGER))
return Math.trunc(v);
if (typeof v === 'bigint')
return v.toString();
if (v && typeof v === 'object' && typeof v.toJSON === 'function')
return v.toJSON();
return v;
}