package com.tesora.dve.sql.schema; /* * #%L * Tesora Inc. * Database Virtualization Engine * %% * Copyright (C) 2011 - 2014 Tesora Inc. * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License, version 3, * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ import java.util.List; import com.tesora.dve.common.catalog.CatalogDAO; import com.tesora.dve.exceptions.PEException; import com.tesora.dve.infomessage.ConnectionMessageManager; import com.tesora.dve.lockmanager.LockSpecification; import com.tesora.dve.lockmanager.LockType; import com.tesora.dve.server.connectionmanager.SSConnection; import com.tesora.dve.sql.schema.PEAbstractTable.TableCacheKey; import com.tesora.dve.sql.schema.cache.NonMTCachedPlan; import com.tesora.dve.sql.schema.cache.SchemaEdge; import com.tesora.dve.sql.schema.mt.IPETenant; import com.tesora.dve.variables.AbstractVariableAccessor; import com.tesora.dve.variables.VariableStoreSource; public class SSConnectionContext implements ConnectionContext { protected SSConnection backing; protected SchemaContext schemaContext; public SSConnectionContext(SSConnection conn) { backing = conn; } @Override public void setSchemaContext(SchemaContext sc) { schemaContext = sc; } @SuppressWarnings("unchecked") @Override public SchemaEdge<IPETenant> getCurrentTenant() { return StructuralUtils.buildEdge(schemaContext, backing.getCurrentTenant(), true); } @Override public boolean allowTenantColumnDecls() { return false; } @Override public void setCurrentTenant(IPETenant ten) { backing.setCurrentTenant(ten); } @Override public String getVariableValue(AbstractVariableAccessor va) throws PEException { return va.getValue(backing); } @Override public List<List<String>> getVariables(VariableScope vs) throws PEException { return AbstractVariableAccessor.getValues(vs, getVariableSource()); } @Override public SchemaEdge<PEUser> getUser() { return backing.getUser(); } @Override public SchemaEdge<Database<?>> getCurrentDatabase() { return backing.getCurrentDatabaseEdge(); } @Override public String getName() { return backing.getName(); } @Override public void acquireLock(LockSpecification ls, LockType type) { backing.acquireLock(ls, type); } @Override public boolean isInTxn() { return backing.hasActiveTransaction(); } @Override public boolean isInXATxn() { return backing.hasActiveXATransaction(); } @Override public ConnectionContext copy() { return new SSConnectionContext(backing); } @Override public boolean hasFilter() { if (backing != null) { return backing.getReplicationOptions().getFilteredTables().size()>0; } return false; } @Override public boolean isFilteredTable(Name table) { if (backing != null) { Name t = table.getCapitalized(); for(TableCacheKey k : backing.getReplicationOptions().getFilteredTables()) { Name n = new QualifiedName(new UnqualifiedName(k.getDatabaseName()), k.getTableName().getUnqualified()); if (n.getCapitalized().equals(t)) { return true; } } } return false; } @Override public boolean originatedFromReplicationSlave() { if (backing != null) { return backing.getReplicationOptions().connectionFromReplicationSlave(); } return false; } @Override public String getCacheName() { if (backing != null) { return backing.getCacheName(); } return NonMTCachedPlan.GLOBAL_CACHE_NAME; } @Override public int getConnectionId() { return backing.getConnectionId(); } @Override public ConnectionMessageManager getMessageManager() { return backing.getMessageManager(); } @Override public long getLastInsertedId() { return backing.getLastInsertedId(); } @Override public void setCurrentDatabase(Database<?> db) { backing.setCurrentDatabase(db); } @Override public CatalogDAO getDAO() { return backing.getCatalogDAO(); } @Override public VariableStoreSource getVariableSource() { return backing; } }