@sqb/connect
Version:
Multi-dialect database connection framework written with TypeScript
47 lines (46 loc) • 1.63 kB
JavaScript
import { DataType } from '@sqb/builder';
import { isColumnField } from './orm.helper.js';
export function serializeColumn(col, v) {
if (isColumnField(col)) {
if (col.isArray) {
if (Array.isArray(v))
return v.map(x => serializeDataValue(col.dataType || DataType.VARCHAR, x));
return [serializeDataValue(col.dataType || DataType.VARCHAR, v)];
}
return serializeDataValue(col.dataType || 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 === DataType.DATE || dataType === DataType.TIMESTAMP)) {
return (v.getFullYear() +
'-' +
padZero(v.getMonth() + 1) +
'-' +
padZero(v.getDate()) +
(dataType === 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 === DataType.SMALLINT || dataType === 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;
}