async query(query, values, options) { const data = await this.runQueryJob({ query, params: values, parameterMode: 'positional', useLegacySql: false }, options); return data[0] && data[0].map( row => R.map(value => (value && value.value && typeof value.value === 'string' ? value.value : value), row) ); }
keysSelect(primaryKeyDimension) { return R.flatten( this.keyDimensions(primaryKeyDimension) .map(s => s.selectColumns()) ).filter(s => !!s).join(', '); }
collectSubQueryDimensionsFor(fn) { const context = { subQueryDimensions: [] }; this.evaluateSymbolSqlWithContext( fn, context ); return R.uniq(context.subQueryDimensions); }
export default function useDeepCompareMemoize(value) { const ref = useRef([]); if (!equals(value, ref.current)) { ref.current = value; } return ref.current; }
async getQueryStageState(onlyKeys) { let request = this.redisClient.multi() .zrange([this.activeRedisKey(), 0, -1]) .zrange([this.toProcessRedisKey(), 0, -1]); if (!onlyKeys) { request = request.hgetall(this.queriesDefKey()); } const [active, toProcess, allQueryDefs] = await request.execAsync(); return [active, toProcess, R.map(q => JSON.parse(q), allQueryDefs || {})]; }
externalPreAggregationQuery() { if (!this.options.preAggregationQuery && this.externalQueryClass) { const preAggregationForQuery = this.preAggregations.findPreAggregationForQuery(); if (preAggregationForQuery && preAggregationForQuery.preAggregation.external) { return true; } const preAggregationsDescription = this.preAggregations.preAggregationsDescription(); return preAggregationsDescription.length && R.all((p) => p.external, preAggregationsDescription); } return false; }
static hasCumulativeMeasures(query) { const measures = (query.measures.concat(query.measureFilters)); const collectLeafMeasures = query.collectLeafMeasures.bind(query); return R.pipe( R.map(m => query.collectFrom([m], collectLeafMeasures, 'collectLeafMeasures')), R.unnest, R.uniq, R.map(p => query.newMeasure(p)), R.any(m => m.isCumulative()) )(measures); }
async readModules() { const packageJson = JSON.parse(await fs.readFile("package.json", "utf-8")); const files = await Promise.all( Object.keys(packageJson.dependencies).map(async module => { if (R.endsWith("-schema", module)) { return this.readModuleFiles(path.join("node_modules", module)); } return []; }) ); return files.reduce((a, b) => a.concat(b)); }
get aliasNameToMember() { return R.fromPairs( this.measures.map(m => [m.unescapedAliasName(), m.measure]).concat( this.dimensions.map(m => [m.unescapedAliasName(), m.dimension]) ).concat( this.timeDimensions.filter(m => !!m.granularity) .map(m => [m.unescapedAliasName(), `${m.dimension}.${m.granularity}`]) ) ); }
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() { 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(', ')}` : ''; }