@@ -28,77 +28,63 @@ trait Catalog {
2828
2929 def caseSensitive : Boolean
3030
31- def tableExists (db : Option [String ], tableName : String ): Boolean
31+ def tableExists (tableIdentifier : Seq [String ]): Boolean
3232
3333 def lookupRelation (
34- databaseName : Option [String ],
35- tableName : String ,
36- alias : Option [String ] = None ): LogicalPlan
34+ tableIdentifier : Seq [String ],
35+ alias : Option [String ] = None ): LogicalPlan
3736
38- def registerTable (databaseName : Option [String ], tableName : String , plan : LogicalPlan ): Unit
37+ def registerTable (tableIdentifier : Seq [String ], plan : LogicalPlan ): Unit
3938
40- def unregisterTable (databaseName : Option [String ], tableName : String ): Unit
39+ def unregisterTable (tableIdentifier : Seq [String ]): Unit
4140
4241 def unregisterAllTables (): Unit
4342
44- protected def processDatabaseAndTableName (
45- databaseName : Option [String ],
46- tableName : String ): (Option [String ], String ) = {
43+ protected def processTableIdentifier (tableIdentifier : Seq [String ]):
44+ Seq [String ] = {
4745 if (! caseSensitive) {
48- (databaseName .map(_.toLowerCase), tableName .toLowerCase)
46+ tableIdentifier .map(_.toLowerCase)
4947 } else {
50- (databaseName, tableName)
48+ tableIdentifier
5149 }
5250 }
5351
54- protected def processDatabaseAndTableName (
55- databaseName : String ,
56- tableName : String ): (String , String ) = {
57- if (! caseSensitive) {
58- (databaseName.toLowerCase, tableName.toLowerCase)
59- } else {
60- (databaseName, tableName)
61- }
62- }
6352}
6453
6554class SimpleCatalog (val caseSensitive : Boolean ) extends Catalog {
6655 val tables = new mutable.HashMap [String , LogicalPlan ]()
6756
6857 override def registerTable (
69- databaseName : Option [String ],
70- tableName : String ,
58+ tableIdentifier : Seq [String ],
7159 plan : LogicalPlan ): Unit = {
72- val (dbName, tblName) = processDatabaseAndTableName(databaseName, tableName )
73- tables += ((tblName , plan))
60+ val tableIdent = processTableIdentifier(tableIdentifier )
61+ tables += ((tableIdent.mkString( " . " ) , plan))
7462 }
7563
76- override def unregisterTable (
77- databaseName : Option [String ],
78- tableName : String ) = {
79- val (dbName, tblName) = processDatabaseAndTableName(databaseName, tableName)
80- tables -= tblName
64+ override def unregisterTable (tableIdentifier : Seq [String ]) = {
65+ val tableIdent = processTableIdentifier(tableIdentifier)
66+ tables -= tableIdent.mkString(" ." )
8167 }
8268
8369 override def unregisterAllTables () = {
8470 tables.clear()
8571 }
8672
87- override def tableExists (db : Option [String ], tableName : String ): Boolean = {
88- val (dbName, tblName) = processDatabaseAndTableName(db, tableName )
89- tables.get(tblName ) match {
73+ override def tableExists (tableIdentifier : Seq [String ]): Boolean = {
74+ val tableIdent = processTableIdentifier(tableIdentifier )
75+ tables.get(tableIdent.mkString( " . " ) ) match {
9076 case Some (_) => true
9177 case None => false
9278 }
9379 }
9480
9581 override def lookupRelation (
96- databaseName : Option [String ],
97- tableName : String ,
82+ tableIdentifier : Seq [String ],
9883 alias : Option [String ] = None ): LogicalPlan = {
99- val (dbName, tblName) = processDatabaseAndTableName(databaseName, tableName)
100- val table = tables.getOrElse(tblName, sys.error(s " Table Not Found: $tableName" ))
101- val tableWithQualifiers = Subquery (tblName, table)
84+ val tableIdent = processTableIdentifier(tableIdentifier)
85+ val tableFullName = tableIdent.mkString(" ." )
86+ val table = tables.getOrElse(tableFullName, sys.error(s " Table Not Found: $tableFullName" ))
87+ val tableWithQualifiers = Subquery (tableIdent.head, table)
10288
10389 // If an alias was specified by the lookup, wrap the plan in a subquery so that attributes are
10490 // properly qualified with this alias.
@@ -115,43 +101,41 @@ class SimpleCatalog(val caseSensitive: Boolean) extends Catalog {
115101trait OverrideCatalog extends Catalog {
116102
117103 // TODO: This doesn't work when the database changes...
118- val overrides = new mutable.HashMap [( Option [ String ], String ) , LogicalPlan ]()
104+ val overrides = new mutable.HashMap [String , LogicalPlan ]()
119105
120- abstract override def tableExists (db : Option [String ], tableName : String ): Boolean = {
121- val (dbName, tblName) = processDatabaseAndTableName(db, tableName )
122- overrides.get((dbName, tblName) ) match {
106+ abstract override def tableExists (tableIdentifier : Seq [String ]): Boolean = {
107+ val tableIdent = processTableIdentifier(tableIdentifier).mkString( " . " )
108+ overrides.get(tableIdent ) match {
123109 case Some (_) => true
124- case None => super .tableExists(db, tableName )
110+ case None => super .tableExists(tableIdentifier )
125111 }
126112 }
127113
128114 abstract override def lookupRelation (
129- databaseName : Option [String ],
130- tableName : String ,
115+ tableIdentifier : Seq [String ],
131116 alias : Option [String ] = None ): LogicalPlan = {
132- val (dbName, tblName) = processDatabaseAndTableName(databaseName, tableName )
133- val overriddenTable = overrides.get((dbName, tblName ))
134- val tableWithQualifers = overriddenTable.map(r => Subquery (tblName , r))
117+ val tableIdent = processTableIdentifier(tableIdentifier )
118+ val overriddenTable = overrides.get(tableIdent.mkString( " . " ))
119+ val tableWithQualifers = overriddenTable.map(r => Subquery (tableIdent.head , r))
135120
136121 // If an alias was specified by the lookup, wrap the plan in a subquery so that attributes are
137122 // properly qualified with this alias.
138123 val withAlias =
139124 tableWithQualifers.map(r => alias.map(a => Subquery (a, r)).getOrElse(r))
140125
141- withAlias.getOrElse(super .lookupRelation(dbName, tblName , alias))
126+ withAlias.getOrElse(super .lookupRelation(tableIdentifier , alias))
142127 }
143128
144129 override def registerTable (
145- databaseName : Option [String ],
146- tableName : String ,
130+ tableIdentifier : Seq [String ],
147131 plan : LogicalPlan ): Unit = {
148- val (dbName, tblName) = processDatabaseAndTableName(databaseName, tableName )
149- overrides.put((dbName, tblName) , plan)
132+ val tableIdent = processTableIdentifier(tableIdentifier).mkString( " . " )
133+ overrides.put(tableIdent , plan)
150134 }
151135
152- override def unregisterTable (databaseName : Option [String ], tableName : String ): Unit = {
153- val (dbName, tblName) = processDatabaseAndTableName(databaseName, tableName )
154- overrides.remove((dbName, tblName) )
136+ override def unregisterTable (tableIdentifier : Seq [String ]): Unit = {
137+ val tableIdent = processTableIdentifier(tableIdentifier).mkString( " . " )
138+ overrides.remove(tableIdent )
155139 }
156140
157141 override def unregisterAllTables (): Unit = {
@@ -167,22 +151,21 @@ object EmptyCatalog extends Catalog {
167151
168152 val caseSensitive : Boolean = true
169153
170- def tableExists (db : Option [String ], tableName : String ): Boolean = {
154+ def tableExists (tableIdentifier : Seq [String ]): Boolean = {
171155 throw new UnsupportedOperationException
172156 }
173157
174158 def lookupRelation (
175- databaseName : Option [String ],
176- tableName : String ,
159+ tableIdentifier : Seq [String ],
177160 alias : Option [String ] = None ) = {
178161 throw new UnsupportedOperationException
179162 }
180163
181- def registerTable (databaseName : Option [String ], tableName : String , plan : LogicalPlan ): Unit = {
164+ def registerTable (tableIdentifier : Seq [String ], plan : LogicalPlan ): Unit = {
182165 throw new UnsupportedOperationException
183166 }
184167
185- def unregisterTable (databaseName : Option [String ], tableName : String ): Unit = {
168+ def unregisterTable (tableIdentifier : Seq [String ]): Unit = {
186169 throw new UnsupportedOperationException
187170 }
188171
0 commit comments