001package gudusoft.gsqlparser.sqlenv; 002 003import gudusoft.gsqlparser.EDbVendor; 004 005import java.util.Objects; 006 007/** 008 * Value object representing a multi-part qualified name and its canonical form. 009 */ 010public final class QualifiedName { 011 012 public final String server; 013 public final String catalog; 014 public final String schema; 015 public final String object; 016 public final String column; // optional 017 public final ESQLDataObjectType objectType; 018 019 public final String cServer; 020 public final String cCatalog; 021 public final String cSchema; 022 public final String cObject; 023 public final String cColumn; 024 025 public QualifiedName(EDbVendor vendor, 026 String server, 027 String catalog, 028 String schema, 029 String object, 030 String column, 031 ESQLDataObjectType objectType) { 032 this.server = server == null ? TSQLEnv.DEFAULT_SERVER_NAME : server; 033 this.catalog = catalog; 034 this.schema = schema; 035 this.object = Objects.requireNonNull(object, "object"); 036 this.column = column; 037 this.objectType = Objects.requireNonNull(objectType, "objectType"); 038 039 this.cServer = this.server; // server normalization currently identity 040 this.cCatalog = NameNormalizer.canonicalize(vendor, ESQLDataObjectType.dotCatalog, defaultIfNull(catalog, TSQLEnv.DEFAULT_DB_NAME)); 041 this.cSchema = NameNormalizer.canonicalize(vendor, ESQLDataObjectType.dotSchema, defaultIfNull(schema, TSQLEnv.DEFAULT_SCHEMA_NAME)); 042 this.cObject = NameNormalizer.canonicalize(vendor, this.objectType == ESQLDataObjectType.dotColumn ? ESQLDataObjectType.dotTable : this.objectType, this.object); 043 this.cColumn = column == null ? null : NameNormalizer.canonicalize(vendor, ESQLDataObjectType.dotColumn, column); 044 } 045 046 private static String defaultIfNull(String v, String def) { 047 return v == null ? def : v; 048 } 049 050 public NameKey toObjectKey() { 051 return new NameKey(objectType == ESQLDataObjectType.dotColumn ? ESQLDataObjectType.dotTable : objectType, 052 cServer, cCatalog, cSchema, cObject); 053 } 054 055 public NameKey toColumnTableKey() { 056 return new NameKey(ESQLDataObjectType.dotTable, cServer, cCatalog, cSchema, cObject); 057 } 058} 059 060