001package gudusoft.gsqlparser.sqlenv.catalog; 002 003import gudusoft.gsqlparser.sqlenv.ESQLDataObjectType; 004import gudusoft.gsqlparser.sqlenv.TSQLCatalog; 005import gudusoft.gsqlparser.sqlenv.TSQLEnv; 006import gudusoft.gsqlparser.sqlenv.TSQLSchemaObject; 007 008import java.util.ArrayList; 009import java.util.List; 010 011/** 012 * Legacy Catalog Provider(兼容旧实现) 013 * 014 * <p>此实现包装 TSQLEnv 的旧 catalogList,提供 ICatalogProvider 接口。 015 * 016 * @since 3.2.0 (Phase 0) 017 */ 018public class LegacyCatalogProvider implements ICatalogProvider { 019 020 private final TSQLEnv sqlEnv; 021 private final List<TSQLCatalog> catalogList; 022 private String defaultCatalogName; 023 024 public LegacyCatalogProvider(TSQLEnv sqlEnv, List<TSQLCatalog> catalogList) { 025 this.sqlEnv = sqlEnv; 026 this.catalogList = catalogList; 027 } 028 029 @Override 030 public TSQLCatalog getCatalog(String catalogName) { 031 // Delegate to TSQLEnv's searchCatalog 032 return sqlEnv.searchCatalog(catalogName); 033 } 034 035 @Override 036 public TSQLCatalog createCatalog(String catalogName) { 037 // Delegate to TSQLEnv's createSQLCatalog 038 return sqlEnv.createSQLCatalog(catalogName); 039 } 040 041 @Override 042 public List<TSQLCatalog> getAllCatalogs() { 043 return new ArrayList<>(catalogList); 044 } 045 046 @Override 047 public String getDefaultCatalogName() { 048 return defaultCatalogName != null ? defaultCatalogName : sqlEnv.getDefaultCatalogName(); 049 } 050 051 @Override 052 public void setDefaultCatalogName(String name) { 053 this.defaultCatalogName = name; 054 sqlEnv.setDefaultCatalogName(name); 055 } 056 057 @Override 058 public TSQLSchemaObject findObject(String catalog, String schema, 059 String objectName, ESQLDataObjectType type) { 060 // Build qualified name catalog.schema.object 061 String qualifiedName; 062 if (catalog != null && !catalog.isEmpty() && schema != null && !schema.isEmpty()) { 063 qualifiedName = catalog + "." + schema + "." + objectName; 064 } else if (schema != null && !schema.isEmpty()) { 065 qualifiedName = "." + schema + "." + objectName; 066 } else if (catalog != null && !catalog.isEmpty()) { 067 qualifiedName = catalog + ".." + objectName; 068 } else { 069 qualifiedName = ".." + objectName; 070 } 071 072 // Delegate to TSQLEnv's searchSchemaObject 073 return sqlEnv.searchSchemaObject(qualifiedName, type); 074 } 075 076 @Override 077 public void addObject(TSQLSchemaObject object) { 078 // The object is already added through TSQLSchema.addSchemaObject() 079 // which calls TSQLEnv.putSchemaObject() 080 // So this method doesn't need to do anything for legacy implementation 081 082 // Note: TSQLSchemaObject constructor already adds itself to schema via schema.addSchemaObject(this) 083 // which eventually calls TSQLEnv.putSchemaObject() 084 } 085 086 @Override 087 public boolean removeObject(TSQLSchemaObject object) { 088 // Legacy implementation doesn't support removal 089 // Would need to traverse catalogList → schemaList → objectList 090 throw new UnsupportedOperationException("removeObject is not supported in legacy implementation"); 091 } 092 093 @Override 094 public void clear() { 095 catalogList.clear(); 096 // Note: This doesn't clear the schemaObjectList in TSQLEnv 097 // For a complete clear, would need to access TSQLEnv internals 098 } 099 100 @Override 101 public int size() { 102 // Count all objects across all catalogs and schemas 103 int count = 0; 104 for (TSQLCatalog catalog : catalogList) { 105 for (gudusoft.gsqlparser.sqlenv.TSQLSchema schema : catalog.getSchemaList()) { 106 count += schema.getSchemaObjectList().size(); 107 } 108 } 109 return count; 110 } 111}