Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
import org.apache.doris.nereids.trees.expressions.Alias;
import org.apache.doris.nereids.trees.expressions.ExprId;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.Match;
import org.apache.doris.nereids.trees.expressions.NamedExpression;
import org.apache.doris.nereids.trees.expressions.Slot;
import org.apache.doris.nereids.trees.expressions.SlotNotFromChildren;
Expand All @@ -39,9 +38,6 @@
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.algebra.Generate;
import org.apache.doris.nereids.trees.plans.logical.LogicalAggregate;
import org.apache.doris.nereids.trees.plans.logical.LogicalDeferMaterializeOlapScan;
import org.apache.doris.nereids.trees.plans.logical.LogicalFilter;
import org.apache.doris.nereids.trees.plans.logical.LogicalOlapScan;
import org.apache.doris.nereids.trees.plans.logical.LogicalSort;
import org.apache.doris.nereids.trees.plans.logical.LogicalTopN;
import org.apache.doris.nereids.trees.plans.logical.LogicalWindow;
Expand All @@ -64,7 +60,6 @@ public Rule build() {
checkAllSlotReferenceFromChildren(plan);
checkUnexpectedExpression(plan);
checkMetricTypeIsUsedCorrectly(plan);
checkMatchIsUsedCorrectly(plan);
return null;
}).toRule(RuleType.CHECK_ANALYSIS);
}
Expand Down Expand Up @@ -181,19 +176,4 @@ private void checkMetricTypeIsUsedCorrectly(Plan plan) {
});
}
}

private void checkMatchIsUsedCorrectly(Plan plan) {
for (Expression expression : plan.getExpressions()) {
if (expression instanceof Match) {
if (plan instanceof LogicalFilter && (plan.child(0) instanceof LogicalOlapScan
|| plan.child(0) instanceof LogicalDeferMaterializeOlapScan)) {
return;
} else {
throw new AnalysisException(String.format(
"Not support match in %s in plan: %s, only support in olapScan filter",
plan.child(0), plan));
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
import org.apache.doris.nereids.trees.expressions.IsNull;
import org.apache.doris.nereids.trees.expressions.LessThan;
import org.apache.doris.nereids.trees.expressions.LessThanEqual;
import org.apache.doris.nereids.trees.expressions.Match;
import org.apache.doris.nereids.trees.expressions.Not;
import org.apache.doris.nereids.trees.expressions.NullSafeEqual;
import org.apache.doris.nereids.trees.expressions.Or;
Expand Down Expand Up @@ -190,6 +191,16 @@ public Expression visitLiteral(Literal literal, ExpressionRewriteContext context
return literal;
}

@Override
public Expression visitMatch(Match match, ExpressionRewriteContext context) {
match = rewriteChildren(match, context);
Optional<Expression> checkedExpr = preProcess(match);
if (checkedExpr.isPresent()) {
return checkedExpr.get();
}
return super.visitMatch(match, context);
}

@Override
public Expression visitEncryptKeyRef(EncryptKeyRef encryptKeyRef, ExpressionRewriteContext context) {
String dbName = encryptKeyRef.getDbName();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ public static List<Long> prune(List<Slot> partitionSlots, Expression partitionPr
partitionPredicate, new ExpressionRewriteContext(cascadesContext));
if (BooleanLiteral.TRUE.equals(partitionPredicate)) {
return Utils.fastToImmutableList(idToPartitions.keySet());
} else if (Boolean.FALSE.equals(partitionPredicate) || partitionPredicate.isNullLiteral()) {
} else if (BooleanLiteral.FALSE.equals(partitionPredicate) || partitionPredicate.isNullLiteral()) {
return ImmutableList.of();
}

Expand Down
8 changes: 8 additions & 0 deletions regression-test/data/nereids_syntax_p0/match.out
Original file line number Diff line number Diff line change
Expand Up @@ -109,3 +109,11 @@ li ba li liuliu

-- !match_phrase_7 --

-- !match_join --
li sisi 11 grade 6 li ba li liuliu zhang san yi 11 grade 5 zhang yi chen san learn makes me happy
san zhang 10 grade 5 san zhang 10 grade 5
san zhang 10 grade 5 zhang san 10 grade 5 zhang yi chen san Class activists
zhang san 10 grade 5 zhang yi chen san Class activists san zhang 10 grade 5
zhang san 10 grade 5 zhang yi chen san Class activists zhang san 10 grade 5 zhang yi chen san Class activists
zhang san yi 11 grade 5 zhang yi chen san learn makes me happy zhang san yi 11 grade 5 zhang yi chen san learn makes me happy

34 changes: 33 additions & 1 deletion regression-test/suites/nereids_syntax_p0/match.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@
// specific language governing permissions and limitations
// under the License.

suite("test_nereids_match_select") {
import java.util.stream.Collectors

suite("match") {
sql """
SET enable_nereids_planner=true
"""
Expand Down Expand Up @@ -172,5 +174,35 @@ suite("test_nereids_match_select") {
order_qt_match_phrase_7 """
SELECT * FROM test_nereids_match_select WHERE name match_phrase 'zhang' and selfComment match_phrase 'want go outside';
"""

def variables = sql "show variables"
def variableString = variables.stream()
.map { it.toString() }
.collect(Collectors.joining("\n"))
logger.info("Variables:\n${variableString}")

sql "set enable_fold_constant_by_be=false"

explain {
sql """
select *
from test_nereids_match_select a
left join
test_nereids_match_select b
on a.age = b.age
where b.name match_any 'zhang'
"""

contains("INNER JOIN")
}

order_qt_match_join """
select *
from test_nereids_match_select a
left join
test_nereids_match_select b
on a.age = b.age
where b.name match_any 'zhang'
"""
}