@cubejs-backend/api-gateway 1.1.15 → 1.1.17
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/dist/src/SubscriptionServer.d.ts +2 -2
- package/dist/src/SubscriptionServer.d.ts.map +1 -1
- package/dist/src/SubscriptionServer.js +1 -1
- package/dist/src/SubscriptionServer.js.map +1 -1
- package/dist/src/gateway.d.ts +11 -4
- package/dist/src/gateway.d.ts.map +1 -1
- package/dist/src/gateway.js +93 -38
- package/dist/src/gateway.js.map +1 -1
- package/dist/src/helpers/prepareAnnotation.d.ts +1 -1
- package/dist/src/helpers/prepareAnnotation.d.ts.map +1 -1
- package/dist/src/helpers/prepareAnnotation.js.map +1 -1
- package/dist/src/helpers/toConfigMap.d.ts +1 -1
- package/dist/src/helpers/toConfigMap.js +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/interfaces.d.ts +4 -2
- package/dist/src/interfaces.d.ts.map +1 -1
- package/dist/src/interfaces.js +2 -1
- package/dist/src/interfaces.js.map +1 -1
- package/dist/src/query.d.ts.map +1 -1
- package/dist/src/query.js +10 -1
- package/dist/src/query.js.map +1 -1
- package/dist/src/types/query.d.ts +7 -0
- package/dist/src/types/query.d.ts.map +1 -1
- package/dist/src/types/request.d.ts +2 -1
- package/dist/src/types/request.d.ts.map +1 -1
- package/dist/src/types/responses.d.ts +34 -0
- package/dist/src/types/responses.d.ts.map +1 -0
- package/dist/src/types/responses.js +3 -0
- package/dist/src/types/responses.js.map +1 -0
- package/package.json +5 -5
- package/dist/src/helpers/transformData.d.ts +0 -87
- package/dist/src/helpers/transformData.d.ts.map +0 -1
- package/dist/src/helpers/transformData.js +0 -236
- package/dist/src/helpers/transformData.js.map +0 -1
- package/dist/src/helpers/transformValue.d.ts +0 -21
- package/dist/src/helpers/transformValue.d.ts.map +0 -1
- package/dist/src/helpers/transformValue.js +0 -29
- package/dist/src/helpers/transformValue.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ApiGateway } from './gateway';
|
|
2
2
|
import type { LocalSubscriptionStore } from './LocalSubscriptionStore';
|
|
3
3
|
import { ContextAcceptorFn } from './interfaces';
|
|
4
|
-
export type WebSocketSendMessageFn = (connectionId: string, message: any) => void
|
|
4
|
+
export type WebSocketSendMessageFn = (connectionId: string, message: any) => Promise<void>;
|
|
5
5
|
export declare class SubscriptionServer {
|
|
6
6
|
protected readonly apiGateway: ApiGateway;
|
|
7
7
|
protected readonly sendMessage: WebSocketSendMessageFn;
|
|
@@ -10,7 +10,7 @@ export declare class SubscriptionServer {
|
|
|
10
10
|
constructor(apiGateway: ApiGateway, sendMessage: WebSocketSendMessageFn, subscriptionStore: LocalSubscriptionStore, contextAcceptor: ContextAcceptorFn);
|
|
11
11
|
resultFn(connectionId: string, messageId: string, requestId: string | undefined): (message: any, { status }?: {
|
|
12
12
|
status: number;
|
|
13
|
-
}) => void
|
|
13
|
+
}) => Promise<void>;
|
|
14
14
|
processMessage(connectionId: string, message: any, isSubscription: any): Promise<void>;
|
|
15
15
|
processSubscriptions(): Promise<void>;
|
|
16
16
|
disconnect(connectionId: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriptionServer.d.ts","sourceRoot":"","sources":["../../src/SubscriptionServer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAA0B,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAgBzE,MAAM,MAAM,sBAAsB,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"SubscriptionServer.d.ts","sourceRoot":"","sources":["../../src/SubscriptionServer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAA0B,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAgBzE,MAAM,MAAM,sBAAsB,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3F,qBAAa,kBAAkB;IAE3B,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU;IACzC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,sBAAsB;IACtD,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,sBAAsB;IAC5D,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,iBAAiB;gBAHlC,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,sBAAsB,EACnC,iBAAiB,EAAE,sBAAsB,EACzC,eAAe,EAAE,iBAAiB;IAIhD,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS;;;IAWzE,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,KAAA,EAAE,cAAc,KAAA;IAoG5D,oBAAoB;IAOpB,UAAU,CAAC,YAAY,EAAE,MAAM;IAMrC,KAAK;CAGb"}
|
|
@@ -25,7 +25,7 @@ class SubscriptionServer {
|
|
|
25
25
|
this.contextAcceptor = contextAcceptor;
|
|
26
26
|
}
|
|
27
27
|
resultFn(connectionId, messageId, requestId) {
|
|
28
|
-
return (message, { status } = { status: 200 }) => {
|
|
28
|
+
return async (message, { status } = { status: 200 }) => {
|
|
29
29
|
this.apiGateway.log({
|
|
30
30
|
type: 'Outgoing network usage',
|
|
31
31
|
service: 'api-ws',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriptionServer.js","sourceRoot":"","sources":["../../src/SubscriptionServer.ts"],"names":[],"mappings":";;;AAAA,+BAAoC;AAEpC,2CAAwC;AAKxC,MAAM,YAAY,GAA6B;IAC7C,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;IAC5B,GAAG,EAAE,CAAC,OAAO,CAAC;IACd,SAAS,EAAE,CAAC,OAAO,CAAC;IACpB,IAAI,EAAE,EAAE;IACR,SAAS,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;IACjC,WAAW,EAAE,EAAE;IACf,wBAAwB,EAAE,EAAE;CAC7B,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,OAAgB,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAC/D,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAChE,CAAC;AAIF,MAAa,kBAAkB;IAER;IACA;IACA;IACA;IAJrB,YACqB,UAAsB,EACtB,WAAmC,EACnC,iBAAyC,EACzC,eAAkC;QAHlC,eAAU,GAAV,UAAU,CAAY;QACtB,gBAAW,GAAX,WAAW,CAAwB;QACnC,sBAAiB,GAAjB,iBAAiB,CAAwB;QACzC,oBAAe,GAAf,eAAe,CAAmB;IAEvD,CAAC;IAEM,QAAQ,CAAC,YAAoB,EAAE,SAAiB,EAAE,SAA6B;QACpF,OAAO,
|
|
1
|
+
{"version":3,"file":"SubscriptionServer.js","sourceRoot":"","sources":["../../src/SubscriptionServer.ts"],"names":[],"mappings":"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"}
|
package/dist/src/gateway.d.ts
CHANGED
|
@@ -157,7 +157,7 @@ declare class ApiGateway {
|
|
|
157
157
|
* Convert incoming query parameter (JSON fetched from the HTTP) to
|
|
158
158
|
* an array of query type and array of normalized queries.
|
|
159
159
|
*/
|
|
160
|
-
protected getNormalizedQueries(inputQuery: Record<string, any> | Record<string, any>[], context: RequestContext, persistent?: boolean, memberExpressions?: boolean): Promise<[QueryType, NormalizedQuery[]]>;
|
|
160
|
+
protected getNormalizedQueries(inputQuery: Record<string, any> | Record<string, any>[], context: RequestContext, persistent?: boolean, memberExpressions?: boolean): Promise<[QueryType, NormalizedQuery[], NormalizedQuery[]]>;
|
|
161
161
|
sql({ query, context, res, memberToAlias, exportAnnotatedSql, memberExpressions, expressionParams, disableExternalPreAggregations, disableLimitEnforcing, }: QueryRequest): Promise<void>;
|
|
162
162
|
private hasExpressionsInQuery;
|
|
163
163
|
private parseMemberExpressionsInQuery;
|
|
@@ -183,11 +183,18 @@ declare class ApiGateway {
|
|
|
183
183
|
*/
|
|
184
184
|
private getSqlResponseInternal;
|
|
185
185
|
/**
|
|
186
|
-
*
|
|
186
|
+
* Wraps the adapter's response in unified ResultWrapper if it comes from
|
|
187
|
+
* a common driver (not a Cubestore's one, cause Cubestore Driver internally creates ResultWrapper)
|
|
188
|
+
* @param res Adapter's response
|
|
189
|
+
* @private
|
|
190
|
+
*/
|
|
191
|
+
private wrapAdapterQueryResultIfNeeded;
|
|
192
|
+
/**
|
|
193
|
+
* Prepare adapter's result and other transform parameters for a final
|
|
187
194
|
* result object.
|
|
188
195
|
* @internal
|
|
189
196
|
*/
|
|
190
|
-
private
|
|
197
|
+
private prepareResultTransformData;
|
|
191
198
|
/**
|
|
192
199
|
* Returns stream object which will be used to stream results from
|
|
193
200
|
* the data source if applicable, returns `null` otherwise.
|
|
@@ -226,7 +233,7 @@ declare class ApiGateway {
|
|
|
226
233
|
}): Promise<void>;
|
|
227
234
|
protected resToResultFn(res: ExpressResponse): (message: any, { status }?: {
|
|
228
235
|
status?: number | undefined;
|
|
229
|
-
}) =>
|
|
236
|
+
}) => Promise<void>;
|
|
230
237
|
protected parseQueryParam(query: any): Query | Query[];
|
|
231
238
|
protected getCompilerApi(context: RequestContext): Promise<any>;
|
|
232
239
|
protected getAdapterApi(context: RequestContext): Promise<any>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/gateway.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/gateway.ts"],"names":[],"mappings":"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"}
|
package/dist/src/gateway.js
CHANGED
|
@@ -10,6 +10,7 @@ const body_parser_1 = __importDefault(require("body-parser"));
|
|
|
10
10
|
const express_graphql_1 = require("express-graphql");
|
|
11
11
|
const structured_clone_1 = __importDefault(require("@ungap/structured-clone"));
|
|
12
12
|
const shared_1 = require("@cubejs-backend/shared");
|
|
13
|
+
const native_1 = require("@cubejs-backend/native");
|
|
13
14
|
const http_proxy_middleware_1 = require("http-proxy-middleware");
|
|
14
15
|
const enums_1 = require("./types/enums");
|
|
15
16
|
const requestParser_1 = require("./requestParser");
|
|
@@ -23,7 +24,6 @@ const jwk_1 = require("./jwk");
|
|
|
23
24
|
const sql_server_1 = require("./sql-server");
|
|
24
25
|
const graphql_1 = require("./graphql");
|
|
25
26
|
const prepareAnnotation_1 = require("./helpers/prepareAnnotation");
|
|
26
|
-
const transformData_1 = __importDefault(require("./helpers/transformData"));
|
|
27
27
|
const transformMetaExtended_1 = require("./helpers/transformMetaExtended");
|
|
28
28
|
function userAsyncHandler(handler) {
|
|
29
29
|
return (req, res, next) => {
|
|
@@ -849,7 +849,7 @@ class ApiGateway {
|
|
|
849
849
|
}, context);
|
|
850
850
|
const startTime = new Date().getTime();
|
|
851
851
|
const compilerApi = await this.getCompilerApi(context);
|
|
852
|
-
|
|
852
|
+
const queryNormalizationResult = queries.map((currentQuery) => {
|
|
853
853
|
const hasExpressionsInQuery = this.hasExpressionsInQuery(currentQuery);
|
|
854
854
|
if (hasExpressionsInQuery) {
|
|
855
855
|
if (!memberExpressions) {
|
|
@@ -857,13 +857,17 @@ class ApiGateway {
|
|
|
857
857
|
}
|
|
858
858
|
currentQuery = this.parseMemberExpressionsInQuery(currentQuery);
|
|
859
859
|
}
|
|
860
|
-
|
|
860
|
+
return {
|
|
861
|
+
normalizedQuery: ((0, query_1.normalizeQuery)(currentQuery, persistent)),
|
|
862
|
+
hasExpressionsInQuery
|
|
863
|
+
};
|
|
864
|
+
});
|
|
865
|
+
let normalizedQueries = await Promise.all(queryNormalizationResult.map(async ({ normalizedQuery, hasExpressionsInQuery }) => {
|
|
861
866
|
let evaluatedQuery = normalizedQuery;
|
|
862
867
|
if (hasExpressionsInQuery) {
|
|
863
868
|
// We need to parse/eval all member expressions early as applyRowLevelSecurity
|
|
864
869
|
// needs to access the full SQL query in order to evaluate rules
|
|
865
|
-
evaluatedQuery =
|
|
866
|
-
this.evalMemberExpressionsInQuery(normalizedQuery);
|
|
870
|
+
evaluatedQuery = this.evalMemberExpressionsInQuery(normalizedQuery);
|
|
867
871
|
}
|
|
868
872
|
// First apply cube/view level security policies
|
|
869
873
|
const { query: queryWithRlsFilters, denied } = await compilerApi.applyRowLevelSecurity(normalizedQuery, evaluatedQuery, context);
|
|
@@ -897,7 +901,7 @@ class ApiGateway {
|
|
|
897
901
|
throw new UserError_1.UserError('Data blending query without granularity is not supported');
|
|
898
902
|
}
|
|
899
903
|
}
|
|
900
|
-
return [queryType, normalizedQueries];
|
|
904
|
+
return [queryType, normalizedQueries, queryNormalizationResult.map((it) => (0, query_1.remapToQueryAdapterFormat)(it.normalizedQuery))];
|
|
901
905
|
}
|
|
902
906
|
async sql({ query, context, res, memberToAlias, exportAnnotatedSql, memberExpressions, expressionParams, disableExternalPreAggregations, disableLimitEnforcing, }) {
|
|
903
907
|
const requestStarted = new Date();
|
|
@@ -923,7 +927,12 @@ class ApiGateway {
|
|
|
923
927
|
}
|
|
924
928
|
}
|
|
925
929
|
hasExpressionsInQuery(query) {
|
|
926
|
-
const arraysToCheck = [
|
|
930
|
+
const arraysToCheck = [
|
|
931
|
+
query.measures,
|
|
932
|
+
query.dimensions,
|
|
933
|
+
query.segments,
|
|
934
|
+
(query.subqueryJoins ?? []).map(join => join.on),
|
|
935
|
+
];
|
|
927
936
|
return arraysToCheck.some(array => array?.some(item => typeof item === 'string' && item.startsWith('{')));
|
|
928
937
|
}
|
|
929
938
|
parseMemberExpressionsInQuery(query) {
|
|
@@ -932,6 +941,10 @@ class ApiGateway {
|
|
|
932
941
|
measures: (query.measures || []).map(m => (typeof m === 'string' ? this.parseMemberExpression(m) : m)),
|
|
933
942
|
dimensions: (query.dimensions || []).map(m => (typeof m === 'string' ? this.parseMemberExpression(m) : m)),
|
|
934
943
|
segments: (query.segments || []).map(m => (typeof m === 'string' ? this.parseMemberExpression(m) : m)),
|
|
944
|
+
subqueryJoins: (query.subqueryJoins ?? []).map(join => (typeof join.on === 'string' ? {
|
|
945
|
+
...join,
|
|
946
|
+
on: this.parseMemberExpression(join.on),
|
|
947
|
+
} : join)),
|
|
935
948
|
};
|
|
936
949
|
}
|
|
937
950
|
parseMemberExpression(memberExpression) {
|
|
@@ -968,6 +981,10 @@ class ApiGateway {
|
|
|
968
981
|
measures: (query.measures || []).map(m => (typeof m !== 'string' ? this.evalMemberExpression(m) : m)),
|
|
969
982
|
dimensions: (query.dimensions || []).map(m => (typeof m !== 'string' ? this.evalMemberExpression(m) : m)),
|
|
970
983
|
segments: (query.segments || []).map(m => (typeof m !== 'string' ? this.evalMemberExpression(m) : m)),
|
|
984
|
+
subqueryJoins: (query.subqueryJoins ?? []).map(join => (typeof join.on !== 'string' ? {
|
|
985
|
+
...join,
|
|
986
|
+
on: this.evalMemberExpression(join.on)
|
|
987
|
+
} : join)),
|
|
971
988
|
};
|
|
972
989
|
}
|
|
973
990
|
evalMemberExpression(memberExpression) {
|
|
@@ -1047,7 +1064,7 @@ class ApiGateway {
|
|
|
1047
1064
|
const requestStarted = new Date();
|
|
1048
1065
|
try {
|
|
1049
1066
|
await this.assertApiScope('data', context.securityContext);
|
|
1050
|
-
const [queryType, normalizedQueries] = await this.getNormalizedQueries(query, context);
|
|
1067
|
+
const [queryType, _, normalizedQueries] = await this.getNormalizedQueries(query, context, undefined, undefined);
|
|
1051
1068
|
const sqlQueries = await Promise.all(normalizedQueries.map(async (normalizedQuery) => (await this.getCompilerApi(context)).getSql(this.coerceForSqlQuery(normalizedQuery, context), {
|
|
1052
1069
|
includeDebugInfo: (0, shared_1.getEnv)('devMode') || context.signedWithPlaygroundAuthSecret
|
|
1053
1070
|
})));
|
|
@@ -1126,21 +1143,38 @@ class ApiGateway {
|
|
|
1126
1143
|
response.total = normalizedQuery.total
|
|
1127
1144
|
? Number(total.data[0][shared_1.QueryAlias.TOTAL_COUNT])
|
|
1128
1145
|
: undefined;
|
|
1129
|
-
return response;
|
|
1146
|
+
return this.wrapAdapterQueryResultIfNeeded(response);
|
|
1130
1147
|
}
|
|
1131
1148
|
/**
|
|
1132
|
-
*
|
|
1149
|
+
* Wraps the adapter's response in unified ResultWrapper if it comes from
|
|
1150
|
+
* a common driver (not a Cubestore's one, cause Cubestore Driver internally creates ResultWrapper)
|
|
1151
|
+
* @param res Adapter's response
|
|
1152
|
+
* @private
|
|
1153
|
+
*/
|
|
1154
|
+
wrapAdapterQueryResultIfNeeded(res) {
|
|
1155
|
+
res.data = new native_1.ResultWrapper(res.data);
|
|
1156
|
+
return res;
|
|
1157
|
+
}
|
|
1158
|
+
/**
|
|
1159
|
+
* Prepare adapter's result and other transform parameters for a final
|
|
1133
1160
|
* result object.
|
|
1134
1161
|
* @internal
|
|
1135
1162
|
*/
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1163
|
+
prepareResultTransformData(context, queryType, normalizedQuery, sqlQuery, annotation, response, responseType) {
|
|
1164
|
+
const resultWrapper = response.data;
|
|
1165
|
+
const transformDataParams = {
|
|
1166
|
+
aliasToMemberNameMap: sqlQuery.aliasNameToMember,
|
|
1167
|
+
annotation: {
|
|
1140
1168
|
...annotation.measures,
|
|
1141
1169
|
...annotation.dimensions,
|
|
1142
1170
|
...annotation.timeDimensions
|
|
1143
|
-
},
|
|
1171
|
+
},
|
|
1172
|
+
query: normalizedQuery,
|
|
1173
|
+
queryType,
|
|
1174
|
+
resType: responseType,
|
|
1175
|
+
};
|
|
1176
|
+
const resObj = {
|
|
1177
|
+
query: normalizedQuery,
|
|
1144
1178
|
lastRefreshTime: response.lastRefreshTime?.toISOString(),
|
|
1145
1179
|
...((0, shared_1.getEnv)('devMode') ||
|
|
1146
1180
|
context.signedWithPlaygroundAuthSecret
|
|
@@ -1159,6 +1193,9 @@ class ApiGateway {
|
|
|
1159
1193
|
slowQuery: Boolean(response.slowQuery),
|
|
1160
1194
|
total: normalizedQuery.total ? response.total : null,
|
|
1161
1195
|
};
|
|
1196
|
+
resultWrapper.setTransformData(transformDataParams);
|
|
1197
|
+
resultWrapper.setRootResultObject(resObj);
|
|
1198
|
+
return resultWrapper;
|
|
1162
1199
|
}
|
|
1163
1200
|
/**
|
|
1164
1201
|
* Returns stream object which will be used to stream results from
|
|
@@ -1224,6 +1261,11 @@ class ApiGateway {
|
|
|
1224
1261
|
query
|
|
1225
1262
|
}, context);
|
|
1226
1263
|
const [queryType, normalizedQueries] = await this.getNormalizedQueries(query, context);
|
|
1264
|
+
if (queryType !== enums_1.QueryType.REGULAR_QUERY &&
|
|
1265
|
+
props.queryType == null) {
|
|
1266
|
+
throw new UserError_1.UserError(`'${queryType}' query type is not supported by the client.` +
|
|
1267
|
+
'Please update the client.');
|
|
1268
|
+
}
|
|
1227
1269
|
let metaConfigResult = await (await this
|
|
1228
1270
|
.getCompilerApi(context)).metaConfig(request.context, {
|
|
1229
1271
|
requestId: context.requestId
|
|
@@ -1234,9 +1276,9 @@ class ApiGateway {
|
|
|
1234
1276
|
const results = await Promise.all(normalizedQueries.map(async (normalizedQuery, index) => {
|
|
1235
1277
|
slowQuery = slowQuery ||
|
|
1236
1278
|
Boolean(sqlQueries[index].slowQuery);
|
|
1237
|
-
const annotation = (0, prepareAnnotation_1.prepareAnnotation)(metaConfigResult, normalizedQuery);
|
|
1238
1279
|
const response = await this.getSqlResponseInternal(context, normalizedQuery, sqlQueries[index]);
|
|
1239
|
-
|
|
1280
|
+
const annotation = (0, prepareAnnotation_1.prepareAnnotation)(metaConfigResult, normalizedQuery);
|
|
1281
|
+
return this.prepareResultTransformData(context, queryType, normalizedQuery, sqlQueries[index], annotation, response, resType);
|
|
1240
1282
|
}));
|
|
1241
1283
|
this.log({
|
|
1242
1284
|
type: 'Load Request Success',
|
|
@@ -1245,25 +1287,21 @@ class ApiGateway {
|
|
|
1245
1287
|
apiType,
|
|
1246
1288
|
isPlayground: Boolean(context.signedWithPlaygroundAuthSecret),
|
|
1247
1289
|
queries: results.length,
|
|
1248
|
-
queriesWithPreAggregations: results.filter((r) => Object.keys(r.usedPreAggregations || {}).length).length,
|
|
1249
|
-
|
|
1250
|
-
|
|
1290
|
+
queriesWithPreAggregations: results.filter((r) => Object.keys(r.getRootResultObject()[0].usedPreAggregations || {}).length).length,
|
|
1291
|
+
// Have to omit because data could be processed natively
|
|
1292
|
+
// so it is not known at this point
|
|
1293
|
+
// queriesWithData:
|
|
1294
|
+
// results.filter((r: any) => r.data?.length).length,
|
|
1295
|
+
dbType: results.map(r => r.getRootResultObject()[0].dbType),
|
|
1251
1296
|
}, context);
|
|
1252
|
-
if (queryType !== enums_1.QueryType.REGULAR_QUERY &&
|
|
1253
|
-
props.queryType == null) {
|
|
1254
|
-
throw new UserError_1.UserError(`'${queryType}' query type is not supported by the client.` +
|
|
1255
|
-
'Please update the client.');
|
|
1256
|
-
}
|
|
1257
1297
|
if (props.queryType === 'multi') {
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
pivotQuery: (0, query_1.getPivotQuery)(queryType, normalizedQueries),
|
|
1262
|
-
slowQuery
|
|
1263
|
-
});
|
|
1298
|
+
// We prepare the final json result on native side
|
|
1299
|
+
const resultMulti = new native_1.ResultMultiWrapper(results, { queryType, slowQuery });
|
|
1300
|
+
await res(resultMulti);
|
|
1264
1301
|
}
|
|
1265
1302
|
else {
|
|
1266
|
-
|
|
1303
|
+
// We prepare the full final json result on native side
|
|
1304
|
+
await res(results[0]);
|
|
1267
1305
|
}
|
|
1268
1306
|
}
|
|
1269
1307
|
catch (e) {
|
|
@@ -1335,6 +1373,7 @@ class ApiGateway {
|
|
|
1335
1373
|
annotation
|
|
1336
1374
|
}];
|
|
1337
1375
|
}
|
|
1376
|
+
await res(request.streaming ? results[0] : { results });
|
|
1338
1377
|
}
|
|
1339
1378
|
else {
|
|
1340
1379
|
results = await Promise.all(normalizedQueries.map(async (normalizedQuery, index) => {
|
|
@@ -1345,12 +1384,17 @@ class ApiGateway {
|
|
|
1345
1384
|
return streamResponse(sqlQueries[index]);
|
|
1346
1385
|
}
|
|
1347
1386
|
const response = await this.getSqlResponseInternal(context, normalizedQuery, sqlQueries[index]);
|
|
1348
|
-
return this.
|
|
1387
|
+
return this.prepareResultTransformData(context, queryType, normalizedQuery, sqlQueries[index], annotation, response, resType);
|
|
1349
1388
|
}));
|
|
1389
|
+
if (request.streaming) {
|
|
1390
|
+
await res(results[0]);
|
|
1391
|
+
}
|
|
1392
|
+
else {
|
|
1393
|
+
// We prepare the final json result on native side
|
|
1394
|
+
const resultArray = new native_1.ResultArrayWrapper(results);
|
|
1395
|
+
await res(resultArray);
|
|
1396
|
+
}
|
|
1350
1397
|
}
|
|
1351
|
-
res(request.streaming ? results[0] : {
|
|
1352
|
-
results,
|
|
1353
|
-
});
|
|
1354
1398
|
}
|
|
1355
1399
|
catch (e) {
|
|
1356
1400
|
this.handleError({
|
|
@@ -1385,7 +1429,7 @@ class ApiGateway {
|
|
|
1385
1429
|
query,
|
|
1386
1430
|
context,
|
|
1387
1431
|
res: (message, opts) => {
|
|
1388
|
-
if (!Array.isArray(message) && message.error) {
|
|
1432
|
+
if (!Array.isArray(message) && 'error' in message && message.error) {
|
|
1389
1433
|
error = { message, opts };
|
|
1390
1434
|
}
|
|
1391
1435
|
else {
|
|
@@ -1411,7 +1455,18 @@ class ApiGateway {
|
|
|
1411
1455
|
}
|
|
1412
1456
|
}
|
|
1413
1457
|
resToResultFn(res) {
|
|
1414
|
-
return (message, { status } = {}) =>
|
|
1458
|
+
return async (message, { status } = {}) => {
|
|
1459
|
+
if (status) {
|
|
1460
|
+
res.status(status);
|
|
1461
|
+
}
|
|
1462
|
+
if (message.isWrapper) {
|
|
1463
|
+
res.set('Content-Type', 'application/json');
|
|
1464
|
+
res.send(Buffer.from(await message.getFinalResult()));
|
|
1465
|
+
}
|
|
1466
|
+
else {
|
|
1467
|
+
res.json(message);
|
|
1468
|
+
}
|
|
1469
|
+
};
|
|
1415
1470
|
}
|
|
1416
1471
|
parseQueryParam(query) {
|
|
1417
1472
|
if (!query || query === 'undefined') {
|