Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.hazelcast.org.apache.calcite.rel.metadata.RelMdNodeTypes Maven / Gradle / Ivy
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you under the Apache License, Version 2.0
* (the "License"); you may not use this file except in com.hazelcast.com.liance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.com.hazelcast.org.licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.hazelcast.org.apache.calcite.rel.metadata;
import com.hazelcast.org.apache.calcite.plan.hep.HepRelVertex;
import com.hazelcast.org.apache.calcite.plan.volcano.RelSubset;
import com.hazelcast.org.apache.calcite.rel.RelNode;
import com.hazelcast.org.apache.calcite.rel.core.Aggregate;
import com.hazelcast.org.apache.calcite.rel.core.Calc;
import com.hazelcast.org.apache.calcite.rel.core.Correlate;
import com.hazelcast.org.apache.calcite.rel.core.Exchange;
import com.hazelcast.org.apache.calcite.rel.core.Filter;
import com.hazelcast.org.apache.calcite.rel.core.Intersect;
import com.hazelcast.org.apache.calcite.rel.core.Join;
import com.hazelcast.org.apache.calcite.rel.core.Match;
import com.hazelcast.org.apache.calcite.rel.core.Minus;
import com.hazelcast.org.apache.calcite.rel.core.Project;
import com.hazelcast.org.apache.calcite.rel.core.Sample;
import com.hazelcast.org.apache.calcite.rel.core.Sort;
import com.hazelcast.org.apache.calcite.rel.core.TableModify;
import com.hazelcast.org.apache.calcite.rel.core.TableScan;
import com.hazelcast.org.apache.calcite.rel.core.Union;
import com.hazelcast.org.apache.calcite.rel.core.Values;
import com.hazelcast.org.apache.calcite.rel.core.Window;
import com.hazelcast.org.apache.calcite.util.BuiltInMethod;
import com.hazelcast.org.apache.calcite.util.Util;
import com.hazelcast.com.google.com.hazelcast.com.on.collect.ArrayListMultimap;
import com.hazelcast.com.google.com.hazelcast.com.on.collect.Multimap;
/**
* RelMdNodeTypeCount supplies a default implementation of
* {@link RelMetadataQuery#getNodeTypes} for the standard logical algebra.
*/
public class RelMdNodeTypes
implements MetadataHandler {
public static final RelMetadataProvider SOURCE =
ReflectiveRelMetadataProvider.reflectiveSource(
BuiltInMethod.NODE_TYPES.method, new RelMdNodeTypes());
//~ Methods ----------------------------------------------------------------
public MetadataDef getDef() {
return BuiltInMetadata.NodeTypes.DEF;
}
/** Catch-all implementation for
* {@link BuiltInMetadata.NodeTypes#getNodeTypes()},
* invoked using reflection.
*
* @see com.hazelcast.org.apache.calcite.rel.metadata.RelMetadataQuery#getNodeTypes(RelNode)
*/
public Multimap, RelNode> getNodeTypes(RelNode rel,
RelMetadataQuery mq) {
return getNodeTypes(rel, RelNode.class, mq);
}
public Multimap, RelNode> getNodeTypes(HepRelVertex rel,
RelMetadataQuery mq) {
return mq.getNodeTypes(rel.getCurrentRel());
}
public Multimap, RelNode> getNodeTypes(RelSubset rel,
RelMetadataQuery mq) {
return mq.getNodeTypes(Util.first(rel.getBest(), rel.getOriginal()));
}
public Multimap, RelNode> getNodeTypes(Union rel,
RelMetadataQuery mq) {
return getNodeTypes(rel, Union.class, mq);
}
public Multimap, RelNode> getNodeTypes(Intersect rel,
RelMetadataQuery mq) {
return getNodeTypes(rel, Intersect.class, mq);
}
public Multimap, RelNode> getNodeTypes(Minus rel,
RelMetadataQuery mq) {
return getNodeTypes(rel, Minus.class, mq);
}
public Multimap, RelNode> getNodeTypes(Filter rel,
RelMetadataQuery mq) {
return getNodeTypes(rel, Filter.class, mq);
}
public Multimap, RelNode> getNodeTypes(Calc rel,
RelMetadataQuery mq) {
return getNodeTypes(rel, Calc.class, mq);
}
public Multimap, RelNode> getNodeTypes(Project rel,
RelMetadataQuery mq) {
return getNodeTypes(rel, Project.class, mq);
}
public Multimap, RelNode> getNodeTypes(Sort rel,
RelMetadataQuery mq) {
return getNodeTypes(rel, Sort.class, mq);
}
public Multimap, RelNode> getNodeTypes(Join rel,
RelMetadataQuery mq) {
return getNodeTypes(rel, Join.class, mq);
}
public Multimap, RelNode> getNodeTypes(Aggregate rel,
RelMetadataQuery mq) {
return getNodeTypes(rel, Aggregate.class, mq);
}
public Multimap, RelNode> getNodeTypes(TableScan rel,
RelMetadataQuery mq) {
return getNodeTypes(rel, TableScan.class, mq);
}
public Multimap, RelNode> getNodeTypes(Values rel,
RelMetadataQuery mq) {
return getNodeTypes(rel, Values.class, mq);
}
public Multimap, RelNode> getNodeTypes(TableModify rel,
RelMetadataQuery mq) {
return getNodeTypes(rel, TableModify.class, mq);
}
public Multimap, RelNode> getNodeTypes(Exchange rel,
RelMetadataQuery mq) {
return getNodeTypes(rel, Exchange.class, mq);
}
public Multimap, RelNode> getNodeTypes(Sample rel,
RelMetadataQuery mq) {
return getNodeTypes(rel, Sample.class, mq);
}
public Multimap, RelNode> getNodeTypes(Correlate rel,
RelMetadataQuery mq) {
return getNodeTypes(rel, Correlate.class, mq);
}
public Multimap, RelNode> getNodeTypes(Window rel,
RelMetadataQuery mq) {
return getNodeTypes(rel, Window.class, mq);
}
public Multimap, RelNode> getNodeTypes(Match rel,
RelMetadataQuery mq) {
return getNodeTypes(rel, Match.class, mq);
}
private static Multimap, RelNode> getNodeTypes(RelNode rel,
Class c, RelMetadataQuery mq) {
final Multimap, RelNode> nodeTypeCount = ArrayListMultimap.create();
for (RelNode input : rel.getInputs()) {
Multimap, RelNode> partialNodeTypeCount =
mq.getNodeTypes(input);
if (partialNodeTypeCount == null) {
return null;
}
nodeTypeCount.putAll(partialNodeTypeCount);
}
nodeTypeCount.put(c, rel);
return nodeTypeCount;
}
}