Package org.apache.blur.jdbc

Source Code of org.apache.blur.jdbc.BlurDatabaseMetaData$TableDescriptorResultSet

package org.apache.blur.jdbc;

/**
* 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.
*/
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.RowIdLifetime;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import org.apache.blur.jdbc.abstractimpl.AbstractBlurDatabaseMetaData;
import org.apache.blur.jdbc.util.EmptyResultSet;
import org.apache.blur.jdbc.util.SimpleStringResultSet;
import org.apache.blur.thirdparty.thrift_0_9_0.TException;
import org.apache.blur.thrift.BlurClientManager;
import org.apache.blur.thrift.commands.BlurCommand;
import org.apache.blur.thrift.generated.Blur.Client;
import org.apache.blur.thrift.generated.BlurException;
import org.apache.blur.thrift.generated.ColumnDefinition;
import org.apache.blur.thrift.generated.Schema;
import org.apache.blur.thrift.generated.TableDescriptor;


public class BlurDatabaseMetaData extends AbstractBlurDatabaseMetaData {

  private static final String REF_GENERATION = "REF_GENERATION";
  private static final String SELF_REFERENCING_COL_NAME = "SELF_REFERENCING_COL_NAME";
  private static final String TYPE_NAME = "TYPE_NAME";
  private static final String TYPE_SCHEM = "TYPE_SCHEM";
  private static final String TYPE_CAT = "TYPE_CAT";
  private static final String REMARKS = "REMARKS";
  private static final String TABLE_TYPE = "TABLE_TYPE";
  private static final String TABLE_NAME = "TABLE_NAME";
  private static final String TABLE_SCHEM = "TABLE_SCHEM";
  private static final String TABLE_CAT = "TABLE_CAT";
  private static final String TABLE_CATALOG = "TABLE_CATALOG";

  private int minorVersion = 1;
  private int majorVersion = 1;
  private String url;
  private String username;
  private List<String> tables;
  private Map<String, Schema> schemaMap = new TreeMap<String, Schema>();

  public BlurDatabaseMetaData(String url, String username, String connectionString) {
    this.url = url;
    this.username = username;
    try {
      BlurClientManager.execute(connectionString, new BlurCommand<Void>() {
        @Override
        public Void call(Client client) throws BlurException, TException {
          tables = client.tableList();
          for (String table : tables) {
            TableDescriptor descriptor = client.describe(table);
            if (descriptor.isEnabled()) {
              schemaMap.put(table, client.schema(table));
            }
          }
          return null;
        }
      });
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

  @Override
  public ResultSet getBestRowIdentifier(String catalog, String schema, String table, int scope, boolean nullable) throws SQLException {
    return super.getBestRowIdentifier(catalog, schema, table, scope, nullable);
  }

  @Override
  public ResultSet getSchemas() throws SQLException {
    List<Map<String, String>> data = new ArrayList<Map<String, String>>();
    for (String table : tables) {
      Map<String, String> row = new HashMap<String, String>();
      row.put(TABLE_SCHEM, table);
      data.add(row);
    }
    return new SimpleStringResultSet(Arrays.asList(TABLE_SCHEM, TABLE_CATALOG), data);
  }

  @Override
  public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) throws SQLException {
    List<Map<String, String>> data = new ArrayList<Map<String, String>>();
    for (String table : tables) {
      if (tableNamePattern != null && !table.equals(tableNamePattern)) {
        continue;
      }
      Schema schema = schemaMap.get(table);
      Map<String, Map<String, ColumnDefinition>> families = schema.getFamilies();
      addTableRow(data, table, table);
      for (String columnFamily : families.keySet()) {
        String tablePlusCf = table + "." + columnFamily;
        if (tableNamePattern != null && !tablePlusCf.equals(tableNamePattern)) {
          continue;
        }
        addTableRow(data, table, tablePlusCf);
      }
    }
    return new TableDescriptorResultSet(data);
  }

  @Override
  public ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) throws SQLException {
    return new EmptyResultSet();
  }

  private void addTableRow(List<Map<String, String>> data, String schem, String table) {
    Map<String, String> row = new HashMap<String, String>();
    row.put(TABLE_SCHEM, schem);
    row.put(TABLE_NAME, table);
    row.put(TABLE_TYPE, "TABLE");
    row.put(REMARKS, "");
    data.add(row);
  }

  public static class TableDescriptorResultSet extends SimpleStringResultSet {
    private static final List<String> COL_NAMES = Arrays.asList(TABLE_CAT, TABLE_SCHEM, TABLE_NAME, TABLE_TYPE, REMARKS, TYPE_CAT, TYPE_SCHEM, TYPE_NAME,
        SELF_REFERENCING_COL_NAME, REF_GENERATION);

    public TableDescriptorResultSet(List<Map<String, String>> data) {
      super(COL_NAMES, data);
    }
  }

  @Override
  public ResultSet getSuperTables(String catalog, String schemaPattern, String tableNamePattern) throws SQLException {
    return new EmptyResultSet();
  }

  @Override
  public ResultSet getProcedures(String catalog, String schemaPattern, String procedureNamePattern) throws SQLException {
    return new EmptyResultSet();
  }

  @Override
  public String getSQLKeywords() throws SQLException {
    return "";
  }

  public int getDefaultTransactionIsolation() throws SQLException {
    return Connection.TRANSACTION_NONE;
  }

  public ResultSet getTableTypes() throws SQLException {
    return new EmptyResultSet();
  }

  public String getDatabaseProductName() throws SQLException {
    return "blur";
  }

  public String getCatalogSeparator() throws SQLException {
    return ",";
  }

  public String getDriverName() throws SQLException {
    return "blur";
  }

  public String getDriverVersion() throws SQLException {
    return "0.1";
  }

  public String getIdentifierQuoteString() throws SQLException {
    return "'";
  }

  @Override
  public String getDatabaseProductVersion() throws SQLException {
    return "0.1";
  }

  @Override
  public ResultSet getCatalogs() throws SQLException {
    return new EmptyResultSet();
  }

  @Override
  public ResultSet getClientInfoProperties() throws SQLException {
    return new EmptyResultSet();
  }

  @Override
  public RowIdLifetime getRowIdLifetime() throws SQLException {
    return RowIdLifetime.ROWID_UNSUPPORTED;
  }

  @Override
  public int getSQLStateType() throws SQLException {
    return sqlStateSQL;
  }

  @Override
  public int getJDBCMajorVersion() throws SQLException {
    return majorVersion;
  }

  @Override
  public int getJDBCMinorVersion() throws SQLException {
    return minorVersion;
  }

  @Override
  public int getDatabaseMajorVersion() throws SQLException {
    return majorVersion;
  }

  @Override
  public int getDatabaseMinorVersion() throws SQLException {
    return minorVersion;
  }

  @Override
  public int getResultSetHoldability() throws SQLException {
    return ResultSet.CLOSE_CURSORS_AT_COMMIT;
  }

  @Override
  public int getMaxTablesInSelect() throws SQLException {
    return 1;
  }

  @Override
  public int getMaxUserNameLength() throws SQLException {
    return Integer.MAX_VALUE;
  }

  @Override
  public String getTimeDateFunctions() throws SQLException {
    return "";
  }

  @Override
  public int getMaxStatementLength() throws SQLException {
    return Integer.MAX_VALUE;
  }

  @Override
  public int getMaxStatements() throws SQLException {
    return Integer.MAX_VALUE;
  }

  @Override
  public int getMaxTableNameLength() throws SQLException {
    return Integer.MAX_VALUE;
  }

  @Override
  public int getMaxRowSize() throws SQLException {
    return Integer.MAX_VALUE;
  }

  @Override
  public String getStringFunctions() throws SQLException {
    return "";
  }

  @Override
  public int getMaxCatalogNameLength() throws SQLException {
    return Integer.MAX_VALUE;
  }

  @Override
  public int getMaxProcedureNameLength() throws SQLException {
    return Integer.MAX_VALUE;
  }

  @Override
  public int getMaxSchemaNameLength() throws SQLException {
    return Integer.MAX_VALUE;
  }

  @Override
  public String getCatalogTerm() throws SQLException {
    return "catalog";
  }

  @Override
  public int getDriverMajorVersion() {
    return majorVersion;
  }

  @Override
  public int getDriverMinorVersion() {
    return minorVersion;
  }

  @Override
  public String getExtraNameCharacters() throws SQLException {
    return ".";
  }

  @Override
  public int getMaxBinaryLiteralLength() throws SQLException {
    return Integer.MAX_VALUE;
  }

  @Override
  public int getMaxCharLiteralLength() throws SQLException {
    return Integer.MAX_VALUE;
  }

  @Override
  public int getMaxColumnNameLength() throws SQLException {
    return Integer.MAX_VALUE;
  }

  @Override
  public int getMaxColumnsInGroupBy() throws SQLException {
    return 0;
  }

  @Override
  public int getMaxColumnsInIndex() throws SQLException {
    return 0;
  }

  @Override
  public int getMaxColumnsInOrderBy() throws SQLException {
    return 0;
  }

  @Override
  public int getMaxColumnsInSelect() throws SQLException {
    return Integer.MAX_VALUE;
  }

  @Override
  public int getMaxColumnsInTable() throws SQLException {
    return Integer.MAX_VALUE;
  }

  @Override
  public int getMaxConnections() throws SQLException {
    return Integer.MAX_VALUE;
  }

  @Override
  public int getMaxCursorNameLength() throws SQLException {
    return Integer.MAX_VALUE;
  }

  @Override
  public int getMaxIndexLength() throws SQLException {
    return Integer.MAX_VALUE;
  }

  @Override
  public String getNumericFunctions() throws SQLException {
    return "";
  }

  @Override
  public String getProcedureTerm() throws SQLException {
    return "procedure";
  }

  @Override
  public ResultSet getSchemas(String catalog, String schemaPattern) throws SQLException {
    return new EmptyResultSet();
  }

  @Override
  public String getSchemaTerm() throws SQLException {
    return "schema";
  }

  @Override
  public String getSearchStringEscape() throws SQLException {
    return "\\";
  }

  @Override
  public ResultSet getTypeInfo() throws SQLException {
    return new EmptyResultSet();
  }

  @Override
  public String getURL() throws SQLException {
    return url;
  }

  @Override
  public String getUserName() throws SQLException {
    return username;
  }

  @Override
  public ResultSet getUDTs(String catalog, String schemaPattern, String typeNamePattern, int[] types) throws SQLException {
    return new EmptyResultSet();
  }

  @Override
  public String getSystemFunctions() throws SQLException {
    return "";
  }
}
TOP

Related Classes of org.apache.blur.jdbc.BlurDatabaseMetaData$TableDescriptorResultSet

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.