Skip to content

Commit e75028f

Browse files
committed
encapsulate rootResultObject into ResultWrapper
1 parent 3149c21 commit e75028f

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

@@ -1601,7 +1594,7 @@ class ApiGateway {
16011594
* result object.
16021595
* @internal
16031596
*/
1604-
private async prepareResultTransformData(
1597+
private prepareResultTransformData(
16051598
context: RequestContext,
16061599
queryType: QueryType,
16071600
normalizedQuery: NormalizedQuery,
@@ -1622,7 +1615,9 @@ class ApiGateway {
16221615
},
16231616
response: any,
16241617
responseType?: ResultType,
1625-
) {
1618+
): ResultWrapper {
1619+
const resultWrapper = response.data;
1620+
16261621
const transformDataParams = {
16271622
aliasToMemberNameMap: sqlQuery.aliasNameToMember,
16281623
annotation: {
@@ -1635,12 +1630,8 @@ class ApiGateway {
16351630
resType: responseType,
16361631
};
16371632

1638-
response.data.setTransformData(transformDataParams);
1639-
1640-
// We postpone data transformation until the last minute
1641-
return {
1633+
const resObj = {
16421634
query: normalizedQuery,
1643-
rawData: response.data,
16441635
lastRefreshTime: response.lastRefreshTime?.toISOString(),
16451636
...(
16461637
getEnv('devMode') ||
@@ -1661,6 +1652,11 @@ class ApiGateway {
16611652
slowQuery: Boolean(response.slowQuery),
16621653
total: normalizedQuery.total ? response.total : null,
16631654
};
1655+
1656+
resultWrapper.setTransformData(transformDataParams);
1657+
resultWrapper.setRootResultObject(resObj);
1658+
1659+
return resultWrapper;
16641660
}
16651661

16661662
/**
@@ -1805,15 +1801,13 @@ class ApiGateway {
18051801
queries: results.length,
18061802
queriesWithPreAggregations:
18071803
results.filter(
1808-
(r: any) => Object.keys(
1809-
r.usedPreAggregations || {}
1810-
).length
1804+
(r: any) => Object.keys(r.getRootResultObject().usedPreAggregations).length
18111805
).length,
18121806
// Have to omit because data could be processed natively
18131807
// so it is not known at this point
18141808
// queriesWithData:
18151809
// results.filter((r: any) => r.data?.length).length,
1816-
dbType: results.map(r => r.dbType),
1810+
dbType: results.map(r => r.getRootResultObject().dbType),
18171811
},
18181812
context,
18191813
);
@@ -1822,9 +1816,9 @@ class ApiGateway {
18221816
// We prepare the final json result on native side
18231817
const [transformDataJson, rawDataRef, cleanResultList] = results.reduce<[Object[], any[], Object[]]>(
18241818
([transformList, rawList, resultList], r) => {
1825-
transformList.push(r.rawData.getTransformData());
1826-
rawList.push(r.rawData.getRawData());
1827-
resultList.push(cleanupResult(r));
1819+
transformList.push(r.getTransformData());
1820+
rawList.push(r.getRawData());
1821+
resultList.push(r.getRootResultObject());
18281822
return [transformList, rawList, resultList];
18291823
},
18301824
[[], [], []]
@@ -1841,7 +1835,7 @@ class ApiGateway {
18411835
// We prepare the full final json result on native side
18421836
const r = results[0];
18431837
res(await getFinalQueryResult(
1844-
r.rawData.getTransformData(), r.rawData.getRawData(), cleanupResult(r)
1838+
r.getTransformData(), r.getRawData(), r.getRootResultObject()
18451839
));
18461840
}
18471841
} catch (e: any) {
@@ -1976,13 +1970,11 @@ class ApiGateway {
19761970
res(results[0]);
19771971
} else {
19781972
// We prepare the final json result on native side
1979-
const [transformDataJson, rawData, resultDataJson] = (results as {
1980-
rawData: { getTransformData: () => any, getRawData: () => any };
1981-
}[]).reduce<[Object[], any[], Object[]]>(
1973+
const [transformDataJson, rawData, resultDataJson] = (results as ResultWrapper[]).reduce<[Object[], any[], Object[]]>(
19821974
([transformList, rawList, resultList], r) => {
1983-
transformList.push(r.rawData.getTransformData());
1984-
rawList.push(r.rawData.getRawData());
1985-
resultList.push(cleanupResult(r));
1975+
transformList.push(r.getTransformData());
1976+
rawList.push(r.getRawData());
1977+
resultList.push(r.getRootResultObject());
19861978
return [transformList, rawList, resultList];
19871979
},
19881980
[[], [], []]

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)