@sap/xsodata 8.3.0 → 8.3.1
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/CHANGELOG.md +4 -0
- package/index.js +2 -2
- package/lib/configuration.js +1 -1
- package/lib/db/connect.js +1 -1
- package/lib/db/dbSegment.js +68 -123
- package/lib/db/dbVersionChecks.js +2 -8
- package/lib/handlerConfiguration.js +2 -2
- package/lib/http/conditionalHttpHandler.js +27 -34
- package/lib/http/simpleHttpRequest.js +14 -18
- package/lib/http/simpleHttpResponse.js +4 -4
- package/lib/http/uriParser.js +9 -9
- package/lib/http/validator/httpRequestValidator.js +9 -9
- package/lib/model/annotationFactory.js +11 -11
- package/lib/model/association.js +3 -3
- package/lib/model/entityType.js +33 -67
- package/lib/model/metadataReader.js +31 -52
- package/lib/model/model.js +0 -1
- package/lib/model/validator/xsoDataConcurrencyTokenValidator.js +6 -6
- package/lib/model/xsodataReader.js +36 -28
- package/lib/processor/authorizationProcessor.js +22 -33
- package/lib/processor/batchProcessor.js +22 -33
- package/lib/processor/errorProcessor.js +4 -4
- package/lib/processor/exitProcessor.js +19 -19
- package/lib/processor/processor.js +9 -9
- package/lib/processor/resourceProcessor.js +31 -61
- package/lib/processor/resourceProcessorDelete.js +16 -16
- package/lib/processor/resourceProcessorDeleteLinks.js +25 -25
- package/lib/processor/resourceProcessorGet.js +5 -5
- package/lib/processor/resourceProcessorPost.js +43 -45
- package/lib/processor/resourceProcessorPut.js +35 -39
- package/lib/processor/resourceProcessorPutPostLinks.js +38 -39
- package/lib/security/securityContext.js +5 -5
- package/lib/serializer/atomSerializer.js +54 -55
- package/lib/serializer/atomXmlToJsonSerializer.js +32 -44
- package/lib/serializer/content.js +5 -5
- package/lib/serializer/json.js +31 -33
- package/lib/serializer/jsonSerializer.js +4 -4
- package/lib/serializer/metadataSerializer.js +32 -35
- package/lib/serializer/serializer.js +29 -43
- package/lib/serializer/serviceSerializer.js +19 -24
- package/lib/serializer/value.js +1 -2
- package/lib/serializer/xmlToJsonSerializer.js +18 -18
- package/lib/sql/createDeleteLinksStatements.js +10 -10
- package/lib/sql/createDeleteStatements.js +12 -12
- package/lib/sql/createGetStatements.js +49 -107
- package/lib/sql/createLinksSQLStatements_1_n.js +27 -27
- package/lib/sql/createPutPostLinksStatements.js +9 -9
- package/lib/sql/createPutStatements.js +0 -1
- package/lib/sql/dataCollectorDelete.js +9 -9
- package/lib/sql/dataCollectorDeleteLinks.js +3 -3
- package/lib/sql/dataCollectorGet.js +9 -17
- package/lib/sql/dataCollectorLinks.js +23 -27
- package/lib/sql/dataCollectorPost.js +20 -20
- package/lib/sql/dataCollectorPut.js +36 -36
- package/lib/sql/dataCollectorPutPostLinks.js +3 -3
- package/lib/sql/sqlStatement.js +81 -128
- package/lib/sql/sqlTools.js +3 -7
- package/lib/sql/statementProcessor.js +7 -14
- package/lib/uri/applyChecks.js +3 -3
- package/lib/uri/checks/checkAllowedMethod.js +3 -3
- package/lib/uri/checks/checkAllowedMethodForBatch.js +2 -2
- package/lib/uri/checks/checkAllowedMethodsForResourcePath.js +3 -3
- package/lib/uri/checks/checkFilterOnAggregatedColumn.js +5 -5
- package/lib/uri/checks/checkFilterOrderByOnGenKeyColumn.js +6 -6
- package/lib/uri/checks/checkGenKeyRestrictions.js +2 -2
- package/lib/uri/checks/checkModificationForbidden.js +3 -3
- package/lib/uri/checks/checkPostPutDeleteChecks.js +5 -5
- package/lib/uri/checks/checkSystemQueryOptions.js +10 -10
- package/lib/uri/checks.js +15 -15
- package/lib/uri/expandSelectTreeBuilder.js +12 -16
- package/lib/uri/oDataUriParser.js +20 -20
- package/lib/uri/queryParameterParser.js +25 -33
- package/lib/uri/resourcePathParser.js +47 -62
- package/lib/uri/uriType.js +4 -4
- package/lib/utils/associations.js +4 -4
- package/lib/utils/batch/batchExecutor.js +49 -51
- package/lib/utils/batch/batchObjects.js +10 -10
- package/lib/utils/batch/batchParser.js +27 -28
- package/lib/utils/batch/batchWriter.js +1 -1
- package/lib/utils/checkContentType.js +34 -39
- package/lib/utils/debugView.js +35 -36
- package/lib/utils/errors/applicationError.js +2 -2
- package/lib/utils/errors/debugInfo.js +2 -2
- package/lib/utils/errors/http/badRequest.js +2 -2
- package/lib/utils/errors/http/forbidden.js +2 -2
- package/lib/utils/errors/http/methodNotAllowed.js +2 -2
- package/lib/utils/errors/http/notAcceptable.js +2 -2
- package/lib/utils/errors/http/notFound.js +2 -2
- package/lib/utils/errors/http/notImplemented.js +2 -2
- package/lib/utils/errors/http/notModified.js +2 -2
- package/lib/utils/errors/http/notSupported.js +2 -2
- package/lib/utils/errors/http/preconditionFailed.js +2 -2
- package/lib/utils/errors/http/preconditionRequired.js +2 -2
- package/lib/utils/errors/http/unauthorized.js +2 -2
- package/lib/utils/errors/http/unsupportedMediaType.js +2 -2
- package/lib/utils/errors/httpError.js +2 -2
- package/lib/utils/errors/internalError.js +2 -2
- package/lib/utils/errors/modelFileError.js +2 -2
- package/lib/utils/errors/sqlError.js +2 -2
- package/lib/utils/errors/testError.js +2 -2
- package/lib/utils/errors/typeError.js +5 -5
- package/lib/utils/errors/xsODataError.js +1 -1
- package/lib/utils/logger.js +21 -32
- package/lib/utils/measurement.js +14 -13
- package/lib/utils/requestContext.js +2 -2
- package/lib/utils/stateMaschine.js +6 -6
- package/lib/utils/tableCleanup.js +3 -3
- package/lib/utils/typeConverter.js +21 -21
- package/lib/utils/typeConverters/converterTools.js +25 -331
- package/lib/utils/typeConverters/dbToJson.js +3 -3
- package/lib/utils/typeConverters/dbToUri.js +7 -7
- package/lib/utils/typeConverters/dbToXml.js +9 -9
- package/lib/utils/typeConverters/jsonToDb.js +20 -27
- package/lib/utils/typeConverters/uriToDb.js +45 -92
- package/lib/utils/typeConverters/xmlValueToJson.js +9 -13
- package/lib/utils/typedObjects.js +11 -79
- package/lib/utils/utils.js +20 -23
- package/lib/xsodata.js +37 -47
- package/package.json +3 -5
- package/.npmignore +0 -40
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
const linksSQL = require ("./createLinksSQLStatements_1_n");
|
|
4
|
+
const sql = require('./sqlStatement');
|
|
5
5
|
|
|
6
6
|
exports.createPutPostLinksStatementsCreateTmpTables = function (context, asyncDone) {
|
|
7
7
|
linksSQL.createLinksStatementsCreateTmpTables (context);
|
|
@@ -16,7 +16,7 @@ exports.createPutPostLinksStatementsInsert = function (context, asyncDone) {
|
|
|
16
16
|
|
|
17
17
|
exports.createPutPostLinksMNStatementsCreateTmpTables = function (context, asyncDone) {
|
|
18
18
|
try {
|
|
19
|
-
|
|
19
|
+
const dbSegLast = context.oData.dbSegmentLast,
|
|
20
20
|
sqlContext = linksSQL.createMNSQLContext(context, dbSegLast);
|
|
21
21
|
|
|
22
22
|
context.sql = sqlContext;
|
|
@@ -46,7 +46,7 @@ function createMNPutPostLinksStatementContainerCreateTmpTables(sqlContext) {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
function createMNPutPostLinksStatementContainerInsert(sqlContext) {
|
|
49
|
-
|
|
49
|
+
const dbSeg = sqlContext.dbSegLast;
|
|
50
50
|
|
|
51
51
|
linksSQL.createMNStatementContainerInsert(sqlContext);
|
|
52
52
|
|
|
@@ -59,9 +59,9 @@ function createMNPutPostLinksStatementContainerInsert(sqlContext) {
|
|
|
59
59
|
|
|
60
60
|
function masterMNTableInsertTmp(sqlContext, rId) {
|
|
61
61
|
sqlContext.context.logger.debug('createPutPostLinksStatements', 'masterMNTableInsertTmp');
|
|
62
|
-
|
|
62
|
+
const dbSeg = sqlContext.dbSegLast;
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
const stm = new sql.Insert();
|
|
65
65
|
stm.setTableName({table: rId});
|
|
66
66
|
//SELECT
|
|
67
67
|
stm.addNames(dbSeg.getSelectFragmentsForOverProperties(rId));
|
|
@@ -70,14 +70,14 @@ function masterMNTableInsertTmp(sqlContext, rId) {
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
function masterMNTableInsert(sqlContext, rId) {
|
|
73
|
-
|
|
73
|
+
const dbSeg = sqlContext.dbSegLast;
|
|
74
74
|
|
|
75
75
|
//subselect
|
|
76
|
-
|
|
76
|
+
const subSelect = new sql.Select();
|
|
77
77
|
subSelect.addSelects(new sql.SelectFormula(null, '*'));
|
|
78
78
|
subSelect.setFrom({schema: null, table: rId, alias: null});
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
const stm = new sql.Upsert();
|
|
81
81
|
|
|
82
82
|
stm.setTable({table: dbSeg.getOver().object});
|
|
83
83
|
stm.addNames(dbSeg.getSelectFragmentsForOverProperties(rId));
|
|
@@ -189,7 +189,6 @@ function masterTableUpdate(sqlContext, rId) {
|
|
|
189
189
|
const update = new sql.Update();
|
|
190
190
|
update.setTable(dbSeg.getAliasedTableName('PERM')); //overwrite alias
|
|
191
191
|
|
|
192
|
-
//update.addSetCopyProperties(dbSeg.getQKeyProperties(), 'TEMP');
|
|
193
192
|
const copyPropertiesOrig = dbSeg.getQNonKeyProperties();
|
|
194
193
|
const copyProperties = [];
|
|
195
194
|
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
//Include
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
const dataCollector2 = require('./dataCollector2');
|
|
5
|
+
const statementProcessor = require('./statementProcessor');
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
exports.createTmpTables = function (context, asyncDone) {
|
|
9
9
|
context.logger.silly('dataCollectorDelete', 'createTmpTables');
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
const dbSeg = context.oData.dbSegmentLast;
|
|
11
|
+
const stm = dbSeg.sql.stmContainer.createTmpDel;
|
|
12
12
|
return statementProcessor.execStmsDirectlyNoResult(context,stm, asyncDone);
|
|
13
13
|
};
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
exports.insertDataToDelTable = function (context, asyncDone) {
|
|
17
17
|
context.logger.silly('dataCollectorDelete', 'insertDataToDelTable');
|
|
18
|
-
|
|
18
|
+
const dbSeg = context.oData.dbSegmentLast;
|
|
19
19
|
statementProcessor.execStmsAsPrepared(context,[dbSeg.sql.stmContainer.insertTmpDel], (err, context, resultset) => {
|
|
20
20
|
if (err) {
|
|
21
21
|
return asyncDone(err, context);
|
|
@@ -27,14 +27,14 @@ exports.insertDataToDelTable = function (context, asyncDone) {
|
|
|
27
27
|
|
|
28
28
|
exports.deleteTable = function (context, asyncDone) {
|
|
29
29
|
context.logger.silly('dataCollectorDelete', 'deleteTable');
|
|
30
|
-
|
|
30
|
+
const dbSeg = context.oData.dbSegmentLast;
|
|
31
31
|
statementProcessor.execStmsAsPreparedNoResult(context,dbSeg.sql.stmContainer.delete, asyncDone);
|
|
32
32
|
};
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
exports.commit = function (context, asyncDone) {
|
|
36
36
|
context.logger.silly('dataCollectorDelete', 'commit');
|
|
37
|
-
|
|
37
|
+
const client = context.db.client;
|
|
38
38
|
client.commit(function (err) {
|
|
39
39
|
if (err) {
|
|
40
40
|
context.logger.info('SQL Exec', 'Commit Error: \n' + JSON.stringify(err));
|
|
@@ -51,7 +51,7 @@ exports.commit = function (context, asyncDone) {
|
|
|
51
51
|
* @param {Function} asyncDone async waterfall callback
|
|
52
52
|
*/
|
|
53
53
|
exports.truncateTempTables = function (context, asyncDone) {
|
|
54
|
-
|
|
54
|
+
let statements;
|
|
55
55
|
context.logger.silly('dataCollectorDelete', 'truncateTempTables');
|
|
56
56
|
|
|
57
57
|
statements = [context.sql.container.createTmpDelTruncate];
|
|
@@ -70,7 +70,7 @@ exports.truncateTempTables = function (context, asyncDone) {
|
|
|
70
70
|
* @param {Function} asyncDone async waterfall callback
|
|
71
71
|
*/
|
|
72
72
|
exports.dropTempTables = function (context, asyncDone) {
|
|
73
|
-
|
|
73
|
+
let statements;
|
|
74
74
|
context.logger.silly('dataCollectorDelete', 'dropTempTables');
|
|
75
75
|
|
|
76
76
|
statements = [context.sql.container.createTmpDelDrop];
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
//Include
|
|
4
|
-
|
|
4
|
+
const statementProcessor = require('./statementProcessor');
|
|
5
5
|
|
|
6
6
|
exports.insertDataToDelTable = function (context, asyncDone) {
|
|
7
7
|
context.logger.silly('dataCollectorDeleteLinks', 'insertDataToDelTable');
|
|
8
|
-
|
|
8
|
+
const dbSeg = context.oData.dbSegmentLast;
|
|
9
9
|
statementProcessor.execStmsAsPreparedNoResult(context, dbSeg.sql.stmContainer.insertTmp, asyncDone);
|
|
10
10
|
|
|
11
11
|
};
|
|
12
12
|
|
|
13
13
|
exports.deleteTable = function (context, asyncDone) {
|
|
14
14
|
context.logger.silly('dataCollectorDeleteLinks', 'deleteTable');
|
|
15
|
-
|
|
15
|
+
const dbSeg = context.oData.dbSegmentLast;
|
|
16
16
|
statementProcessor.execStmsAsPreparedNoResult(context, dbSeg.sql.stmContainer.delete, asyncDone);
|
|
17
17
|
};
|
|
18
18
|
|
|
@@ -7,9 +7,6 @@ const statementProcessor = require('./statementProcessor');
|
|
|
7
7
|
const utils = require('../utils/utils');
|
|
8
8
|
const SqlError = require('../utils/errors/sqlError');
|
|
9
9
|
const BadRequest = require('../utils/errors/http/badRequest');
|
|
10
|
-
// const { createNewContentIdFromDbSegSelectedRows } = require('../processor/contentIdHelper');
|
|
11
|
-
// const { call } = require('../../test/utils');
|
|
12
|
-
|
|
13
10
|
|
|
14
11
|
const saveTmpTableCreate = function(item, context, asyncDone) {
|
|
15
12
|
const dropTmpTableCallback = (err, context) => {
|
|
@@ -51,8 +48,8 @@ exports.createTmpTables = function (context, asyncDone) {
|
|
|
51
48
|
exports.insertFillTmpTables = function (context, asyncDone) {
|
|
52
49
|
context.logger.silly('dataCollectorGet', 'insertFillTmpTables');
|
|
53
50
|
|
|
54
|
-
|
|
55
|
-
|
|
51
|
+
const container = context.sql.container;
|
|
52
|
+
const stms = container.getInsertTmpStms();
|
|
56
53
|
|
|
57
54
|
return statementProcessor.execStmsAsPreparedNoResult(context, stms, asyncDone);
|
|
58
55
|
};
|
|
@@ -61,8 +58,8 @@ exports.insertFillTmpTables = function (context, asyncDone) {
|
|
|
61
58
|
exports.select = function (context, asyncDone) {
|
|
62
59
|
context.logger.silly('dataCollectorGet', 'select');
|
|
63
60
|
|
|
64
|
-
|
|
65
|
-
|
|
61
|
+
const container = context.sql.container;
|
|
62
|
+
const stms = container.select.concat(container.selectTmp);
|
|
66
63
|
|
|
67
64
|
async.mapSeries(
|
|
68
65
|
stms,
|
|
@@ -145,22 +142,17 @@ exports.select = function (context, asyncDone) {
|
|
|
145
142
|
}
|
|
146
143
|
|
|
147
144
|
// Add byPassInputs to rows
|
|
148
|
-
let conv = [];
|
|
149
145
|
if (byPassInputs) {
|
|
150
|
-
for (
|
|
151
|
-
const input = byPassInputs[i];
|
|
146
|
+
for (const input of byPassInputs) {
|
|
152
147
|
let param = [];
|
|
153
148
|
input.toSqlHana(context, param, { useDbType: input._dbType });
|
|
154
|
-
conv.push(param[0]);
|
|
155
149
|
|
|
156
|
-
for (
|
|
157
|
-
let row = rows[r];
|
|
150
|
+
for (const row of rows) {
|
|
158
151
|
row[input.property] = param[0];
|
|
159
152
|
}
|
|
160
153
|
}
|
|
161
154
|
}
|
|
162
155
|
context.logger.silly('GET dataCollector - row count', JSON.stringify(rows.length));
|
|
163
|
-
// context.logger.silly('dataCollector', JSON.stringify(rows, null, 2));
|
|
164
156
|
return cb(null, rows);
|
|
165
157
|
|
|
166
158
|
});
|
|
@@ -220,8 +212,8 @@ let CalcViewCallback = function (item, context, cb) {
|
|
|
220
212
|
* @param {Function} callback - callback, which should be called once the operation is completed
|
|
221
213
|
*/
|
|
222
214
|
exports.executeSelect = function executeSelect(context, selectStmt, callback) {
|
|
223
|
-
|
|
224
|
-
|
|
215
|
+
const parameters = [];
|
|
216
|
+
let sql;
|
|
225
217
|
|
|
226
218
|
try {
|
|
227
219
|
sql = selectStmt.toSqlHana(new sqlStatement.SqlBuildHanaContext(context), parameters);
|
|
@@ -253,7 +245,7 @@ exports.dropTempTables = function (context, asyncDone) {
|
|
|
253
245
|
|
|
254
246
|
exports.commit = function (context, asyncDone) {
|
|
255
247
|
context.logger.debug('dataCollectorGet', 'commit');
|
|
256
|
-
|
|
248
|
+
const client = context.db.client;
|
|
257
249
|
client.commit(function (err) {
|
|
258
250
|
if (err) {
|
|
259
251
|
context.logger.info('SQL Exec', 'Commit Error: \n' + JSON.stringify(err));
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
//Include
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
const dataCollector2 = require('./dataCollector2');
|
|
5
|
+
const statementProcessor = require('./statementProcessor');
|
|
6
6
|
|
|
7
7
|
exports.moveRecordNV_ToSelectStm = function (context, asyncDone) {
|
|
8
8
|
context.logger.silly('dataCollectorLinks', 'moveRecordNV_ToSelectStm');
|
|
9
9
|
//get dbSegment to be updated, for inserting the payload
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
const dbSeg = context.oData.links.toBeUpdated;
|
|
11
|
+
const stm = dbSeg.sql.stmContainer.insertTmp;
|
|
12
12
|
|
|
13
13
|
if (!stm) {
|
|
14
14
|
return asyncDone(new Error("An error occurred."), context);
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
const max = dbSeg._recordNV.length;
|
|
18
|
+
let i;
|
|
19
19
|
for (i = 0; i < max; i++) {
|
|
20
|
-
|
|
20
|
+
const nv = dbSeg._recordNV[i];
|
|
21
21
|
stm.setValue(nv.name, nv.value);
|
|
22
22
|
}
|
|
23
23
|
return asyncDone(null, context);
|
|
@@ -25,8 +25,8 @@ exports.moveRecordNV_ToSelectStm = function (context, asyncDone) {
|
|
|
25
25
|
|
|
26
26
|
exports.movePayloadFromMNSegmentToSelectStm = function (context, asyncDone) {
|
|
27
27
|
//get dbSegment for inserting the payload
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
const dbSeg = context.oData.dbSegmentLast;
|
|
29
|
+
const stm = dbSeg.sql.stmContainer.insertTmp;
|
|
30
30
|
if (!stm) {
|
|
31
31
|
return asyncDone(new Error("An error occurred."), context);
|
|
32
32
|
}
|
|
@@ -48,10 +48,6 @@ exports.movePayloadFromMNSegmentToSelectStm = function (context, asyncDone) {
|
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
//stm.setValue(over.principal[0], context.oData.dbSegment._KeyValues[0].value);
|
|
52
|
-
//stm.setValue(over.dependent[0], context.oData.dbSegmentLast._KeyValues[0].value);
|
|
53
|
-
|
|
54
|
-
|
|
55
51
|
for (let i = 0; i < to.joinproperties.length; i++) {
|
|
56
52
|
for (let kv of context.oData.dbSegmentLast._KeyValues) {
|
|
57
53
|
if (kv.name === to.joinproperties[i]) {
|
|
@@ -64,8 +60,8 @@ exports.movePayloadFromMNSegmentToSelectStm = function (context, asyncDone) {
|
|
|
64
60
|
};
|
|
65
61
|
|
|
66
62
|
exports.createTmpTables = function (context, asyncDone) {
|
|
67
|
-
|
|
68
|
-
|
|
63
|
+
const dbSeg = context.oData.links.toBeUpdated;
|
|
64
|
+
const stms = [
|
|
69
65
|
dbSeg.sql.stmContainer.createTmpOld,
|
|
70
66
|
dbSeg.sql.stmContainer.createTmp,
|
|
71
67
|
dbSeg.sql.stmContainer.createPrincipal,
|
|
@@ -76,8 +72,8 @@ exports.createTmpTables = function (context, asyncDone) {
|
|
|
76
72
|
};
|
|
77
73
|
|
|
78
74
|
exports.createTmpTableMN = function (context, asyncDone) {
|
|
79
|
-
|
|
80
|
-
|
|
75
|
+
const dbSeg = context.oData.dbSegmentLast;
|
|
76
|
+
const stms = [
|
|
81
77
|
dbSeg.sql.stmContainer.createTmp,
|
|
82
78
|
dbSeg.sql.stmContainer.createPrincipal,
|
|
83
79
|
dbSeg.sql.stmContainer.createDependent
|
|
@@ -86,7 +82,7 @@ exports.createTmpTableMN = function (context, asyncDone) {
|
|
|
86
82
|
};
|
|
87
83
|
|
|
88
84
|
exports.insertOldDataToOldTable = function (context, asyncDone) {
|
|
89
|
-
|
|
85
|
+
const dbSeg = context.oData.links.toBeUpdated;
|
|
90
86
|
|
|
91
87
|
statementProcessor.execStmsAsPrepared(context, [dbSeg.sql.stmContainer.insertTmpOld], (err, context, resultset) => {
|
|
92
88
|
if (err) {
|
|
@@ -101,8 +97,8 @@ exports.insertOldDataToOldTable = function (context, asyncDone) {
|
|
|
101
97
|
* insert corresponding data to the temp principal|dependent tables
|
|
102
98
|
* */
|
|
103
99
|
exports.insertOldDataToPrincipalDependentTables = function (context, asyncDone) {
|
|
104
|
-
|
|
105
|
-
|
|
100
|
+
const dbSeg = context.oData.links.toBeUpdated;
|
|
101
|
+
const stms = [
|
|
106
102
|
dbSeg.sql.stmContainer.insertPrincipal,
|
|
107
103
|
dbSeg.sql.stmContainer.insertDependent
|
|
108
104
|
];
|
|
@@ -111,7 +107,7 @@ exports.insertOldDataToPrincipalDependentTables = function (context, asyncDone)
|
|
|
111
107
|
};
|
|
112
108
|
|
|
113
109
|
exports.insertPayloadIntoTempTable = function (context, asyncDone) {
|
|
114
|
-
|
|
110
|
+
const dbSeg = context.oData.links.toBeUpdated;
|
|
115
111
|
|
|
116
112
|
context.logger.silly('dataCollectorLinks', 'insertPayloadIntoTempTable');
|
|
117
113
|
|
|
@@ -126,7 +122,7 @@ exports.insertPayloadIntoTempTable = function (context, asyncDone) {
|
|
|
126
122
|
exports.insertTmpTableToRealTable = function (context, asyncDone) {
|
|
127
123
|
context.logger.silly('dataCollectorLinks', 'insertTmpTableToRealTable');
|
|
128
124
|
|
|
129
|
-
|
|
125
|
+
const dbSeg = context.oData.links.toBeUpdated;
|
|
130
126
|
statementProcessor.execStmsAsPrepared(context, [dbSeg.sql.stmContainer.updateReal], (err, context, resultset) => {
|
|
131
127
|
if (err) {
|
|
132
128
|
return asyncDone(err, context);
|
|
@@ -142,7 +138,7 @@ exports.commit = function (context, asyncDone) {
|
|
|
142
138
|
return asyncDone(null, context);
|
|
143
139
|
}
|
|
144
140
|
|
|
145
|
-
|
|
141
|
+
const client = context.db.client;
|
|
146
142
|
context.logger.debug('dataCollectorLinks', 'commit');
|
|
147
143
|
client.commit(function (err) {
|
|
148
144
|
if (err) {
|
|
@@ -160,7 +156,7 @@ exports.commit = function (context, asyncDone) {
|
|
|
160
156
|
* @param {Function} asyncDone async waterfall callback
|
|
161
157
|
*/
|
|
162
158
|
exports.truncateTempTablesMN = function (context, asyncDone) {
|
|
163
|
-
|
|
159
|
+
let statements;
|
|
164
160
|
context.logger.silly('dataCollectorLinks', 'truncateTempTablesMN');
|
|
165
161
|
|
|
166
162
|
statements = [
|
|
@@ -184,7 +180,7 @@ exports.truncateTempTablesMN = function (context, asyncDone) {
|
|
|
184
180
|
* @param {Function} asyncDone async waterfall callback
|
|
185
181
|
*/
|
|
186
182
|
exports.dropTempTablesMN = function (context, asyncDone) {
|
|
187
|
-
|
|
183
|
+
let statements;
|
|
188
184
|
context.logger.silly('dataCollectorLinks', 'dropTempTablesMN');
|
|
189
185
|
|
|
190
186
|
statements = [
|
|
@@ -208,7 +204,7 @@ exports.dropTempTablesMN = function (context, asyncDone) {
|
|
|
208
204
|
* @param {Function} asyncDone async waterfall callback
|
|
209
205
|
*/
|
|
210
206
|
exports.truncateTempTables = function (context, asyncDone) {
|
|
211
|
-
|
|
207
|
+
let statements;
|
|
212
208
|
context.logger.silly('dataCollectorLinks', 'truncateTempTables');
|
|
213
209
|
|
|
214
210
|
// Special hack for $batch.
|
|
@@ -240,7 +236,7 @@ exports.truncateTempTables = function (context, asyncDone) {
|
|
|
240
236
|
* @param {Function} asyncDone async waterfall callback
|
|
241
237
|
*/
|
|
242
238
|
exports.dropTempTables = function (context, asyncDone) {
|
|
243
|
-
|
|
239
|
+
let statements;
|
|
244
240
|
context.logger.silly('dataCollectorLinks', 'dropTempTables');
|
|
245
241
|
|
|
246
242
|
// Special hack for $batch.
|
|
@@ -9,17 +9,17 @@ const SqlError = require('../utils/errors/sqlError');
|
|
|
9
9
|
exports.moveRecordNV_ToSelectStm = function (context, asyncDone) {
|
|
10
10
|
context.logger.silly('dataCollectorPost', 'moveRecordNV_ToSelectStm');
|
|
11
11
|
//get dbSegment for inserting the payload
|
|
12
|
-
|
|
12
|
+
const dbSeg = context.oData.dbSegmentLast;
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
const stm = dbSeg.sql.stmContainer.insertTmp;
|
|
15
15
|
if (!stm) {
|
|
16
16
|
return asyncDone("Internal server error", context);
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
const max = dbSeg._recordNV.length;
|
|
20
|
+
let i;
|
|
21
21
|
for (i = 0; i < max; i++) {
|
|
22
|
-
|
|
22
|
+
const nv = dbSeg._recordNV[i];
|
|
23
23
|
stm.setValue(nv.name, nv.value, dbSeg.entityType.propertiesMap[nv.name].DATA_TYPE_NAME); // OK
|
|
24
24
|
}
|
|
25
25
|
return asyncDone(null, context);
|
|
@@ -28,7 +28,7 @@ exports.moveRecordNV_ToSelectStm = function (context, asyncDone) {
|
|
|
28
28
|
|
|
29
29
|
exports.createTmpTables = function (context, asyncDone) {
|
|
30
30
|
context.logger.silly('dataCollectorPost', 'createTmpTables');
|
|
31
|
-
|
|
31
|
+
const stm = context.oData.dbSegmentLast.sql.stmContainer.createTmp;
|
|
32
32
|
return statementProcessor.execStmsDirectlyNoResult(context, stm, asyncDone);
|
|
33
33
|
};
|
|
34
34
|
|
|
@@ -37,20 +37,20 @@ exports.checkAutoValues = null;
|
|
|
37
37
|
exports.checkForAutoKeyGenUsage = function (context, asyncDone) {
|
|
38
38
|
context.logger.silly('dataCollectorPost', 'checkForAutoKeyGenUsage');
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
const dbSeg = context.oData.dbSegmentLast;
|
|
41
41
|
if (!exports.checkAutoValues && !dbSeg.entityType.hasAdmindata()) {
|
|
42
42
|
return asyncDone(null, context);
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
const stm = dbSeg.sql.stmContainer.insertTmp;
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
const table = dbSeg._DB_TableName;
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
50
|
+
const appData = {};
|
|
51
|
+
let i;
|
|
52
|
+
const nv = stm.nv;
|
|
53
|
+
let name = '';
|
|
54
54
|
|
|
55
55
|
const createBy = dbSeg.entityType.getAddAdmindata('create', 'by');
|
|
56
56
|
const createAt = dbSeg.entityType.getAddAdmindata('create', 'at');
|
|
@@ -61,7 +61,7 @@ exports.checkForAutoKeyGenUsage = function (context, asyncDone) {
|
|
|
61
61
|
for (i = 0; i < nv.length; i++) {
|
|
62
62
|
|
|
63
63
|
name = nv[i].name.toSqlHana(null, null, { withoutTable: true });
|
|
64
|
-
name = name.
|
|
64
|
+
name = name.slice(1, -1);
|
|
65
65
|
|
|
66
66
|
if (createBy && name === 'CREATED_BY') {
|
|
67
67
|
nv[i].overwriteValue = new sqlStatement.Value(context.userName);
|
|
@@ -90,7 +90,7 @@ exports.checkForAutoKeyGenUsage = function (context, asyncDone) {
|
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
return exports.checkAutoValues(table, appData, function (err) {
|
|
93
|
-
|
|
93
|
+
let name;
|
|
94
94
|
for (i = 0; i < nv.length; i++) {
|
|
95
95
|
name = nv[i].name.toSqlHana(null, null, { withoutTable: true });
|
|
96
96
|
name = name.substr(1, name.length - 2);
|
|
@@ -104,21 +104,21 @@ exports.checkForAutoKeyGenUsage = function (context, asyncDone) {
|
|
|
104
104
|
|
|
105
105
|
exports.insertPayloadIntoTempTable = function (context, asyncDone) {
|
|
106
106
|
context.logger.silly('dataCollectorPost', 'insertPayloadIntoTempTable');
|
|
107
|
-
|
|
107
|
+
const dbSeg = context.oData.dbSegmentLast;
|
|
108
108
|
|
|
109
109
|
statementProcessor.execStmsAsPreparedNoResult(context, dbSeg.sql.stmContainer.insertTmp, asyncDone);
|
|
110
110
|
};
|
|
111
111
|
|
|
112
112
|
exports.insertTmpTableToRealTable = function (context, asyncDone) {
|
|
113
113
|
context.logger.silly('dataCollectorPost', 'insertTmpTableToRealTable');
|
|
114
|
-
|
|
114
|
+
const dbSeg = context.oData.dbSegmentLast;
|
|
115
115
|
statementProcessor.execStmsAsPreparedNoResult(context, dbSeg.sql.stmContainer.insertReal, asyncDone);
|
|
116
116
|
};
|
|
117
117
|
|
|
118
118
|
exports.selectData = function (context, asyncDone) {
|
|
119
119
|
context.logger.silly('dataCollectorPost', 'selectData');
|
|
120
|
-
|
|
121
|
-
|
|
120
|
+
const dbSeg = context.oData.dbSegmentLast;
|
|
121
|
+
const stm = dbSeg.sql.stmContainer.select;
|
|
122
122
|
|
|
123
123
|
return statementProcessor.execStmsAsPrepared(context, stm, (err,context, resultSet) => {
|
|
124
124
|
const rows = resultSet[0];
|
|
@@ -137,7 +137,7 @@ exports.selectData = function (context, asyncDone) {
|
|
|
137
137
|
|
|
138
138
|
exports.commit = function (context, asyncDone) {
|
|
139
139
|
context.logger.debug('dataCollectorPost', 'commit');
|
|
140
|
-
|
|
140
|
+
const client = context.db.client;
|
|
141
141
|
client.commit(function (err) {
|
|
142
142
|
if (err) {
|
|
143
143
|
context.logger.info('SQL Exec', 'Commit Error: \n' + JSON.stringify(err));
|