compassql
Version:
CompassQL visualization query language
32 lines (29 loc) • 984 B
text/typescript
import {DEFAULT_QUERY_CONFIG, QueryConfig} from './config';
import {generate} from './generate';
import {SpecQueryModelGroup} from './model';
import {nest} from './nest';
import {normalize} from './query/normalize';
import {Query} from './query/query';
import {rank} from './ranking/ranking';
import {Schema} from './schema';
export function recommend(q: Query, schema: Schema, config?: QueryConfig): {query: Query, result: SpecQueryModelGroup} {
// 1. Normalize non-nested `groupBy` to always have `groupBy` inside `nest`
// and merge config with the following precedence
// query.config > config > DEFAULT_QUERY_CONFIG
q = {
...normalize(q),
config: {
...DEFAULT_QUERY_CONFIG,
...config,
...q.config
}
};
// 2. Generate
const answerSet = generate(q.spec, schema, q.config);
const nestedAnswerSet = nest(answerSet, q.nest);
const result = rank(nestedAnswerSet, q, schema, 0);
return {
query: q,
result: result
};
}