orange-orm 4.0.0 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/docs/changelog.md +6 -1
- package/package.json +2 -2
- package/src/ajv.d.ts +47 -0
- package/src/getManyDto/query/newSingleQuery.js +4 -3
- package/src/getTSDefinition.js +8 -4
- package/src/index.d.ts +5 -5
- package/src/map.d.ts +22 -14
- package/src/mssql/newTransaction.js +1 -0
- package/src/mySql/deleteFromSql.js +3 -1
- package/src/mySql/insertSql.js +14 -7
- package/src/mySql/lastInsertedSql.js +4 -1
- package/src/mySql/newTransaction.js +1 -0
- package/src/oracle/deleteFromSql.js +3 -1
- package/src/oracle/formatDateOut.js +3 -1
- package/src/oracle/insertSql.js +8 -5
- package/src/oracle/mergeSql.js +15 -12
- package/src/oracle/newTransaction.js +1 -0
- package/src/oracle/selectForUpdateSql.js +3 -1
- package/src/pg/deleteFromSql.js +3 -1
- package/src/pg/formatDateOut.js +3 -1
- package/src/pg/insertSql.js +12 -7
- package/src/pg/lastInsertedSql.js +4 -1
- package/src/pg/newTransaction.js +1 -0
- package/src/pg/selectForUpdateSql.js +3 -1
- package/src/sap/deleteFromSql.js +3 -1
- package/src/sap/formatDateOut.js +3 -1
- package/src/sap/insertSql.js +6 -3
- package/src/sap/mergeSql.js +14 -11
- package/src/sap/newTransaction.js +1 -0
- package/src/sap/selectForUpdateSql.js +3 -1
- package/src/sqlite/deleteFromSql.js +3 -1
- package/src/sqlite/insertSql.js +11 -8
- package/src/sqlite/newTransaction.js +1 -0
- package/src/sqlite/selectForUpdateSql.js +3 -1
- package/src/table/column/date/formatOut.js +4 -1
- package/src/table/column/equal.js +2 -1
- package/src/table/column/extractAlias.js +2 -0
- package/src/table/column/greaterThan.js +2 -1
- package/src/table/column/greaterThanOrEqual.js +2 -1
- package/src/table/column/in.js +2 -1
- package/src/table/column/json/formatOut.js +2 -1
- package/src/table/column/lessThan.js +2 -1
- package/src/table/column/lessThanOrEqual.js +3 -1
- package/src/table/column/newColumn.js +6 -3
- package/src/table/column/notEqual.js +2 -1
- package/src/table/column/string/containsCore.js +3 -1
- package/src/table/column/string/endsWithCore.js +3 -1
- package/src/table/column/string/iEqual.js +2 -1
- package/src/table/column/string/startsWithCore.js +2 -1
- package/src/table/commands/delete/singleCommand/selectSql.js +4 -2
- package/src/table/commands/insert/getSqlTemplate.js +4 -5
- package/src/table/commands/newGetLastInsertedCommandCore.js +7 -5
- package/src/table/commands/newUpdateCommandCore.js +5 -3
- package/src/table/count.js +3 -1
- package/src/table/newRelatedTable.js +0 -1
- package/src/table/query/extractOrderBy.js +5 -1
- package/src/table/query/newSingleQuery.js +3 -2
- package/src/table/query/singleQuery/columnSql/newShallowColumnSql.js +7 -3
- package/src/table/query/singleQuery/joinSql/newShallowJoinSql.js +3 -1
- package/src/table/query/singleQuery/joinSql/newShallowJoinSqlCore.js +4 -1
- package/src/table/query/singleQuery/newDiscriminatorSql.js +6 -2
- package/src/table/quote.js +11 -0
- package/src/table/readStream/extractOrderBy.js +5 -1
- package/src/table/readStream/mySql/query/newSubQueries/joinLegToQuery.js +2 -1
- package/src/table/readStream/mySql/query/singleQuery/newShallowColumnSql.js +2 -1
- package/src/table/readStream/pg/query/singleQuery/newShallowColumnSql.js +2 -1
- package/src/table/relatedTable/childColumn.js +10 -5
- package/src/table/relatedTable/columnAggregate.js +6 -2
- package/src/table/relatedTable/columnAggregateGroup.js +19 -13
- package/src/table/relatedTable/selectSql.js +7 -4
- package/src/table/relatedTable/whereSql.js +3 -0
- package/src/tedious/deleteFromSql.js +3 -1
- package/src/tedious/formatDateOut.js +3 -1
- package/src/tedious/formatJSONOut.js +1 -1
- package/src/tedious/getManyDto/query/newSingleQuery.js +1 -3
- package/src/tedious/getManyDto/query/singleQuery/newShallowColumnSql.js +6 -2
- package/src/tedious/insertSql.js +3 -5
- package/src/tedious/mergeSql.js +11 -12
- package/src/tedious/newTransaction.js +1 -0
- package/src/tedious/selectForUpdateSql.js +3 -1
- package/src/getManyDto/query/newColumnSql.js +0 -8
- package/src/getManyDto/query/singleQuery/newJoinedColumnSql.js +0 -25
- package/src/getManyDto/query/singleQuery/newShallowColumnSql.js +0 -25
- package/src/table/getManyDtoFast/getSubRows.js +0 -172
- package/src/table/getManyDtoFast/newQuery.js +0 -8
- package/src/table/getManyDtoFast/newQueryCore.js +0 -18
- package/src/table/getManyDtoFast/query/newSingleQuery.js +0 -20
- package/src/table/getManyDtoFast/query/newSubQueries/joinLegToQuery.js +0 -18
- package/src/table/getManyDtoFast/query/newSubQueries/manyLegToQuery.js +0 -20
- package/src/table/getManyDtoFast/query/newSubQueries/oneLegToQuery.js +0 -21
- package/src/table/getManyDtoFast/query/newSubQueries.js +0 -47
- package/src/table/getManyDtoFast/query/singleQuery/newShallowColumnSql.js +0 -21
|
@@ -4,16 +4,17 @@ var newWhereSql = require('./singleQuery/newWhereSql');
|
|
|
4
4
|
var negotiateLimit = require('./singleQuery/negotiateLimit');
|
|
5
5
|
var negotiateExclusive = require('./singleQuery/negotiateExclusive');
|
|
6
6
|
var newParameterized = require('../../table/query/newParameterized');
|
|
7
|
+
var quote = require('../quote');
|
|
7
8
|
|
|
8
9
|
function _new(table,filter,span,alias,innerJoin,orderBy,limit,offset,exclusive) {
|
|
9
10
|
|
|
10
|
-
var name = table._dbName;
|
|
11
|
+
var name = quote(table._dbName);
|
|
11
12
|
var columnSql = newColumnSql(table,span,alias);
|
|
12
13
|
var joinSql = newJoinSql(span,alias);
|
|
13
14
|
var whereSql = newWhereSql(table,filter,alias);
|
|
14
15
|
var safeLimit = negotiateLimit(limit);
|
|
15
16
|
var exclusiveClause = negotiateExclusive(table,alias,exclusive);
|
|
16
|
-
return newParameterized('select' + safeLimit + ' ' + columnSql + ' from ' + name + ' ' + alias)
|
|
17
|
+
return newParameterized('select' + safeLimit + ' ' + columnSql + ' from ' + name + ' ' + quote(alias))
|
|
17
18
|
.append(innerJoin)
|
|
18
19
|
.append(joinSql)
|
|
19
20
|
.append(whereSql)
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
+
const getSessionSingleton = require('../../../getSessionSingleton');
|
|
2
|
+
|
|
1
3
|
function _new(table, alias, span, ignoreNulls) {
|
|
4
|
+
const quote = getSessionSingleton('quote');
|
|
5
|
+
const quotedAlias = quote(alias);
|
|
2
6
|
let columnsMap = span.columns;
|
|
3
7
|
var columns = table._columns;
|
|
4
8
|
var sql = '';
|
|
@@ -7,11 +11,11 @@ function _new(table, alias, span, ignoreNulls) {
|
|
|
7
11
|
for (let i = 0; i < columns.length; i++) {
|
|
8
12
|
var column = columns[i];
|
|
9
13
|
if (!columnsMap || (columnsMap.get(column))) {
|
|
10
|
-
sql = sql + separator + formatColumn(column) + ' as s' + alias + i;
|
|
14
|
+
sql = sql + separator + formatColumn(column) + ' as ' + quote('s' + alias + i);
|
|
11
15
|
separator = ',';
|
|
12
16
|
}
|
|
13
17
|
else if (!ignoreNulls) {
|
|
14
|
-
sql = sql + separator + 'null as s' + alias + i;
|
|
18
|
+
sql = sql + separator + 'null as ' + quote('s' + alias + i);
|
|
15
19
|
separator = ',';
|
|
16
20
|
}
|
|
17
21
|
}
|
|
@@ -24,7 +28,7 @@ function _new(table, alias, span, ignoreNulls) {
|
|
|
24
28
|
return sql;
|
|
25
29
|
|
|
26
30
|
function formatColumn(column) {
|
|
27
|
-
const formatted = column.formatOut ? column.formatOut(
|
|
31
|
+
const formatted = column.formatOut ? column.formatOut(quotedAlias) : quotedAlias + '.' + quote(column._dbName);
|
|
28
32
|
if (column.dbNull === null)
|
|
29
33
|
return formatted;
|
|
30
34
|
else {
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
var newJoinCore = require('./newShallowJoinSqlCore');
|
|
2
|
+
const getSessionSingleton = require('../../../getSessionSingleton');
|
|
2
3
|
|
|
3
4
|
function _new(rightTable,leftColumns,rightColumns,leftAlias,rightAlias, filter) {
|
|
4
|
-
|
|
5
|
+
const quote = getSessionSingleton('quote');
|
|
6
|
+
var sql = ' JOIN ' + quote(rightTable._dbName) + ' ' + quote(rightAlias) + ' ON (';
|
|
5
7
|
var joinCore = newJoinCore(rightTable,leftColumns,rightColumns,leftAlias,rightAlias,filter);
|
|
6
8
|
return joinCore.prepend(sql).append(')');
|
|
7
9
|
}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
var newDiscriminatorSql = require('./newDiscriminatorSql');
|
|
2
2
|
var newParameterized = require('../../newParameterized');
|
|
3
|
+
var quote = require('../../../quote');
|
|
3
4
|
|
|
4
5
|
function _new(rightTable,leftColumns,rightColumns,leftAlias,rightAlias,filter) {
|
|
6
|
+
leftAlias = quote(leftAlias);
|
|
7
|
+
rightAlias = quote(rightAlias);
|
|
5
8
|
var sql = '';
|
|
6
9
|
var delimiter = '';
|
|
7
10
|
for (var i = 0; i < leftColumns.length; i++) {
|
|
@@ -12,7 +15,7 @@ function _new(rightTable,leftColumns,rightColumns,leftAlias,rightAlias,filter) {
|
|
|
12
15
|
function addColumn(index) {
|
|
13
16
|
var leftColumn = leftColumns[index];
|
|
14
17
|
var rightColumn = rightColumns[index];
|
|
15
|
-
sql += delimiter + leftAlias + '.' + leftColumn._dbName + '=' + rightAlias + '.' + rightColumn._dbName;
|
|
18
|
+
sql += delimiter + leftAlias + '.' + quote(leftColumn._dbName) + '=' + rightAlias + '.' + quote(rightColumn._dbName);
|
|
16
19
|
}
|
|
17
20
|
|
|
18
21
|
sql += newDiscriminatorSql(rightTable,rightAlias);
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
+
const getSessionSingleton = require('../../getSessionSingleton');
|
|
2
|
+
|
|
1
3
|
function newDiscriminatorSql(table, alias) {
|
|
4
|
+
const quote = getSessionSingleton('quote');
|
|
5
|
+
alias = quote(alias);
|
|
2
6
|
var result = '';
|
|
3
7
|
var formulaDiscriminators = table._formulaDiscriminators;
|
|
4
8
|
var columnDiscriminators = table._columnDiscriminators;
|
|
@@ -16,9 +20,9 @@ function newDiscriminatorSql(table, alias) {
|
|
|
16
20
|
|
|
17
21
|
function addColumn() {
|
|
18
22
|
for (var i = 0; i< columnDiscriminators.length; i++) {
|
|
19
|
-
var current = columnDiscriminators[i];
|
|
23
|
+
var current = columnDiscriminators[i].split('=');
|
|
20
24
|
and();
|
|
21
|
-
result += alias + '.' + current;
|
|
25
|
+
result += alias + '.' + quote(current[0]) + '=' + current[1];
|
|
22
26
|
}
|
|
23
27
|
}
|
|
24
28
|
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
let tryGetSessionContext = require('./tryGetSessionContext');
|
|
2
|
+
|
|
3
|
+
function quote(name) {
|
|
4
|
+
let context = tryGetSessionContext();
|
|
5
|
+
if (!context)
|
|
6
|
+
throw new Error('Rdb transaction is no longer available. Is promise chain broken ?');
|
|
7
|
+
let fn = context.quote || (() => `"${name}"`);
|
|
8
|
+
return fn(name);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
module.exports = quote;
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
+
const getSessionSingleton = require('../getSessionSingleton');
|
|
2
|
+
|
|
1
3
|
function extractOrderBy(alias, span) {
|
|
4
|
+
const quote = getSessionSingleton('quote');
|
|
5
|
+
alias = quote(alias);
|
|
2
6
|
var table = span.table;
|
|
3
7
|
var dbNames = [];
|
|
4
8
|
var orderBy = span.orderBy;
|
|
@@ -32,7 +36,7 @@ function extractOrderBy(alias, span) {
|
|
|
32
36
|
var column = getTableColumn(property);
|
|
33
37
|
var jsonQuery = getJsonQuery(property, column.alias);
|
|
34
38
|
|
|
35
|
-
dbNames.push(alias + '.' + column._dbName + jsonQuery + direction);
|
|
39
|
+
dbNames.push(alias + '.' + quote(column._dbName) + jsonQuery + direction);
|
|
36
40
|
}
|
|
37
41
|
function getTableColumn(property) {
|
|
38
42
|
var column = table[property] || table[property.split(/(-|#)>+/g)[0]];
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
var newShallowJoinSql = require('../../../../query/singleQuery/joinSql/newShallowJoinSqlCore');
|
|
2
|
+
const quote = require('../../../../quote');
|
|
2
3
|
var newQuery = require('./newQueryCore');
|
|
3
4
|
var util = require('util');
|
|
4
5
|
|
|
@@ -13,7 +14,7 @@ function joinLegToQuery(parentAlias,leg,legNo) {
|
|
|
13
14
|
var shallowJoin = newShallowJoinSql(parentTable,childColumns,parentColumns,childAlias,parentAlias);
|
|
14
15
|
var query = newQuery(childTable,span,childAlias);
|
|
15
16
|
|
|
16
|
-
return util.format(',\'%s\',(select %s from %s %s where %s)', leg.name, query.sql(), childTable._dbName, childAlias, shallowJoin);
|
|
17
|
+
return util.format(',\'%s\',(select %s from %s %s where %s)', leg.name, query.sql(), quote(childTable._dbName), quote(childAlias), shallowJoin);
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
module.exports = joinLegToQuery;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
var util = require('util');
|
|
2
|
+
const quote = require('../../../../quote');
|
|
2
3
|
|
|
3
4
|
function _new(table,alias) {
|
|
4
5
|
var columnFormat = '\'%s\',%s.%s';
|
|
@@ -8,7 +9,7 @@ function _new(table,alias) {
|
|
|
8
9
|
for (var i = 0; i < columns.length; i++) {
|
|
9
10
|
var column = columns[i];
|
|
10
11
|
if (!('serializable' in column && !column.serializable))
|
|
11
|
-
sql = sql + separator + util.format(columnFormat, column.alias, alias, column._dbName);
|
|
12
|
+
sql = sql + separator + util.format(columnFormat, quote(column.alias), alias, quote(column._dbName));
|
|
12
13
|
separator = ',';
|
|
13
14
|
}
|
|
14
15
|
return sql;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
var util = require('util');
|
|
2
|
+
const quote = require('../../../../quote');
|
|
2
3
|
|
|
3
4
|
function _new(table,alias,span) {
|
|
4
5
|
let columnsMap = span.columns;
|
|
@@ -9,7 +10,7 @@ function _new(table,alias,span) {
|
|
|
9
10
|
for (var i = 0; i < columns.length; i++) {
|
|
10
11
|
var column = columns[i];
|
|
11
12
|
if (!('serializable' in column && !column.serializable) && (!columnsMap || (columnsMap.get(column)))) {
|
|
12
|
-
sql = sql + separator + util.format(columnFormat, column._dbName, column.alias);
|
|
13
|
+
sql = sql + separator + util.format(columnFormat, quote(column._dbName), quote(column.alias));
|
|
13
14
|
separator = ',' + alias + '.';
|
|
14
15
|
}
|
|
15
16
|
}
|
|
@@ -1,23 +1,28 @@
|
|
|
1
1
|
var newJoin = require('./joinSql');
|
|
2
2
|
var getSessionContext = require('../getSessionContext');
|
|
3
3
|
var newJoinCore = require('../query/singleQuery/joinSql/newShallowJoinSqlCore');
|
|
4
|
+
const getSessionSingleton = require('../getSessionSingleton');
|
|
5
|
+
const _quote = require('../quote');
|
|
6
|
+
|
|
4
7
|
|
|
5
8
|
function childColumn(column, relations) {
|
|
9
|
+
const quote = getSessionSingleton('quote');
|
|
6
10
|
const context = getSessionContext();
|
|
7
11
|
const outerAlias = 'y' + context.aggregateCount++;
|
|
12
|
+
const outerAliasQuoted = quote(outerAlias);
|
|
8
13
|
const alias = 'x' + relations.length;
|
|
9
14
|
const foreignKeys = getForeignKeys(relations[0]);
|
|
10
|
-
const select = ` LEFT JOIN (SELECT ${foreignKeys},${alias}.${column._dbName} as prop`;
|
|
15
|
+
const select = ` LEFT JOIN (SELECT ${foreignKeys},${alias}.${quote(column._dbName)} as prop`;
|
|
11
16
|
const innerJoin = relations.length > 1 ? newJoin(relations).sql() : '';
|
|
12
17
|
const onClause = createOnClause(relations[0], outerAlias);
|
|
13
|
-
const from = ` FROM ${relations.at(-1).childTable._dbName} ${alias} ${innerJoin}) ${
|
|
18
|
+
const from = ` FROM ${quote(relations.at(-1).childTable._dbName)} ${alias} ${innerJoin}) ${outerAliasQuoted} ON (${onClause})`;
|
|
14
19
|
const join = select + from ;
|
|
15
20
|
|
|
16
21
|
return {
|
|
17
|
-
expression: (alias) => `${
|
|
22
|
+
expression: (alias) => `${outerAliasQuoted}.prop ${quote(alias)}`,
|
|
18
23
|
joins: [join],
|
|
19
24
|
column,
|
|
20
|
-
groupBy: `${
|
|
25
|
+
groupBy: `${outerAliasQuoted}.prop`,
|
|
21
26
|
};
|
|
22
27
|
}
|
|
23
28
|
|
|
@@ -55,7 +60,7 @@ function getForeignKeys(relation) {
|
|
|
55
60
|
columns = relation.joinRelation.columns;
|
|
56
61
|
else
|
|
57
62
|
columns = relation.childTable._primaryColumns;
|
|
58
|
-
return columns.map(x => `${alias}.${x._dbName}`).join(',');
|
|
63
|
+
return columns.map(x => `${alias}.${_quote(x._dbName)}`).join(',');
|
|
59
64
|
}
|
|
60
65
|
|
|
61
66
|
module.exports = childColumn;
|
|
@@ -1,13 +1,17 @@
|
|
|
1
|
+
const getSessionSingleton = require('../getSessionSingleton');
|
|
1
2
|
var newJoinArray = require('./joinSqlArray');
|
|
2
3
|
|
|
3
4
|
function columnAggregate(operator, column, relations, coalesce = true) {
|
|
5
|
+
const quote = getSessionSingleton('quote');
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
let tableAlias = relations.reduce((prev,relation) => {
|
|
6
8
|
return prev + relation.toLeg().name;
|
|
7
9
|
}, 'z');
|
|
10
|
+
tableAlias = quote(tableAlias);
|
|
11
|
+
const columnName = quote(column._dbName);
|
|
8
12
|
|
|
9
13
|
return {
|
|
10
|
-
expression: (alias) => coalesce ? `COALESCE(${operator}(${tableAlias}.${
|
|
14
|
+
expression: (alias) => coalesce ? `COALESCE(${operator}(${tableAlias}.${columnName}), 0) as ${quote(alias)}` : `${operator}(${tableAlias}.${columnName}) as ${alias}`,
|
|
11
15
|
|
|
12
16
|
joins: newJoinArray(relations)
|
|
13
17
|
};
|
|
@@ -1,22 +1,35 @@
|
|
|
1
1
|
var newJoin = require('./joinSql');
|
|
2
2
|
var getSessionContext = require('../getSessionContext');
|
|
3
3
|
var newJoinCore = require('../query/singleQuery/joinSql/newShallowJoinSqlCore');
|
|
4
|
+
const getSessionSingleton = require('../getSessionSingleton');
|
|
4
5
|
|
|
5
6
|
function columnAggregate(operator, column, relations, coalesce = true) {
|
|
7
|
+
const quote = getSessionSingleton('quote');
|
|
6
8
|
const context = getSessionContext();
|
|
7
9
|
const outerAlias = 'y' + context.aggregateCount++;
|
|
8
|
-
const
|
|
10
|
+
const outerAliasQuoted = quote(outerAlias);
|
|
11
|
+
const alias = quote('x' + relations.length);
|
|
9
12
|
const foreignKeys = getForeignKeys(relations[0]);
|
|
10
|
-
const select = ` LEFT JOIN (SELECT ${foreignKeys},${operator}(${alias}.${column._dbName}) as amount`;
|
|
13
|
+
const select = ` LEFT JOIN (SELECT ${foreignKeys},${operator}(${alias}.${quote(column._dbName)}) as amount`;
|
|
11
14
|
const innerJoin = relations.length > 1 ? newJoin(relations).sql() : '';
|
|
12
15
|
const onClause = createOnClause(relations[0], outerAlias);
|
|
13
|
-
const from = ` FROM ${relations.at(-1).childTable._dbName} ${alias} ${innerJoin} GROUP BY ${foreignKeys}) ${
|
|
16
|
+
const from = ` FROM ${quote(relations.at(-1).childTable._dbName)} ${alias} ${innerJoin} GROUP BY ${foreignKeys}) ${outerAliasQuoted} ON (${onClause})`;
|
|
14
17
|
const join = select + from ;
|
|
15
18
|
|
|
16
19
|
return {
|
|
17
|
-
expression: (alias) => coalesce? `COALESCE(${
|
|
20
|
+
expression: (alias) => coalesce? `COALESCE(${outerAliasQuoted}.amount, 0) as ${quote(alias)}` : `${outerAliasQuoted}.amount as ${alias}`,
|
|
18
21
|
joins: [join]
|
|
19
22
|
};
|
|
23
|
+
|
|
24
|
+
function getForeignKeys(relation) {
|
|
25
|
+
let columns;
|
|
26
|
+
let alias = quote('x1');
|
|
27
|
+
if (relation.joinRelation)
|
|
28
|
+
columns = relation.joinRelation.columns;
|
|
29
|
+
else
|
|
30
|
+
columns = relation.childTable._primaryColumns;
|
|
31
|
+
return columns.map(x => `${alias}.${quote(x._dbName)}`).join(',');
|
|
32
|
+
}
|
|
20
33
|
}
|
|
21
34
|
|
|
22
35
|
function createOnClause(relation, rightAlias) {
|
|
@@ -42,18 +55,11 @@ function createOnClause(relation, rightAlias) {
|
|
|
42
55
|
|
|
43
56
|
sql = newJoinCore(childTable,parentTable._primaryColumns,columns,leftAlias, rightAlias).sql();
|
|
44
57
|
}
|
|
58
|
+
|
|
45
59
|
relation.accept(c);
|
|
46
60
|
return sql;
|
|
47
61
|
}
|
|
48
62
|
|
|
49
|
-
|
|
50
|
-
let columns;
|
|
51
|
-
let alias = 'x1';
|
|
52
|
-
if (relation.joinRelation)
|
|
53
|
-
columns = relation.joinRelation.columns;
|
|
54
|
-
else
|
|
55
|
-
columns = relation.childTable._primaryColumns;
|
|
56
|
-
return columns.map(x => `${alias}.${x._dbName}`).join(',');
|
|
57
|
-
}
|
|
63
|
+
|
|
58
64
|
|
|
59
65
|
module.exports = columnAggregate;
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
var newParameterized = require('../query/newParameterized');
|
|
2
2
|
var newBoolean = require('../column/newBoolean');
|
|
3
|
+
const getSessionSingleton = require('../getSessionSingleton');
|
|
3
4
|
|
|
4
5
|
function newSelectSql(table, alias) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
const quote = getSessionSingleton('quote');
|
|
7
|
+
const quotedAlias = quote(alias);
|
|
8
|
+
const colName = quote(table._primaryColumns[0]._dbName);
|
|
9
|
+
const sql = 'SELECT ' + quotedAlias + '.' + colName + ' FROM ' + quote(table._dbName) + ' ' + quotedAlias;
|
|
10
|
+
const sqlp = newParameterized(sql);
|
|
11
|
+
return newBoolean(sqlp);
|
|
9
12
|
}
|
|
10
13
|
|
|
11
14
|
module.exports = newSelectSql;
|
|
@@ -7,6 +7,8 @@ function newWhereSql(relations, shallowFilter, depth = 0) {
|
|
|
7
7
|
|
|
8
8
|
c.visitJoin = function(relation) {
|
|
9
9
|
var table = relation.childTable;
|
|
10
|
+
|
|
11
|
+
//todo fix discriminators
|
|
10
12
|
var alias = depth === 0 ? (relation.parentTable._rootAlias || relation.parentTable._dbName) : 'x' + depth;
|
|
11
13
|
var leftColumns = relation.columns;
|
|
12
14
|
var rightColumns = table._primaryColumns;
|
|
@@ -18,6 +20,7 @@ function newWhereSql(relations, shallowFilter, depth = 0) {
|
|
|
18
20
|
var rightColumns = joinRelation.columns;
|
|
19
21
|
var childTable = joinRelation.childTable;
|
|
20
22
|
var leftColumns = childTable._primaryColumns;
|
|
23
|
+
//todo fix discriminators
|
|
21
24
|
var alias = depth === 0 ? (childTable._rootAlias || childTable._dbName) : 'x' + depth;
|
|
22
25
|
where(alias, leftColumns, rightColumns);
|
|
23
26
|
};
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
var format = 'delete %s from %s as %s%s';
|
|
2
2
|
var util = require('util');
|
|
3
|
+
const quote = require('../table/quote');
|
|
3
4
|
|
|
4
5
|
function deleteFromSql(table, alias, whereSql) {
|
|
5
|
-
var name = table._dbName;
|
|
6
|
+
var name = quote(table._dbName);
|
|
7
|
+
alias = quote(alias);
|
|
6
8
|
return util.format(format, alias, name, alias, whereSql);
|
|
7
9
|
}
|
|
8
10
|
module.exports = deleteFromSql;
|
|
@@ -3,8 +3,6 @@ var newWhereSql = require('../../../table/query/singleQuery/newWhereSql');
|
|
|
3
3
|
var newParameterized = require('../../../table/query/newParameterized');
|
|
4
4
|
|
|
5
5
|
function _new(table, filter, span, alias, subQueries, orderBy, limit, offset) {
|
|
6
|
-
|
|
7
|
-
var name = table._dbName;
|
|
8
6
|
var columnSql = newColumnSql(table, alias, span);
|
|
9
7
|
var whereSql = newWhereSql(table, filter, alias);
|
|
10
8
|
if (limit)
|
|
@@ -23,7 +21,7 @@ function _new(table, filter, span, alias, subQueries, orderBy, limit, offset) {
|
|
|
23
21
|
}
|
|
24
22
|
|
|
25
23
|
|
|
26
|
-
return newParameterized('select ' + limit + columnSql).append(subQueries).append(' from ' +
|
|
24
|
+
return newParameterized('select ' + limit + columnSql).append(subQueries).append(' from ' + `[${table._dbName}] [${alias}]` + join).append(whereSql).append(orderBy + offset);
|
|
27
25
|
}
|
|
28
26
|
|
|
29
27
|
module.exports = _new;
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
+
const getSessionSingleton = require('../../../../table/getSessionSingleton');
|
|
2
|
+
|
|
1
3
|
function _new(table,alias, span) {
|
|
4
|
+
const quote = getSessionSingleton('quote');
|
|
5
|
+
alias = quote(alias);
|
|
2
6
|
let columnsMap = span.columns;
|
|
3
7
|
var columns = table._columns;
|
|
4
8
|
var sql = '';
|
|
@@ -7,7 +11,7 @@ function _new(table,alias, span) {
|
|
|
7
11
|
for (var i = 0; i < columns.length; i++) {
|
|
8
12
|
var column = columns[i];
|
|
9
13
|
if (!columnsMap || (columnsMap.get(column))) {
|
|
10
|
-
sql = sql + separator + formatColumn(column) + ' as ' + column.alias;
|
|
14
|
+
sql = sql + separator + formatColumn(column) + ' as ' + quote(column.alias);
|
|
11
15
|
separator = ',';
|
|
12
16
|
}
|
|
13
17
|
}
|
|
@@ -20,7 +24,7 @@ function _new(table,alias, span) {
|
|
|
20
24
|
|
|
21
25
|
function formatColumn(column) {
|
|
22
26
|
|
|
23
|
-
const formatted = column.formatOut && column.tsType !== 'DateColumn' ? column.formatOut(alias) : alias + '.' + column._dbName;
|
|
27
|
+
const formatted = column.formatOut && column.tsType !== 'DateColumn' ? column.formatOut(alias) : alias + '.' + quote(column._dbName);
|
|
24
28
|
if (column.dbNull === null)
|
|
25
29
|
return formatted;
|
|
26
30
|
else {
|
package/src/tedious/insertSql.js
CHANGED
|
@@ -27,9 +27,8 @@ function hasConcurrency(table,options) {
|
|
|
27
27
|
|
|
28
28
|
function insertSql(table, row) {
|
|
29
29
|
let columnNames = [];
|
|
30
|
-
let regularColumnNames = [];
|
|
31
30
|
let values = [];
|
|
32
|
-
let sql =
|
|
31
|
+
let sql = `INSERT INTO [${table._dbName}] `;
|
|
33
32
|
addDiscriminators();
|
|
34
33
|
addColumns();
|
|
35
34
|
if (columnNames.length === 0)
|
|
@@ -42,7 +41,7 @@ function insertSql(table, row) {
|
|
|
42
41
|
let discriminators = table._columnDiscriminators;
|
|
43
42
|
for (let i = 0; i < discriminators.length; i++) {
|
|
44
43
|
let parts = discriminators[i].split('=');
|
|
45
|
-
columnNames.push(parts[0]);
|
|
44
|
+
columnNames.push(`[${parts[0]}]`);
|
|
46
45
|
values.push(parts[1]);
|
|
47
46
|
}
|
|
48
47
|
}
|
|
@@ -51,9 +50,8 @@ function insertSql(table, row) {
|
|
|
51
50
|
let columns = table._columns;
|
|
52
51
|
for (let i = 0; i < columns.length; i++) {
|
|
53
52
|
let column = columns[i];
|
|
54
|
-
regularColumnNames.push(column._dbName);
|
|
55
53
|
if (row['__' + column.alias] !== undefined) {
|
|
56
|
-
columnNames.push(column._dbName);
|
|
54
|
+
columnNames.push(`[${column._dbName}]`);
|
|
57
55
|
values.push('%s');
|
|
58
56
|
}
|
|
59
57
|
}
|
package/src/tedious/mergeSql.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
const outputInsertedSql = require('./outputInsertedSql');
|
|
2
2
|
|
|
3
3
|
function insertSql(table, row, options) {
|
|
4
|
+
|
|
4
5
|
let columnNames = [];
|
|
5
|
-
let regularColumnNames = [];
|
|
6
6
|
let conflictColumnUpdateSql = '';
|
|
7
7
|
let values = [];
|
|
8
8
|
addDiscriminators();
|
|
@@ -11,18 +11,18 @@ function insertSql(table, row, options) {
|
|
|
11
11
|
const matched = whenMatched();
|
|
12
12
|
let sql;
|
|
13
13
|
if (matched)
|
|
14
|
-
sql = `MERGE INTO ${table._dbName} AS target USING (SELECT ${values.join(',')}) AS source ON ${join()} WHEN MATCHED THEN ${matched} WHEN NOT MATCHED THEN ${whenNotMatched()} ${outputInsertedSql(table)};`;
|
|
14
|
+
sql = `MERGE INTO [${table._dbName}] AS target USING (SELECT ${values.join(',')}) AS source ON ${join()} WHEN MATCHED THEN ${matched} WHEN NOT MATCHED THEN ${whenNotMatched()} ${outputInsertedSql(table)};`;
|
|
15
15
|
else
|
|
16
|
-
sql = `MERGE INTO ${table._dbName} AS target USING (SELECT ${values.join(',')}) AS source ON ${join()} WHEN NOT MATCHED THEN ${whenNotMatched()} ${outputInsertedSql(table)};`;
|
|
16
|
+
sql = `MERGE INTO [${table._dbName}] AS target USING (SELECT ${values.join(',')}) AS source ON ${join()} WHEN NOT MATCHED THEN ${whenNotMatched()} ${outputInsertedSql(table)};`;
|
|
17
17
|
return sql;
|
|
18
18
|
|
|
19
19
|
function join() {
|
|
20
20
|
const discriminators = table._columnDiscriminators.map(x => {
|
|
21
|
-
const name = x.split('=')[0]
|
|
21
|
+
const name = `[${x.split('=')[0]}]`;
|
|
22
22
|
|
|
23
23
|
return `target.${name}=source.${name}`;
|
|
24
24
|
});
|
|
25
|
-
const primaries = table._primaryColumns.map(x => `target
|
|
25
|
+
const primaries = table._primaryColumns.map(x => `target.[${x._dbName}]=source.[${x._dbName}]`);
|
|
26
26
|
return [...discriminators, ...primaries].join(' AND ');
|
|
27
27
|
}
|
|
28
28
|
|
|
@@ -41,8 +41,8 @@ function insertSql(table, row, options) {
|
|
|
41
41
|
let discriminators = table._columnDiscriminators;
|
|
42
42
|
for (let i = 0; i < discriminators.length; i++) {
|
|
43
43
|
let parts = discriminators[i].split('=');
|
|
44
|
-
columnNames.push(parts[0]);
|
|
45
|
-
values.push(`${parts[1]} AS ${parts[0]}`);
|
|
44
|
+
columnNames.push(`[${parts[0]}]`);
|
|
45
|
+
values.push(`${parts[1]} AS ${[parts[0]]}`);
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
|
|
@@ -51,10 +51,9 @@ function insertSql(table, row, options) {
|
|
|
51
51
|
let columns = table._columns;
|
|
52
52
|
for (let i = 0; i < columns.length; i++) {
|
|
53
53
|
let column = columns[i];
|
|
54
|
-
regularColumnNames.push(column._dbName);
|
|
55
54
|
if (row['__' + column.alias] !== undefined) {
|
|
56
|
-
columnNames.push(column._dbName);
|
|
57
|
-
values.push(`%s AS ${column.alias}`);
|
|
55
|
+
columnNames.push(`[${column._dbName}]`);
|
|
56
|
+
values.push(`%s AS [${column.alias}]`);
|
|
58
57
|
addConflictUpdate(column);
|
|
59
58
|
}
|
|
60
59
|
}
|
|
@@ -66,9 +65,9 @@ function insertSql(table, row, options) {
|
|
|
66
65
|
function addConflictUpdate(column) {
|
|
67
66
|
let concurrency = options[column.alias]?.concurrency || options.concurrency;
|
|
68
67
|
if (concurrency === 'overwrite')
|
|
69
|
-
conflictColumnUpdates.push(`target
|
|
68
|
+
conflictColumnUpdates.push(`target.[${column._dbName}]=source.[${column._dbName}]`);
|
|
70
69
|
else if (concurrency === 'optimistic')
|
|
71
|
-
conflictColumnUpdates.push(`target
|
|
70
|
+
conflictColumnUpdates.push(`target.[${column._dbName}] = CASE WHEN target.[${column._dbName}] <> source.[${column._dbName}] THEN CAST('12345678-1234-1234-1234-123456789012Conflict when updating [${column._dbName}]12345678-1234-1234-1234-123456789012' AS INTEGER) ELSE target.[${column._dbName}] END`);
|
|
72
71
|
}
|
|
73
72
|
}
|
|
74
73
|
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
var newShallowColumnSql = require('./singleQuery/newShallowColumnSql');
|
|
2
|
-
var newJoinedColumnSql = require('./singleQuery/newJoinedColumnSql');
|
|
3
|
-
|
|
4
|
-
module.exports = function(table,span,alias) {
|
|
5
|
-
var shallowColumnSql = newShallowColumnSql(table,alias, span);
|
|
6
|
-
var joinedColumnSql = newJoinedColumnSql(span,alias);
|
|
7
|
-
return shallowColumnSql + joinedColumnSql;
|
|
8
|
-
};
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
var util = require('util');
|
|
2
|
-
//todo delete
|
|
3
|
-
function _new(table,alias,span) {
|
|
4
|
-
let columnsMap = span.columns;
|
|
5
|
-
var columnFormat = '%s as "%s"';
|
|
6
|
-
var columns = table._columns;
|
|
7
|
-
var sql = '';
|
|
8
|
-
var separator = '';
|
|
9
|
-
for (var i = 0; i < columns.length; i++) {
|
|
10
|
-
var column = columns[i];
|
|
11
|
-
if (!columnsMap || (columnsMap.get(column))) {
|
|
12
|
-
if (column.dbNull === null)
|
|
13
|
-
sql = sql + separator + alias + '.' + util.format(columnFormat, column._dbName, column.alias);
|
|
14
|
-
else {
|
|
15
|
-
const encoded = column.encode.unsafe(column.dbNull);
|
|
16
|
-
sql = sql + separator + `CASE WHEN ${alias}.${column._dbName}=${encoded} THEN null ELSE ${alias}.${column._dbName} END as ${column.alias}`;
|
|
17
|
-
}
|
|
18
|
-
separator = ',';
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
return sql;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
module.exports = _new;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
var util = require('util');
|
|
2
|
-
//todo delete
|
|
3
|
-
function _new(table,alias,span) {
|
|
4
|
-
let columnsMap = span.columns;
|
|
5
|
-
var columnFormat = '%s as "%s"';
|
|
6
|
-
var columns = table._columns;
|
|
7
|
-
var sql = '';
|
|
8
|
-
var separator = '';
|
|
9
|
-
for (var i = 0; i < columns.length; i++) {
|
|
10
|
-
var column = columns[i];
|
|
11
|
-
if (!columnsMap || (columnsMap.get(column))) {
|
|
12
|
-
if (column.dbNull === null)
|
|
13
|
-
sql = sql + separator + alias + '.' + util.format(columnFormat, column._dbName, column.alias);
|
|
14
|
-
else {
|
|
15
|
-
const encoded = column.encode.unsafe(column.dbNull);
|
|
16
|
-
sql = sql + separator + `CASE WHEN ${alias}.${column._dbName}=${encoded} THEN null ELSE ${alias}.${column._dbName} END as ${column.alias}`;
|
|
17
|
-
}
|
|
18
|
-
separator = ',';
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
return sql;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
module.exports = _new;
|