[
https://issues.apache.org/jira/browse/FLINK-6574?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16012229#comment-16012229
]
ASF GitHub Bot commented on FLINK-6574:
---------------------------------------
Github user fhueske commented on a diff in the pull request:
https://github.com/apache/flink/pull/3913#discussion_r116724361
--- Diff:
flink-libraries/flink-table/src/main/scala/org/apache/flink/table/catalog/InMemoryExternalCatalog.scala
---
@@ -18,138 +18,97 @@
package org.apache.flink.table.catalog
-import org.apache.flink.table.api.{DatabaseAlreadyExistException,
DatabaseNotExistException, TableAlreadyExistException, TableNotExistException}
import java.util.{List => JList}
-import scala.collection.mutable.HashMap
+import org.apache.flink.table.api.{DatabaseAlreadyExistException,
DatabaseNotExistException, TableAlreadyExistException, TableNotExistException}
+
+import scala.collection.mutable
import scala.collection.JavaConverters._
/**
* This class is an in-memory implementation of [[ExternalCatalog]].
*
* It could be used for testing or developing instead of used in
production environment.
*/
-class InMemoryExternalCatalog extends CrudExternalCatalog {
+class InMemoryExternalCatalog(name: String) extends CrudExternalCatalog {
- private val databases = new HashMap[String, Database]
+ private val databases = new mutable.HashMap[String, ExternalCatalog]
+ private val tables = new mutable.HashMap[String, ExternalCatalogTable]
- @throws[DatabaseNotExistException]
@throws[TableAlreadyExistException]
override def createTable(
- table: ExternalCatalogTable,
- ignoreIfExists: Boolean): Unit = synchronized {
- val dbName = table.identifier.database
- val tables = getTables(dbName)
- val tableName = table.identifier.table
- if (tables.contains(tableName)) {
- if (!ignoreIfExists) {
- throw new TableAlreadyExistException(dbName, tableName)
- }
- } else {
- tables.put(tableName, table)
+ tableName: String,
+ table: ExternalCatalogTable,
+ ignoreIfExists: Boolean): Unit = synchronized {
+ tables.get(tableName) match {
+ case Some(_) if !ignoreIfExists => throw new
TableAlreadyExistException(name, tableName)
+ case _ => tables.put(tableName, table)
}
}
- @throws[DatabaseNotExistException]
@throws[TableNotExistException]
- override def dropTable(
- dbName: String,
- tableName: String,
- ignoreIfNotExists: Boolean): Unit = synchronized {
- val tables = getTables(dbName)
+ override def dropTable(tableName: String, ignoreIfNotExists: Boolean):
Unit = synchronized {
if (tables.remove(tableName).isEmpty && !ignoreIfNotExists) {
- throw new TableNotExistException(dbName, tableName)
+ throw new TableNotExistException(name, tableName)
}
}
- @throws[DatabaseNotExistException]
@throws[TableNotExistException]
- override def alterTable(
- table: ExternalCatalogTable,
- ignoreIfNotExists: Boolean): Unit = synchronized {
- val dbName = table.identifier.database
- val tables = getTables(dbName)
- val tableName = table.identifier.table
+ override def alterTable(tableName: String, table: ExternalCatalogTable,
--- End diff --
please put each parameter into a new line
> Support nested catalogs in ExternalCatalog
> ------------------------------------------
>
> Key: FLINK-6574
> URL: https://issues.apache.org/jira/browse/FLINK-6574
> Project: Flink
> Issue Type: Bug
> Components: Table API & SQL
> Reporter: Haohui Mai
> Assignee: Haohui Mai
> Priority: Critical
> Fix For: 1.3.0
>
>
> We found out that the current external catalog requires three layers of
> references for any tables. For example, the SQL would look like the following
> when referencing external table:
> {noformat}
> SELECT * FROM catalog.db.table
> {noformat}
> It would be great to support only two layers of indirections which is closer
> to many of the deployment on Presto / Hive today.
> {noformat}
> SELECT * FROM db.table
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)