ajantha-bhat commented on code in PR #9487: URL: https://github.com/apache/iceberg/pull/9487#discussion_r1462750931
########## core/src/main/java/org/apache/iceberg/jdbc/JdbcUtil.java: ########## @@ -303,7 +287,294 @@ public static Properties filterAndRemovePrefix(Map<String, String> properties, S return result; } - public static String updatePropertiesStatement(int size) { + static String getSql(boolean isTable) { + String tableName = isTable ? CATALOG_TABLE_NAME : CATALOG_VIEW_NAME; + String namespace = isTable ? TABLE_NAMESPACE : VIEW_NAMESPACE; + String name = isTable ? TABLE_NAME : VIEW_NAME; + return String.format(GET, tableName, namespace, name); + } + + static String getTableSql() { + return getSql(true); + } + + static String getViewSql() { + return getSql(false); + } + + static String namespaceSql(boolean isTable) { + String tableName = isTable ? CATALOG_TABLE_NAME : CATALOG_VIEW_NAME; + String namespace = isTable ? TABLE_NAMESPACE : VIEW_NAMESPACE; + return String.format(GET_NAMESPACE, namespace, tableName, namespace, namespace); + } + + static String tableNamespaceSql() { + return namespaceSql(true); + } + + static String viewNamespaceSql() { + return namespaceSql(false); + } + + private static String listNamespacesSql(boolean isTable) { + String tableName = isTable ? CATALOG_TABLE_NAME : CATALOG_VIEW_NAME; + String namespace = isTable ? TABLE_NAMESPACE : VIEW_NAMESPACE; + return String.format(LIST_NAMESPACES, namespace, tableName, namespace); + } + + static String listTableNamespacesSql() { + return listNamespacesSql(true); + } + + static String listViewNamespacesSql() { + return listNamespacesSql(false); + } + + private static String listAllNamespacesSql(boolean isTable) { + String tableName = isTable ? CATALOG_TABLE_NAME : CATALOG_VIEW_NAME; + String namespace = isTable ? TABLE_NAMESPACE : VIEW_NAMESPACE; + return String.format(LIST_ALL_NAMESPACES, namespace, tableName); + } + + static String listAllTableNamespacesSql() { + return listAllNamespacesSql(true); + } + + static String listAllViewNamespacesSql() { + return listAllNamespacesSql(false); + } + + private static String doCommitSql(boolean isTable) { + String tableName = isTable ? CATALOG_TABLE_NAME : CATALOG_VIEW_NAME; + String namespace = isTable ? TABLE_NAMESPACE : VIEW_NAMESPACE; + String name = isTable ? TABLE_NAME : VIEW_NAME; + return String.format(DO_COMMIT, tableName, namespace, name); + } + + private static String createCatalogSql(boolean isTable) { + String tableName = isTable ? CATALOG_TABLE_NAME : CATALOG_VIEW_NAME; + String namespace = isTable ? TABLE_NAMESPACE : VIEW_NAMESPACE; + String name = isTable ? TABLE_NAME : VIEW_NAME; + return String.format(CREATE_CATALOG, tableName, namespace, name, namespace, name); + } + + static String createCatalogTableSql() { + return createCatalogSql(true); + } + + static String createCatalogViewSql() { + return createCatalogSql(false); + } + + private static String listSql(boolean isTable) { + String tableName = isTable ? CATALOG_TABLE_NAME : CATALOG_VIEW_NAME; + String namespace = isTable ? TABLE_NAMESPACE : VIEW_NAMESPACE; + return String.format(LIST, tableName, namespace); + } + + static String listTablesSql() { + return listSql(true); + } + + static String listViewsSql() { + return listSql(false); + } + + private static String renameSql(boolean isTable) { + String tableName = isTable ? CATALOG_TABLE_NAME : CATALOG_VIEW_NAME; + String namespace = isTable ? TABLE_NAMESPACE : VIEW_NAMESPACE; + String name = isTable ? TABLE_NAME : VIEW_NAME; + return String.format(RENAME, tableName, namespace, name, namespace, name); + } + + static String renameTableSql() { + return renameSql(true); + } + + static String renameViewSql() { + return renameSql(false); + } + + private static String dropSql(boolean isTable) { + String tableName = isTable ? CATALOG_TABLE_NAME : CATALOG_VIEW_NAME; + String namespace = isTable ? TABLE_NAMESPACE : VIEW_NAMESPACE; + String name = isTable ? TABLE_NAME : VIEW_NAME; + return String.format(DROP, tableName, namespace, name); + } + + static String dropTableSql() { + return dropSql(true); + } + + static String dropViewSql() { + return dropSql(false); + } + + private static String doCommitCreateSql(boolean isTable) { + String tableName = isTable ? CATALOG_TABLE_NAME : CATALOG_VIEW_NAME; + String namespace = isTable ? TABLE_NAMESPACE : VIEW_NAMESPACE; + String name = isTable ? TABLE_NAME : VIEW_NAME; + return String.format(DO_COMMIT_CREATE, tableName, namespace, name); + } + + private static int update( + boolean isTable, + JdbcClientPool connections, + String catalogName, + TableIdentifier identifier, + String newMetadataLocation, + String oldMetadataLocation) + throws SQLException, InterruptedException { + return connections.run( + conn -> { + try (PreparedStatement sql = conn.prepareStatement(doCommitSql(isTable))) { + // UPDATE + sql.setString(1, newMetadataLocation); + sql.setString(2, oldMetadataLocation); + // WHERE + sql.setString(3, catalogName); + sql.setString(4, namespaceToString(identifier.namespace())); + sql.setString(5, identifier.name()); + sql.setString(6, oldMetadataLocation); + return sql.executeUpdate(); + } + }); + } + + static int updateTable( + JdbcClientPool connections, + String catalogName, + TableIdentifier tableIdentifier, + String newMetadataLocation, + String oldMetadataLocation) + throws SQLException, InterruptedException { + return update( + true, connections, catalogName, tableIdentifier, newMetadataLocation, oldMetadataLocation); + } + + static int updateView( + JdbcClientPool connections, + String catalogName, + TableIdentifier viewIdentifier, + String newMetadataLocation, + String oldMetadataLocation) + throws SQLException, InterruptedException { + return update( + false, connections, catalogName, viewIdentifier, newMetadataLocation, oldMetadataLocation); + } + + private static Map<String, String> get( + boolean isTable, JdbcClientPool connections, String catalogName, TableIdentifier identifier) + throws SQLException, InterruptedException { + return connections.run( + conn -> { + Map<String, String> tableOrView = Maps.newHashMap(); + + String getTableOrViewSqlStatement = JdbcUtil.getSql(isTable); + try (PreparedStatement sql = conn.prepareStatement(getTableOrViewSqlStatement)) { + sql.setString(1, catalogName); + sql.setString(2, namespaceToString(identifier.namespace())); + sql.setString(3, identifier.name()); + ResultSet rs = sql.executeQuery(); + + if (rs.next()) { + tableOrView.put(JdbcUtil.CATALOG_NAME, rs.getString(JdbcUtil.CATALOG_NAME)); + tableOrView.put( + (isTable ? JdbcUtil.TABLE_NAMESPACE : JdbcUtil.VIEW_NAMESPACE), + rs.getString((isTable ? JdbcUtil.TABLE_NAMESPACE : JdbcUtil.VIEW_NAMESPACE))); + tableOrView.put( + (isTable ? JdbcUtil.TABLE_NAME : JdbcUtil.VIEW_NAME), + rs.getString((isTable ? 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; + }); + } + + static Map<String, String> getTable( Review Comment: nit: we can remove the prefix get (to be uniform with iceberg coding style), can use fetch if really required. for getTable, getView, get(), getSql() -- 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