orange-orm
Version:
Object Relational Mapper
52 lines (46 loc) • 1.43 kB
JavaScript
var decodeDbRow = require('../resultToRows/decodeDbRow');
var flags = require('../../flags');
function newRow(context, {table, _options, shouldValidate = true}) {
var dto = {};
table._columns.forEach(addColumn);
function addColumn(column) {
var alias = column.alias;
if ('default' in column) {
if (typeof column.default === 'function')
dto[alias] = column.default();
else if (column.toDto)
dto[alias] = column.toDto(column.default);
else
dto[alias] = column.default;
}
else if (flags.useLazyDefaults && 'lazyDefault' in column && !column.isPrimary) {
if (typeof column.lazyDefault === 'function')
dto[alias] = column.lazyDefault();
else if (column.toDto)
dto[alias] = column.toDto(column.lazyDefault);
else
dto[alias] = column.lazyDefault;
}
else if (column.dbNull !== null)
dto[alias] = null;
else
dto[alias] = undefined;
}
const arg = arguments[2];
if (isObject(arg))
for (let name in arg) {
if (table[name] && table[name].equal)
dto[name] = arg[name];
}
else
for (var i = 2; i < arguments.length; i++) {
var pkValue = arguments[i];
var column = table._primaryColumns[i - 1];
dto[column.alias] = pkValue;
}
return decodeDbRow(context, table, table, dto, shouldValidate, true);
}
function isObject(object) {
return (object === Object(object) && !Array.isArray(object) && !(object instanceof Date));
}
module.exports = newRow;