Github user viirya commented on the issue:

    https://github.com/apache/spark/pull/20795
  
    I've added a test like this:
    
    ```scala
    class LookupFunctionsSuite extends PlanTest {
    
      test("SPARK-23486: LookupFunctions should not check the same function 
name more than once") {
        val externalCatalog = new CustomInMemoryCatalog
        val analyzer = {
          val conf = new SQLConf()
          val catalog = new SessionCatalog(externalCatalog, 
FunctionRegistry.builtin, conf)
          catalog.createDatabase(
            CatalogDatabase("default", "", new URI("loc"), Map.empty),
            ignoreIfExists = false)
          new Analyzer(catalog, conf)
        }
    
        val unresolvedFunc = UnresolvedFunction("func", Seq.empty, false)
        val plan = Project(
          Seq(Alias(unresolvedFunc, "call1")(), Alias(unresolvedFunc, 
"call2")()),
          table("TaBlE"))
        analyzer.LookupFunctions.apply(plan)
        assert(externalCatalog.getFunctionExistsCalledTimes == 1)
      }
    }
    
    class CustomInMemoryCatalog extends InMemoryCatalog {
    
      private var functionExistsCalledTimes: Int = 0
    
      override def functionExists(db: String, funcName: String): Boolean = 
synchronized {
        functionExistsCalledTimes = functionExistsCalledTimes + 1
        true
      }
    
      def getFunctionExistsCalledTimes: Int = functionExistsCalledTimes
    }
    ```


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to