@@ -148,7 +148,8 @@ export class PreAggregations {
148148
149149 const tableName = this . preAggregationTableName ( cube , preAggregationName , preAggregation ) ;
150150 const invalidateKeyQueries = this . query . preAggregationInvalidateKeyQueries ( cube , preAggregation ) ;
151- const partitionInvalidateKeyQueries = this . query . partitionInvalidateKeyQueries && this . query . partitionInvalidateKeyQueries ( cube , preAggregation ) ;
151+ const queryForSqlEvaluation = this . query . preAggregationQueryForSqlEvaluation ( cube , preAggregation ) ;
152+ const partitionInvalidateKeyQueries = queryForSqlEvaluation . partitionInvalidateKeyQueries && queryForSqlEvaluation . partitionInvalidateKeyQueries ( cube , preAggregation ) ;
152153
153154 const matchedTimeDimension =
154155 preAggregation . partitionGranularity &&
@@ -161,11 +162,10 @@ export class PreAggregations {
161162 td . isDateOperator ( ) &&
162163 td . camelizeOperator === 'inDateRange' // TODO support all date operators
163164 ) ;
164- const queryForSqlEvaluation = this . query . preAggregationQueryForSqlEvaluation ( cube , preAggregation ) ;
165165
166166 const uniqueKeyColumnsDefault = ( ) => null ;
167167 const uniqueKeyColumns = ( {
168- rollup : ( ) => this . query . preAggregationQueryForSqlEvaluation ( cube , preAggregation ) . dimensionColumns ( ) ,
168+ rollup : ( ) => queryForSqlEvaluation . dimensionColumns ( ) ,
169169 originalSql : ( ) => preAggregation . uniqueKeyColumns || null
170170 } [ preAggregation . type ] || uniqueKeyColumnsDefault ) ( ) ;
171171
@@ -180,18 +180,18 @@ export class PreAggregations {
180180 partitionInvalidateKeyQueries,
181181 type : preAggregation . type ,
182182 external : preAggregation . external ,
183- previewSql : this . query . preAggregationPreviewSql ( tableName ) ,
184- preAggregationsSchema : this . query . preAggregationSchema ( ) ,
185- loadSql : this . query . preAggregationLoadSql ( cube , preAggregation , tableName ) ,
186- sql : this . query . preAggregationSql ( cube , preAggregation ) ,
183+ previewSql : queryForSqlEvaluation . preAggregationPreviewSql ( tableName ) ,
184+ preAggregationsSchema : queryForSqlEvaluation . preAggregationSchema ( ) ,
185+ loadSql : queryForSqlEvaluation . preAggregationLoadSql ( cube , preAggregation , tableName ) ,
186+ sql : queryForSqlEvaluation . preAggregationSql ( cube , preAggregation ) ,
187187 uniqueKeyColumns,
188188 aggregationsColumns,
189189 dataSource : queryForSqlEvaluation . dataSource ,
190190 // in fact we can reference preAggregation.granularity however accessing timeDimensions is more strict and consistent
191191 granularity : references . timeDimensions [ 0 ] ?. granularity ,
192192 partitionGranularity : preAggregation . partitionGranularity ,
193193 updateWindowSeconds : preAggregation . refreshKey && preAggregation . refreshKey . updateWindow &&
194- this . query . parseSecondDuration ( preAggregation . refreshKey . updateWindow ) ,
194+ queryForSqlEvaluation . parseSecondDuration ( preAggregation . refreshKey . updateWindow ) ,
195195 preAggregationStartEndQueries :
196196 ( preAggregation . partitionGranularity || references . timeDimensions [ 0 ] ?. granularity ) &&
197197 this . refreshRangeQuery ( ) . preAggregationStartEndQueries ( cube , preAggregation ) ,
@@ -208,7 +208,7 @@ export class PreAggregations {
208208 const indexName = this . preAggregationTableName ( cube , `${ foundPreAggregation . sqlAlias || preAggregationName } _${ index } ` , preAggregation , true ) ;
209209 return {
210210 indexName,
211- sql : this . query . indexSql (
211+ sql : queryForSqlEvaluation . indexSql (
212212 cube ,
213213 preAggregation ,
214214 preAggregation . indexes [ index ] ,
@@ -226,11 +226,11 @@ export class PreAggregations {
226226 return {
227227 indexName,
228228 type : preAggregation . indexes [ index ] . type ,
229- columns : this . query . evaluateIndexColumns ( cube , preAggregation . indexes [ index ] )
229+ columns : queryForSqlEvaluation . evaluateIndexColumns ( cube , preAggregation . indexes [ index ] )
230230 } ;
231231 }
232232 ) ,
233- readOnly : preAggregation . readOnly || this . query . preAggregationReadOnly ( cube , preAggregation ) ,
233+ readOnly : preAggregation . readOnly || queryForSqlEvaluation . preAggregationReadOnly ( cube , preAggregation ) ,
234234 streamOffset : preAggregation . streamOffset ,
235235 unionWithSourceData : preAggregation . unionWithSourceData ,
236236 rollupLambdaId : preAggregation . rollupLambdaId ,
@@ -978,6 +978,7 @@ export class PreAggregations {
978978
979979 rollupPreAggregationQuery ( cube , aggregation ) {
980980 const references = this . evaluateAllReferences ( cube , aggregation ) ;
981+ const cubeQuery = this . query . newSubQueryForCube ( cube , { } ) ;
981982 return this . query . newSubQueryForCube (
982983 cube ,
983984 {
@@ -987,6 +988,8 @@ export class PreAggregations {
987988 timeDimensions : this . mergePartitionTimeDimensions ( references , aggregation . partitionTimeDimensions ) ,
988989 preAggregationQuery : true ,
989990 useOriginalSqlPreAggregationsInPreAggregation : aggregation . useOriginalSqlPreAggregations ,
991+ ungrouped : cubeQuery . preAggregationAllowUngroupingWithPrimaryKey ( cube , aggregation ) &&
992+ ! ! references . dimensions . find ( d => this . query . cubeEvaluator . dimensionByPath ( d ) . primaryKey )
990993 }
991994 ) ;
992995 }
0 commit comments