groupByClause() { const dimensionsForSelect = this.dimensionsForSelect(); const dimensionColumns = R.flatten(dimensionsForSelect.map(s => s.selectColumns() && s.dimensionSql())) .filter(s => !!s); return dimensionColumns.length ? ` GROUP BY ${dimensionColumns.join(', ')}` : ''; }
groupByClause() { if (this.ungrouped) { return ''; } const dimensionsForSelect = this.dimensionsForSelect(); const dimensionColumns = R.flatten(dimensionsForSelect.map(s => s.selectColumns() && s.dimensionSql())) .filter(s => !!s); return dimensionColumns.length ? ` GROUP BY ${dimensionColumns.join(', ')}` : ''; }
collectRootMeasureToHieararchy() { const notAddedMeasureFilters = R.flatten(this.measureFilters.map(f => f.getMembers())) .filter(f => R.none(m => m.measure === f.measure, this.measures)); return R.fromPairs(this.measures.concat(notAddedMeasureFilters).map(m => { const collectedMeasures = this.collectFrom( [m], this.collectMultipliedMeasures.bind(this), 'collectMultipliedMeasures', this.queryCache ); if (m.expressionName && !collectedMeasures.length) { throw new UserError(`Subquery dimension ${m.expressionName} should reference at least one measure`); } return [m.measure, collectedMeasures]; })); }
dimensionAliasNames() { return R.flatten(this.dimensionsForSelect().map(d => d.aliasName()).filter(d => !!d)); }
fullKeyQueryAggregateMeasures() { const measureToHierarchy = this.collectRootMeasureToHieararchy(); const measuresToRender = (multiplied, cumulative) => R.pipe( R.values, R.flatten, R.filter( m => m.multiplied === multiplied && this.newMeasure(m.measure).isCumulative() === cumulative ), R.map(m => m.measure), R.uniq, R.map(m => this.newMeasure(m)) ); const multipliedMeasures = measuresToRender(true, false)(measureToHierarchy); const regularMeasures = measuresToRender(false, false)(measureToHierarchy); const cumulativeMeasures = R.pipe( R.map(multiplied => R.xprod([multiplied], measuresToRender(multiplied, true)(measureToHierarchy))), R.unnest )([false, true]); return { multipliedMeasures, regularMeasures, cumulativeMeasures }; }
collectFrom(membersToCollectFrom, fn, methodName, cache) { return R.pipe( R.map(f => f.getMembers()), R.flatten, R.map(s => ( (cache || this.compilerCache).cache( ['collectFrom', methodName].concat( s.path() ? [s.path().join('.')] : [s.cube().name, s.expressionName || s.definition().sql] ), () => fn(() => this.traverseSymbol(s)) ) )), R.unnest, R.uniq, R.filter(R.identity) )( membersToCollectFrom ); }
selectAllDimensionsAndMeasures(measures) { return R.flatten( this.dimensionsForSelect().concat(measures).map(s => s.selectColumns()) ).filter(s => !!s).join(', '); }
keysSelect(primaryKeyDimension) { return R.flatten( this.keyDimensions(primaryKeyDimension) .map(s => s.selectColumns()) ).filter(s => !!s).join(', '); }
groupByClause() { const dimensionsForSelect = this.dimensionsForSelect(); const dimensionColumns = R.flatten(dimensionsForSelect.map( s => s.selectColumns() && s.aliasName() )).filter(s => !!s); return dimensionColumns.length ? ` GROUP BY ${dimensionColumns.join(', ')}` : ''; }
let isInputTransactionsUnspent = R.all(R.equals(false), R.flatten(R.map((txInput) => { return R.map( R.pipe(
baseSelect() { return R.flatten(this.forSelect().map(s => s.selectColumns())).filter(s => !!s).join(', '); }
let sumOfInputsAmount = R.sum(R.flatten(R.map(R.compose(R.map(R.prop('amount')), R.prop('inputs'), R.prop('data')), newBlock.transactions))) + Config.MINING_REWARD; let sumOfOutputsAmount = R.sum(R.flatten(R.map(R.compose(R.map(R.prop('amount')), R.prop('outputs'), R.prop('data')), newBlock.transactions))); let listOfTransactionIndexInputs = R.flatten(R.map(R.compose(R.map(R.compose(R.join('|'), R.props(['transaction', 'index']))), R.prop('inputs'), R.prop('data')), newBlock.transactions)); let doubleSpendingList = R.filter((x) => x >= 2, R.map(R.length, R.groupBy(x => x)(listOfTransactionIndexInputs)));
R.compose( R.filter(isScenarioType), R.flatten(), R.map(feature => feature.elements) )(features)
groupByClause() { const dimensionsForSelect = this.dimensionsForSelect(); const dimensionColumns = R.flatten( dimensionsForSelect.map(s => s.selectColumns() && s.dimensionSql()) ).filter(s => !!s); return dimensionColumns.length ? ` GROUP BY ${dimensionColumns.join(", ")}` : ""; }