Github user skambha commented on a diff in the pull request:

    https://github.com/apache/spark/pull/17185#discussion_r208089990
  
    --- Diff: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/package.scala
 ---
    @@ -169,25 +181,50 @@ package object expressions  {
             })
           }
     
    -      // Find matches for the given name assuming that the 1st part is a 
qualifier (i.e. table name,
    -      // alias, or subquery alias) and the 2nd part is the actual name. 
This returns a tuple of
    +      // Find matches for the given name assuming that the 1st two parts 
are qualifier
    +      // (i.e. database name and table name) and the 3rd part is the 
actual column name.
    +      //
    +      // For example, consider an example where "db1" is the database 
name, "a" is the table name
    +      // and "b" is the column name and "c" is the struct field name.
    +      // If the name parts is db1.a.b.c, then Attribute will match
    +      // Attribute(b, qualifier("db1,"a")) and List("c") will be the 
second element
    +      var matches: (Seq[Attribute], Seq[String]) = nameParts match {
    +        case dbPart +: tblPart +: name +: nestedFields =>
    +          val key = (dbPart.toLowerCase(Locale.ROOT),
    +            tblPart.toLowerCase(Locale.ROOT), 
name.toLowerCase(Locale.ROOT))
    +          val attributes = collectMatches(name, 
qualified3Part.get(key)).filter {
    +            a => (resolver(dbPart, a.qualifier.head) && resolver(tblPart, 
a.qualifier.last))
    +          }
    +          (attributes, nestedFields)
    +        case all =>
    +          (Seq.empty, Seq.empty)
    +      }
    +
    +      // If there are no matches, then find matches for the given name 
assuming that
    +      // the 1st part is a qualifier (i.e. table name, alias, or subquery 
alias) and the
    +      // 2nd part is the actual name. This returns a tuple of
           // matched attributes and a list of parts that are to be resolved.
           //
           // For example, consider an example where "a" is the table name, "b" 
is the column name,
           // and "c" is the struct field name, i.e. "a.b.c". In this case, 
Attribute will be "a.b",
           // and the second element will be List("c").
    -      val matches = nameParts match {
    -        case qualifier +: name +: nestedFields =>
    -          val key = (qualifier.toLowerCase(Locale.ROOT), 
name.toLowerCase(Locale.ROOT))
    -          val attributes = collectMatches(name, qualified.get(key)).filter 
{ a =>
    -            resolver(qualifier, a.qualifier.get)
    +      matches = matches match {
    --- End diff --
    
    done.


---

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

Reply via email to