public Lattice build(CalciteSchema calciteSchema, QuarkTable quarkTable) { Lattice.Builder latticeBuilder = Lattice.builder(calciteSchema, toString(this.sql)) .auto(false) .algorithm(false); for (QuarkCube.Measure nzMeasure : this.measures) { final Lattice.Measure measure = latticeBuilder.resolveMeasure(nzMeasure.agg, nzMeasure.args); QuarkTile.Measure quarkMeasure = new QuarkTile.Measure(measure, quarkTable.getFieldOrdinal(nzMeasure.cubeColumn)); final Lattice.Column column = latticeBuilder.resolveColumn(dimension.qualifiedCol); QuarkTile.Column quarkColumn = new QuarkTile.Column(column, quarkTable.getFieldOrdinal(dimension.cubeColumn)); latticeBuilder.addTile(new QuarkTile(measures, columns, cubeColumns, quarkTable.getFieldOrdinal(this.groupingColumn), bitSetBuilder.build(), this.tableName, this.alias)); return latticeBuilder.build();
new Lattice.Builder(space, rootSchema, rootNode); latticeBuilder.addMeasure( new Lattice.Measure(measure.aggregate, measure.distinct, measure.name, final MutableNode node = nodes.get(baseColRef.t); final int table = flatNodes.indexOf(node); return latticeBuilder.column(table, baseColRef.c); } else if (colRef instanceof DerivedColRef) { final DerivedColRef derivedColRef = (DerivedColRef) colRef; final String alias = deriveAlias(measure, derivedColRef); return latticeBuilder.expression(derivedColRef.e, alias, derivedColRef.tableAliases()); } else { final DerivedColRef derivedColRef = (DerivedColRef) c; final Lattice.Column expression = latticeBuilder.expression(derivedColRef.e, derivedColRef.alias, derivedColRef.tableAliases()); final Lattice lattice0 = latticeBuilder.build(); final Lattice lattice1 = findMatch(lattice0, rootNode); lattices.add(lattice1);
public Measure resolveMeasure(String aggName, boolean distinct, @Nullable Object args) { final SqlAggFunction agg = resolveAgg(aggName); final ImmutableList<Column> list = resolveArgs(args); return new Measure(agg, distinct, aggName, list); }
new Lattice.Builder(space, rootSchema, mutableNode); for (Lattice.Measure measure : bestMatch.defaultMeasures) { builder.addMeasure(measure.copy(mapper(bestMatch, builder))); builder.addMeasure(measure.copy(mapper(lattice, builder))); final Lattice lattice2 = builder.build(); latticeMap.remove(bestMatch.toString()); obsoleteLatticeMap.put(bestMatch, lattice2);
public void visit(JsonLattice jsonLattice) { try { checkRequiredAttributes(jsonLattice, "name", "sql"); final SchemaPlus schema = currentSchema(); if (!schema.isMutable()) { throw new RuntimeException("Cannot define lattice; parent schema '" + currentSchemaName() + "' is not a SemiMutableSchema"); } CalciteSchema calciteSchema = CalciteSchema.from(schema); Lattice.Builder latticeBuilder = Lattice.builder(calciteSchema, jsonLattice.getSql()) .auto(jsonLattice.auto) .algorithm(jsonLattice.algorithm); if (jsonLattice.rowCountEstimate != null) { latticeBuilder.rowCountEstimate(jsonLattice.rowCountEstimate); } if (jsonLattice.statisticProvider != null) { latticeBuilder.statisticProvider(jsonLattice.statisticProvider); } populateLattice(jsonLattice, latticeBuilder); schema.add(jsonLattice.name, latticeBuilder.build()); } catch (Exception e) { throw new RuntimeException("Error instantiating " + jsonLattice, e); } }
public void visit(JsonLattice jsonLattice) { try { checkRequiredAttributes(jsonLattice, "name", "sql"); final SchemaPlus schema = currentSchema(); if (!schema.isMutable()) { throw new RuntimeException("Cannot define lattice; parent schema '" + currentSchemaName() + "' is not a SemiMutableSchema"); } CalciteSchema calciteSchema = CalciteSchema.from(schema); Lattice.Builder latticeBuilder = Lattice.builder(calciteSchema, jsonLattice.getSql()) .auto(jsonLattice.auto) .algorithm(jsonLattice.algorithm); if (jsonLattice.rowCountEstimate != null) { latticeBuilder.rowCountEstimate(jsonLattice.rowCountEstimate); } if (jsonLattice.statisticProvider != null) { latticeBuilder.statisticProvider(jsonLattice.statisticProvider); } populateLattice(jsonLattice, latticeBuilder); schema.add(jsonLattice.name, latticeBuilder.build()); } catch (Exception e) { throw new RuntimeException("Error instantiating " + jsonLattice, e); } }
public void visit(JsonMeasure jsonMeasure) { checkRequiredAttributes(jsonMeasure, "agg"); assert latticeBuilder != null; final boolean distinct = false; // no distinct field in JsonMeasure.yet final Lattice.Measure measure = latticeBuilder.resolveMeasure(jsonMeasure.agg, distinct, jsonMeasure.args); if (tileBuilder != null) { tileBuilder.addMeasure(measure); } else if (latticeBuilder != null) { latticeBuilder.addMeasure(measure); } else { throw new AssertionError("nowhere to put measure"); } }
public static Builder builder(CalciteSchema calciteSchema, String sql) { return new Builder(calciteSchema, sql); }
static Builder builder(LatticeSpace space, CalciteSchema calciteSchema, String sql) { return new Builder(space, calciteSchema, sql); }
public void visit(JsonMeasure jsonMeasure) { checkRequiredAttributes(jsonMeasure, "agg"); assert latticeBuilder != null; final Lattice.Measure measure = latticeBuilder.resolveMeasure(jsonMeasure.agg, jsonMeasure.args); if (tileBuilder != null) { tileBuilder.addMeasure(measure); } else if (latticeBuilder != null) { latticeBuilder.addMeasure(measure); } else { throw new AssertionError("nowhere to put measure"); } }
public void visit(JsonTile jsonTile) { assert tileBuilder == null; tileBuilder = Lattice.Tile.builder(); for (JsonMeasure jsonMeasure : jsonTile.measures) { jsonMeasure.accept(this); } for (Object dimension : jsonTile.dimensions) { final Lattice.Column column = latticeBuilder.resolveColumn(dimension); tileBuilder.addDimension(column); } latticeBuilder.addTile(tileBuilder.build()); tileBuilder = null; }
private void validateCubeLatticeFilter(Lattice.Builder latticeBuilder) { if (latticeBuilder.filter != null) { ImmutableBitSet rCols = RelOptUtil.InputFinder.bits(latticeBuilder.filter); Set<Integer> dimSet = new HashSet<>(); for (Dimension dimension : dimensions) { dimSet.add(latticeBuilder.resolveColumn(dimension.qualifiedCol).ordinal); } ImmutableBitSet dims = ImmutableBitSet.of(dimSet); if (!dims.contains(rCols)) { throw new RuntimeException("Cube filter is only allowed on dimensions"); } } }
public void visit(JsonTile jsonTile) { assert tileBuilder == null; tileBuilder = Lattice.Tile.builder(); for (JsonMeasure jsonMeasure : jsonTile.measures) { jsonMeasure.accept(this); } for (Object dimension : jsonTile.dimensions) { final Lattice.Column column = latticeBuilder.resolveColumn(dimension); tileBuilder.addDimension(column); } latticeBuilder.addTile(tileBuilder.build()); tileBuilder = null; }
public Measure resolveMeasure(String aggName, Object args) { final SqlAggFunction agg = resolveAgg(aggName); final ImmutableList<Column> list = resolveArgs(args); return new Measure(agg, list); }