001package gudusoft.gsqlparser.sqlenv.catalog; 002 003import gudusoft.gsqlparser.sqlenv.ESQLDataObjectType; 004import gudusoft.gsqlparser.sqlenv.TSQLCatalog; 005import gudusoft.gsqlparser.sqlenv.TSQLSchemaObject; 006 007import java.util.List; 008 009/** 010 * Catalog 提供者接口(解耦 TSQLEnv 与具体实现) 011 * 012 * <p>此接口将 Catalog 存储与检索抽象化,支持多种实现: 013 * <ul> 014 * <li>LegacyCatalogProvider: 兼容旧实现(catalogList) 015 * <li>CatalogStoreProvider: 新实现(CatalogStore) 016 * <li>DatabaseCatalogProvider: 外部数据库持久化 017 * <li>CachedCatalogProvider: Redis/Memcached 缓存 018 * </ul> 019 * 020 * @since 3.2.0 (Phase 0) 021 */ 022public interface ICatalogProvider { 023 024 /** 025 * 获取 catalog(不存在返回 null) 026 * 027 * @param catalogName catalog 名称 028 * @return catalog 实例,未找到返回 null 029 */ 030 TSQLCatalog getCatalog(String catalogName); 031 032 /** 033 * 创建 catalog(已存在则返回现有) 034 * 035 * @param catalogName catalog 名称 036 * @return catalog 实例 037 */ 038 TSQLCatalog createCatalog(String catalogName); 039 040 /** 041 * 获取所有 catalog 042 * 043 * @return catalog 列表 044 */ 045 List<TSQLCatalog> getAllCatalogs(); 046 047 /** 048 * 获取默认 catalog 名称 049 * 050 * @return 默认 catalog 名称 051 */ 052 String getDefaultCatalogName(); 053 054 /** 055 * 设置默认 catalog 名称 056 * 057 * @param name 默认 catalog 名称 058 */ 059 void setDefaultCatalogName(String name); 060 061 /** 062 * 查找 schema 对象(全限定名查找) 063 * 064 * @param catalog catalog 名称 065 * @param schema schema 名称 066 * @param objectName 对象名称 067 * @param type 对象类型 068 * @return schema 对象,未找到返回 null 069 */ 070 TSQLSchemaObject findObject(String catalog, String schema, 071 String objectName, ESQLDataObjectType type); 072 073 /** 074 * 添加 schema 对象 075 * 076 * @param object schema 对象 077 */ 078 void addObject(TSQLSchemaObject object); 079 080 /** 081 * 移除 schema 对象 082 * 083 * @param object schema 对象 084 * @return true 如果移除成功 085 */ 086 boolean removeObject(TSQLSchemaObject object); 087 088 /** 089 * 清空所有对象 090 */ 091 void clear(); 092 093 /** 094 * 获取对象总数 095 * 096 * @return 对象总数 097 */ 098 int size(); 099}