ts-sql-query
Advanced tools
Comparing version 1.12.0 to 1.13.0
{ | ||
"name": "ts-sql-query", | ||
"version": "1.12.0", | ||
"version": "1.13.0", | ||
"description": "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.", | ||
@@ -5,0 +5,0 @@ "license": "MIT", |
import type { SqlBuilder, JoinData, ToSql, SelectData, CompoundOperator, CompoundSelectData, PlainSelectData } from "../sqlBuilders/SqlBuilder"; | ||
import type { SelectExpression, SelectColumns, OrderByMode, SelectExpressionSubquery, ExecutableSelectExpressionWithoutWhere, DynamicWhereExecutableSelectExpression, GroupByOrderByExecutableSelectExpression, OffsetExecutableSelectExpression, CustomizableExecutableSelect, DynamicWhereExpressionWithoutSelect, SelectExpressionFromNoTable, SelectWhereJoinExpression, DynamicOnExpression, OnExpression, SelectExpressionWithoutJoin, SelectWhereExpression, OrderByExecutableSelectExpression, GroupByOrderByHavingExecutableSelectExpression, DynamicHavingExecutableSelectExpression, GroupByOrderHavingByExpressionWithoutSelect, DynamicHavingExpressionWithoutSelect, ICompoundableSelect, CompoundableExecutableSelectExpression, CompoundedExecutableSelectExpression, ExecutableSelect, ComposeExpression, ComposeExpressionDeletingInternalProperty, ComposeExpressionDeletingExternalProperty, WithableExecutableSelect, SelectCustomization } from "../expressions/select"; | ||
import type { SelectExpression, SelectColumns, OrderByMode, SelectExpressionSubquery, ExecutableSelectExpressionWithoutWhere, DynamicWhereExecutableSelectExpression, GroupByOrderByExecutableSelectExpression, OffsetExecutableSelectExpression, DynamicWhereExpressionWithoutSelect, SelectExpressionFromNoTable, SelectWhereJoinExpression, DynamicOnExpression, OnExpression, SelectExpressionWithoutJoin, SelectWhereExpression, OrderByExecutableSelectExpression, GroupByOrderByHavingExecutableSelectExpression, DynamicHavingExecutableSelectExpression, GroupByOrderHavingByExpressionWithoutSelect, DynamicHavingExpressionWithoutSelect, ICompoundableSelect, CompoundableCustomizableExecutableSelectExpression, CompoundedExecutableSelectExpression, ExecutableSelect, ComposeExpression, ComposeExpressionDeletingInternalProperty, ComposeExpressionDeletingExternalProperty, WithableExecutableSelect, SelectCustomization, WhereableExecutableSelectExpressionWithGroupBy, DynamicWhereExecutableSelectExpressionWithGroupBy, GroupByOrderByHavingExecutableSelectExpressionWithoutWhere, DynamicHavingExecutableSelectExpressionWithoutWhere, DynamicWhereSelectExpressionWithoutSelect, CompoundableExecutableSelectExpression, CompoundedOrderByExecutableSelectExpression, CompoundedOffsetExecutableSelectExpression, CompoundedCustomizableExecutableSelect, OrderByExecutableSelectExpressionWithoutWhere, OrderedExecutableSelectExpressionWithoutWhere, OffsetExecutableSelectExpressionWithoutWhere, CompoundableCustomizableExpressionWithoutWhere, DynamicWhereOffsetExecutableSelectExpression, DynamicWhereCompoundableCustomizableExecutableSelectExpression, ExecutableSelectWithWhere, ExecutableSelectWithoutWhere, WithableExecutableSelectWithoutWhere, CompoundableExecutableSelectExpressionWithoutWhere, CompoundableCustomizableExecutableSelectExpressionWitoutWhere, SplitedComposedExecutableSelectWithoutWhere, SplitedComposedDynamicWhereExecutableSelectExpression, WhereableCompoundableExecutableSelectExpressionWithoutWhere } from "../expressions/select"; | ||
import { HasAddWiths, ITableOrView, IWithView, OuterJoinSource } from "../utils/ITableOrView"; | ||
@@ -38,3 +38,3 @@ import type { BooleanValueSource, NumberValueSource, IntValueSource, ValueSource, IfValueSource, IIfValueSource, IBooleanValueSource, INumberValueSource, IIntValueSource, IExecutableSelectQuery } from "../expressions/values"; | ||
declare type SplitCompose = Compose | Split | GuidedSplit; | ||
declare abstract class AbstractSelect implements ToSql, HasAddWiths, IExecutableSelectQuery<any, any, any>, CompoundableExecutableSelectExpression<any, any, any, any, any, any>, CompoundedExecutableSelectExpression<any, any, any, any, any, any>, OrderByExecutableSelectExpression<any, any, any, any, any, any>, OffsetExecutableSelectExpression<any, any, any, any>, CustomizableExecutableSelect<any, any, any, any>, WithableExecutableSelect<any, any, any, any>, ExecutableSelect<any, any, any, any>, ComposeExpression<any, any, any, any, any, any, any>, ComposeExpressionDeletingInternalProperty<any, any, any, any, any, any, any>, ComposeExpressionDeletingExternalProperty<any, any, any, any, any, any, any> { | ||
declare abstract class AbstractSelect implements ToSql, HasAddWiths, IExecutableSelectQuery<any, any, any>, CompoundableCustomizableExecutableSelectExpression<any, any, any, any, any, any>, CompoundedExecutableSelectExpression<any, any, any, any, any, any>, WithableExecutableSelect<any, any, any, any>, ExecutableSelect<any, any, any, any>, ComposeExpression<any, any, any, any, any, any, any>, ComposeExpressionDeletingInternalProperty<any, any, any, any, any, any, any>, ComposeExpressionDeletingExternalProperty<any, any, any, any, any, any, any>, OrderByExecutableSelectExpression<any, any, any, any, any, any>, OffsetExecutableSelectExpression<any, any, any, any, any, any>, CompoundableCustomizableExecutableSelectExpression<any, any, any, any, any, any>, CompoundableExecutableSelectExpression<any, any, any, any, any, any>, CompoundedOrderByExecutableSelectExpression<any, any, any, any, any, any>, CompoundedOffsetExecutableSelectExpression<any, any, any, any>, CompoundedCustomizableExecutableSelect<any, any, any, any>, OrderByExecutableSelectExpressionWithoutWhere<any, any, any, any, any, any>, ExecutableSelectWithWhere<any, any, any, any>, ExecutableSelectWithoutWhere<any, any, any, any, any>, WithableExecutableSelectWithoutWhere<any, any, any, any, any>, CompoundableExecutableSelectExpressionWithoutWhere<any, any, any, any, any, any>, CompoundableCustomizableExecutableSelectExpressionWitoutWhere<any, any, any, any, any, any> { | ||
[database]: any; | ||
@@ -80,6 +80,6 @@ [requiredTableOrView]: any; | ||
abstract __finishJoinHaving(): void; | ||
orderBy(column: any, mode?: OrderByMode): this; | ||
orderByFromString(orderBy: string): this; | ||
limit(limit: int | number | INumberValueSource<any, any> | IIntValueSource<any, any>): this; | ||
offset(offset: int | number | INumberValueSource<any, any> | IIntValueSource<any, any>): this; | ||
orderBy(column: any, mode?: OrderByMode): any; | ||
orderByFromString(orderBy: string): any; | ||
limit(limit: int | number | INumberValueSource<any, any> | IIntValueSource<any, any>): any; | ||
offset(offset: int | number | INumberValueSource<any, any> | IIntValueSource<any, any>): any; | ||
__combineSubSelectUsing(select: ICompoundableSelect<any, any, any, any>, result: CompoundSelectQueryBuilder): void; | ||
@@ -118,10 +118,10 @@ union(select: ICompoundableSelect<any, any, any, any>): any; | ||
__buildRecursive(fn: (view: any) => ICompoundableSelect<any, any, any, any>, unionAll: boolean): void; | ||
recursiveUnion(fn: (view: any) => ICompoundableSelect<any, any, any, any>): this; | ||
recursiveUnionAll(fn: (view: any) => ICompoundableSelect<any, any, any, any>): this; | ||
recursiveUnion(fn: (view: any) => ICompoundableSelect<any, any, any, any>): any; | ||
recursiveUnionAll(fn: (view: any) => ICompoundableSelect<any, any, any, any>): any; | ||
__buildRecursiveFn(fn: (view: any) => IBooleanValueSource<any, any>): (view: any) => ICompoundableSelect<any, any, any, any>; | ||
recursiveUnionOn(fn: (view: any) => IBooleanValueSource<any, any>): this; | ||
recursiveUnionAllOn(fn: (view: any) => IBooleanValueSource<any, any>): this; | ||
customizeQuery(customization: SelectCustomization<any>): this; | ||
recursiveUnionOn(fn: (view: any) => IBooleanValueSource<any, any>): any; | ||
recursiveUnionAllOn(fn: (view: any) => IBooleanValueSource<any, any>): any; | ||
customizeQuery(customization: SelectCustomization<any>): any; | ||
} | ||
export declare class SelectQueryBuilder extends AbstractSelect implements ToSql, PlainSelectData, SelectExpression<any, any, any>, SelectExpressionFromNoTable<any>, ExecutableSelectExpressionWithoutWhere<any, any, any, any, any, any>, DynamicWhereExecutableSelectExpression<any, any, any, any, any, any>, DynamicWhereExpressionWithoutSelect<any, any, any>, GroupByOrderByExecutableSelectExpression<any, any, any, any, any, any>, SelectWhereJoinExpression<any, any, any>, DynamicOnExpression<any, any, any>, OnExpression<any, any, any>, SelectExpressionWithoutJoin<any, any, any>, SelectExpressionSubquery<any, any>, SelectWhereExpression<any, any, any>, GroupByOrderByHavingExecutableSelectExpression<any, any, any, any, any, any>, DynamicHavingExecutableSelectExpression<any, any, any, any, any, any>, GroupByOrderHavingByExpressionWithoutSelect<any, any, any>, DynamicHavingExpressionWithoutSelect<any, any, any> { | ||
export declare class SelectQueryBuilder extends AbstractSelect implements ToSql, PlainSelectData, SelectExpression<any, any, any>, SelectExpressionFromNoTable<any>, ExecutableSelectExpressionWithoutWhere<any, any, any, any, any, any>, DynamicWhereExecutableSelectExpression<any, any, any, any, any, any>, DynamicWhereExpressionWithoutSelect<any, any, any>, GroupByOrderByExecutableSelectExpression<any, any, any, any, any, any>, SelectWhereJoinExpression<any, any, any>, DynamicOnExpression<any, any, any>, OnExpression<any, any, any>, SelectExpressionWithoutJoin<any, any, any>, SelectExpressionSubquery<any, any>, SelectWhereExpression<any, any, any>, GroupByOrderByHavingExecutableSelectExpression<any, any, any, any, any, any>, DynamicHavingExecutableSelectExpression<any, any, any, any, any, any>, GroupByOrderHavingByExpressionWithoutSelect<any, any, any>, DynamicHavingExpressionWithoutSelect<any, any, any>, WhereableExecutableSelectExpressionWithGroupBy<any, any, any, any, any, any>, DynamicWhereExecutableSelectExpressionWithGroupBy<any, any, any, any, any, any>, GroupByOrderByHavingExecutableSelectExpressionWithoutWhere<any, any, any, any, any, any>, DynamicHavingExecutableSelectExpressionWithoutWhere<any, any, any, any, any, any>, DynamicWhereSelectExpressionWithoutSelect<any, any, any>, OrderedExecutableSelectExpressionWithoutWhere<any, any, any, any, any, any>, OffsetExecutableSelectExpressionWithoutWhere<any, any, any, any, any, any>, CompoundableCustomizableExpressionWithoutWhere<any, any, any, any, any, any>, DynamicWhereOffsetExecutableSelectExpression<any, any, any, any, any, any>, DynamicWhereCompoundableCustomizableExecutableSelectExpression<any, any, any, any, any, any>, SplitedComposedExecutableSelectWithoutWhere<any, any, any, any, any>, SplitedComposedDynamicWhereExecutableSelectExpression<any, any, any, any, any>, WhereableCompoundableExecutableSelectExpressionWithoutWhere<any, any, any, any, any, any>, DynamicWhereCompoundableCustomizableExecutableSelectExpression<any, any, any, any, any, any> { | ||
__type: 'plain'; | ||
@@ -141,22 +141,22 @@ __distinct: boolean; | ||
select(columns: SelectColumns<any, any>): any; | ||
selectOneColumn(column: ValueSource<any, any>): this; | ||
from(table: ITableOrView<any>): this; | ||
join(table: ITableOrView<any>): this; | ||
innerJoin(table: ITableOrView<any>): this; | ||
leftJoin(source: OuterJoinSource<any, any>): this; | ||
leftOuterJoin(source: OuterJoinSource<any, any>): this; | ||
optionalJoin(table: ITableOrView<any>): this; | ||
optionalInnerJoin(table: ITableOrView<any>): this; | ||
optionalLeftJoin(source: OuterJoinSource<any, any>): this; | ||
optionalLeftOuterJoin(source: OuterJoinSource<any, any>): this; | ||
dynamicOn(): this; | ||
on(condition: IBooleanValueSource<any, any> | IIfValueSource<any, any>): this; | ||
selectOneColumn(column: ValueSource<any, any>): any; | ||
from(table: ITableOrView<any>): any; | ||
join(table: ITableOrView<any>): any; | ||
innerJoin(table: ITableOrView<any>): any; | ||
leftJoin(source: OuterJoinSource<any, any>): any; | ||
leftOuterJoin(source: OuterJoinSource<any, any>): any; | ||
optionalJoin(table: ITableOrView<any>): any; | ||
optionalInnerJoin(table: ITableOrView<any>): any; | ||
optionalLeftJoin(source: OuterJoinSource<any, any>): any; | ||
optionalLeftOuterJoin(source: OuterJoinSource<any, any>): any; | ||
dynamicOn(): any; | ||
on(condition: IBooleanValueSource<any, any> | IIfValueSource<any, any>): any; | ||
__finishJoinHaving(): void; | ||
dynamicWhere(): this; | ||
where(condition: IBooleanValueSource<any, any> | IIfValueSource<any, any>): this; | ||
and(condition: IBooleanValueSource<any, any> | IIfValueSource<any, any>): this; | ||
or(condition: IBooleanValueSource<any, any> | IIfValueSource<any, any>): this; | ||
dynamicHaving(): this; | ||
having(condition: IBooleanValueSource<any, any> | IIfValueSource<any, any>): this; | ||
groupBy(...columns: Array<string | number | symbol | ValueSource<any, any>>): this; | ||
dynamicWhere(): any; | ||
where(condition: IBooleanValueSource<any, any> | IIfValueSource<any, any>): any; | ||
and(condition: IBooleanValueSource<any, any> | IIfValueSource<any, any>): any; | ||
or(condition: IBooleanValueSource<any, any> | IIfValueSource<any, any>): any; | ||
dynamicHaving(): any; | ||
having(condition: IBooleanValueSource<any, any> | IIfValueSource<any, any>): any; | ||
groupBy(...columns: Array<string | number | symbol | ValueSource<any, any>>): any; | ||
__asSelectData(): SelectData; | ||
@@ -163,0 +163,0 @@ __generateRequiredTableOrView(): Set<ITableOrView<any>>; |
@@ -1081,3 +1081,2 @@ "use strict"; | ||
} | ||
this.__finishJoinHaving(); | ||
if (this.__where) { | ||
@@ -1084,0 +1083,0 @@ this.__where = this.__where.and(condition); |
@@ -111,3 +111,14 @@ "use strict"; | ||
_buildInsertDefaultValues(query, params) { | ||
return 'insert into ' + this._appendTableOrViewName(query.__table, params) + ' () values ()'; | ||
this._ensureRootQuery(query, params); | ||
const customization = query.__customization; | ||
let insertQuery = 'insert '; | ||
if (customization && customization.afterInsertKeyword) { | ||
insertQuery += this._appendRawFragment(customization.afterInsertKeyword, params) + ' '; | ||
} | ||
insertQuery += 'into ' + this._appendTableOrViewName(query.__table, params) + ' () values ()'; | ||
if (customization && customization.afterQuery) { | ||
insertQuery += ' ' + this._appendRawFragment(customization.afterQuery, params); | ||
} | ||
this._resetRootQuery(query, params); | ||
return insertQuery; | ||
} | ||
@@ -114,0 +125,0 @@ _buildInsertOutput(_query, _params) { |
@@ -30,2 +30,7 @@ import type { ToSql, SqlBuilder, DeleteData, InsertData, UpdateData, SelectData, SqlOperation, WithQueryData, CompoundOperator } from "./SqlBuilder"; | ||
_setContainsInsertReturningClause(params: any[], value: boolean | undefined): void; | ||
_ensureRootQuery(query: SelectData | InsertData | UpdateData | DeleteData, params: any[]): void; | ||
_isCurrentRootQuery(query: SelectData | InsertData | UpdateData | DeleteData, params: any[]): boolean; | ||
_resetRootQuery(query: SelectData | InsertData | UpdateData | DeleteData, params: any[]): void; | ||
_getRootQuery(params: any[]): object | undefined; | ||
_setRootQuery(params: any[], value: object | undefined): void; | ||
_isValue(value: any): boolean; | ||
@@ -67,2 +72,5 @@ _isReservedKeyword(_word: string): boolean; | ||
_appendCompoundOperator(compoundOperator: CompoundOperator, _params: any[]): string; | ||
_buildSelectWithColumnsInfoForCompound(query: SelectData, params: any[], columnsForInsert: { | ||
[name: string]: Column | undefined; | ||
}): string; | ||
_buildSelectWithColumnsInfo(query: SelectData, params: any[], columnsForInsert: { | ||
@@ -69,0 +77,0 @@ [name: string]: Column | undefined; |
@@ -1,2 +0,2 @@ | ||
import type { ToSql, InsertData, CompoundOperator } from "./SqlBuilder"; | ||
import type { ToSql, InsertData, CompoundOperator, SelectData } from "./SqlBuilder"; | ||
import { TypeAdapter } from "../TypeAdapter"; | ||
@@ -26,2 +26,6 @@ import { ValueSource } from "../expressions/values"; | ||
_appendCompoundOperator(compoundOperator: CompoundOperator, _params: any[]): string; | ||
_buildSelectWithColumnsInfoForCompound(query: SelectData, params: any[], columnsForInsert: { | ||
[name: string]: Column | undefined; | ||
}): string; | ||
_buildSelectOrderBy(query: SelectData, params: any[]): string; | ||
_buildInsertMultiple(query: InsertData, params: any[]): string; | ||
@@ -28,0 +32,0 @@ _buildInsertDefaultValues(query: InsertData, params: any[]): string; |
@@ -130,2 +130,80 @@ "use strict"; | ||
} | ||
_buildSelectWithColumnsInfoForCompound(query, params, columnsForInsert) { | ||
const result = this._buildSelectWithColumnsInfo(query, params, columnsForInsert); | ||
if (query.__limit !== undefined || query.__offset !== undefined || query.__orderBy !== undefined) { | ||
return 'select * from (' + result + ')'; | ||
} | ||
return result; | ||
} | ||
_buildSelectOrderBy(query, params) { | ||
if (query.__type === 'plain') { | ||
return super._buildSelectOrderBy(query, params); | ||
} | ||
const orderBy = query.__orderBy; | ||
if (!orderBy) { | ||
return ''; | ||
} | ||
const columns = query.__columns; | ||
const columnNames = Object.getOwnPropertyNames(columns); | ||
let orderByColumns = ''; | ||
for (const property in orderBy) { | ||
if (orderByColumns) { | ||
orderByColumns += ', '; | ||
} | ||
const column = columns[property]; | ||
if (!column) { | ||
throw new Error('Column ' + property + ' included in the order by not found in the select clause'); | ||
} | ||
const columnAlias = columnNames.indexOf(property) + 1; | ||
const order = orderBy[property]; | ||
if (!order) { | ||
orderByColumns += columnAlias; | ||
} | ||
else | ||
switch (order) { | ||
case 'asc': | ||
case 'desc': | ||
case 'asc nulls first': | ||
case 'asc nulls last': | ||
case 'desc nulls first': | ||
case 'desc nulls last': | ||
orderByColumns += columnAlias + ' ' + order; | ||
break; | ||
case 'insensitive': | ||
case 'asc insensitive': | ||
case 'desc insensitive': | ||
case 'asc nulls first insensitive': | ||
case 'asc nulls last insensitive': | ||
case 'desc nulls first insensitive': | ||
case 'desc nulls last insensitive': { | ||
let sqlOrder = order.substring(0, order.length - 12); | ||
if (sqlOrder) { | ||
sqlOrder = ' ' + sqlOrder; | ||
} | ||
const collation = this._connectionConfiguration.insesitiveCollation; | ||
const columnType = values_2.__getValueSourcePrivate(column).__valueType; | ||
if (columnType != 'string') { | ||
// Ignore the insensitive term, it do nothing | ||
orderByColumns += columnAlias + ' ' + sqlOrder; | ||
} | ||
else if (collation) { | ||
orderByColumns += columnAlias + ' collate ' + collation + sqlOrder; | ||
} | ||
else if (collation === '') { | ||
orderByColumns += columnAlias + sqlOrder; | ||
} | ||
else { | ||
orderByColumns += 'lower(' + columnAlias + ')' + sqlOrder; | ||
} | ||
break; | ||
} | ||
default: | ||
throw new Error('Invalid order by: ' + property + ' ' + order); | ||
} | ||
} | ||
if (!orderByColumns) { | ||
return ''; | ||
} | ||
return ' order by ' + orderByColumns; | ||
} | ||
_buildInsertMultiple(query, params) { | ||
@@ -139,2 +217,3 @@ const multiple = query.__multiple; | ||
} | ||
this._ensureRootQuery(query, params); | ||
const table = query.__table; | ||
@@ -239,2 +318,3 @@ const oldSafeTableOrView = this._getSafeTableOrView(params); | ||
this._setSafeTableOrView(params, oldSafeTableOrView); | ||
this._resetRootQuery(query, params); | ||
if (returning) { | ||
@@ -249,2 +329,3 @@ insertQuery += 'end;'; | ||
_buildInsertDefaultValues(query, params) { | ||
this._ensureRootQuery(query, params); | ||
const oldSafeTableOrView = this._getSafeTableOrView(params); | ||
@@ -300,2 +381,3 @@ const table = query.__table; | ||
this._setSafeTableOrView(params, oldSafeTableOrView); | ||
this._resetRootQuery(query, params); | ||
return insertQuery; | ||
@@ -302,0 +384,0 @@ } |
@@ -5,5 +5,9 @@ import type { ToSql, SelectData, InsertData } from "./SqlBuilder"; | ||
import { AbstractSqlBuilder } from "./AbstractSqlBuilder"; | ||
import { Column } from "../utils/Column"; | ||
export declare class SqliteSqlBuilder extends AbstractSqlBuilder { | ||
sqlite: true; | ||
_isReservedKeyword(word: string): boolean; | ||
_buildSelectWithColumnsInfoForCompound(query: SelectData, params: any[], columnsForInsert: { | ||
[name: string]: Column | undefined; | ||
}): string; | ||
_buildSelectOrderBy(query: SelectData, _params: any[]): string; | ||
@@ -10,0 +14,0 @@ _escapeInsensitive(identifier: string, column: ValueSource<any, any>): string; |
@@ -19,2 +19,9 @@ "use strict"; | ||
} | ||
_buildSelectWithColumnsInfoForCompound(query, params, columnsForInsert) { | ||
const result = this._buildSelectWithColumnsInfo(query, params, columnsForInsert); | ||
if (query.__limit !== undefined || query.__offset !== undefined || query.__orderBy !== undefined) { | ||
return 'select * from (' + result + ')'; | ||
} | ||
return result; | ||
} | ||
_buildSelectOrderBy(query, _params) { | ||
@@ -21,0 +28,0 @@ const orderBy = query.__orderBy; |
@@ -24,2 +24,5 @@ import { ToSql, SelectData, InsertData } from "./SqlBuilder"; | ||
_appendSelectColumn(value: ValueSource<any, any>, params: any[], columnForInsert: Column | undefined): string; | ||
_buildSelectWithColumnsInfoForCompound(query: SelectData, params: any[], columnsForInsert: { | ||
[name: string]: Column | undefined; | ||
}): string; | ||
_buildSelectOrderBy(query: SelectData, _params: any[]): string; | ||
@@ -26,0 +29,0 @@ _escapeInsensitive(identifier: string, column: ValueSource<any, any>): string; |
@@ -110,2 +110,9 @@ "use strict"; | ||
} | ||
_buildSelectWithColumnsInfoForCompound(query, params, columnsForInsert) { | ||
const result = this._buildSelectWithColumnsInfo(query, params, columnsForInsert); | ||
if (query.__limit !== undefined || query.__offset !== undefined || query.__orderBy !== undefined) { | ||
return 'select * from (' + result + ') _t_' + this._generateUnique() + '_'; | ||
} | ||
return result; | ||
} | ||
_buildSelectOrderBy(query, _params) { | ||
@@ -222,2 +229,6 @@ // How to index it: http://www.sqlines.com/oracle/function_based_indexes | ||
} | ||
if (!result && query.__orderBy && !this._isCurrentRootQuery(query, params)) { | ||
// subqueries with order by requires always an offset, this add a noop offset | ||
result += ' offset 0 rows'; | ||
} | ||
return result; | ||
@@ -224,0 +235,0 @@ } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
1276968
221
21914