Skip to content

Commit e95c603

Browse files
committed
Add V2SessionCatalog tests for renameTable
1 parent 4c0d834 commit e95c603

2 files changed

Lines changed: 78 additions & 2 deletions

File tree

sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/v2/V2SessionCatalog.scala

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,11 @@ class V2SessionCatalog(sessionState: SessionState) extends TableCatalog {
154154
}
155155

156156
override def renameTable(oldIdent: Identifier, newIdent: Identifier): Unit = {
157-
if (Option(loadTable(newIdent)).isDefined) throw new TableAlreadyExistsException(newIdent)
157+
try {
158+
if (Option(loadTable(newIdent)).isDefined) throw new TableAlreadyExistsException(newIdent)
159+
} catch {
160+
case _: NoSuchTableException =>
161+
}
158162

159163
// Load table to make sure the table exists
160164
loadTable(oldIdent)

sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/v2/V2SessionCatalogSuite.scala

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import scala.collection.JavaConverters._
2525
import org.scalatest.{BeforeAndAfter, BeforeAndAfterAll}
2626

2727
import org.apache.spark.SparkFunSuite
28+
import org.apache.spark.sql.AnalysisException
2829
import org.apache.spark.sql.catalog.v2.{Catalogs, Identifier, TableCatalog, TableChange}
2930
import org.apache.spark.sql.catalyst.analysis.{NoSuchTableException, TableAlreadyExistsException}
3031
import org.apache.spark.sql.catalyst.parser.CatalystSqlParser
@@ -45,20 +46,23 @@ class V2SessionCatalogSuite
4546
override protected def beforeAll(): Unit = {
4647
super.beforeAll()
4748
spark.sql("""CREATE DATABASE IF NOT EXISTS db""")
49+
spark.sql("""CREATE DATABASE IF NOT EXISTS db2""")
4850
spark.sql("""CREATE DATABASE IF NOT EXISTS ns""")
4951
spark.sql("""CREATE DATABASE IF NOT EXISTS ns2""")
5052
}
5153

5254
override protected def afterAll(): Unit = {
5355
spark.sql("""DROP TABLE IF EXISTS db.test_table""")
5456
spark.sql("""DROP DATABASE IF EXISTS db""")
57+
spark.sql("""DROP DATABASE IF EXISTS db2""")
5558
spark.sql("""DROP DATABASE IF EXISTS ns""")
5659
spark.sql("""DROP DATABASE IF EXISTS ns2""")
5760
super.afterAll()
5861
}
5962

6063
after {
6164
newCatalog().dropTable(testIdent)
65+
newCatalog().dropTable(testIdentNew)
6266
}
6367

6468
private def newCatalog(): TableCatalog = {
@@ -67,7 +71,9 @@ class V2SessionCatalogSuite
6771
newCatalog
6872
}
6973

70-
private val testIdent = Identifier.of(Array("db"), "test_table")
74+
private val testNs = Array("db")
75+
private val testIdent = Identifier.of(testNs, "test_table")
76+
private val testIdentNew = Identifier.of(testNs, "test_table_new")
7177

7278
test("Catalogs can load the catalog") {
7379
val catalog = newCatalog()
@@ -680,4 +686,70 @@ class V2SessionCatalogSuite
680686
assert(!wasDropped)
681687
assert(!catalog.tableExists(testIdent))
682688
}
689+
690+
test("renameTable") {
691+
val catalog = newCatalog()
692+
693+
assert(!catalog.tableExists(testIdent))
694+
assert(!catalog.tableExists(testIdentNew))
695+
696+
catalog.createTable(testIdent, schema, Array.empty, emptyProps)
697+
698+
assert(catalog.tableExists(testIdent))
699+
catalog.renameTable(testIdent, testIdentNew)
700+
701+
assert(!catalog.tableExists(testIdent))
702+
assert(catalog.tableExists(testIdentNew))
703+
}
704+
705+
test("renameTable: fail if table does not exist") {
706+
val catalog = newCatalog()
707+
708+
val exc = intercept[NoSuchTableException] {
709+
catalog.renameTable(testIdent, testIdentNew)
710+
}
711+
712+
assert(exc.message.contains(testIdent.quoted))
713+
assert(exc.message.contains("not found"))
714+
}
715+
716+
test("renameTable: fail if new table name already exists") {
717+
val catalog = newCatalog()
718+
719+
assert(!catalog.tableExists(testIdent))
720+
assert(!catalog.tableExists(testIdentNew))
721+
722+
catalog.createTable(testIdent, schema, Array.empty, emptyProps)
723+
catalog.createTable(testIdentNew, schema, Array.empty, emptyProps)
724+
725+
assert(catalog.tableExists(testIdent))
726+
assert(catalog.tableExists(testIdentNew))
727+
728+
val exc = intercept[TableAlreadyExistsException] {
729+
catalog.renameTable(testIdent, testIdentNew)
730+
}
731+
732+
assert(exc.message.contains(testIdentNew.quoted))
733+
assert(exc.message.contains("already exists"))
734+
}
735+
736+
test("renameTable: fail if db does not match for old and new table names") {
737+
val catalog = newCatalog()
738+
val testIdentNewOtherDb = Identifier.of(Array("db2"), "test_table_new")
739+
740+
assert(!catalog.tableExists(testIdent))
741+
assert(!catalog.tableExists(testIdentNewOtherDb))
742+
743+
catalog.createTable(testIdent, schema, Array.empty, emptyProps)
744+
745+
assert(catalog.tableExists(testIdent))
746+
747+
val exc = intercept[AnalysisException] {
748+
catalog.renameTable(testIdent, testIdentNewOtherDb)
749+
}
750+
751+
assert(exc.message.contains(testIdent.namespace.quoted))
752+
assert(exc.message.contains(testIdentNewOtherDb.namespace.quoted))
753+
assert(exc.message.contains("RENAME TABLE source and destination databases do not match"))
754+
}
683755
}

0 commit comments

Comments
 (0)