diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala index 7bc1f63e30540..175b2e0a7e83b 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala @@ -1311,7 +1311,10 @@ class AstBuilder(conf: SQLConf) extends SqlBaseBaseVisitor[AnyRef] with Logging protected def visitFunctionName(ctx: QualifiedNameContext): FunctionIdentifier = { ctx.identifier().asScala.map(_.getText) match { case Seq(db, fn) => FunctionIdentifier(fn, Option(db)) - case Seq(fn) => FunctionIdentifier(fn, None) + case Seq(fn) => fn.split('.').toSeq match { + case Seq(d, f) => FunctionIdentifier(f, Option(d)) + case _ => FunctionIdentifier(fn, None) + } case other => throw new ParseException(s"Unsupported function name '${ctx.getText}'", ctx) } } diff --git a/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveDDLSuite.scala b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveDDLSuite.scala index 6708a50a961fd..c4b3d3cb630b3 100644 --- a/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveDDLSuite.scala +++ b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveDDLSuite.scala @@ -2281,4 +2281,23 @@ class HiveDDLSuite } } } + + test("SPARK-25301: checks view with udf from non default database") { + val db = "d1" + withDatabase(db) { + spark.sql(s"CREATE DATABASE $db") + val table = "t1" + withTable(s"$db.$table") { + spark.sql(s"CREATE TABLE $db.$table AS SELECT 'abcd' c1, 'xyz' c2") + val functionNameUpper = "udfUpper" + withUserDefinedFunction(s"$db.$functionNameUpper" -> false) { + val functionClass = + classOf[org.apache.hadoop.hive.ql.udf.generic.GenericUDFUpper].getCanonicalName + sql(s"CREATE FUNCTION $db.$functionNameUpper AS '$functionClass'") + val ds = sql(s"SELECT `$db.$functionNameUpper`(`$table`.`c1`) FROM `$db`.`$table`") + checkAnswer(ds, Row("ABCD")) + } + } + } + } }