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