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; } }