@@ -14,6 +14,7 @@ import {
1414 getFinalQueryResult ,
1515 getFinalQueryResultArray ,
1616 getFinalQueryResultMulti ,
17+ ResultWrapper ,
1718} from '@cubejs-backend/native' ;
1819import type {
1920 Application as ExpressApplication ,
@@ -120,7 +121,6 @@ function cleanupResult(result) {
120121 return {
121122 ...result ,
122123 rawData : undefined ,
123- transformDataParams : undefined ,
124124 } ;
125125}
126126
@@ -1533,7 +1533,7 @@ class ApiGateway {
15331533 context : RequestContext ,
15341534 normalizedQuery : NormalizedQuery ,
15351535 sqlQuery : any ,
1536- ) {
1536+ ) : Promise < ResultWrapper > {
15371537 const queries = [ {
15381538 ...sqlQuery ,
15391539 query : sqlQuery . sql [ 0 ] ,
@@ -1578,7 +1578,22 @@ class ApiGateway {
15781578 response . total = normalizedQuery . total
15791579 ? Number ( total . data [ 0 ] [ QueryAlias . TOTAL_COUNT ] )
15801580 : undefined ;
1581- return response ;
1581+
1582+ return this . wrapAdapterQueryResultIfNeeded ( response ) ;
1583+ }
1584+
1585+ /**
1586+ * Wraps the adapter's response in unified ResultWrapper if it comes from
1587+ * a common driver (not a Cubestore's one, cause Cubestore Driver internally creates ResultWrapper)
1588+ * @param res Adapter's response
1589+ * @private
1590+ */
1591+ private wrapAdapterQueryResultIfNeeded ( res : any ) : ResultWrapper {
1592+ if ( ! ( res . data instanceof ResultWrapper ) ) {
1593+ res . data = new ResultWrapper ( null , res . data ) ;
1594+ }
1595+
1596+ return res ;
15821597 }
15831598
15841599 /**
@@ -1620,11 +1635,12 @@ class ApiGateway {
16201635 resType : responseType ,
16211636 } ;
16221637
1638+ response . data . setTransformData ( transformDataParams ) ;
1639+
16231640 // We postpone data transformation until the last minute
16241641 return {
16251642 query : normalizedQuery ,
16261643 rawData : response . data ,
1627- transformDataParams,
16281644 lastRefreshTime : response . lastRefreshTime ?. toISOString ( ) ,
16291645 ...(
16301646 getEnv ( 'devMode' ) ||
@@ -1806,8 +1822,8 @@ class ApiGateway {
18061822 // We prepare the final json result on native side
18071823 const [ transformDataJson , rawDataRef , cleanResultList ] = results . reduce < [ Object [ ] , any [ ] , Object [ ] ] > (
18081824 ( [ transformList , rawList , resultList ] , r ) => {
1809- transformList . push ( r . transformDataParams ) ;
1810- rawList . push ( r . rawData . isNative ? r . rawData . getNativeRef ( ) : r . rawData ) ;
1825+ transformList . push ( r . rawData . getTransformData ( ) ) ;
1826+ rawList . push ( r . rawData . getRawData ( ) ) ;
18111827 resultList . push ( cleanupResult ( r ) ) ;
18121828 return [ transformList , rawList , resultList ] ;
18131829 } ,
@@ -1824,8 +1840,9 @@ class ApiGateway {
18241840 } else {
18251841 // We prepare the full final json result on native side
18261842 const r = results [ 0 ] ;
1827- const rawData = r . rawData . isNative ? r . rawData . getNativeRef ( ) : r . rawData ;
1828- res ( await getFinalQueryResult ( r . transformDataParams , rawData , cleanupResult ( r ) ) ) ;
1843+ res ( await getFinalQueryResult (
1844+ r . rawData . getTransformData ( ) , r . rawData . getRawData ( ) , cleanupResult ( r )
1845+ ) ) ;
18291846 }
18301847 } catch ( e : any ) {
18311848 this . handleError ( {
@@ -1960,12 +1977,11 @@ class ApiGateway {
19601977 } else {
19611978 // We prepare the final json result on native side
19621979 const [ transformDataJson , rawData , resultDataJson ] = ( results as {
1963- transformDataParams : any ;
1964- rawData : { isNative : boolean , getNativeRef : ( ) => any } ;
1980+ rawData : { getTransformData : ( ) => any , getRawData : ( ) => any } ;
19651981 } [ ] ) . reduce < [ Object [ ] , any [ ] , Object [ ] ] > (
19661982 ( [ transformList , rawList , resultList ] , r ) => {
1967- transformList . push ( r . transformDataParams ) ;
1968- rawList . push ( r . rawData . isNative ? r . rawData . getNativeRef ( ) : r . rawData ) ;
1983+ transformList . push ( r . rawData . getTransformData ( ) ) ;
1984+ rawList . push ( r . rawData . getRawData ( ) ) ;
19691985 resultList . push ( cleanupResult ( r ) ) ;
19701986 return [ transformList , rawList , resultList ] ;
19711987 } ,
0 commit comments