Skip to content

Commit e3a790d

Browse files
olivrleeAnthrino
authored andcommitted
Revert "[CALCITE-4496] Measure columns ("SELECT ... AS MEASURE")"
This reverts commit 66919e4.
1 parent 986ce2f commit e3a790d

File tree

58 files changed

+164
-3803
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+164
-3803
lines changed

core/src/main/codegen/templates/Parser.jj

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1945,19 +1945,13 @@ SqlInsert WhenNotMatchedClause(SqlNode table) :
19451945
*/
19461946
void AddSelectItem(List<SqlNode> list) :
19471947
{
1948-
SqlNode e;
1948+
final SqlNode e;
19491949
final SqlIdentifier id;
19501950
}
19511951
{
19521952
e = SelectExpression()
19531953
(
1954-
[ <AS>
1955-
[ <MEASURE> {
1956-
e = SqlInternalOperators.MEASURE.createCall(
1957-
e.getParserPosition(), e);
1958-
}
1959-
]
1960-
]
1954+
[ <AS> ]
19611955
(
19621956
id = SimpleIdentifier()
19631957
|
@@ -8361,7 +8355,6 @@ SqlPostfixOperator PostfixRowOperator() :
83618355
| < MATCH_RECOGNIZE: "MATCH_RECOGNIZE">
83628356
| < MAX: "MAX" >
83638357
| < MAXVALUE: "MAXVALUE" >
8364-
| < MEASURE: "MEASURE" >
83658358
| < MEASURES: "MEASURES" >
83668359
| < MEMBER: "MEMBER" >
83678360
| < MERGE: "MERGE" > { beforeTableName(); }

core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableProjectRule.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import org.apache.calcite.rel.convert.ConverterRule;
2323
import org.apache.calcite.rel.core.Project;
2424
import org.apache.calcite.rel.logical.LogicalProject;
25-
import org.apache.calcite.rex.RexUtil;
2625

2726
/**
2827
* Rule to convert a {@link LogicalProject} to an {@link EnumerableProject}.
@@ -34,8 +33,7 @@ class EnumerableProjectRule extends ConverterRule {
3433
/** Default configuration. */
3534
static final Config DEFAULT_CONFIG = Config.INSTANCE
3635
.as(Config.class)
37-
.withConversion(LogicalProject.class,
38-
p -> !p.containsOver() && !RexUtil.M2V_FINDER.inProject(p),
36+
.withConversion(LogicalProject.class, p -> !p.containsOver(),
3937
Convention.NONE, EnumerableConvention.INSTANCE,
4038
"EnumerableProjectRule")
4139
.withRuleFactory(EnumerableProjectRule::new);

core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java

Lines changed: 18 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,6 @@
9999
import org.apache.calcite.sql.parser.SqlParserImplFactory;
100100
import org.apache.calcite.sql.parser.impl.SqlParserImpl;
101101
import org.apache.calcite.sql.type.ExtraSqlTypes;
102-
import org.apache.calcite.sql.type.MeasureSqlType;
103102
import org.apache.calcite.sql.type.SqlTypeName;
104103
import org.apache.calcite.sql.util.SqlOperatorTables;
105104
import org.apache.calcite.sql.validate.SqlConformance;
@@ -131,7 +130,6 @@
131130
import java.util.Map;
132131
import java.util.Set;
133132
import java.util.function.Supplier;
134-
import java.util.function.UnaryOperator;
135133

136134
import static org.apache.calcite.linq4j.Nullness.castNonNull;
137135
import static org.apache.calcite.util.Static.RESOURCE;
@@ -177,22 +175,21 @@ public CalcitePrepareImpl() {
177175

178176
@Override public ParseResult parse(
179177
Context context, String sql) {
180-
return parse_(context, sql, false, false, false, false);
178+
return parse_(context, sql, false, false, false);
181179
}
182180

183181
@Override public ConvertResult convert(Context context, String sql) {
184-
return (ConvertResult) parse_(context, sql, true, false, false, false);
182+
return (ConvertResult) parse_(context, sql, true, false, false);
185183
}
186184

187-
@Override public AnalyzeViewResult analyzeView(Context context, String sql,
188-
boolean fail) {
189-
return (AnalyzeViewResult) parse_(context, sql, true, true, fail, true);
185+
@Override public AnalyzeViewResult analyzeView(Context context, String sql, boolean fail) {
186+
return (AnalyzeViewResult) parse_(context, sql, true, true, fail);
190187
}
191188

192189
/** Shared implementation for {@link #parse}, {@link #convert} and
193190
* {@link #analyzeView}. */
194191
private ParseResult parse_(Context context, String sql, boolean convert,
195-
boolean analyze, boolean fail, boolean embeddedQuery) {
192+
boolean analyze, boolean fail) {
196193
final JavaTypeFactory typeFactory = context.getTypeFactory();
197194
CalciteCatalogReader catalogReader =
198195
new CalciteCatalogReader(
@@ -207,9 +204,7 @@ private ParseResult parse_(Context context, String sql, boolean convert,
207204
} catch (SqlParseException e) {
208205
throw new RuntimeException("parse failed", e);
209206
}
210-
final SqlValidator validator =
211-
createSqlValidator(context, catalogReader,
212-
c -> c.withEmbeddedQuery(embeddedQuery));
207+
final SqlValidator validator = createSqlValidator(context, catalogReader);
213208
SqlNode sqlNode1 = validator.validate(sqlNode);
214209
if (convert) {
215210
return convert_(
@@ -665,9 +660,7 @@ <T> CalciteSignature<T> prepare2_(
665660
Meta.StatementType.OTHER_DDL);
666661
}
667662

668-
final SqlValidator validator =
669-
preparingStmt.createSqlValidator(catalogReader,
670-
UnaryOperator.identity());
663+
final SqlValidator validator = preparingStmt.createSqlValidator(catalogReader);
671664

672665
preparedResult =
673666
preparingStmt.prepareSql(sqlNode, Object.class, validator, true);
@@ -741,8 +734,7 @@ <T> CalciteSignature<T> prepare2_(
741734
}
742735

743736
private static SqlValidator createSqlValidator(Context context,
744-
CalciteCatalogReader catalogReader,
745-
UnaryOperator<SqlValidator.Config> configTransform) {
737+
CalciteCatalogReader catalogReader) {
746738
final SqlOperatorTable opTab0 =
747739
context.config().fun(SqlOperatorTable.class,
748740
SqlStdOperatorTable.instance());
@@ -752,13 +744,11 @@ private static SqlValidator createSqlValidator(Context context,
752744
final SqlOperatorTable opTab = SqlOperatorTables.chain(list);
753745
final JavaTypeFactory typeFactory = context.getTypeFactory();
754746
final CalciteConnectionConfig connectionConfig = context.config();
755-
final SqlValidator.Config config =
756-
configTransform.apply(
757-
SqlValidator.Config.DEFAULT
758-
.withLenientOperatorLookup(connectionConfig.lenientOperatorLookup())
759-
.withConformance(connectionConfig.conformance())
760-
.withDefaultNullCollation(connectionConfig.defaultNullCollation())
761-
.withIdentifierExpansion(true));
747+
final SqlValidator.Config config = SqlValidator.Config.DEFAULT
748+
.withLenientOperatorLookup(connectionConfig.lenientOperatorLookup())
749+
.withConformance(connectionConfig.conformance())
750+
.withDefaultNullCollation(connectionConfig.defaultNullCollation())
751+
.withIdentifierExpansion(true);
762752
return new CalciteSqlValidator(opTab, catalogReader, typeFactory,
763753
config);
764754
}
@@ -811,13 +801,7 @@ private static ColumnMetaData metaData(JavaTypeFactory typeFactory, int ordinal,
811801

812802
private static ColumnMetaData.AvaticaType avaticaType(JavaTypeFactory typeFactory,
813803
RelDataType type, @Nullable RelDataType fieldType) {
814-
final String typeName;
815-
if (type instanceof MeasureSqlType) {
816-
type = requireNonNull(type.getMeasureElementType(), "measure type");
817-
typeName = "MEASURE<" + getTypeName(type) + ">";
818-
} else {
819-
typeName = getTypeName(type);
820-
}
804+
final String typeName = getTypeName(type);
821805
if (type.getComponentType() != null) {
822806
final ColumnMetaData.AvaticaType componentType =
823807
avaticaType(typeFactory, type.getComponentType(), null);
@@ -1124,8 +1108,7 @@ private PreparedResult prepare_(Supplier<RelNode> fn,
11241108
// View may have different schema path than current connection.
11251109
final CatalogReader catalogReader =
11261110
this.catalogReader.withSchemaPath(schemaPath);
1127-
SqlValidator validator =
1128-
createSqlValidator(catalogReader, c -> c.withEmbeddedQuery(true));
1111+
SqlValidator validator = createSqlValidator(catalogReader);
11291112
final SqlToRelConverter.Config config =
11301113
SqlToRelConverter.config().withTrimUnusedFields(true);
11311114
SqlToRelConverter sqlToRelConverter =
@@ -1137,16 +1120,14 @@ private PreparedResult prepare_(Supplier<RelNode> fn,
11371120
return root;
11381121
}
11391122

1140-
protected SqlValidator createSqlValidator(CatalogReader catalogReader,
1141-
UnaryOperator<SqlValidator.Config> configTransform) {
1123+
protected SqlValidator createSqlValidator(CatalogReader catalogReader) {
11421124
return CalcitePrepareImpl.createSqlValidator(context,
1143-
(CalciteCatalogReader) catalogReader, configTransform);
1125+
(CalciteCatalogReader) catalogReader);
11441126
}
11451127

11461128
@Override protected SqlValidator getSqlValidator() {
11471129
if (sqlValidator == null) {
1148-
sqlValidator =
1149-
createSqlValidator(catalogReader, UnaryOperator.identity());
1130+
sqlValidator = createSqlValidator(catalogReader);
11501131
}
11511132
return sqlValidator;
11521133
}

core/src/main/java/org/apache/calcite/rel/RelNodes.java

Lines changed: 0 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,9 @@
1616
*/
1717
package org.apache.calcite.rel;
1818

19-
import org.apache.calcite.rel.core.Aggregate;
20-
import org.apache.calcite.rel.core.AggregateCall;
21-
import org.apache.calcite.rel.core.Filter;
22-
import org.apache.calcite.rel.core.Join;
23-
import org.apache.calcite.rel.core.Project;
24-
import org.apache.calcite.rex.RexNode;
25-
import org.apache.calcite.rex.RexUtil;
26-
import org.apache.calcite.util.Util;
27-
2819
import com.google.common.collect.Ordering;
2920

30-
import org.checkerframework.checker.nullness.qual.Nullable;
31-
3221
import java.util.Comparator;
33-
import java.util.function.BiConsumer;
34-
import java.util.function.Predicate;
3522

3623
/**
3724
* Utilities concerning relational expressions.
@@ -62,65 +49,6 @@ public static int compareRels(RelNode[] rels0, RelNode[] rels1) {
6249
return 0;
6350
}
6451

65-
/** Returns whether a tree of {@link RelNode}s contains a match for a
66-
* {@link RexNode} finder. */
67-
public static boolean contains(RelNode rel,
68-
Predicate<AggregateCall> aggPredicate, RexUtil.RexFinder finder) {
69-
try {
70-
findRex(rel, finder, aggPredicate, (relNode, rexNode) -> {
71-
throw Util.FoundOne.NULL;
72-
});
73-
return false;
74-
} catch (Util.FoundOne e) {
75-
return true;
76-
}
77-
}
78-
79-
/** Searches for expressions in a tree of {@link RelNode}s. */
80-
// TODO: a new method RelNode.accept(RexVisitor, BiConsumer), with similar
81-
// overrides to RelNode.accept(RexShuttle), would be better.
82-
public static void findRex(RelNode rel, RexUtil.RexFinder finder,
83-
Predicate<AggregateCall> aggPredicate,
84-
BiConsumer<RelNode, @Nullable RexNode> consumer) {
85-
if (rel instanceof Filter) {
86-
Filter filter = (Filter) rel;
87-
try {
88-
filter.getCondition().accept(finder);
89-
} catch (Util.FoundOne e) {
90-
consumer.accept(filter, (RexNode) e.getNode());
91-
}
92-
}
93-
if (rel instanceof Project) {
94-
Project project = (Project) rel;
95-
for (RexNode node : project.getProjects()) {
96-
try {
97-
node.accept(finder);
98-
} catch (Util.FoundOne e) {
99-
consumer.accept(project, (RexNode) e.getNode());
100-
}
101-
}
102-
}
103-
if (rel instanceof Join) {
104-
Join join = (Join) rel;
105-
try {
106-
join.getCondition().accept(finder);
107-
} catch (Util.FoundOne e) {
108-
consumer.accept(join, (RexNode) e.getNode());
109-
}
110-
}
111-
if (rel instanceof Aggregate) {
112-
Aggregate aggregate = (Aggregate) rel;
113-
for (AggregateCall aggregateCall : aggregate.getAggCallList()) {
114-
if (aggPredicate.test(aggregateCall)) {
115-
consumer.accept(aggregate, null);
116-
}
117-
}
118-
}
119-
for (RelNode input : rel.getInputs()) {
120-
findRex(input, finder, aggPredicate, consumer);
121-
}
122-
}
123-
12452
/** Arbitrary stable comparator for {@link RelNode}s. */
12553
private static class RelNodeComparator implements Comparator<RelNode> {
12654
@Override public int compare(RelNode o1, RelNode o2) {

core/src/main/java/org/apache/calcite/rel/core/Calc.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,9 +153,6 @@ public final boolean containsOver() {
153153
if (!program.isNormalized(litmus, getCluster().getRexBuilder())) {
154154
return litmus.fail(null);
155155
}
156-
if (RexUtil.M2V_FINDER.inProgram(program)) {
157-
return litmus.fail("program contains M2V");
158-
}
159156
return litmus.succeed();
160157
}
161158

core/src/main/java/org/apache/calcite/rel/metadata/BuiltInMetadata.java

Lines changed: 0 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,10 @@
2323
import org.apache.calcite.rel.RelCollation;
2424
import org.apache.calcite.rel.RelDistribution;
2525
import org.apache.calcite.rel.RelNode;
26-
import org.apache.calcite.rel.type.RelDataTypeFactory;
27-
import org.apache.calcite.rex.RexBuilder;
2826
import org.apache.calcite.rex.RexNode;
2927
import org.apache.calcite.rex.RexTableInputRef;
3028
import org.apache.calcite.rex.RexTableInputRef.RelTableRef;
3129
import org.apache.calcite.sql.SqlExplainLevel;
32-
import org.apache.calcite.tools.RelBuilder;
3330
import org.apache.calcite.util.BuiltInMethod;
3431
import org.apache.calcite.util.ImmutableBitSet;
3532

@@ -840,64 +837,7 @@ interface Handler extends MetadataHandler<Memory> {
840837
@Override default MetadataDef<Memory> getDef() {
841838
return DEF;
842839
}
843-
}
844-
}
845-
846-
/** Metadata about whether a column is a measure and, if so, what is the
847-
* expression to evaluate that measure in the current context. */
848-
public interface Measure extends Metadata {
849-
MetadataDef<Measure> DEF =
850-
MetadataDef.of(Measure.class, Measure.Handler.class,
851-
BuiltInMethod.MEASURE_EXPAND.method,
852-
BuiltInMethod.IS_MEASURE.method);
853-
854-
/** Returns whether a given column is a measure.
855-
*
856-
* @param column Column ordinal (0-based) */
857-
Boolean isMeasure(int column);
858-
859-
/** Expands a measure to an expression.
860-
*
861-
* @param column Column ordinal (0-based)
862-
* @param context Evaluation context */
863-
RexNode expand(int column, Context context);
864-
865-
/** Handler API. */
866-
interface Handler extends MetadataHandler<Measure> {
867-
Boolean isMeasure(RelNode r, RelMetadataQuery mq, int column);
868-
869-
RexNode expand(RelNode r, RelMetadataQuery mq, int column,
870-
Context context);
871-
872-
@Override default MetadataDef<Measure> getDef() {
873-
return DEF;
874-
}
875-
}
876-
877-
/** Context for a use of a measure at a call site. */
878-
interface Context {
879-
RelBuilder getRelBuilder();
880-
881-
default RexBuilder getRexBuilder() {
882-
return getRelBuilder().getRexBuilder();
883-
}
884-
885-
default RelDataTypeFactory getTypeFactory() {
886-
return getRelBuilder().getTypeFactory();
887-
}
888840

889-
/** Returns a (conjunctive) list of filters.
890-
*
891-
* <p>The filters represent the "filter context"
892-
* and will become the {@code WHERE} clause of the subquery.
893-
*
894-
* <p>If the relation defining the measure has {@code N} dimensions then
895-
* the dimensions can be referenced using
896-
* {@link org.apache.calcite.rex.RexInputRef} 0 through N-1. */
897-
List<RexNode> getFilters(RelBuilder b);
898-
899-
/** Returns the number of dimension columns. */
900-
int getDimensionCount();
901841
}
902842
}
903843

core/src/main/java/org/apache/calcite/rel/metadata/DefaultRelMetadataProvider.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ protected DefaultRelMetadataProvider() {
5656
RelMdParallelism.SOURCE,
5757
RelMdDistribution.SOURCE,
5858
RelMdLowerBoundCost.SOURCE,
59-
RelMdMeasure.SOURCE,
6059
RelMdMemory.SOURCE,
6160
RelMdDistinctRowCount.SOURCE,
6261
RelMdSelectivity.SOURCE,

0 commit comments

Comments
 (0)