ts-sql-query
Version:
Type-safe SQL query builder like QueryDSL or JOOQ in Java or Linq in .Net for TypeScript with MariaDB, MySql, Oracle, PostgreSql, Sqlite and SqlServer support.
133 lines (132 loc) • 5.18 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Values = void 0;
const values_1 = require("./expressions/values");
const ITableOrView_1 = require("./utils/ITableOrView");
const Column_1 = require("./utils/Column");
const ColumnImpl_1 = require("./internal/ColumnImpl");
const symbols_1 = require("./utils/symbols");
const ValueSourceImpl_1 = require("./internal/ValueSourceImpl");
const FragmentQueryBuilder_1 = require("./queryBuilders/FragmentQueryBuilder");
class ValuesOf {
constructor(name, values) {
// @ts-ignore
this.__type = 'values';
this.__name = name;
this.__values = values;
}
as(as) {
const result = new (this.constructor)(this.__name, this.__values);
result.__as = as;
result.__source = this.__source || this;
result.__setColumnsName();
return result;
}
forUseInLeftJoin() {
return this.forUseInLeftJoinAs('');
}
forUseInLeftJoinAs(as) {
const result = new (this.constructor)(this.__name, this.__values);
result.__as = as;
result.__forUseInLeftJoin = true;
result.__source = this.__source || this;
result.__setColumnsName();
for (const prop in result) {
const column = (0, values_1.__getValueSourceOfObject)(result, prop);
if (column) {
const columnPrivate = (0, values_1.__getValueSourcePrivate)(column);
if (columnPrivate.__optionalType === 'required') {
columnPrivate.__optionalType = 'originallyRequired';
}
}
}
return result;
}
column(type, adapter, adapter2) {
if (typeof adapter === 'string') {
return new ColumnImpl_1.ColumnImpl(this, '', type, adapter, adapter2);
}
return new ColumnImpl_1.ColumnImpl(this, '', type, type, adapter);
}
optionalColumn(type, adapter, adapter2) {
if (typeof adapter === 'string') {
return (new ColumnImpl_1.ColumnImpl(this, '', type, adapter, adapter2)).__asOptionalColumn();
}
return (new ColumnImpl_1.ColumnImpl(this, '', type, type, adapter)).__asOptionalColumn();
}
virtualColumnFromFragment(type, arg1, arg2, arg3) {
if (typeof arg1 === 'string') {
const fragmentBuilder = new FragmentQueryBuilder_1.FragmentQueryBuilder(type, arg1, 'required', arg3);
return new ValueSourceImpl_1.ValueSourceFromBuilder(arg2, fragmentBuilder, type, arg1, 'required', arg3);
}
const fragmentBuilder = new FragmentQueryBuilder_1.FragmentQueryBuilder(type, type, 'required', arg2);
return new ValueSourceImpl_1.ValueSourceFromBuilder(arg1, fragmentBuilder, type, type, 'required', arg2);
}
optionalVirtualColumnFromFragment(type, arg1, arg2, arg3) {
if (typeof arg1 === 'string') {
const fragmentBuilder = new FragmentQueryBuilder_1.FragmentQueryBuilder(type, arg1, 'optional', arg3);
return new ValueSourceImpl_1.ValueSourceFromBuilder(arg2, fragmentBuilder, type, arg1, 'optional', arg3);
}
const fragmentBuilder = new FragmentQueryBuilder_1.FragmentQueryBuilder(type, type, 'optional', arg2);
return new ValueSourceImpl_1.ValueSourceFromBuilder(arg1, fragmentBuilder, type, type, 'optional', arg2);
}
// @ts-ignore
__addWiths(sqlBuilder, withs) {
if (this.__source) {
withs.push(this.__source);
}
else {
withs.push(this);
}
(0, ITableOrView_1.__addWiths)(this.__template, sqlBuilder, withs);
}
// @ts-ignore
__registerTableOrView(sqlBuilder, requiredTablesOrViews) {
requiredTablesOrViews.add(this);
(0, ITableOrView_1.__registerTableOrView)(this.__template, sqlBuilder, requiredTablesOrViews);
}
// @ts-ignore
__registerRequiredColumn(sqlBuilder, requiredColumns, onlyForTablesOrViews) {
(0, ITableOrView_1.__registerRequiredColumn)(this.__template, sqlBuilder, requiredColumns, onlyForTablesOrViews);
}
// @ts-ignore
__getOldValues(_sqlBuilder) {
return undefined;
}
// @ts-ignore
__getValuesForInsert(_sqlBuilder) {
return undefined;
}
// @ts-ignore
__isAllowed(_sqlBuilder) {
return true;
}
__setColumnsName() {
for (var columnName in this) {
const column = (0, Column_1.__getColumnOfObject)(this, columnName);
if (!column) {
continue;
}
const columnPrivate = (0, Column_1.__getColumnPrivate)(column);
columnPrivate.__name = columnName;
}
}
// @ts-ignore
__getTableOrView() {
return this;
}
}
class Values extends ValuesOf {
constructor(name, values) {
super(name, values);
}
static create(type, name, values) {
if (values.length <= 0) {
throw new Error('Values requires at least one element in the list');
}
const result = new type(name, values);
result.__setColumnsName();
return result;
}
}
exports.Values = Values;