Skip to content

Commit 0be8761

Browse files
committed
encapsulate rootResultObject into ResultWrapper
1 parent 13709cf commit 0be8761

File tree

2 files changed

+30
-28
lines changed

2 files changed

+30
-28
lines changed

packages/cubejs-api-gateway/src/gateway.ts

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -117,13 +117,6 @@ function systemAsyncHandler(handler: (req: Request & { context: ExtendedRequestC
117117
};
118118
}
119119

120-
function cleanupResult(result) {
121-
return {
122-
...result,
123-
rawData: undefined,
124-
};
125-
}
126-
127120
// Prepared CheckAuthFn, default or from config: always async, returns nothing
128121
type PreparedCheckAuthFn = (ctx: any, authorization?: string) => Promise<void>;
129122

@@ -1621,7 +1614,7 @@ class ApiGateway {
16211614
* result object.
16221615
* @internal
16231616
*/
1624-
private async prepareResultTransformData(
1617+
private prepareResultTransformData(
16251618
context: RequestContext,
16261619
queryType: QueryType,
16271620
normalizedQuery: NormalizedQuery,
@@ -1642,7 +1635,9 @@ class ApiGateway {
16421635
},
16431636
response: any,
16441637
responseType?: ResultType,
1645-
) {
1638+
): ResultWrapper {
1639+
const resultWrapper = response.data;
1640+
16461641
const transformDataParams = {
16471642
aliasToMemberNameMap: sqlQuery.aliasNameToMember,
16481643
annotation: {
@@ -1655,12 +1650,8 @@ class ApiGateway {
16551650
resType: responseType,
16561651
};
16571652

1658-
response.data.setTransformData(transformDataParams);
1659-
1660-
// We postpone data transformation until the last minute
1661-
return {
1653+
const resObj = {
16621654
query: normalizedQuery,
1663-
rawData: response.data,
16641655
lastRefreshTime: response.lastRefreshTime?.toISOString(),
16651656
...(
16661657
getEnv('devMode') ||
@@ -1681,6 +1672,11 @@ class ApiGateway {
16811672
slowQuery: Boolean(response.slowQuery),
16821673
total: normalizedQuery.total ? response.total : null,
16831674
};
1675+
1676+
resultWrapper.setTransformData(transformDataParams);
1677+
resultWrapper.setRootResultObject(resObj);
1678+
1679+
return resultWrapper;
16841680
}
16851681

16861682
/**
@@ -1825,15 +1821,13 @@ class ApiGateway {
18251821
queries: results.length,
18261822
queriesWithPreAggregations:
18271823
results.filter(
1828-
(r: any) => Object.keys(
1829-
r.usedPreAggregations || {}
1830-
).length
1824+
(r: any) => Object.keys(r.getRootResultObject().usedPreAggregations || {}).length
18311825
).length,
18321826
// Have to omit because data could be processed natively
18331827
// so it is not known at this point
18341828
// queriesWithData:
18351829
// results.filter((r: any) => r.data?.length).length,
1836-
dbType: results.map(r => r.dbType),
1830+
dbType: results.map(r => r.getRootResultObject().dbType),
18371831
},
18381832
context,
18391833
);
@@ -1842,9 +1836,9 @@ class ApiGateway {
18421836
// We prepare the final json result on native side
18431837
const [transformDataJson, rawDataRef, cleanResultList] = results.reduce<[Object[], any[], Object[]]>(
18441838
([transformList, rawList, resultList], r) => {
1845-
transformList.push(r.rawData.getTransformData());
1846-
rawList.push(r.rawData.getRawData());
1847-
resultList.push(cleanupResult(r));
1839+
transformList.push(r.getTransformData());
1840+
rawList.push(r.getRawData());
1841+
resultList.push(r.getRootResultObject());
18481842
return [transformList, rawList, resultList];
18491843
},
18501844
[[], [], []]
@@ -1861,7 +1855,7 @@ class ApiGateway {
18611855
// We prepare the full final json result on native side
18621856
const r = results[0];
18631857
res(await getFinalQueryResult(
1864-
r.rawData.getTransformData(), r.rawData.getRawData(), cleanupResult(r)
1858+
r.getTransformData(), r.getRawData(), r.getRootResultObject()
18651859
));
18661860
}
18671861
} catch (e: any) {
@@ -1996,13 +1990,11 @@ class ApiGateway {
19961990
res(results[0]);
19971991
} else {
19981992
// We prepare the final json result on native side
1999-
const [transformDataJson, rawData, resultDataJson] = (results as {
2000-
rawData: { getTransformData: () => any, getRawData: () => any };
2001-
}[]).reduce<[Object[], any[], Object[]]>(
1993+
const [transformDataJson, rawData, resultDataJson] = (results as ResultWrapper[]).reduce<[Object[], any[], Object[]]>(
20021994
([transformList, rawList, resultList], r) => {
2003-
transformList.push(r.rawData.getTransformData());
2004-
rawList.push(r.rawData.getRawData());
2005-
resultList.push(cleanupResult(r));
1995+
transformList.push(r.getTransformData());
1996+
rawList.push(r.getRawData());
1997+
resultList.push(r.getRootResultObject());
20061998
return [transformList, rawList, resultList];
20071999
},
20082000
[[], [], []]

packages/cubejs-backend-native/js/ResultWrapper.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ export class ResultWrapper {
1111

1212
private transformData: any;
1313

14+
private rootResultObject: any = {};
15+
1416
public constructor(private readonly nativeReference: any, private readonly jsResult: any = null) {
1517
if (nativeReference) {
1618
this.isNative = true;
@@ -102,4 +104,12 @@ export class ResultWrapper {
102104
public getTransformData(): any {
103105
return this.transformData;
104106
}
107+
108+
public setRootResultObject(obj: any) {
109+
this.rootResultObject = obj;
110+
}
111+
112+
public getRootResultObject(): any {
113+
return this.rootResultObject;
114+
}
105115
}

0 commit comments

Comments
 (0)