Package com.alibaba.druid.hdriver.impl.execute

Source Code of com.alibaba.druid.hdriver.impl.execute.ShowTablesPlan$ShowTableResultSet

package com.alibaba.druid.hdriver.impl.execute;

import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;

import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.HBaseAdmin;

import com.alibaba.druid.hdriver.HResultSet;
import com.alibaba.druid.hdriver.HStatement;
import com.alibaba.druid.hdriver.impl.HPreparedStatementImpl;
import com.alibaba.druid.hdriver.impl.HResultSetMetaDataImpl;
import com.alibaba.druid.util.jdbc.ResultSetBase;
import com.alibaba.druid.util.jdbc.ResultSetMetaDataBase.ColumnMetaData;

public class ShowTablesPlan implements ExecutePlan {

    @Override
    public HResultSet executeQuery(HPreparedStatementImpl statement) throws SQLException {
        try {
            HBaseAdmin admin = statement.getConnection().getEngine().getHBaseAdmin();

            HTableDescriptor[] tables = admin.listTables();

            return new ShowTableResultSet(statement, tables);
        } catch (SQLException e) {
            throw e;
        } catch (Exception e) {
            throw new SQLException("executeQuery error", e);
        }
    }

    @Override
    public boolean execute(HPreparedStatementImpl statement) throws SQLException {
        HResultSet resultSet = executeQuery(statement);
        statement.setResultSet(resultSet);
        return true;
    }

    public static class ShowTableResultSet extends ResultSetBase implements HResultSet {

        private final HTableDescriptor[] tables;
        private int                      rowIndex = -1;

        public ShowTableResultSet(Statement statement, HTableDescriptor[] tables){
            super(statement);
            this.tables = tables;

            HResultSetMetaDataImpl metaData = new HResultSetMetaDataImpl();
            {
                ColumnMetaData column = new ColumnMetaData();
                column.setColumnName("name");
                column.setColumnType(Types.VARCHAR);
                column.setColumnTypeName("VARCHAR");
                metaData.getColumns().add(column);
            }
            {
                ColumnMetaData column = new ColumnMetaData();
                column.setColumnName("owner");
                column.setColumnType(Types.VARCHAR);
                column.setColumnTypeName("VARCHAR");
                metaData.getColumns().add(column);
            }
            {
                ColumnMetaData column = new ColumnMetaData();
                column.setColumnName("familys");
                column.setColumnType(Types.VARCHAR);
                column.setColumnTypeName("VARCHAR");
                metaData.getColumns().add(column);
            }
            {
                ColumnMetaData column = new ColumnMetaData();
                column.setColumnName("maxFileSize");
                column.setColumnType(Types.BIGINT);
                column.setColumnTypeName("long");
                metaData.getColumns().add(column);
            }
            {
                ColumnMetaData column = new ColumnMetaData();
                column.setColumnName("memStoreFlushSize");
                column.setColumnType(Types.BIGINT);
                column.setColumnTypeName("long");
                metaData.getColumns().add(column);
            }
            {
                ColumnMetaData column = new ColumnMetaData();
                column.setColumnName("regionSplitPolicyClassName");
                column.setColumnType(Types.VARCHAR);
                column.setColumnTypeName("VARCHAR");
                metaData.getColumns().add(column);
            }
            this.metaData = metaData;
        }

        @Override
        public synchronized boolean next() throws SQLException {
            if (closed) {
                throw new SQLException();
            }

            if (rowIndex < tables.length - 1) {
                rowIndex++;
                return true;
            }
            return false;
        }

        @Override
        public synchronized boolean previous() throws SQLException {
            if (closed) {
                throw new SQLException();
            }

            if (rowIndex > 0) {
                rowIndex--;
                return true;
            }
            return false;
        }

        public String getString(String columnName) {
            return (String) getObject(columnName);
        }

        public Object getObject(String columnName) {
            HTableDescriptor table = tables[rowIndex];

            if ("name".equals(columnName)) {
                return table.getNameAsString();
            }

            if ("owner".equals(columnName)) {
                return table.getOwnerString();
            }

            if ("familys".equals(columnName)) {
                StringBuffer buf = new StringBuffer();
                for (HColumnDescriptor column : table.getFamilies()) {
                    if (buf.length() != 0) {
                        buf.append(',');
                    }
                    buf.append(column.getNameAsString());
                }
                return buf.toString();
            }

            if ("maxFileSize".equals(columnName)) {
                return table.getMaxFileSize();
            }
           
            if ("memStoreFlushSize".equals(columnName)) {
                return table.getMemStoreFlushSize();
            }
           
            if ("regionSplitPolicyClassName".equals(columnName)) {
                return table.getRegionSplitPolicyClassName();
            }
           
            return null;
        }

        @Override
        public int findColumn(String columnName) throws SQLException {
            HResultSetMetaDataImpl meta = (HResultSetMetaDataImpl) this.metaData;
            return meta.findColumn(columnName);
        }

        @Override
        public void updateObject(int columnIndex, Object x) throws SQLException {
        }
       
        @Override
        public HStatement getStatement() throws SQLException {
            return (HStatement) statement;
        }
    }
}
TOP

Related Classes of com.alibaba.druid.hdriver.impl.execute.ShowTablesPlan$ShowTableResultSet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.