You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by jh...@apache.org on 2013/10/07 08:40:39 UTC
git commit: TAJO-179: Support MySQL CatalogStore. (removed useless
code)
Updated Branches:
refs/heads/master c0c6d47f3 -> 1023c8269
TAJO-179: Support MySQL CatalogStore. (removed useless code)
Project: http://git-wip-us.apache.org/repos/asf/incubator-tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tajo/commit/1023c826
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tajo/tree/1023c826
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tajo/diff/1023c826
Branch: refs/heads/master
Commit: 1023c8269540f2a3ceedd5942fef896db68217b1
Parents: c0c6d47
Author: jinossy <ji...@gmail.com>
Authored: Mon Oct 7 15:38:24 2013 +0900
Committer: jinossy <ji...@gmail.com>
Committed: Mon Oct 7 15:38:24 2013 +0900
----------------------------------------------------------------------
.../org/apache/tajo/catalog/store/DBStore.java | 1042 ------------------
1 file changed, 1042 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1023c826/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/DBStore.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/DBStore.java b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/DBStore.java
deleted file mode 100644
index c89602b..0000000
--- a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/DBStore.java
+++ /dev/null
@@ -1,1042 +0,0 @@
-/**
- * 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.tajo.catalog.store;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.Path;
-import org.apache.tajo.catalog.*;
-import org.apache.tajo.catalog.proto.CatalogProtos.ColumnProto;
-import org.apache.tajo.catalog.proto.CatalogProtos.IndexDescProto;
-import org.apache.tajo.catalog.proto.CatalogProtos.IndexMethod;
-import org.apache.tajo.catalog.proto.CatalogProtos.StoreType;
-import org.apache.tajo.catalog.statistics.TableStat;
-import org.apache.tajo.common.TajoDataTypes.Type;
-import org.apache.tajo.conf.TajoConf;
-import org.apache.tajo.exception.InternalException;
-
-import java.io.IOException;
-import java.sql.*;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map.Entry;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-public class DBStore implements CatalogStore {
- private final Log LOG = LogFactory.getLog(DBStore.class);
- private final Configuration conf;
- private final String driver;
- private final String jdbcUri;
- private Connection conn;
-
- private static final int VERSION = 1;
-
- private static final String TB_META = "META";
- private static final String TB_TABLES = "TABLES";
- private static final String TB_COLUMNS = "COLUMNS";
- private static final String TB_OPTIONS = "OPTIONS";
- private static final String TB_INDEXES = "INDEXES";
- private static final String TB_STATISTICS = "STATS";
-
- private static final String C_TABLE_ID = "TABLE_ID";
-
- private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
- private Lock rlock = lock.readLock();
- private Lock wlock = lock.writeLock();
-
- public DBStore(final Configuration conf)
- throws InternalException {
- this.conf = conf;
-
- this.driver =
- this.conf.get(CatalogConstants.JDBC_DRIVER, CatalogConstants.DEFAULT_JDBC_DRIVER);
- this.jdbcUri =
- this.conf.get(CatalogConstants.JDBC_URI);
-
- try {
- Class.forName(driver).newInstance();
- LOG.info("Loaded the JDBC driver (" + driver +")");
- } catch (Exception e) {
- throw new InternalException("Cannot load JDBC driver " + driver, e);
- }
-
- try {
- LOG.info("Trying to connect database (" + jdbcUri + ")");
- conn = DriverManager.getConnection(jdbcUri + ";create=true");
- LOG.info("Connected to database (" + jdbcUri +")");
- } catch (SQLException e) {
- throw new InternalException("Cannot connect to database (" + jdbcUri
- +")", e);
- }
-
- try {
- if (!isInitialized()) {
- LOG.info("The base tables of CatalogServer are created.");
- createBaseTable();
- } else {
- LOG.info("The base tables of CatalogServer already is initialized.");
- }
- } catch (SQLException se) {
- throw new InternalException(
- "Cannot initialize the persistent storage of Catalog", se);
- }
-
- int dbVersion = 0;
- try {
- dbVersion = needUpgrade();
- } catch (SQLException e) {
- throw new InternalException(
- "Cannot check if the DB need to be upgraded", e);
- }
-
-// if (dbVersion < VERSION) {
-// LOG.info("DB Upgrade is needed");
-// try {
-// upgrade(dbVersion, VERSION);
-// } catch (SQLException e) {
-// LOG.error(e.getMessage());
-// throw new InternalException("DB upgrade is failed.", e);
-// }
-// }
- }
-
- private int needUpgrade() throws SQLException {
- String sql = "SELECT VERSION FROM " + TB_META;
- Statement stmt = conn.createStatement();
- ResultSet res = stmt.executeQuery(sql);
-
- if (!res.next()) { // if this db version is 0
- insertVersion();
- return 0;
- } else {
- return res.getInt(1);
- }
- }
-
- private void insertVersion() throws SQLException {
- String sql = "INSERT INTO " + TB_META + " values (0)";
- Statement stmt = conn.createStatement();
- stmt.executeUpdate(sql);
- stmt.close();
- }
-
- private void upgrade(int from, int to) throws SQLException {
- String sql;
- Statement stmt;
- if (from == 0 ) {
- if (to == 1) {
- sql = "DROP INDEX idx_options_key";
- LOG.info(sql);
-
- stmt = conn.createStatement();
- stmt.addBatch(sql);
-
- sql =
- "CREATE INDEX idx_options_key on " + TB_OPTIONS + " (" + C_TABLE_ID + ")";
- stmt.addBatch(sql);
- LOG.info(sql);
- stmt.executeBatch();
- stmt.close();
-
- LOG.info("DB Upgraded from " + from + " to " + to);
- } else {
- LOG.info("DB Upgraded from " + from + " to " + to);
- }
- }
- }
-
- // TODO - DDL and index statements should be renamed
- private void createBaseTable() throws SQLException {
- wlock.lock();
- try {
- // META
- Statement stmt = conn.createStatement();
- String meta_ddl = "CREATE TABLE " + TB_META + " (version int NOT NULL)";
- if (LOG.isDebugEnabled()) {
- LOG.debug(meta_ddl);
- }
- stmt.executeUpdate(meta_ddl);
- LOG.info("Table '" + TB_META + " is created.");
-
- // TABLES
- stmt = conn.createStatement();
- String tables_ddl = "CREATE TABLE "
- + TB_TABLES + " ("
- + "TID int NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), "
- + C_TABLE_ID + " VARCHAR(256) NOT NULL CONSTRAINT TABLE_ID_UNIQ UNIQUE, "
- + "path VARCHAR(1024), "
- + "store_type CHAR(16), "
- + "options VARCHAR(32672), "
- + "CONSTRAINT TABLES_PK PRIMARY KEY (TID)" +
- ")";
- if (LOG.isDebugEnabled()) {
- LOG.debug(tables_ddl);
- }
- stmt.addBatch(tables_ddl);
- String idx_tables_tid =
- "CREATE UNIQUE INDEX idx_tables_tid on " + TB_TABLES + " (TID)";
- if (LOG.isDebugEnabled()) {
- LOG.debug(idx_tables_tid);
- }
- stmt.addBatch(idx_tables_tid);
-
- String idx_tables_name = "CREATE UNIQUE INDEX idx_tables_name on "
- + TB_TABLES + "(" + C_TABLE_ID + ")";
- if (LOG.isDebugEnabled()) {
- LOG.debug(idx_tables_name);
- }
- stmt.addBatch(idx_tables_name);
- stmt.executeBatch();
- LOG.info("Table '" + TB_TABLES + "' is created.");
-
- // COLUMNS
- stmt = conn.createStatement();
- String columns_ddl =
- "CREATE TABLE " + TB_COLUMNS + " ("
- + "TID INT NOT NULL REFERENCES " + TB_TABLES + " (TID) ON DELETE CASCADE, "
- + C_TABLE_ID + " VARCHAR(256) NOT NULL REFERENCES " + TB_TABLES + "("
- + C_TABLE_ID + ") ON DELETE CASCADE, "
- + "column_id INT NOT NULL,"
- + "column_name VARCHAR(256) NOT NULL, " + "data_type CHAR(16), " + "type_length INTEGER, "
- + "CONSTRAINT C_COLUMN_ID UNIQUE (" + C_TABLE_ID + ", column_name))";
- if (LOG.isDebugEnabled()) {
- LOG.debug(columns_ddl);
- }
- stmt.addBatch(columns_ddl);
-
- String idx_fk_columns_table_name =
- "CREATE UNIQUE INDEX idx_fk_columns_table_name on "
- + TB_COLUMNS + "(" + C_TABLE_ID + ", column_name)";
- if (LOG.isDebugEnabled()) {
- LOG.debug(idx_fk_columns_table_name);
- }
- stmt.addBatch(idx_fk_columns_table_name);
- stmt.executeBatch();
- LOG.info("Table '" + TB_COLUMNS + " is created.");
-
- // OPTIONS
- stmt = conn.createStatement();
- String options_ddl =
- "CREATE TABLE " + TB_OPTIONS +" ("
- + C_TABLE_ID + " VARCHAR(256) NOT NULL REFERENCES TABLES (" + C_TABLE_ID +") "
- + "ON DELETE CASCADE, "
- + "key_ VARCHAR(256) NOT NULL, value_ VARCHAR(256) NOT NULL)";
- if (LOG.isDebugEnabled()) {
- LOG.debug(options_ddl);
- }
- stmt.addBatch(options_ddl);
-
- String idx_options_key =
- "CREATE INDEX idx_options_key on " + TB_OPTIONS + " (" + C_TABLE_ID + ")";
- if (LOG.isDebugEnabled()) {
- LOG.debug(idx_options_key);
- }
- stmt.addBatch(idx_options_key);
- String idx_options_table_name =
- "CREATE INDEX idx_options_table_name on " + TB_OPTIONS
- + "(" + C_TABLE_ID + ")";
- if (LOG.isDebugEnabled()) {
- LOG.debug(idx_options_table_name);
- }
- stmt.addBatch(idx_options_table_name);
- stmt.executeBatch();
- LOG.info("Table '" + TB_OPTIONS + " is created.");
-
- // INDEXES
- stmt = conn.createStatement();
- String indexes_ddl = "CREATE TABLE " + TB_INDEXES +"("
- + "index_name VARCHAR(256) NOT NULL PRIMARY KEY, "
- + C_TABLE_ID + " VARCHAR(256) NOT NULL REFERENCES TABLES (" + C_TABLE_ID + ") "
- + "ON DELETE CASCADE, "
- + "column_name VARCHAR(256) NOT NULL, "
- + "data_type VARCHAR(256) NOT NULL, "
- + "index_type CHAR(32) NOT NULL, "
- + "is_unique BOOLEAN NOT NULL, "
- + "is_clustered BOOLEAN NOT NULL, "
- + "is_ascending BOOLEAN NOT NULL)";
- if (LOG.isDebugEnabled()) {
- LOG.debug(indexes_ddl);
- }
- stmt.addBatch(indexes_ddl);
-
- String idx_indexes_key = "CREATE UNIQUE INDEX idx_indexes_key ON "
- + TB_INDEXES + " (index_name)";
- if (LOG.isDebugEnabled()) {
- LOG.debug(idx_indexes_key);
- }
- stmt.addBatch(idx_indexes_key);
-
- String idx_indexes_columns = "CREATE INDEX idx_indexes_columns ON "
- + TB_INDEXES + " (" + C_TABLE_ID + ", column_name)";
- if (LOG.isDebugEnabled()) {
- LOG.debug(idx_indexes_columns);
- }
- stmt.addBatch(idx_indexes_columns);
- stmt.executeBatch();
- LOG.info("Table '" + TB_INDEXES + "' is created.");
-
- String stats_ddl = "CREATE TABLE " + TB_STATISTICS + "("
- + C_TABLE_ID + " VARCHAR(256) NOT NULL REFERENCES TABLES (" + C_TABLE_ID + ") "
- + "ON DELETE CASCADE, "
- + "num_rows BIGINT, "
- + "num_bytes BIGINT)";
- if (LOG.isDebugEnabled()) {
- LOG.debug(stats_ddl);
- }
- stmt.addBatch(stats_ddl);
-
- String idx_stats_fk_table_name = "CREATE INDEX idx_stats_table_name ON "
- + TB_STATISTICS + " (" + C_TABLE_ID + ")";
- if (LOG.isDebugEnabled()) {
- LOG.debug(idx_stats_fk_table_name);
- }
- stmt.addBatch(idx_stats_fk_table_name);
- stmt.executeBatch();
- LOG.info("Table '" + TB_STATISTICS + "' is created.");
-
- } finally {
- wlock.unlock();
- }
- }
-
- private boolean isInitialized() throws SQLException {
- wlock.lock();
- try {
- boolean found = false;
- ResultSet res = conn.getMetaData().getTables(null, null, null,
- new String [] {"TABLE"});
-
- String resName;
- while (res.next() && !found) {
- resName = res.getString("TABLE_NAME");
- if (TB_META.equals(resName)
- || TB_TABLES.equals(resName)
- || TB_COLUMNS.equals(resName)
- || TB_OPTIONS.equals(resName)) {
- return true;
- }
- }
- } finally {
- wlock.unlock();
- }
- return false;
- }
-
- final boolean checkInternalTable(final String tableName) throws SQLException {
- rlock.lock();
- try {
- boolean found = false;
- ResultSet res = conn.getMetaData().getTables(null, null, null,
- new String [] {"TABLE"});
- while(res.next() && !found) {
- if (tableName.equals(res.getString("TABLE_NAME")))
- found = true;
- }
-
- return found;
- } finally {
- rlock.unlock();
- }
- }
-
- @Override
- public final void addTable(final TableDesc table) throws IOException {
- Statement stmt = null;
- ResultSet res;
-
- String sql =
- "INSERT INTO " + TB_TABLES + " (" + C_TABLE_ID + ", path, store_type) "
- + "VALUES('" + table.getName() + "', "
- + "'" + table.getPath() + "', "
- + "'" + table.getMeta().getStoreType() + "'"
- + ")";
-
- wlock.lock();
- try {
- stmt = conn.createStatement();
- if (LOG.isDebugEnabled()) {
- LOG.debug(sql);
- }
- stmt.addBatch(sql);
- stmt.executeBatch();
-
- stmt = conn.createStatement();
- sql = "SELECT TID from " + TB_TABLES + " WHERE " + C_TABLE_ID
- + " = '" + table.getName() + "'";
- if (LOG.isDebugEnabled()) {
- LOG.debug(sql);
- }
- res = stmt.executeQuery(sql);
- if (!res.next()) {
- throw new IOException("ERROR: there is no tid matched to "
- + table.getName());
- }
- int tid = res.getInt("TID");
-
- String colSql;
- int columnId = 0;
- for (Column col : table.getMeta().getSchema().getColumns()) {
- colSql = columnToSQL(tid, table, columnId, col);
- if (LOG.isDebugEnabled()) {
- LOG.debug(colSql);
- }
- stmt.addBatch(colSql);
- columnId++;
- }
-
- Iterator<Entry<String,String>> it = table.getMeta().toMap().entrySet().iterator();
- String optSql;
- while (it.hasNext()) {
- optSql = keyvalToSQL(table, it.next());
- if (LOG.isDebugEnabled()) {
- LOG.debug(optSql);
- }
- stmt.addBatch(optSql);
- }
- stmt.executeBatch();
- if (table.getMeta().getStat() != null) {
- sql = "INSERT INTO " + TB_STATISTICS + " (" + C_TABLE_ID + ", num_rows, num_bytes) "
- + "VALUES ('" + table.getName() + "', "
- + table.getMeta().getStat().getNumRows() + ","
- + table.getMeta().getStat().getNumBytes() + ")";
- if (LOG.isDebugEnabled()) {
- LOG.debug(sql);
- }
- stmt.addBatch(sql);
- stmt.executeBatch();
- }
- } catch (SQLException se) {
- throw new IOException(se.getMessage(), se);
- } finally {
- wlock.unlock();
- try {
- stmt.close();
- } catch (SQLException e) {
- }
- }
- }
-
- private String columnToSQL(final int tid, final TableDesc desc,
- final int columnId, final Column col) {
- String sql =
- "INSERT INTO " + TB_COLUMNS
- + " (tid, " + C_TABLE_ID + ", column_id, column_name, data_type, type_length) "
- + "VALUES("
- + tid + ","
- + "'" + desc.getName() + "',"
- + columnId + ", "
- + "'" + col.getColumnName() + "',"
- + "'" + col.getDataType().getType().name() + "',"
- + (col.getDataType().hasLength() ? col.getDataType().getLength() : 0)
- + ")";
-
- return sql;
- }
-
- private String keyvalToSQL(final TableDesc desc,
- final Entry<String,String> keyVal) {
- String sql =
- "INSERT INTO " + TB_OPTIONS
- + " (" + C_TABLE_ID + ", key_, value_) "
- + "VALUES("
- + "'" + desc.getName() + "',"
- + "'" + keyVal.getKey() + "',"
- + "'" + keyVal.getValue() + "'"
- + ")";
-
- return sql;
- }
-
- @Override
- public final boolean existTable(final String name) throws IOException {
- StringBuilder sql = new StringBuilder();
- sql.append("SELECT " + C_TABLE_ID + " from ")
- .append(TB_TABLES)
- .append(" WHERE " + C_TABLE_ID + " = '")
- .append(name)
- .append("'");
-
- Statement stmt = null;
- boolean exist = false;
- rlock.lock();
- try {
- stmt = conn.createStatement();
- if (LOG.isDebugEnabled()) {
- LOG.debug(sql.toString());
- }
- ResultSet res = stmt.executeQuery(sql.toString());
- exist = res.next();
- } catch (SQLException se) {
- throw new IOException(se);
- } finally {
- rlock.unlock();
- try {
- if (stmt != null) {
- stmt.close();
- }
- } catch (SQLException e) {
- }
- }
-
- return exist;
- }
-
- @Override
- public final void deleteTable(final String name) throws IOException {
- Statement stmt = null;
- String sql = null;
- try {
- wlock.lock();
- try {
- stmt = conn.createStatement();
- sql = "DELETE FROM " + TB_COLUMNS +
- " WHERE " + C_TABLE_ID + " = '" + name + "'";
- LOG.info(sql);
- stmt.execute(sql);
- } catch (SQLException se) {
- throw new IOException(se);
- } finally {
- try {
- if (stmt != null) {
- stmt.close();
- }
- } catch (SQLException e) {
- }
- }
-
- try {
- sql = "DELETE FROM " + TB_OPTIONS +
- " WHERE " + C_TABLE_ID + " = '" + name + "'";
- LOG.info(sql);
- stmt = conn.createStatement();
- stmt.execute(sql);
- } catch (SQLException se) {
- throw new IOException(se);
- } finally {
- try {
- if (stmt != null) {
- stmt.close();
- }
- } catch (SQLException e) {
- }
- }
-
- try {
- sql = "DELETE FROM " + TB_STATISTICS +
- " WHERE " + C_TABLE_ID + " = '" + name + "'";
- LOG.info(sql);
- stmt = conn.createStatement();
- stmt.execute(sql);
- } catch (SQLException se) {
- throw new IOException(se);
- } finally {
- try {
- if (stmt != null) {
- stmt.close();
- }
- } catch (SQLException e) {
- }
- }
-
- try {
- sql = "DELETE FROM " + TB_TABLES +
- " WHERE " + C_TABLE_ID +" = '" + name + "'";
- LOG.info(sql);
- stmt = conn.createStatement();
- stmt.execute(sql);
- } catch (SQLException se) {
- throw new IOException(se);
- } finally {
- try {
- if (stmt != null) {
- stmt.close();
- }
- } catch (SQLException e) {
- }
- }
-
- } finally {
- wlock.unlock();
- }
- }
-
- @Override
- public final TableDesc getTable(final String name) throws IOException {
- ResultSet res = null;
- Statement stmt = null;
-
- String tableName = null;
- Path path = null;
- StoreType storeType = null;
- Options options;
- TableStat stat = null;
-
- rlock.lock();
- try {
- try {
- String sql =
- "SELECT " + C_TABLE_ID + ", path, store_type from " + TB_TABLES
- + " WHERE " + C_TABLE_ID + "='" + name + "'";
- if (LOG.isDebugEnabled()) {
- LOG.debug(sql);
- }
- stmt = conn.createStatement();
- res = stmt.executeQuery(sql);
- if (!res.next()) { // there is no table of the given name.
- return null;
- }
- tableName = res.getString(C_TABLE_ID).trim();
- path = new Path(res.getString("path").trim());
- storeType = CatalogUtil.getStoreType(res.getString("store_type").trim());
- } catch (SQLException se) {
- throw new IOException(se);
- } finally {
- stmt.close();
- res.close();
- }
-
- Schema schema = null;
- try {
- String sql = "SELECT column_name, data_type, type_length from " + TB_COLUMNS
- + " WHERE " + C_TABLE_ID + "='" + name + "' ORDER by column_id asc";
-
- stmt = conn.createStatement();
- if (LOG.isDebugEnabled()) {
- LOG.debug(sql);
- }
- res = stmt.executeQuery(sql);
-
- schema = new Schema();
- while (res.next()) {
- String columnName = tableName + "."
- + res.getString("column_name").trim();
- Type dataType = getDataType(res.getString("data_type")
- .trim());
- int typeLength = res.getInt("type_length");
- if (typeLength > 0) {
- schema.addColumn(columnName, dataType, typeLength);
- } else {
- schema.addColumn(columnName, dataType);
- }
- }
- } catch (SQLException se) {
- throw new IOException(se);
- } finally {
- stmt.close();
- res.close();
- }
-
- options = Options.create();
- try {
- String sql = "SELECT key_, value_ from " + TB_OPTIONS
- + " WHERE " + C_TABLE_ID + "='" + name + "'";
- stmt = conn.createStatement();
- if (LOG.isDebugEnabled()) {
- LOG.debug(sql);
- }
- res = stmt.executeQuery(sql);
-
- while (res.next()) {
- options.put(
- res.getString("key_"),
- res.getString("value_"));
- }
- } catch (SQLException se) {
- throw new IOException(se);
- } finally {
- stmt.close();
- res.close();
- }
-
- try {
- String sql = "SELECT num_rows, num_bytes from " + TB_STATISTICS
- + " WHERE " + C_TABLE_ID + "='" + name + "'";
- if (LOG.isDebugEnabled()) {
- LOG.debug(sql);
- }
- stmt = conn.createStatement();
- res = stmt.executeQuery(sql);
-
- if (res.next()) {
- stat = new TableStat();
- stat.setNumRows(res.getLong("num_rows"));
- stat.setNumBytes(res.getLong("num_bytes"));
- }
- } catch (SQLException se) {
- throw new IOException(se);
- } finally {
- stmt.close();
- res.close();
- }
-
- TableMeta meta = new TableMetaImpl(schema, storeType, options);
- if (stat != null) {
- meta.setStat(stat);
- }
- TableDesc table = new TableDescImpl(tableName, meta, path);
-
- return table;
- } catch (SQLException se) {
- throw new IOException(se);
- } finally {
- rlock.unlock();
- }
- }
-
- private Type getDataType(final String typeStr) {
- try {
- return Enum.valueOf(Type.class, typeStr);
- } catch (IllegalArgumentException iae) {
- LOG.error("Cannot find a matched type aginst from '" + typeStr + "'");
- return null;
- }
- }
-
- @Override
- public final List<String> getAllTableNames() throws IOException {
- String sql = "SELECT " + C_TABLE_ID + " from " + TB_TABLES;
-
- Statement stmt = null;
- ResultSet res;
-
- List<String> tables = new ArrayList<String>();
- rlock.lock();
- try {
- stmt = conn.createStatement();
- if (LOG.isDebugEnabled()) {
- LOG.debug(sql);
- }
- res = stmt.executeQuery(sql);
- while (res.next()) {
- tables.add(res.getString(C_TABLE_ID).trim());
- }
- } catch (SQLException se) {
- throw new IOException(se);
- } finally {
- rlock.unlock();
- try {
- if (stmt != null) {
- stmt.close();
- }
- } catch (SQLException e) {
- }
- }
- return tables;
- }
-
- public final void addIndex(final IndexDescProto proto) throws IOException {
- String sql =
- "INSERT INTO indexes (index_name, " + C_TABLE_ID + ", column_name, "
- +"data_type, index_type, is_unique, is_clustered, is_ascending) VALUES "
- +"(?,?,?,?,?,?,?,?)";
-
- PreparedStatement stmt = null;
-
- wlock.lock();
- try {
- stmt = conn.prepareStatement(sql);
- stmt.setString(1, proto.getName());
- stmt.setString(2, proto.getTableId());
- stmt.setString(3, proto.getColumn().getColumnName());
- stmt.setString(4, proto.getColumn().getDataType().getType().name());
- stmt.setString(5, proto.getIndexMethod().toString());
- stmt.setBoolean(6, proto.hasIsUnique() && proto.getIsUnique());
- stmt.setBoolean(7, proto.hasIsClustered() && proto.getIsClustered());
- stmt.setBoolean(8, proto.hasIsAscending() && proto.getIsAscending());
- stmt.executeUpdate();
- if (LOG.isDebugEnabled()) {
- LOG.debug(stmt.toString());
- }
- } catch (SQLException se) {
- throw new IOException(se);
- } finally {
- wlock.unlock();
- try {
- if (stmt != null) {
- stmt.close();
- }
- } catch (SQLException e) {
- }
- }
- }
-
- public final void delIndex(final String indexName) throws IOException {
- String sql =
- "DELETE FROM " + TB_INDEXES
- + " WHERE index_name='" + indexName + "'";
- if (LOG.isDebugEnabled()) {
- LOG.debug(sql);
- }
-
- Statement stmt = null;
- wlock.lock();
- try {
- stmt = conn.createStatement();
- if (LOG.isDebugEnabled()) {
- LOG.debug(sql);
- }
- stmt.executeUpdate(sql);
- } catch (SQLException se) {
- throw new IOException(se);
- } finally {
- wlock.unlock();
- try {
- if (stmt != null) {
- stmt.close();
- }
- } catch (SQLException e) {
- }
- }
- }
-
- public final IndexDescProto getIndex(final String indexName)
- throws IOException {
- ResultSet res;
- PreparedStatement stmt;
-
- IndexDescProto proto = null;
-
- rlock.lock();
- try {
- String sql =
- "SELECT index_name, " + C_TABLE_ID + ", column_name, data_type, "
- + "index_type, is_unique, is_clustered, is_ascending FROM indexes "
- + "where index_name = ?";
- stmt = conn.prepareStatement(sql);
- stmt.setString(1, indexName);
- if (LOG.isDebugEnabled()) {
- LOG.debug(stmt.toString());
- }
- res = stmt.executeQuery();
- if (!res.next()) {
- throw new IOException("ERROR: there is no index matched to " + indexName);
- }
- proto = resultToProto(res);
- } catch (SQLException se) {
- } finally {
- rlock.unlock();
- }
-
- return proto;
- }
-
- public final IndexDescProto getIndex(final String tableName,
- final String columnName) throws IOException {
- ResultSet res;
- PreparedStatement stmt;
-
- IndexDescProto proto = null;
-
- rlock.lock();
- try {
- String sql =
- "SELECT index_name, " + C_TABLE_ID + ", column_name, data_type, "
- + "index_type, is_unique, is_clustered, is_ascending FROM indexes "
- + "where " + C_TABLE_ID + " = ? AND column_name = ?";
- stmt = conn.prepareStatement(sql);
- stmt.setString(1, tableName);
- stmt.setString(2, columnName);
- if (LOG.isDebugEnabled()) {
- LOG.debug(sql);
- }
- res = stmt.executeQuery();
- if (!res.next()) {
- throw new IOException("ERROR: there is no index matched to "
- + tableName + "." + columnName);
- }
- proto = resultToProto(res);
- } catch (SQLException se) {
- new IOException(se);
- } finally {
- rlock.unlock();
- }
-
- return proto;
- }
-
- public final boolean existIndex(final String indexName) throws IOException {
- String sql = "SELECT index_name from " + TB_INDEXES
- + " WHERE index_name = ?";
- if (LOG.isDebugEnabled()) {
- LOG.debug(sql);
- }
-
- PreparedStatement stmt = null;
- boolean exist = false;
- rlock.lock();
- try {
- stmt = conn.prepareStatement(sql);
- stmt.setString(1, indexName);
- if (LOG.isDebugEnabled()) {
- LOG.debug(sql);
- }
- ResultSet res = stmt.executeQuery();
- exist = res.next();
- } catch (SQLException se) {
-
- } finally {
- rlock.unlock();
- try {
- stmt.close();
- } catch (SQLException e) {
- }
- }
-
- return exist;
- }
-
- @Override
- public boolean existIndex(String tableName, String columnName)
- throws IOException {
- String sql = "SELECT index_name from " + TB_INDEXES
- + " WHERE " + C_TABLE_ID + " = ? AND COLUMN_NAME = ?";
- if (LOG.isDebugEnabled()) {
- LOG.debug(sql);
- }
-
- PreparedStatement stmt = null;
- boolean exist = false;
- rlock.lock();
- try {
- stmt = conn.prepareStatement(sql);
- stmt.setString(1, tableName);
- stmt.setString(2, columnName);
- if (LOG.isDebugEnabled()) {
- LOG.debug(sql);
- }
- ResultSet res = stmt.executeQuery();
- exist = res.next();
- } catch (SQLException se) {
-
- } finally {
- rlock.unlock();
- try {
- stmt.close();
- } catch (SQLException e) {
- }
- }
-
- return exist;
- }
-
- public final IndexDescProto [] getIndexes(final String tableName)
- throws IOException {
- ResultSet res;
- PreparedStatement stmt;
-
- List<IndexDescProto> protos = new ArrayList<IndexDescProto>();
-
- rlock.lock();
- try {
- String sql = "SELECT index_name, " + C_TABLE_ID + ", column_name, data_type, "
- + "index_type, is_unique, is_clustered, is_ascending FROM indexes "
- + "where " + C_TABLE_ID + "= ?";
- stmt = conn.prepareStatement(sql);
- stmt.setString(1, tableName);
- if (LOG.isDebugEnabled()) {
- LOG.debug(sql);
- }
- res = stmt.executeQuery();
- while (res.next()) {
- protos.add(resultToProto(res));
- }
- } catch (SQLException se) {
- } finally {
- rlock.unlock();
- }
-
- return protos.toArray(new IndexDescProto [protos.size()]);
- }
-
- private IndexDescProto resultToProto(final ResultSet res) throws SQLException {
- IndexDescProto.Builder builder = IndexDescProto.newBuilder();
- builder.setName(res.getString("index_name"));
- builder.setTableId(res.getString(C_TABLE_ID));
- builder.setColumn(resultToColumnProto(res));
- builder.setIndexMethod(getIndexMethod(res.getString("index_type").trim()));
- builder.setIsUnique(res.getBoolean("is_unique"));
- builder.setIsClustered(res.getBoolean("is_clustered"));
- builder.setIsAscending(res.getBoolean("is_ascending"));
- return builder.build();
- }
-
- private ColumnProto resultToColumnProto(final ResultSet res) throws SQLException {
- ColumnProto.Builder builder = ColumnProto.newBuilder();
- builder.setColumnName(res.getString("column_name"));
- builder.setDataType(CatalogUtil.newSimpleDataType(
- getDataType(res.getString("data_type").trim())));
- return builder.build();
- }
-
- private IndexMethod getIndexMethod(final String typeStr) {
- if (typeStr.equals(IndexMethod.TWO_LEVEL_BIN_TREE.toString())) {
- return IndexMethod.TWO_LEVEL_BIN_TREE;
- } else {
- LOG.error("Cannot find a matched type aginst from '"
- + typeStr + "'");
- // TODO - needs exception handling
- return null;
- }
- }
-
- @Override
- public final void addFunction(final FunctionDesc func) throws IOException {
- // TODO - not implemented yet
- }
-
- @Override
- public final void deleteFunction(final FunctionDesc func) throws IOException {
- // TODO - not implemented yet
- }
-
- @Override
- public final void existFunction(final FunctionDesc func) throws IOException {
- // TODO - not implemented yet
- }
-
- @Override
- public final List<String> getAllFunctionNames() throws IOException {
- // TODO - not implemented yet
- return null;
- }
-
- @Override
- public final void close() {
- try {
- DriverManager.getConnection("jdbc:derby:;shutdown=true");
- } catch (SQLException e) {
- // TODO - to be fixed
- //LOG.error(e.getMessage(), e);
- }
-
- LOG.info("Shutdown database (" + jdbcUri + ")");
- }
-
-
- public static void main(final String[] args) throws IOException {
- @SuppressWarnings("unused")
- DBStore store = new DBStore(new TajoConf());
- }
-}
\ No newline at end of file