UNPKG

orange-orm

Version:

Object Relational Mapper

66 lines (57 loc) 1.81 kB
const mergeSql = require('./mergeSql'); const quote = require('./quote'); function getSqlTemplate(_context, _table, _row, options) { if (hasConcurrency(_table, options) && hasColumns()) return mergeSql.apply(null, [...arguments]); else return insertSql.apply(null, [...arguments].slice(1)); function hasColumns() { for(let p in _row) { let alias = _table[p]?.alias; if (alias && _row['__' + alias] !== undefined && _table[p]?.equal) return true; } } } function hasConcurrency(table,options) { for (let i = 0; i < table._primaryColumns.length; i++) { const concurrency = options[table._primaryColumns[i]]?.concurrency; if ( concurrency === 'skipOnConflict' || concurrency === 'overwrite' ) return true; } return options.concurrency === 'skipOnConflict' || options.concurrency === 'overwrite'; } function insertSql(table, row) { let columnNames = []; let regularColumnNames = []; let values = []; let sql = 'INSERT INTO ' + quote(table._dbName) + ' '; addDiscriminators(); addColumns(); if (columnNames.length === 0) sql += ' VALUES()'; else sql = sql + '('+ columnNames.join(',') + ')' + ' VALUES (' + values.join(',') + ')'; return sql; function addDiscriminators() { let discriminators = table._columnDiscriminators; for (let i = 0; i < discriminators.length; i++) { let parts = discriminators[i].split('='); columnNames.push(quote(parts[0])); values.push(parts[1]); } } function addColumns() { let columns = table._columns; for (let i = 0; i < columns.length; i++) { let column = columns[i]; const columnName = quote(column._dbName); regularColumnNames.push(column._dbName); if (row['__' + column.alias] !== undefined) { columnNames.push(columnName); values.push('%s'); } } } } module.exports = getSqlTemplate;