Skip to content

Commit 97d1367

Browse files
committed
Add enabled config
1 parent 5716533 commit 97d1367

File tree

2 files changed

+35
-7
lines changed

2 files changed

+35
-7
lines changed

common/src/main/scala/org/apache/comet/CometConf.scala

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -654,6 +654,30 @@ object CometConf extends ShimCometConf {
654654
.booleanConf
655655
.createWithDefault(defaultValue)
656656
}
657+
658+
def isExprEnabled(name: String, conf: SQLConf = SQLConf.get): Boolean = {
659+
val value = getExprEnabledConfigKey(name)
660+
// all expressions are enabled by default
661+
val key = value
662+
if (conf.contains(key)) {
663+
conf.getConfString(key) == "true"
664+
} else {
665+
true
666+
}
667+
}
668+
669+
def getExprEnabledConfigKey(name: String): String = {
670+
s"${CometConf.COMET_EXPR_CONFIG_PREFIX}.$name.enabled"
671+
}
672+
673+
def isExprAllowIncompat(name: String, conf: SQLConf = SQLConf.get): Boolean = {
674+
val key = getExprAllowIncompatConfigKey(name)
675+
conf.contains(key) && conf.getConfString(key) == "true"
676+
}
677+
678+
def getExprAllowIncompatConfigKey(name: String): String = {
679+
s"${CometConf.COMET_EXPR_CONFIG_PREFIX}.$name.allowIncompatible"
680+
}
657681
}
658682

659683
object ConfigHelpers {

spark/src/main/scala/org/apache/comet/serde/QueryPlanSerde.scala

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -598,17 +598,21 @@ object QueryPlanSerde extends Logging with CometExprShim {
598598
val conf = SQLConf.get
599599

600600
def convert[T <: Expression](expr: T, handler: CometExpressionSerde[T]): Option[Expr] = {
601+
val exprConfName = handler.getExprConfigName(expr)
602+
if (!CometConf.isExprEnabled(exprConfName)) {
603+
withInfo(
604+
expr,
605+
"Expression support is disabled. Set " +
606+
s"${CometConf.getExprEnabledConfigKey(exprConfName)}=true to enable it.")
607+
return None
608+
}
601609
handler.getSupportLevel(expr) match {
602610
case Unsupported(notes) =>
603611
withInfo(expr, notes.getOrElse(""))
604612
None
605613
case Incompatible(notes) =>
606-
val exprConfName = handler.getExprConfigName(expr)
607-
val exprIncompatConf = s"${CometConf.COMET_EXPR_CONFIG_PREFIX}.$exprConfName" +
608-
".allowIncompatible"
609-
val exprEnabled = conf.contains(exprIncompatConf) &&
610-
conf.getConfString(exprIncompatConf) == "true"
611-
if (exprEnabled || CometConf.COMET_EXPR_ALLOW_INCOMPATIBLE.get()) {
614+
val exprAllowIncompat = CometConf.isExprAllowIncompat(exprConfName)
615+
if (exprAllowIncompat || CometConf.COMET_EXPR_ALLOW_INCOMPATIBLE.get()) {
612616
if (notes.isDefined) {
613617
logWarning(
614618
s"Comet supports $expr when ${CometConf.COMET_EXPR_ALLOW_INCOMPATIBLE.key}=true " +
@@ -620,7 +624,7 @@ object QueryPlanSerde extends Logging with CometExprShim {
620624
withInfo(
621625
expr,
622626
s"$expr is not fully compatible with Spark$optionalNotes. To enable it anyway, " +
623-
s"set $exprIncompatConf=true, or set " +
627+
s"set ${CometConf.getExprAllowIncompatConfigKey(exprConfName)}=true, or set " +
624628
s"${CometConf.COMET_EXPR_ALLOW_INCOMPATIBLE.key}=true to enable all " +
625629
s"incompatible expressions. ${CometConf.COMPAT_GUIDE}.")
626630
None

0 commit comments

Comments
 (0)