/* * DBeaver - Universal Database Manager * Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jkiss.dbeaver.model.data; import org.jkiss.code.NotNull; import org.jkiss.code.Nullable; import org.jkiss.dbeaver.model.*; import org.jkiss.dbeaver.model.exec.DBCAttributeMetaData; import org.jkiss.dbeaver.model.struct.DBSEntity; import org.jkiss.dbeaver.model.struct.DBSEntityAttribute; /** * Pseudo attribute */ public class DBDPseudoAttribute implements DBPNamedObject { private final DBDPseudoAttributeType type; private final String name; private final String queryExpression; private final String alias; private final String description; private final boolean autoGenerated; public DBDPseudoAttribute(DBDPseudoAttributeType type, String name, String queryExpression, @Nullable String alias, String description, boolean autoGenerated) { this.type = type; this.name = name; this.queryExpression = queryExpression; this.alias = alias; this.description = description; this.autoGenerated = autoGenerated; } @NotNull @Override public String getName() { return name; } public DBDPseudoAttributeType getType() { return type; } public boolean isAutoGenerated() { return autoGenerated; } public String getQueryExpression() { return queryExpression; } @Nullable public String getAlias() { return alias; } public String getDescription() { return description; } public String translateExpression(String tableAlias) { return queryExpression.replace("$alias", tableAlias); } @Override public String toString() { return name + " (" + type + ")"; } public DBSEntityAttribute createFakeAttribute(DBSEntity owner, DBCAttributeMetaData attribute) { return new FakeEntityAttribute(owner, attribute); } @Nullable public static DBDPseudoAttribute getAttribute(DBDPseudoAttribute[] attributes, DBDPseudoAttributeType type) { if (attributes == null || attributes.length == 0) { return null; } for (DBDPseudoAttribute attribute : attributes) { if (attribute.getType() == type) { return attribute; } } return null; } private class FakeEntityAttribute implements DBSEntityAttribute, DBPQualifiedObject { private DBSEntity owner; private DBCAttributeMetaData attribute; public FakeEntityAttribute(DBSEntity owner, DBCAttributeMetaData attribute) { this.owner = owner; this.attribute = attribute; } @Override public boolean isAutoGenerated() { return autoGenerated; } @Override public int getOrdinalPosition() { return attribute.getOrdinalPosition(); } @Nullable @Override public String getDefaultValue() { return null; } @NotNull @Override public DBSEntity getParentObject() { return owner; } @Nullable @Override public String getDescription() { return description; } @NotNull @Override public DBPDataSource getDataSource() { return owner.getDataSource(); } @NotNull @Override public String getName() { return name; } @Override public boolean isPersisted() { return true; } @Override public boolean isRequired() { return attribute.isRequired(); } @Override public String getTypeName() { return attribute.getTypeName(); } @Override public String getFullTypeName() { return attribute.getFullTypeName(); } @Override public int getTypeID() { return attribute.getTypeID(); } @Override public DBPDataKind getDataKind() { return attribute.getDataKind(); } @Override public int getScale() { return attribute.getScale(); } @Override public int getPrecision() { return attribute.getPrecision(); } @Override public long getMaxLength() { return attribute.getMaxLength(); } /** * Implements qualified object to avoid attribute name quoting */ @NotNull @Override public String getFullyQualifiedName(DBPEvaluationContext context) { return name; } } }