int numCh = ast.getChildCount();
tableName = BaseSemanticAnalyzer.getUnescapedName((ASTNode) ast
.getChild(0));
boolean likeTable = false;
StorageFormat format = new StorageFormat(context.getConf());
for (int num = 1; num < numCh; num++) {
ASTNode child = (ASTNode) ast.getChild(num);
if (format.fillStorageFormat(child)) {
if (org.apache.commons.lang.StringUtils
.isNotEmpty(format.getStorageHandler())) {
return ast;
}
continue;
}
switch (child.getToken().getType()) {
case HiveParser.TOK_QUERY: // CTAS
throw new SemanticException(
"Operation not supported. Create table as " +
"Select is not a valid operation.");
case HiveParser.TOK_ALTERTABLE_BUCKETS:
break;
case HiveParser.TOK_LIKETABLE:
likeTable = true;
break;
case HiveParser.TOK_IFNOTEXISTS:
try {
List<String> tables = db.getTablesByPattern(tableName);
if (tables != null && tables.size() > 0) { // table
// exists
return ast;
}
} catch (HiveException e) {
throw new SemanticException(e);
}
break;
case HiveParser.TOK_TABLEPARTCOLS:
List<FieldSchema> partCols = BaseSemanticAnalyzer
.getColumns((ASTNode) child.getChild(0), false);
for (FieldSchema fs : partCols) {
if (!fs.getType().equalsIgnoreCase("string")) {
throw new SemanticException(
"Operation not supported. HCatalog only " +
"supports partition columns of type string. "
+ "For column: "
+ fs.getName()
+ " Found type: " + fs.getType());
}
}
break;
}
}
if (!likeTable && (format.getInputFormat() == null || format.getOutputFormat() == null)) {
throw new SemanticException(
"STORED AS specification is either incomplete or incorrect.");
}
return ast;