package org.wonderdb.query.parse;
/*******************************************************************************
* Copyright 2013 Vilas Athavale
*
* Licensed 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.util.Iterator;
import java.util.List;
import org.wonderdb.cluster.Shard;
import org.wonderdb.expression.AndExpression;
import org.wonderdb.metadata.StorageMetadata;
import org.wonderdb.parser.ShowIndexStmt;
import org.wonderdb.parser.jtree.SimpleNode;
import org.wonderdb.parser.jtree.SimpleNodeHelper;
import org.wonderdb.parser.jtree.UQLParserTreeConstants;
import org.wonderdb.schema.CollectionMetadata;
import org.wonderdb.schema.SchemaMetadata;
import org.wonderdb.types.ColumnNameMeta;
import org.wonderdb.types.IndexNameMeta;
public class ShowTableQuery extends BaseDBQuery {
String collectionName;
public ShowTableQuery(String q, SimpleNode query) {
super(q, query, -1, null);
SimpleNode node = SimpleNodeHelper.getInstance().getFirstNode(query, UQLParserTreeConstants.JJTTABLENAME);
if (node == null) {
throw new RuntimeException("Invalid syntax:");
}
collectionName = node.jjtGetFirstToken().image;
}
public ShowTableQuery(String q, String tableName) {
super(q, null, -1, null);
collectionName = tableName;
}
public String execute() {
CollectionMetadata colMeta = SchemaMetadata.getInstance().getCollectionMetadata(collectionName);
if (colMeta == null) {
return "\n";
}
StringBuilder builder = new StringBuilder();
byte fileId = colMeta.getRecordList(new Shard("")).getHead().getFileId();
String storage = StorageMetadata.getInstance().getFileName(fileId);
List<ColumnNameMeta> cols = colMeta.getCollectionColumns();
Iterator<ColumnNameMeta> iter = cols.iterator();
while (iter.hasNext()) {
ColumnNameMeta ct = iter.next();
builder.append(ct.getColumnName()).append("\t");
builder.append(ct.getColumnType());
}
builder.append("\n");
builder.append("STORAGE: ").append(storage).append("\n");
builder.append("\n");
List<IndexNameMeta> list = SchemaMetadata.getInstance().getIndexes(collectionName);
for (IndexNameMeta idxMeta : list) {
builder.append("\n");
ShowIndexStmt stmt = new ShowIndexStmt();
stmt.indexName = idxMeta.getIndexName();
ShowIndexQuery q = new ShowIndexQuery(getQueryString(), stmt);
builder.append(q.execute());
}
return builder.toString();
}
public static String getType(String s) {
if (s.equals("is")) {
return "int";
}
if (s.equals("ls")) {
return "long";
}
if (s.equals("fs")) {
return "float";
}
if (s.equals("ds")) {
return "double";
}
if (s.equals("ss")) {
return "string";
}
if (s.equals("bs")) {
return "byte type";
}
return s;
}
@Override
public AndExpression getExpression() {
return null;
}
}