2021-10-10 01:33:20 +03:00
|
|
|
const QueryCompiler_PG = require('../postgres/query/pg-querycompiler');
|
2021-10-24 16:27:08 +03:00
|
|
|
const isEmpty = require('lodash/isEmpty');
|
|
|
|
|
const { columnize: columnize_ } = require('../../formatter/wrappingFormatter');
|
2021-10-10 01:33:20 +03:00
|
|
|
|
|
|
|
|
class QueryCompiler_CRDB extends QueryCompiler_PG {
|
|
|
|
|
truncate() {
|
|
|
|
|
return `truncate ${this.tableName}`;
|
|
|
|
|
}
|
2021-10-24 16:27:08 +03:00
|
|
|
|
|
|
|
|
upsert() {
|
|
|
|
|
let sql = this._upsert();
|
|
|
|
|
if (sql === '') return sql;
|
|
|
|
|
const { returning } = this.single;
|
|
|
|
|
if (returning) sql += this._returning(returning);
|
|
|
|
|
return {
|
|
|
|
|
sql: sql,
|
|
|
|
|
returning,
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_upsert() {
|
|
|
|
|
const upsertValues = this.single.upsert || [];
|
|
|
|
|
let sql = this.with() + `upsert into ${this.tableName} `;
|
|
|
|
|
if (Array.isArray(upsertValues)) {
|
|
|
|
|
if (upsertValues.length === 0) return '';
|
|
|
|
|
} else if (typeof upsertValues === 'object' && isEmpty(upsertValues)) {
|
|
|
|
|
return sql + this._emptyInsertValue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const upsertData = this._prepInsert(upsertValues);
|
|
|
|
|
if (typeof upsertData === 'string') {
|
|
|
|
|
sql += upsertData;
|
|
|
|
|
} else {
|
|
|
|
|
if (upsertData.columns.length) {
|
|
|
|
|
sql += `(${columnize_(
|
|
|
|
|
upsertData.columns,
|
|
|
|
|
this.builder,
|
|
|
|
|
this.client,
|
|
|
|
|
this.bindingsHolder
|
|
|
|
|
)}`;
|
|
|
|
|
sql += ') values (';
|
|
|
|
|
let i = -1;
|
|
|
|
|
while (++i < upsertData.values.length) {
|
|
|
|
|
if (i !== 0) sql += '), (';
|
|
|
|
|
sql += this.client.parameterize(
|
|
|
|
|
upsertData.values[i],
|
|
|
|
|
this.client.valueForUndefined,
|
|
|
|
|
this.builder,
|
|
|
|
|
this.bindingsHolder
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
sql += ')';
|
|
|
|
|
} else if (upsertValues.length === 1 && upsertValues[0]) {
|
|
|
|
|
sql += this._emptyInsertValue;
|
|
|
|
|
} else {
|
|
|
|
|
sql = '';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return sql;
|
|
|
|
|
}
|
2021-10-10 01:33:20 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
module.exports = QueryCompiler_CRDB;
|