All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.phoenix.query.ConnectionQueryServices Maven / Gradle / Ivy

The newest version!
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.apache.phoenix.query;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HRegionLocation;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Mutation;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.client.TableDescriptor;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.security.User;
import org.apache.hadoop.hbase.util.Pair;
import org.apache.phoenix.compile.MutationPlan;
import org.apache.phoenix.coprocessorclient.MetaDataProtocol.MetaDataMutationResult;
import org.apache.phoenix.exception.SQLExceptionInfo;
import org.apache.phoenix.execute.MutationState;
import org.apache.phoenix.hbase.index.util.KeyValueBuilder;
import org.apache.phoenix.jdbc.PhoenixConnection;
import org.apache.phoenix.log.ConnectionLimiter;
import org.apache.phoenix.log.QueryLoggerDisruptor;
import org.apache.phoenix.parse.PFunction;
import org.apache.phoenix.schema.PColumn;
import org.apache.phoenix.schema.PMetaData;
import org.apache.phoenix.schema.PName;
import org.apache.phoenix.schema.PTable;
import org.apache.phoenix.schema.PTableType;
import org.apache.phoenix.schema.Sequence;
import org.apache.phoenix.schema.SequenceAllocation;
import org.apache.phoenix.schema.SequenceKey;
import org.apache.phoenix.schema.stats.GuidePostsInfo;
import org.apache.phoenix.schema.stats.GuidePostsKey;
import org.apache.phoenix.transaction.PhoenixTransactionClient;
import org.apache.phoenix.transaction.TransactionFactory;


public interface ConnectionQueryServices extends QueryServices, MetaDataMutated {
    public static final int INITIAL_META_DATA_TABLE_CAPACITY = 100;

    /**
     * Get (and create if necessary) a child QueryService for a given tenantId.
     * The QueryService will be cached for the lifetime of the parent QueryService
     * @param tenantId the organization ID
     * @return the child QueryService
     */
    public ConnectionQueryServices getChildQueryServices(ImmutableBytesWritable tenantId);

    /**
     * Get Table by the given name. It is the callers
     * responsibility to close the returned Table reference.
     *
     * @param tableName the name of the HTable
     * @return Table interface. It is caller's responsibility to close this
     *     returned Table reference.
     * @throws SQLException 
     */
    public Table getTable(byte[] tableName) throws SQLException;

    /**
     * Get Table by the given name. It is the responsibility of callers
     * to close the returned Table interface. This method uses additional Admin
     * API to ensure if table exists before returning Table interface from
     * Connection. If table does not exist, this method will throw
     * {@link org.apache.phoenix.schema.TableNotFoundException}
     * It is caller's responsibility to close returned Table reference.
     *
     * @param tableName the name of the Table
     * @return Table interface. It is caller's responsibility to close this
     *     returned Table reference.
     * @throws SQLException If something goes wrong while retrieving table
     *     interface from connection managed by implementor. If table does not
     *     exist, {@link org.apache.phoenix.schema.TableNotFoundException} will
     *     be thrown.
     */
    Table getTableIfExists(byte[] tableName) throws SQLException;

    public TableDescriptor getTableDescriptor(byte[] tableName) throws SQLException;

    public HRegionLocation getTableRegionLocation(byte[] tableName, byte[] row) throws SQLException;

    /**
     * Retrieve the region metadata locations for all regions of the given table.
     * This method is Deprecated. Use {@link #getAllTableRegions(byte[], int)} instead.
     *
     * @param tableName The table name.
     * @return The list of table region locations.
     * @throws SQLException If fails to retrieve region locations.
     */
    @Deprecated
    public List getAllTableRegions(byte[] tableName) throws SQLException;

    /**
     * Retrieve the region metadata locations for all regions of the given table.
     * The operation to retrieve the table region locations must be completed within
     * the query timeout.
     *
     * @param tableName Table name.
     * @param queryTimeout Phoenix query timeout.
     * @return The list of region locations.
     * @throws SQLException If fails to retrieve region locations.
     */
    public List getAllTableRegions(byte[] tableName, int queryTimeout)
            throws SQLException;

    /**
     * Retrieve table region locations that cover the startRowKey and endRowKey. The start key
     * of the first region of the returned list must be less than or equal to startRowKey.
     * The end key of the last region of the returned list must be greater than or equal to
     * endRowKey.
     * This method is Deprecated. Use {@link #getTableRegions(byte[], byte[], byte[], int)} instead.
     *
     * @param tableName Table name.
     * @param startRowKey Start RowKey.
     * @param endRowKey End RowKey.
     * @return The list of region locations that cover the startRowKey and endRowKey key boundary.
     * @throws SQLException If fails to retrieve region locations.
     */
    @Deprecated
    public List getTableRegions(byte[] tableName, byte[] startRowKey,
                                                 byte[] endRowKey) throws SQLException;

    /**
     * Retrieve table region locations that cover the startRowKey and endRowKey. The start key
     * of the first region of the returned list must be less than or equal to startRowKey.
     * The end key of the last region of the returned list must be greater than or equal to
     * endRowKey. The operation to retrieve the table region locations must be completed within
     * the query timeout.
     *
     * @param tableName    Table name.
     * @param startRowKey  Start RowKey.
     * @param endRowKey    End RowKey.
     * @param queryTimeout Phoenix query timeout.
     * @return The list of region locations that cover the startRowKey and endRowKey key boundary.
     * @throws SQLException If fails to retrieve region locations.
     */
    public List getTableRegions(byte[] tableName, byte[] startRowKey,
                                                 byte[] endRowKey,
                                                 int queryTimeout) throws SQLException;

    public PhoenixConnection connect(String url, Properties info) throws SQLException;

    /**
     * @param tableTimestamp timestamp of table if its present in the client side cache
     * @param clientTimetamp if the client connection has an scn, or of the table is transactional
     *            the txn write pointer
     * @return PTable for the given tenant id, schema and table name
     */
    public MetaDataMutationResult getTable(PName tenantId, byte[] schemaName, byte[] tableName,
            long tableTimestamp, long clientTimetamp) throws SQLException;
    public MetaDataMutationResult getFunctions(PName tenantId, List> functionNameAndTimeStampPairs, long clientTimestamp) throws SQLException;

    public MetaDataMutationResult createTable(List tableMetaData, byte[] tableName, PTableType tableType,
                                              Map tableProps,
                                              List>> families, byte[][] splits,
                                              boolean isNamespaceMapped, boolean allocateIndexId,
                                              boolean isDoNotUpgradePropSet, PTable parentTable) throws SQLException;
    public MetaDataMutationResult dropTable(List tableMetadata, PTableType tableType, boolean cascade) throws SQLException;
    public MetaDataMutationResult dropFunction(List tableMetadata, boolean ifExists) throws SQLException;
    public MetaDataMutationResult addColumn(List tableMetaData,
                                            PTable table,
                                            PTable parentTable,
                                            PTable transformingNewTable,
                                            Map>> properties,
                                            Set colFamiliesForPColumnsToBeAdded,
                                            List columns) throws SQLException;
    public MetaDataMutationResult dropColumn(List tableMetadata,
                                             PTableType tableType, PTable parentTable) throws SQLException;
    public MetaDataMutationResult updateIndexState(List tableMetadata, String parentTableName) throws SQLException;
    public MetaDataMutationResult updateIndexState(List tableMetadata, String parentTableName,  Map>> stmtProperties,  PTable table) throws SQLException;

    public MutationState updateData(MutationPlan plan) throws SQLException;

    public void init(String url, Properties props) throws SQLException;

    public int getLowestClusterHBaseVersion();
    public Admin getAdmin() throws SQLException;

    void clearTableRegionCache(TableName name) throws SQLException;

    boolean hasIndexWALCodec();
    
    long createSequence(String tenantId, String schemaName, String sequenceName, long startWith, long incrementBy, long cacheSize, long minValue, long maxValue, boolean cycle, long timestamp) throws SQLException;
    long dropSequence(String tenantId, String schemaName, String sequenceName, long timestamp) throws SQLException;
    void validateSequences(List sequenceAllocations, long timestamp, long[] values, SQLException[] exceptions, Sequence.ValueOp action) throws SQLException;
    void incrementSequences(List sequenceAllocation, long timestamp, long[] values, SQLException[] exceptions) throws SQLException;
    long currentSequenceValue(SequenceKey sequenceKey, long timestamp) throws SQLException;
    void returnSequences(List sequenceKeys, long timestamp, SQLException[] exceptions) throws SQLException;

    MetaDataMutationResult createFunction(List functionData, PFunction function, boolean temporary) throws SQLException;
    void addConnection(PhoenixConnection connection) throws SQLException;
    void removeConnection(PhoenixConnection connection) throws SQLException;

    /**
     * @return the {@link KeyValueBuilder} that is valid for the locally installed version of HBase.
     */
    public KeyValueBuilder getKeyValueBuilder();
    
    public enum Feature {LOCAL_INDEX, RENEW_LEASE};
    public boolean supportsFeature(Feature feature);
    
    public String getUserName();
    public void clearTableFromCache(final byte[] tenantId, final byte[] schemaName, final byte[] tableName, long clientTS) throws SQLException;

    public GuidePostsInfo getTableStats(GuidePostsKey key) throws SQLException;
    /**
     * Removes cache {@link GuidePostsInfo} for the table with the given name. If no cached guideposts are present, this does nothing.
     *
     * @param key
     */
    void invalidateStats(GuidePostsKey key);
    
    
    public long clearCache() throws SQLException;
    public int getSequenceSaltBuckets();

    public long getRenewLeaseThresholdMilliSeconds();
    public boolean isRenewingLeasesEnabled();

    public MetaDataMutationResult createSchema(List schemaMutations, String schemaName) throws SQLException;

    MetaDataMutationResult getSchema(String schemaName, long clientTimestamp) throws SQLException;

    public MetaDataMutationResult dropSchema(List schemaMetaData, String schemaName) throws SQLException;

    boolean isUpgradeRequired();
    void clearUpgradeRequired();
    void upgradeSystemTables(String url, Properties props) throws SQLException;
    
    public Configuration getConfiguration();

    public User getUser();

    public QueryLoggerDisruptor getQueryDisruptor();
    
    public PhoenixTransactionClient initTransactionClient(TransactionFactory.Provider provider) throws SQLException;
    
    /**
     * Writes a cell to SYSTEM.MUTEX using checkAndPut to ensure only a single client can execute a
     * particular task. The params are used to generate the rowkey.
     * @return true if this client was able to successfully acquire the mutex
     */
    public boolean writeMutexCell(String tenantId, String schemaName, String tableName,
            String columnName, String familyName) throws SQLException;

    /**
     * Deletes a cell that was written to SYSTEM.MUTEX. The params are used to generate the rowkey.
     */
    public void deleteMutexCell(String tenantId, String schemaName, String tableName,
            String columnName, String familyName) throws SQLException;

    /**
     * Close all phoenix connections created using this CQS.
     *
     * @param reasonBuilder exception builder for building reasons why connection is closed.
     */
    default void closeAllConnections(SQLExceptionInfo.Builder reasonBuilder) {
        throw new UnsupportedOperationException();
    }

    PMetaData getMetaDataCache();
    public default ConnectionLimiter getConnectionLimiter()  {
        throw new UnsupportedOperationException();
    }

    int getConnectionCount(boolean isInternal);
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy