nastra commented on code in PR #9487:
URL: https://github.com/apache/iceberg/pull/9487#discussion_r1458847484


##########
core/src/main/java/org/apache/iceberg/jdbc/JdbcUtil.java:
##########
@@ -303,6 +287,325 @@ public static Properties 
filterAndRemovePrefix(Map<String, String> properties, S
     return result;
   }
 
+  static String getTableOrViewSql(boolean table) {
+    String tableOrViewTableName = table ? CATALOG_TABLE_NAME : 
CATALOG_VIEW_NAME;
+    String tableOrViewNamespace = table ? TABLE_NAMESPACE : VIEW_NAMESPACE;
+    String tableOrViewName = table ? TABLE_NAME : VIEW_NAME;
+    return String.format(
+        GET_TABLE_OR_VIEW_SQL, tableOrViewTableName, tableOrViewNamespace, 
tableOrViewName);
+  }
+
+  private static String getTableOrViewNamespaceSql(boolean table) {
+    String tableOrViewTableName = table ? CATALOG_TABLE_NAME : 
CATALOG_VIEW_NAME;
+    String tableOrViewNamespace = table ? TABLE_NAMESPACE : VIEW_NAMESPACE;
+    return String.format(
+        GET_TABLE_OR_VIEW_NAMESPACE_SQL,
+        tableOrViewNamespace,
+        tableOrViewTableName,
+        tableOrViewNamespace,
+        tableOrViewNamespace);
+  }
+
+  public static String getTableNamespaceSql() {
+    return getTableOrViewNamespaceSql(true);
+  }
+
+  public static String getViewNamespaceSql() {
+    return getTableOrViewNamespaceSql(false);
+  }
+
+  private static String listTableOrViewNamespacesSql(boolean table) {
+    String tableOrViewTableName = table ? CATALOG_TABLE_NAME : 
CATALOG_VIEW_NAME;
+    String tableOrViewNamespace = table ? TABLE_NAMESPACE : VIEW_NAMESPACE;
+    return String.format(
+        LIST_TABLE_OR_VIEW_NAMESPACES_SQL,
+        tableOrViewNamespace,
+        tableOrViewTableName,
+        tableOrViewNamespace);
+  }
+
+  public static String listTableNamespacesSql() {
+    return listTableOrViewNamespacesSql(true);
+  }
+
+  public static String listViewNamespacesSql() {
+    return listTableOrViewNamespacesSql(false);
+  }
+
+  private static String listAllTableOrViewNamespacesSql(boolean table) {
+    String tableOrViewTableName = table ? CATALOG_TABLE_NAME : 
CATALOG_VIEW_NAME;
+    String tableOrViewNamespace = table ? TABLE_NAMESPACE : VIEW_NAMESPACE;
+    return String.format(
+        LIST_ALL_TABLE_OR_VIEW_NAMESPACES_SQL, tableOrViewNamespace, 
tableOrViewTableName);
+  }
+
+  public static String listAllTableNamespacesSql() {
+    return listAllTableOrViewNamespacesSql(true);
+  }
+
+  public static String listAllViewNamespacesSql() {
+    return listAllTableOrViewNamespacesSql(false);
+  }
+
+  static String doCommitSql(boolean table) {
+    String tableOrViewTableName = table ? CATALOG_TABLE_NAME : 
CATALOG_VIEW_NAME;
+    String tableOrViewNamespace = table ? TABLE_NAMESPACE : VIEW_NAMESPACE;
+    String tableOrViewName = table ? TABLE_NAME : VIEW_NAME;
+    return String.format(
+        DO_COMMIT_TABLE_OR_VIEW_SQL, tableOrViewTableName, 
tableOrViewNamespace, tableOrViewName);
+  }
+
+  private static String createCatalogTableOrViewSql(boolean table) {
+    String tableOrViewTableName = table ? CATALOG_TABLE_NAME : 
CATALOG_VIEW_NAME;
+    String tableOrViewNamespace = table ? TABLE_NAMESPACE : VIEW_NAMESPACE;
+    String tableOrViewName = table ? TABLE_NAME : VIEW_NAME;
+    return String.format(
+        CREATE_CATALOG_TABLE_OR_VIEW,
+        tableOrViewTableName,
+        tableOrViewNamespace,
+        tableOrViewName,
+        tableOrViewNamespace,
+        tableOrViewName);
+  }
+
+  public static String createCatalogTableSql() {
+    return createCatalogTableOrViewSql(true);
+  }
+
+  public static String createCatalogViewSql() {
+    return createCatalogTableOrViewSql(false);
+  }
+
+  private static String listTablesOrViewsSql(boolean table) {
+    String tableOrViewTableName = table ? CATALOG_TABLE_NAME : 
CATALOG_VIEW_NAME;
+    String tableOrViewNamespace = table ? TABLE_NAMESPACE : VIEW_NAMESPACE;
+    return String.format(LIST_TABLES_OR_VIEWS_SQL, tableOrViewTableName, 
tableOrViewNamespace);
+  }
+
+  public static String listTablesSql() {
+    return listTablesOrViewsSql(true);
+  }
+
+  public static String listViewsSql() {
+    return listTablesOrViewsSql(false);
+  }
+
+  private static String renameTableOrViewSql(boolean table) {
+    String tableOrViewTableName = table ? CATALOG_TABLE_NAME : 
CATALOG_VIEW_NAME;
+    String tableOrViewNamespace = table ? TABLE_NAMESPACE : VIEW_NAMESPACE;
+    String tableOrViewName = table ? TABLE_NAME : VIEW_NAME;
+    return String.format(
+        RENAME_TABLE_OR_VIEW_SQL,
+        tableOrViewTableName,
+        tableOrViewNamespace,
+        tableOrViewName,
+        tableOrViewNamespace,
+        tableOrViewName);
+  }
+
+  public static String renameTableSql() {
+    return renameTableOrViewSql(true);
+  }
+
+  public static String renameViewSql() {
+    return renameTableOrViewSql(false);
+  }
+
+  private static String dropTableOrViewSql(boolean table) {
+    String tableOrViewTableName = table ? CATALOG_TABLE_NAME : 
CATALOG_VIEW_NAME;
+    String tableOrViewNamespace = table ? TABLE_NAMESPACE : VIEW_NAMESPACE;
+    String tableOrViewName = table ? TABLE_NAME : VIEW_NAME;
+    return String.format(
+        DROP_TABLE_OR_VIEW_SQL, tableOrViewTableName, tableOrViewNamespace, 
tableOrViewName);
+  }
+
+  public static String dropTableSql() {
+    return dropTableOrViewSql(true);
+  }
+
+  public static String dropViewSql() {
+    return dropTableOrViewSql(false);
+  }
+
+  private static String doCommitCreateTableOrViewSql(boolean table) {
+    String tableOrViewTableName = table ? CATALOG_TABLE_NAME : 
CATALOG_VIEW_NAME;
+    String tableOrViewNamespace = table ? TABLE_NAMESPACE : VIEW_NAMESPACE;
+    String tableOrViewName = table ? TABLE_NAME : VIEW_NAME;
+    return String.format(
+        DO_COMMIT_CREATE_TABLE_OR_VIEW_SQL,
+        tableOrViewTableName,
+        tableOrViewNamespace,
+        tableOrViewName);
+  }
+
+  private static int updateTableOrView(
+      boolean table,
+      JdbcClientPool connections,
+      String catalogName,
+      TableIdentifier tableOrViewIdentifier,
+      String newMetadataLocation,
+      String oldMetadataLocation)
+      throws SQLException, InterruptedException {
+    return connections.run(
+        conn -> {
+          try (PreparedStatement sql = 
conn.prepareStatement(doCommitSql(table))) {
+            // UPDATE
+            sql.setString(1, newMetadataLocation);
+            sql.setString(2, oldMetadataLocation);
+            // WHERE
+            sql.setString(3, catalogName);
+            sql.setString(4, 
namespaceToString(tableOrViewIdentifier.namespace()));
+            sql.setString(5, tableOrViewIdentifier.name());
+            sql.setString(6, oldMetadataLocation);
+            return sql.executeUpdate();
+          }
+        });
+  }
+
+  public static int updateTable(
+      JdbcClientPool connections,
+      String catalogName,
+      TableIdentifier tableIdentifier,
+      String newMetadataLocation,
+      String oldMetadataLocation)
+      throws SQLException, InterruptedException {
+    return updateTableOrView(
+        true, connections, catalogName, tableIdentifier, newMetadataLocation, 
oldMetadataLocation);
+  }
+
+  public static int updateView(
+      JdbcClientPool connections,
+      String catalogName,
+      TableIdentifier viewIdentifier,
+      String newMetadataLocation,
+      String oldMetadataLocation)
+      throws SQLException, InterruptedException {
+    return updateTableOrView(
+        false, connections, catalogName, viewIdentifier, newMetadataLocation, 
oldMetadataLocation);
+  }
+
+  private static Map<String, String> getTableOrView(
+      boolean table,
+      JdbcClientPool connections,
+      String catalogName,
+      TableIdentifier tableOrViewIdentifier)
+      throws SQLException, InterruptedException {
+    return connections.run(
+        conn -> {
+          Map<String, String> tableOrView = Maps.newHashMap();
+
+          String getTableOrViewSqlStatement = 
JdbcUtil.getTableOrViewSql(table);
+          try (PreparedStatement sql = 
conn.prepareStatement(getTableOrViewSqlStatement)) {
+            sql.setString(1, catalogName);
+            sql.setString(2, 
namespaceToString(tableOrViewIdentifier.namespace()));
+            sql.setString(3, tableOrViewIdentifier.name());
+            ResultSet rs = sql.executeQuery();
+
+            if (rs.next()) {
+              tableOrView.put(JdbcUtil.CATALOG_NAME, 
rs.getString(JdbcUtil.CATALOG_NAME));
+              tableOrView.put(
+                  (table ? JdbcUtil.TABLE_NAMESPACE : JdbcUtil.VIEW_NAMESPACE),
+                  rs.getString((table ? JdbcUtil.TABLE_NAMESPACE : 
JdbcUtil.VIEW_NAMESPACE)));
+              tableOrView.put(
+                  (table ? JdbcUtil.TABLE_NAME : JdbcUtil.VIEW_NAME),
+                  rs.getString((table ? JdbcUtil.TABLE_NAME : 
JdbcUtil.VIEW_NAME)));
+              tableOrView.put(
+                  BaseMetastoreTableOperations.METADATA_LOCATION_PROP,
+                  
rs.getString(BaseMetastoreTableOperations.METADATA_LOCATION_PROP));
+              tableOrView.put(
+                  BaseMetastoreTableOperations.PREVIOUS_METADATA_LOCATION_PROP,
+                  
rs.getString(BaseMetastoreTableOperations.PREVIOUS_METADATA_LOCATION_PROP));
+            }
+
+            rs.close();
+          }
+
+          return tableOrView;
+        });
+  }
+
+  public static Map<String, String> getTable(
+      JdbcClientPool connections, String catalogName, TableIdentifier 
tableIdentifier)
+      throws SQLException, InterruptedException {
+    return getTableOrView(true, connections, catalogName, tableIdentifier);
+  }
+
+  public static Map<String, String> getView(
+      JdbcClientPool connections, String catalogName, TableIdentifier 
viewIdentifier)
+      throws SQLException, InterruptedException {
+    return getTableOrView(false, connections, catalogName, viewIdentifier);
+  }
+
+  private static int doCommitCreateTableOrView(
+      boolean table,
+      JdbcClientPool connections,
+      String catalogName,
+      Namespace namespace,
+      TableIdentifier tableOrViewIdentifier,
+      String newMetadataLocation)
+      throws SQLException, InterruptedException {
+    return connections.run(
+        conn -> {
+          try (PreparedStatement sql = 
conn.prepareStatement(doCommitCreateTableOrViewSql(table))) {
+            sql.setString(1, catalogName);
+            sql.setString(2, namespaceToString(namespace));
+            sql.setString(3, tableOrViewIdentifier.name());
+            sql.setString(4, newMetadataLocation);
+            return sql.executeUpdate();
+          }
+        });
+  }
+
+  public static int doCommitCreateTable(
+      JdbcClientPool connections,
+      String catalogName,
+      Namespace namespace,
+      TableIdentifier tableIdentifier,
+      String newMetadataLocation)
+      throws SQLException, InterruptedException {
+    return doCommitCreateTableOrView(
+        true, connections, catalogName, namespace, tableIdentifier, 
newMetadataLocation);
+  }
+
+  public static int doCommitCreateView(
+      JdbcClientPool connections,
+      String catalogName,
+      Namespace namespace,
+      TableIdentifier viewIdentifier,
+      String newMetadataLocation)
+      throws SQLException, InterruptedException {
+    return doCommitCreateTableOrView(
+        false, connections, catalogName, namespace, viewIdentifier, 
newMetadataLocation);
+  }
+
+  static boolean viewExists(
+      String catalogName, JdbcClientPool connections, TableIdentifier 
viewIdentifier) {
+    if (exists(
+        connections,
+        JdbcUtil.getTableOrViewSql(false),
+        catalogName,
+        namespaceToString(viewIdentifier.namespace()),
+        viewIdentifier.name())) {
+      return true;
+    }
+
+    return false;
+  }
+
+  static boolean tableExists(
+      String catalogName, JdbcClientPool connections, TableIdentifier 
tableIdentifier) {
+    if (exists(

Review Comment:
   same as above, can be simplified to not have if/else



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@iceberg.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


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

Reply via email to