in tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/MySQLStore.java [53:232]
protected void createBaseTable() throws CatalogException {
Statement stmt = null;
Connection conn = null;
try {
conn = getConnection();
stmt = conn.createStatement();
StringBuilder sql = new StringBuilder();
// META
if (!baseTableMaps.get(TB_META)) {
sql.append("CREATE TABLE ").append(TB_META).append(" (version int NOT NULL)");
if (LOG.isDebugEnabled()) {
LOG.debug(sql.toString());
}
stmt.executeUpdate(sql.toString());
LOG.info("Table '" + TB_META + " is created.");
baseTableMaps.put(TB_META, true);
}
// TABLES
if (!baseTableMaps.get(TB_TABLES)) {
sql.delete(0, sql.length());
sql.append("CREATE TABLE ").append(TB_TABLES).append("(");
sql.append("TID int NOT NULL AUTO_INCREMENT PRIMARY KEY, ");
sql.append(C_TABLE_ID).append(" VARCHAR(255) NOT NULL UNIQUE, ");
sql.append("path TEXT, ").append("store_type CHAR(16)").append(")");
if (LOG.isDebugEnabled()) {
LOG.debug(sql.toString());
}
stmt.executeUpdate(sql.toString());
LOG.info("Table '" + TB_TABLES + "' is created.");
baseTableMaps.put(TB_TABLES, true);
}
// COLUMNS
if (!baseTableMaps.get(TB_COLUMNS)) {
sql.delete(0, sql.length());
sql.append("CREATE TABLE ").append(TB_COLUMNS).append("(");
sql.append("TID INT NOT NULL, ");
sql.append(C_TABLE_ID).append(" VARCHAR(255) NOT NULL,");
sql.append("column_id INT NOT NULL,");
sql.append("column_name VARCHAR(255) NOT NULL, ");
sql.append("data_type CHAR(16), ");
sql.append("type_length INTEGER, ");
sql.append("UNIQUE KEY(").append(C_TABLE_ID).append(", column_name),");
sql.append("FOREIGN KEY(TID) REFERENCES ").append(TB_TABLES).append("(TID) ON DELETE CASCADE,");
sql.append("FOREIGN KEY(").append(C_TABLE_ID).append(") REFERENCES ");
sql.append(TB_TABLES).append("(").append(C_TABLE_ID).append(") ON DELETE CASCADE)");
if (LOG.isDebugEnabled()) {
LOG.debug(sql.toString());
}
stmt.executeUpdate(sql.toString());
LOG.info("Table '" + TB_COLUMNS + " is created.");
baseTableMaps.put(TB_COLUMNS, true);
}
// OPTIONS
if (!baseTableMaps.get(TB_OPTIONS)) {
sql.delete(0, sql.length());
sql.append("CREATE TABLE ").append(TB_OPTIONS).append("(");
sql.append(C_TABLE_ID).append( " VARCHAR(255) NOT NULL,");
sql.append("key_ VARCHAR(255) NOT NULL, value_ VARCHAR(255) NOT NULL,");
sql.append("INDEX(").append(C_TABLE_ID).append(", key_),");
sql.append("FOREIGN KEY(").append(C_TABLE_ID);
sql.append(") REFERENCES ").append(TB_TABLES);
sql.append("(").append(C_TABLE_ID).append(") ON DELETE CASCADE)");
if (LOG.isDebugEnabled()) {
LOG.debug(sql.toString());
}
stmt.executeUpdate(sql.toString());
LOG.info("Table '" + TB_OPTIONS + " is created.");
baseTableMaps.put(TB_OPTIONS, true);
}
// INDEXES
if (!baseTableMaps.get(TB_INDEXES)) {
sql.delete(0, sql.length());
sql.append("CREATE TABLE ").append(TB_INDEXES).append("(");
sql.append("index_name VARCHAR(255) NOT NULL PRIMARY KEY, ");
sql.append(C_TABLE_ID).append(" VARCHAR(255) NOT NULL,");
sql.append("column_name VARCHAR(255) NOT NULL, ");
sql.append("data_type VARCHAR(255) NOT NULL, ");
sql.append("index_type CHAR(32) NOT NULL, ");
sql.append("is_unique BOOLEAN NOT NULL, ");
sql.append("is_clustered BOOLEAN NOT NULL, ");
sql.append("is_ascending BOOLEAN NOT NULL,");
sql.append("INDEX(").append(C_TABLE_ID).append(", column_name),");
sql.append("FOREIGN KEY(").append(C_TABLE_ID);
sql.append(") REFERENCES ").append(TB_TABLES);
sql.append("(").append(C_TABLE_ID).append(") ON DELETE CASCADE)");
if (LOG.isDebugEnabled()) {
LOG.debug(sql.toString());
}
stmt.executeUpdate(sql.toString());
LOG.info("Table '" + TB_INDEXES + "' is created.");
baseTableMaps.put(TB_INDEXES, true);
}
if (!baseTableMaps.get(TB_STATISTICS)) {
sql.delete(0, sql.length());
sql.append("CREATE TABLE ").append(TB_STATISTICS).append("(");
sql.append(C_TABLE_ID).append(" VARCHAR(255) NOT NULL,");
sql.append("num_rows BIGINT, ");
sql.append("num_bytes BIGINT,");
sql.append("INDEX(").append(C_TABLE_ID).append("),");
sql.append("FOREIGN KEY(").append(C_TABLE_ID);
sql.append(") REFERENCES ").append(TB_TABLES);
sql.append("(").append(C_TABLE_ID).append(") ON DELETE CASCADE)");
if (LOG.isDebugEnabled()) {
LOG.debug(sql.toString());
}
stmt.executeUpdate(sql.toString());
LOG.info("Table '" + TB_STATISTICS + "' is created.");
baseTableMaps.put(TB_STATISTICS, true);
}
// PARTITION_METHODS
if (!baseTableMaps.get(TB_PARTITION_METHODS)) {
sql.delete(0, sql.length());
sql.append("CREATE TABLE ").append(TB_PARTITION_METHODS).append("(");
sql.append(C_TABLE_ID).append(" VARCHAR(255) PRIMARY KEY,");
sql.append("partition_type VARCHAR(10) NOT NULL,");
sql.append("expression TEXT NOT NULL,");
sql.append("expression_schema VARBINARY(1024) NOT NULL, ");
sql.append("FOREIGN KEY(").append(C_TABLE_ID);
sql.append(") REFERENCES ").append(TB_TABLES);
sql.append("(").append(C_TABLE_ID).append(") ON DELETE CASCADE)");
if (LOG.isDebugEnabled()) {
LOG.debug(sql.toString());
}
stmt.executeUpdate(sql.toString());
LOG.info("Table '" + TB_PARTITION_METHODS + "' is created.");
baseTableMaps.put(TB_PARTITION_METHODS, true);
}
// PARTITIONS
if (!baseTableMaps.get(TB_PARTTIONS)) {
sql.delete(0, sql.length());
sql.append("CREATE TABLE ").append(TB_PARTTIONS).append("(");
sql.append("PID int NOT NULL AUTO_INCREMENT PRIMARY KEY, ");
sql.append(C_TABLE_ID).append( " VARCHAR(255) NOT NULL,");
sql.append("partition_name VARCHAR(255), ");
sql.append("ordinal_position INT NOT NULL,");
sql.append("partition_value TEXT,");
sql.append("path TEXT,");
sql.append("cache_nodes VARCHAR(255), ");
sql.append("UNIQUE KEY(").append(C_TABLE_ID).append(", partition_name),");
sql.append("FOREIGN KEY(").append(C_TABLE_ID);
sql.append(") REFERENCES ").append(TB_TABLES);
sql.append("(").append(C_TABLE_ID).append(") ON DELETE CASCADE)");
if (LOG.isDebugEnabled()) {
LOG.debug(sql.toString());
}
stmt.executeUpdate(sql.toString());
LOG.info("Table '" + TB_PARTTIONS + "' is created.");
baseTableMaps.put(TB_PARTTIONS, true);
}
} catch (SQLException se) {
throw new CatalogException(se);
} finally {
CatalogUtil.closeQuietly(conn, stmt);
}
}