001package gudusoft.gsqlparser.catalog.input.model; 002 003import java.util.Objects; 004 005/** 006 * Synonym entry inside a {@link SchemaModel}. 007 * 008 * <p>Plan ยง6. {@code targetQualifiedName} is the dotted reference the synonym 009 * resolves to; the resolver normalizes/parses it through 010 * {@code CatalogIdentifierPolicy} when materializing the synonym.</p> 011 */ 012public final class SynonymModel { 013 014 private final String name; 015 private final String targetQualifiedName; 016 017 private SynonymModel(Builder b) { 018 if (b.name == null || b.name.isEmpty()) { 019 throw new IllegalArgumentException("SynonymModel.name is required"); 020 } 021 if (b.targetQualifiedName == null || b.targetQualifiedName.isEmpty()) { 022 throw new IllegalArgumentException( 023 "SynonymModel.targetQualifiedName is required (synonym '" + b.name + "')"); 024 } 025 this.name = b.name; 026 this.targetQualifiedName = b.targetQualifiedName; 027 } 028 029 public static Builder builder() { 030 return new Builder(); 031 } 032 033 public String name() { 034 return name; 035 } 036 037 public String targetQualifiedName() { 038 return targetQualifiedName; 039 } 040 041 @Override 042 public boolean equals(Object o) { 043 if (this == o) return true; 044 if (!(o instanceof SynonymModel)) return false; 045 SynonymModel that = (SynonymModel) o; 046 return name.equals(that.name) && targetQualifiedName.equals(that.targetQualifiedName); 047 } 048 049 @Override 050 public int hashCode() { 051 return Objects.hash(name, targetQualifiedName); 052 } 053 054 @Override 055 public String toString() { 056 return "SynonymModel{name=" + name + ", target=" + targetQualifiedName + '}'; 057 } 058 059 public static final class Builder { 060 061 private String name; 062 private String targetQualifiedName; 063 064 private Builder() { 065 } 066 067 public Builder name(String v) { 068 this.name = v; 069 return this; 070 } 071 072 public Builder targetQualifiedName(String v) { 073 this.targetQualifiedName = v; 074 return this; 075 } 076 077 public SynonymModel build() { 078 return new SynonymModel(this); 079 } 080 } 081}