http://git-wip-us.apache.org/repos/asf/tajo/blob/5d62c409/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanner.java ---------------------------------------------------------------------- diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanner.java b/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanner.java index 85d8d55..a67fdd4 100644 --- a/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanner.java +++ b/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanner.java @@ -35,10 +35,12 @@ import org.apache.tajo.SessionVars; import org.apache.tajo.algebra.*; import org.apache.tajo.algebra.WindowSpec; import org.apache.tajo.catalog.*; +import org.apache.tajo.catalog.exception.UndefinedColumnException; import org.apache.tajo.catalog.partition.PartitionMethodDesc; import org.apache.tajo.catalog.proto.CatalogProtos; import org.apache.tajo.common.TajoDataTypes; import org.apache.tajo.datum.NullDatum; +import org.apache.tajo.exception.ExceptionUtil; import org.apache.tajo.plan.LogicalPlan.QueryBlock; import org.apache.tajo.plan.algebra.BaseAlgebraVisitor; import org.apache.tajo.plan.expr.*; @@ -634,7 +636,7 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex // TODO - Later, we also consider the possibility that a window function contains only a window name. rawWindowSpecs.add(((WindowFunctionExpr) (rawTarget.getExpr())).getWindowSpec()); } - } catch (VerifyException ve) { + } catch (UndefinedColumnException uc) { } } @@ -768,7 +770,7 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex aggEvals.add((AggregationFunctionCallEval) evalNode); block.namedExprsMgr.markAsEvaluated(rawTarget.getAlias(), evalNode); } - } catch (VerifyException ve) { + } catch (UndefinedColumnException ve) { } } @@ -1008,7 +1010,7 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex aggEvalNames.add(namedExpr.getAlias()); aggEvalNodes.add((AggregationFunctionCallEval) evalNode); } - } catch (VerifyException ve) { + } catch (UndefinedColumnException ve) { } } // if there is at least one distinct aggregation function @@ -1182,7 +1184,7 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex block.namedExprsMgr.markAsEvaluated(namedExpr.getAlias(), evalNode); newlyEvaluatedExprs.add(namedExpr.getAlias()); } - } catch (VerifyException ve) { + } catch (UndefinedColumnException ve) { } catch (PlanningException e) { } } @@ -1253,7 +1255,7 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex block.namedExprsMgr.markAsEvaluated(namedExpr.getAlias(), evalNode); newlyEvaluatedExprs.add(namedExpr.getAlias()); } - } catch (VerifyException ve) {} + } catch (UndefinedColumnException ve) {} } List<Target> targets = TUtil.newList(PlannerUtil.schemaToTargets(merged)); @@ -1306,7 +1308,7 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex block.namedExprsMgr.markAsEvaluated(rawTarget.getAlias(), evalNode); newlyEvaluatedExprsReferences.add(rawTarget.getAlias()); // newly added exr } - } catch (VerifyException ve) { + } catch (UndefinedColumnException ve) { } } @@ -1397,7 +1399,7 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex block.namedExprsMgr.markAsEvaluated(rawTarget.getAlias(), evalNode); newlyEvaluatedExprs.add(rawTarget.getAlias()); // newly added exr } - } catch (VerifyException ve) { + } catch (UndefinedColumnException ve) { } } @@ -1885,8 +1887,8 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex if (expr.getPartitionMethod().getPartitionType().equals(PartitionType.COLUMN)) { createTableNode.setPartitionMethod(getPartitionMethod(context, expr.getTableName(), expr.getPartitionMethod())); } else { - throw new PlanningException(String.format("Not supported PartitonType: %s", - expr.getPartitionMethod().getPartitionType())); + throw ExceptionUtil.makeNotSupported( + String.format("PartitonType " + expr.getPartitionMethod().getPartitionType())); } }
http://git-wip-us.apache.org/repos/asf/tajo/blob/5d62c409/tajo-plan/src/main/java/org/apache/tajo/plan/PlanningException.java ---------------------------------------------------------------------- diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/PlanningException.java b/tajo-plan/src/main/java/org/apache/tajo/plan/PlanningException.java index 2a52401..8f49600 100644 --- a/tajo-plan/src/main/java/org/apache/tajo/plan/PlanningException.java +++ b/tajo-plan/src/main/java/org/apache/tajo/plan/PlanningException.java @@ -19,11 +19,12 @@ package org.apache.tajo.plan; public class PlanningException extends Exception { + public PlanningException(String message) { super(message); } - public PlanningException(Exception e) { + public PlanningException(Throwable e) { super(e); } } http://git-wip-us.apache.org/repos/asf/tajo/blob/5d62c409/tajo-plan/src/main/java/org/apache/tajo/plan/TypeDeterminant.java ---------------------------------------------------------------------- diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/TypeDeterminant.java b/tajo-plan/src/main/java/org/apache/tajo/plan/TypeDeterminant.java index 7c468bb..83542ec 100644 --- a/tajo-plan/src/main/java/org/apache/tajo/plan/TypeDeterminant.java +++ b/tajo-plan/src/main/java/org/apache/tajo/plan/TypeDeterminant.java @@ -25,7 +25,7 @@ import org.apache.tajo.catalog.CatalogService; import org.apache.tajo.catalog.CatalogUtil; import org.apache.tajo.catalog.Column; import org.apache.tajo.catalog.FunctionDesc; -import org.apache.tajo.catalog.exception.NoSuchFunctionException; +import org.apache.tajo.catalog.exception.UndefinedFunctionException; import org.apache.tajo.catalog.proto.CatalogProtos; import org.apache.tajo.common.TajoDataTypes; import org.apache.tajo.plan.visitor.SimpleAlgebraVisitor; @@ -169,7 +169,7 @@ public class TypeDeterminant extends SimpleAlgebraVisitor<LogicalPlanner.PlanCon stack.pop(); // <--- Pop if (!catalog.containFunction(expr.getSignature(), paramTypes)) { - throw new NoSuchFunctionException(expr.getSignature(), paramTypes); + throw new UndefinedFunctionException(expr.getSignature(), paramTypes); } FunctionDesc funcDesc = catalog.getFunction(expr.getSignature(), paramTypes); @@ -205,7 +205,7 @@ public class TypeDeterminant extends SimpleAlgebraVisitor<LogicalPlanner.PlanCon stack.pop(); // <-- pop if (!catalog.containFunction(setFunction.getSignature(), functionType, paramTypes)) { - throw new NoSuchFunctionException(setFunction.getSignature(), paramTypes); + throw new UndefinedFunctionException(setFunction.getSignature(), paramTypes); } FunctionDesc funcDesc = catalog.getFunction(setFunction.getSignature(), functionType, paramTypes); @@ -246,7 +246,7 @@ public class TypeDeterminant extends SimpleAlgebraVisitor<LogicalPlanner.PlanCon // the below checking against WINDOW_FUNCTIONS is a workaround code for the above problem. if (ExprAnnotator.WINDOW_FUNCTIONS.contains(funcName.toLowerCase())) { if (distinct) { - throw new NoSuchFunctionException("row_number() does not support distinct keyword."); + throw new UndefinedFunctionException("row_number() does not support distinct keyword."); } functionType = CatalogProtos.FunctionType.WINDOW; } else { @@ -255,7 +255,7 @@ public class TypeDeterminant extends SimpleAlgebraVisitor<LogicalPlanner.PlanCon } if (!catalog.containFunction(windowFunc.getSignature(), functionType, paramTypes)) { - throw new NoSuchFunctionException(funcName, paramTypes); + throw new UndefinedFunctionException(funcName, paramTypes); } FunctionDesc funcDesc = catalog.getFunction(funcName, functionType, paramTypes); http://git-wip-us.apache.org/repos/asf/tajo/blob/5d62c409/tajo-plan/src/main/java/org/apache/tajo/plan/expr/GeneralFunctionEval.java ---------------------------------------------------------------------- diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/GeneralFunctionEval.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/GeneralFunctionEval.java index 30fbe91..c7b900e 100644 --- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/GeneralFunctionEval.java +++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/GeneralFunctionEval.java @@ -33,8 +33,7 @@ public class GeneralFunctionEval extends FunctionEval { protected FunctionInvoke funcInvoke; @Expose protected FunctionInvokeContext invokeContext; - public GeneralFunctionEval(OverridableConf queryContext, FunctionDesc desc, EvalNode[] givenArgs) - throws IOException { + public GeneralFunctionEval(OverridableConf queryContext, FunctionDesc desc, EvalNode[] givenArgs) { super(EvalType.FUNCTION, desc, givenArgs); this.invokeContext = new FunctionInvokeContext(queryContext, getParamType()); } @@ -58,8 +57,7 @@ public class GeneralFunctionEval extends FunctionEval { @SuppressWarnings("unchecked") public Datum eval(Tuple tuple) { super.eval(tuple); - Datum res = funcInvoke.eval(evalParams(tuple)); - return res; + return funcInvoke.eval(evalParams(tuple)); } @Override http://git-wip-us.apache.org/repos/asf/tajo/blob/5d62c409/tajo-plan/src/main/java/org/apache/tajo/plan/logical/NoSuchColumnException.java ---------------------------------------------------------------------- diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/NoSuchColumnException.java b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/NoSuchColumnException.java deleted file mode 100644 index 94cef1e..0000000 --- a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/NoSuchColumnException.java +++ /dev/null @@ -1,34 +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.plan.logical; - - -import org.apache.tajo.plan.verifier.VerifyException; - -public class NoSuchColumnException extends VerifyException { - private static final long serialVersionUID = 277182608283894937L; - - public NoSuchColumnException(String databaseName, String relName, String columnName) { - super(String.format("ERROR: column \" %s.%s \" in %s does not exist", relName, columnName, databaseName)); - } - - public NoSuchColumnException(String columnName) { - super("ERROR: column \"" + columnName + "\" does not exist"); - } -} http://git-wip-us.apache.org/repos/asf/tajo/blob/5d62c409/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/NameResolver.java ---------------------------------------------------------------------- diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/NameResolver.java b/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/NameResolver.java index 633b30e..dfcff9d 100644 --- a/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/NameResolver.java +++ b/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/NameResolver.java @@ -22,12 +22,10 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.apache.tajo.algebra.ColumnReferenceExpr; -import org.apache.tajo.algebra.Relation; import org.apache.tajo.catalog.CatalogUtil; import org.apache.tajo.catalog.Column; -import org.apache.tajo.catalog.NestedPathUtil; import org.apache.tajo.catalog.Schema; -import org.apache.tajo.catalog.exception.NoSuchColumnException; +import org.apache.tajo.catalog.exception.UndefinedColumnException; import org.apache.tajo.plan.algebra.AmbiguousFieldException; import org.apache.tajo.plan.LogicalPlan; import org.apache.tajo.plan.PlanningException; @@ -192,7 +190,7 @@ public abstract class NameResolver { * @return The found column */ static Column resolveFromCurrentAndChildNode(LogicalPlan.QueryBlock block, ColumnReferenceExpr columnRef) - throws NoSuchColumnException { + throws UndefinedColumnException { if (block.getCurrentNode() != null && block.getCurrentNode().getInSchema() != null) { Column found = block.getCurrentNode().getInSchema().getColumn(columnRef.getCanonicalName()); @@ -355,7 +353,7 @@ public abstract class NameResolver { // throw exception if no column cannot be founded or two or more than columns are founded if (guessedRelations.size() == 0) { - throw new NoSuchColumnException(columnRef.getQualifier()); + throw new UndefinedColumnException(columnRef.getQualifier()); } else if (guessedRelations.size() > 1) { throw new AmbiguousFieldException(columnRef.getCanonicalName()); } http://git-wip-us.apache.org/repos/asf/tajo/blob/5d62c409/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByLegacy.java ---------------------------------------------------------------------- diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByLegacy.java b/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByLegacy.java index 0a665ab..a94c296 100644 --- a/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByLegacy.java +++ b/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByLegacy.java @@ -22,10 +22,10 @@ import org.apache.tajo.algebra.ColumnReferenceExpr; import org.apache.tajo.catalog.CatalogUtil; import org.apache.tajo.catalog.Column; import org.apache.tajo.catalog.Schema; +import org.apache.tajo.catalog.exception.UndefinedColumnException; import org.apache.tajo.plan.LogicalPlan; import org.apache.tajo.plan.PlanningException; import org.apache.tajo.plan.logical.LogicalNode; -import org.apache.tajo.plan.logical.NoSuchColumnException; import org.apache.tajo.plan.logical.NodeType; import org.apache.tajo.plan.logical.RelationNode; import org.apache.tajo.util.Pair; @@ -56,7 +56,7 @@ public class ResolverByLegacy extends NameResolver { Column found = resolveFromRelsWithinBlock(plan, block, columnRef); if (found == null) { - throw new NoSuchColumnException(columnRef.getCanonicalName()); + throw new UndefinedColumnException(columnRef.getCanonicalName()); } // If code reach here, a column is found. @@ -119,6 +119,6 @@ public class ResolverByLegacy extends NameResolver { return found; } - throw new NoSuchColumnException("ERROR: no such a column name "+ columnRef.getCanonicalName()); + throw new UndefinedColumnException(columnRef.getCanonicalName()); } } http://git-wip-us.apache.org/repos/asf/tajo/blob/5d62c409/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByRels.java ---------------------------------------------------------------------- diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByRels.java b/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByRels.java index a67a1ca..1045cce 100644 --- a/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByRels.java +++ b/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByRels.java @@ -20,9 +20,9 @@ package org.apache.tajo.plan.nameresolver; import org.apache.tajo.algebra.ColumnReferenceExpr; import org.apache.tajo.catalog.Column; +import org.apache.tajo.catalog.exception.UndefinedColumnException; import org.apache.tajo.plan.LogicalPlan; import org.apache.tajo.plan.PlanningException; -import org.apache.tajo.plan.logical.NoSuchColumnException; public class ResolverByRels extends NameResolver { @Override @@ -31,7 +31,7 @@ public class ResolverByRels extends NameResolver { Column column = resolveFromRelsWithinBlock(plan, block, columnRef); if (column == null) { - throw new NoSuchColumnException(columnRef.getCanonicalName()); + throw new UndefinedColumnException(columnRef.getCanonicalName()); } return column; } http://git-wip-us.apache.org/repos/asf/tajo/blob/5d62c409/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByRelsAndSubExprs.java ---------------------------------------------------------------------- diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByRelsAndSubExprs.java b/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByRelsAndSubExprs.java index f486117..2a8319c 100644 --- a/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByRelsAndSubExprs.java +++ b/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByRelsAndSubExprs.java @@ -20,7 +20,7 @@ package org.apache.tajo.plan.nameresolver; import org.apache.tajo.algebra.ColumnReferenceExpr; import org.apache.tajo.catalog.Column; -import org.apache.tajo.catalog.exception.NoSuchColumnException; +import org.apache.tajo.catalog.exception.UndefinedColumnException; import org.apache.tajo.plan.LogicalPlan; import org.apache.tajo.plan.PlanningException; @@ -35,7 +35,7 @@ public class ResolverByRelsAndSubExprs extends NameResolver { } if (column == null) { - throw new NoSuchColumnException(columnRef.getCanonicalName()); + throw new UndefinedColumnException(columnRef.getCanonicalName()); } return column; } http://git-wip-us.apache.org/repos/asf/tajo/blob/5d62c409/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverBySubExprsAndRels.java ---------------------------------------------------------------------- diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverBySubExprsAndRels.java b/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverBySubExprsAndRels.java index 3064fde..5de720e 100644 --- a/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverBySubExprsAndRels.java +++ b/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverBySubExprsAndRels.java @@ -20,9 +20,9 @@ package org.apache.tajo.plan.nameresolver; import org.apache.tajo.algebra.ColumnReferenceExpr; import org.apache.tajo.catalog.Column; +import org.apache.tajo.catalog.exception.UndefinedColumnException; import org.apache.tajo.plan.LogicalPlan; import org.apache.tajo.plan.PlanningException; -import org.apache.tajo.plan.logical.NoSuchColumnException; public class ResolverBySubExprsAndRels extends NameResolver { @Override @@ -35,7 +35,7 @@ public class ResolverBySubExprsAndRels extends NameResolver { } if (column == null) { - throw new NoSuchColumnException(columnRef.getCanonicalName()); + throw new UndefinedColumnException(columnRef.getCanonicalName()); } return column; } http://git-wip-us.apache.org/repos/asf/tajo/blob/5d62c409/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/PartitionedTableRewriter.java ---------------------------------------------------------------------- diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/PartitionedTableRewriter.java b/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/PartitionedTableRewriter.java index 3b1f1a8..cd56a51 100644 --- a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/PartitionedTableRewriter.java +++ b/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/PartitionedTableRewriter.java @@ -323,7 +323,7 @@ public class PartitionedTableRewriter implements LogicalPlanRewriteRule { totalVolume += summary.getFileCount(); } scanNode.getTableDesc().getStats().setNumBytes(totalVolume); - } catch (IOException e) { + } catch (Throwable e) { throw new PlanningException(e); } } http://git-wip-us.apache.org/repos/asf/tajo/blob/5d62c409/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeDeserializer.java ---------------------------------------------------------------------- diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeDeserializer.java b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeDeserializer.java index 72373cf..05f95df 100644 --- a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeDeserializer.java +++ b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeDeserializer.java @@ -27,7 +27,7 @@ import org.apache.tajo.algebra.WindowSpec.WindowFrameStartBoundType; import org.apache.tajo.catalog.Column; import org.apache.tajo.catalog.FunctionDesc; import org.apache.tajo.catalog.SortSpec; -import org.apache.tajo.catalog.exception.NoSuchFunctionException; +import org.apache.tajo.catalog.exception.UndefinedFunctionException; import org.apache.tajo.catalog.proto.CatalogProtos; import org.apache.tajo.catalog.proto.CatalogProtos.FunctionSignatureProto; import org.apache.tajo.common.TajoDataTypes.DataType; @@ -229,19 +229,15 @@ public class EvalNodeDeserializer { DataType[] parameterTypes = new DataType[0]; if (funcProto.getFuncion() != null && funcProto.getFuncion().getSignature() != null) { FunctionSignatureProto funcSignatureProto = funcProto.getFuncion().getSignature(); - + if (funcSignatureProto.hasName()) { functionName = funcSignatureProto.getName(); } - + parameterTypes = funcSignatureProto.getParameterTypesList().toArray( new DataType[funcSignatureProto.getParameterTypesCount()]); } - throw new NoSuchFunctionException(functionName, parameterTypes); - } catch (InternalException ie) { - throw new NoSuchFunctionException(funcDesc.getFunctionName(), funcDesc.getParamTypes()); - } catch (IOException e) { - throw new NoSuchFunctionException(e.getMessage()); + throw new UndefinedFunctionException(functionName, parameterTypes); } } else { throw new RuntimeException("Unknown EvalType: " + type.name()); http://git-wip-us.apache.org/repos/asf/tajo/blob/5d62c409/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/ExprsVerifier.java ---------------------------------------------------------------------- diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/ExprsVerifier.java b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/ExprsVerifier.java index bc6e696..212fa9e 100644 --- a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/ExprsVerifier.java +++ b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/ExprsVerifier.java @@ -19,6 +19,10 @@ package org.apache.tajo.plan.verifier; import org.apache.tajo.catalog.Column; +import org.apache.tajo.error.Errors; +import org.apache.tajo.exception.TajoException; +import org.apache.tajo.exception.TajoInternalError; +import org.apache.tajo.exception.UndefinedOperatorException; import org.apache.tajo.plan.PlanningException; import org.apache.tajo.plan.expr.*; import org.apache.tajo.plan.logical.LogicalNode; @@ -49,7 +53,7 @@ public class ExprsVerifier extends BasicEvalNodeVisitor<VerificationState, EvalN Set<Column> referredColumns = EvalTreeUtil.findUniqueColumns(expression); for (Column referredColumn : referredColumns) { if (!currentNode.getInSchema().contains(referredColumn)) { - throw new PlanningException("Invalid State: " + referredColumn + " cannot be accessible at Node (" + throw new TajoInternalError("Invalid State: " + referredColumn + " cannot be accessible at Node (" + currentNode.getPID() + ")"); } } @@ -86,7 +90,7 @@ public class ExprsVerifier extends BasicEvalNodeVisitor<VerificationState, EvalN DataType leftType = expr.getLeftExpr().getValueType(); DataType rightType = expr.getRightExpr().getValueType(); if (!isCompatibleType(leftType, rightType)) { - state.addVerification("No operator matches the given name and argument type(s): " + expr.toString()); + state.addVerification(new UndefinedOperatorException(expr.toString())); } } @@ -134,7 +138,7 @@ public class ExprsVerifier extends BasicEvalNodeVisitor<VerificationState, EvalN if (evalNode.getRightExpr().getType() == EvalType.CONST) { ConstEval constEval = evalNode.getRightExpr(); if (constEval.getValue().asFloat8() == 0) { - state.addVerification("division by zero"); + state.addVerification(new TajoException(Errors.ResultCode.DIVISION_BY_ZERO, evalNode.toString())); } } } @@ -173,7 +177,7 @@ public class ExprsVerifier extends BasicEvalNodeVisitor<VerificationState, EvalN } if (!(checkNumericType(leftDataType) && checkNumericType(rightDataType))) { - state.addVerification("No operator matches the given name and argument type(s): " + evalNode.toString()); + state.addVerification(new UndefinedOperatorException(evalNode.toString())); } } http://git-wip-us.apache.org/repos/asf/tajo/blob/5d62c409/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/LogicalPlanVerifier.java ---------------------------------------------------------------------- diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/LogicalPlanVerifier.java b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/LogicalPlanVerifier.java index c5ef8ef..c6062e9 100644 --- a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/LogicalPlanVerifier.java +++ b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/LogicalPlanVerifier.java @@ -23,9 +23,11 @@ import org.apache.tajo.OverridableConf; import org.apache.tajo.catalog.CatalogService; import org.apache.tajo.catalog.Column; import org.apache.tajo.catalog.Schema; -import org.apache.tajo.common.TajoDataTypes; import org.apache.tajo.common.TajoDataTypes.Type; import org.apache.tajo.conf.TajoConf; +import org.apache.tajo.error.Errors; +import org.apache.tajo.exception.TajoException; +import org.apache.tajo.exception.UnsupportedException; import org.apache.tajo.plan.LogicalPlan; import org.apache.tajo.plan.util.PlannerUtil; import org.apache.tajo.plan.PlanningException; @@ -35,6 +37,10 @@ import org.apache.tajo.plan.visitor.BasicLogicalPlanVisitor; import java.util.Stack; +import static org.apache.tajo.plan.verifier.SyntaxErrorUtil.makeDataTypeMisMatch; +import static org.apache.tajo.plan.verifier.SyntaxErrorUtil.makeSetOpDataTypeMisMatch; +import static org.apache.tajo.plan.verifier.SyntaxErrorUtil.makeSyntaxError; + public class LogicalPlanVerifier extends BasicLogicalPlanVisitor<LogicalPlanVerifier.Context, LogicalNode> { public LogicalPlanVerifier(TajoConf conf, CatalogService catalog) { } @@ -71,16 +77,13 @@ public class LogicalPlanVerifier extends BasicLogicalPlanVisitor<LogicalPlanVeri Column outputColumn = outputSchema.getColumn(i); if (outputColumn.getDataType().getType() == Type.RECORD) { - context.state.addVerification("Projecting RECORD fields is not supported yet."); + context.state.addVerification(new UnsupportedException("RECORD field projection")); } if (!outputColumn.getDataType().equals(targetSchema.getColumn(i).getDataType())) { Column targetColumn = targetSchema.getColumn(i); Column insertColumn = outputColumn; - throw new PlanningException("ERROR: " + - insertColumn.getSimpleName() + " is of type " + insertColumn.getDataType().getType().name() + - ", but target column '" + targetColumn.getSimpleName() + "' is of type " + - targetColumn.getDataType().getType().name()); + throw new PlanningException(SyntaxErrorUtil.makeDataTypeMisMatch(insertColumn, targetColumn)); } } } @@ -105,7 +108,7 @@ public class LogicalPlanVerifier extends BasicLogicalPlanVisitor<LogicalPlanVeri super.visitLimit(context, plan, block, node, stack); if (node.getFetchFirstNum() < 0) { - context.state.addVerification("LIMIT must not be negative"); + context.state.addVerification(makeSyntaxError("LIMIT must not be negative")); } return node; @@ -151,7 +154,7 @@ public class LogicalPlanVerifier extends BasicLogicalPlanVisitor<LogicalPlanVeri NodeType type = setNode.getType(); if (left.size() != right.size()) { - state.addVerification("each " + type.name() + " query must have the same number of columns"); + state.addVerification(new TajoException(Errors.ResultCode.AMBIGUOUS_FUNCTION)); return; } @@ -160,8 +163,9 @@ public class LogicalPlanVerifier extends BasicLogicalPlanVisitor<LogicalPlanVeri for (int i = 0; i < leftColumns.length; i++) { if (!leftColumns[i].getDataType().equals(rightColumns[i].getDataType())) { - state.addVerification(type + " types " + leftColumns[i].getDataType().getType() + " and " - + rightColumns[i].getDataType().getType() + " cannot be matched"); + state.addVerification( + makeSetOpDataTypeMisMatch(type, leftColumns[i].getDataType(), rightColumns[i].getDataType()) + ); } } } @@ -245,10 +249,7 @@ public class LogicalPlanVerifier extends BasicLogicalPlanVisitor<LogicalPlanVeri if (!schema.getColumn(i).getDataType().equals(targetTableScheme.getColumn(i).getDataType())) { Column targetColumn = targetTableScheme.getColumn(i); Column insertColumn = schema.getColumn(i); - state.addVerification("ERROR: " + - insertColumn.getSimpleName() + " is of type " + insertColumn.getDataType().getType().name() + - ", but target column '" + targetColumn.getSimpleName() + "' is of type " + - targetColumn.getDataType().getType().name()); + state.addVerification(makeDataTypeMisMatch(insertColumn, targetColumn)); } } } http://git-wip-us.apache.org/repos/asf/tajo/blob/5d62c409/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java ---------------------------------------------------------------------- diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java index 18ca627..6330268 100644 --- a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java +++ b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java @@ -26,7 +26,9 @@ import org.apache.tajo.algebra.*; import org.apache.tajo.catalog.CatalogService; import org.apache.tajo.catalog.CatalogUtil; import org.apache.tajo.catalog.TableDesc; -import org.apache.tajo.catalog.proto.CatalogProtos; +import org.apache.tajo.catalog.exception.*; +import org.apache.tajo.exception.ExceptionUtil; +import org.apache.tajo.exception.UnimplementedException; import org.apache.tajo.plan.util.ExprFinder; import org.apache.tajo.plan.PlanningException; import org.apache.tajo.plan.algebra.BaseAlgebraVisitor; @@ -37,6 +39,9 @@ import java.util.Collection; import java.util.Set; import java.util.Stack; +import static org.apache.tajo.catalog.exception.CatalogExceptionUtil.makeUndefinedTable; +import static org.apache.tajo.plan.verifier.SyntaxErrorUtil.makeSyntaxError; + public class PreLogicalPlanVerifier extends BaseAlgebraVisitor<PreLogicalPlanVerifier.Context, Expr> { private CatalogService catalog; @@ -71,7 +76,7 @@ public class PreLogicalPlanVerifier extends BaseAlgebraVisitor<PreLogicalPlanVer Collection<ConstraintViolation> violations = var.validator().validate(expr.getValue()); for (ConstraintViolation violation : violations) { - ctx.state.addVerification(violation.getMessage()); + ctx.state.addVerification(SyntaxErrorUtil.makeInvalidSessionVar(var.keyname(), violation.getMessage())); } } } @@ -88,8 +93,7 @@ public class PreLogicalPlanVerifier extends BaseAlgebraVisitor<PreLogicalPlanVer if (namedExpr.hasAlias()) { if (names.contains(namedExpr.getAlias())) { - context.state.addVerification(String.format("column name \"%s\" specified more than once", - namedExpr.getAlias())); + context.state.addVerification(SyntaxErrorUtil.makeDuplicateAlias(namedExpr.getAlias())); } else { names.add(namedExpr.getAlias()); } @@ -103,7 +107,7 @@ public class PreLogicalPlanVerifier extends BaseAlgebraVisitor<PreLogicalPlanVer stack.push(expr); if (ExprFinder.finds(expr.getFetchFirstNum(), OpType.Column).size() > 0) { - context.state.addVerification("argument of LIMIT must not contain variables"); + context.state.addVerification(SyntaxErrorUtil.makeSyntaxError("argument of LIMIT must not contain variables")); } visit(context, stack, expr.getFetchFirstNum()); @@ -119,7 +123,7 @@ public class PreLogicalPlanVerifier extends BaseAlgebraVisitor<PreLogicalPlanVer // Enforcer only ordinary grouping set. for (Aggregation.GroupElement groupingElement : expr.getGroupSet()) { if (groupingElement.getType() != Aggregation.GroupType.OrdinaryGroup) { - context.state.addVerification(groupingElement.getType() + " is not supported yet"); + context.state.addVerification(ExceptionUtil.makeNotSupported(groupingElement.getType().name())); } } @@ -154,7 +158,7 @@ public class PreLogicalPlanVerifier extends BaseAlgebraVisitor<PreLogicalPlanVer } if (!catalog.existsTable(qualifiedName)) { - context.state.addVerification(String.format("relation \"%s\" does not exist", qualifiedName)); + context.state.addVerification(makeUndefinedTable(qualifiedName)); return false; } return true; @@ -172,7 +176,7 @@ public class PreLogicalPlanVerifier extends BaseAlgebraVisitor<PreLogicalPlanVer System.out.println("A"); } if (catalog.existsTable(qualifiedName)) { - context.state.addVerification(String.format("relation \"%s\" already exists", qualifiedName)); + context.state.addVerification(CatalogExceptionUtil.makeDuplicateTable(qualifiedName)); return false; } return true; @@ -182,7 +186,7 @@ public class PreLogicalPlanVerifier extends BaseAlgebraVisitor<PreLogicalPlanVer Preconditions.checkNotNull(name); if (name.equalsIgnoreCase("RAW")) { - state.addVerification(String.format("Store format %s is not supported.", name)); + state.addVerification(SyntaxErrorUtil.makeUnknownDataFormat(name)); return false; } return true; @@ -190,7 +194,7 @@ public class PreLogicalPlanVerifier extends BaseAlgebraVisitor<PreLogicalPlanVer private boolean assertDatabaseExistence(VerificationState state, String name) { if (!catalog.existDatabase(name)) { - state.addVerification(String.format("database \"%s\" does not exist", name)); + state.addVerification(new UndefinedDatabaseException(name)); return false; } return true; @@ -198,7 +202,7 @@ public class PreLogicalPlanVerifier extends BaseAlgebraVisitor<PreLogicalPlanVer private boolean assertDatabaseNoExistence(VerificationState state, String name) { if (catalog.existDatabase(name)) { - state.addVerification(String.format("database \"%s\" already exists", name)); + state.addVerification(new DuplicateDatabaseException(name)); return false; } return true; @@ -283,9 +287,9 @@ public class PreLogicalPlanVerifier extends BaseAlgebraVisitor<PreLogicalPlanVer int targetColumnNum = expr.getTargetColumns().length; if (targetColumnNum > projectColumnNum) { - context.state.addVerification("INSERT has more target columns than expressions"); + context.state.addVerification(makeSyntaxError("INSERT has more target columns than expressions")); } else if (targetColumnNum < projectColumnNum) { - context.state.addVerification("INSERT has more expressions than target columns"); + context.state.addVerification(makeSyntaxError("INSERT has more expressions than target columns")); } } else { if (expr.hasTableName()) { @@ -297,16 +301,17 @@ public class PreLogicalPlanVerifier extends BaseAlgebraVisitor<PreLogicalPlanVer TableDesc table = catalog.getTableDesc(qualifiedName); if (table == null) { - context.state.addVerification(String.format("relation \"%s\" does not exist", qualifiedName)); + context.state.addVerification(new UndefinedTableException(qualifiedName)); return null; } if (table.hasPartition()) { int columnSize = table.getSchema().getRootColumns().size(); columnSize += table.getPartitionMethod().getExpressionSchema().getRootColumns().size(); + if (projectColumnNum < columnSize) { - context.state.addVerification("INSERT has smaller expressions than target columns"); + context.state.addVerification(makeSyntaxError("INSERT has smaller expressions than target columns")); } else if (projectColumnNum > columnSize) { - context.state.addVerification("INSERT has more expressions than target columns"); + context.state.addVerification(makeSyntaxError("INSERT has more expressions than target columns")); } } } @@ -316,10 +321,4 @@ public class PreLogicalPlanVerifier extends BaseAlgebraVisitor<PreLogicalPlanVer return expr; } - - @Override - public Expr visitAlterTable(Context context, Stack<Expr> stack, AlterTable expr) throws PlanningException { - super.visitAlterTable(context, stack, expr); - return expr; - } } http://git-wip-us.apache.org/repos/asf/tajo/blob/5d62c409/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/SyntaxErrorException.java ---------------------------------------------------------------------- diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/SyntaxErrorException.java b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/SyntaxErrorException.java new file mode 100644 index 0000000..ff556c1 --- /dev/null +++ b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/SyntaxErrorException.java @@ -0,0 +1,29 @@ +/* + * 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.plan.verifier; + +import org.apache.tajo.error.Errors; +import org.apache.tajo.exception.TajoException; + +public class SyntaxErrorException extends TajoException { + + public SyntaxErrorException(Errors.ResultCode code, String ... args) { + super(code, args); + } +} http://git-wip-us.apache.org/repos/asf/tajo/blob/5d62c409/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/SyntaxErrorUtil.java ---------------------------------------------------------------------- diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/SyntaxErrorUtil.java b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/SyntaxErrorUtil.java new file mode 100644 index 0000000..3c11b8c --- /dev/null +++ b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/SyntaxErrorUtil.java @@ -0,0 +1,54 @@ +/* + * 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.plan.verifier; + +import org.apache.tajo.catalog.Column; +import org.apache.tajo.common.TajoDataTypes.DataType; +import org.apache.tajo.error.Errors.ResultCode; +import org.apache.tajo.plan.logical.NodeType; + +public class SyntaxErrorUtil { + + public static SyntaxErrorException makeSyntaxError(String message) { + return new SyntaxErrorException(ResultCode.SYNTAX_ERROR, message); + } + + public static SyntaxErrorException makeDataTypeMisMatch(Column src, Column target) { + return new SyntaxErrorException(ResultCode.DATATYPE_MISMATCH, + src.getSimpleName(), src.getDataType().getType().name(), + target.getSimpleName(), target.getDataType().getType().name()); + } + + public static SyntaxErrorException makeSetOpDataTypeMisMatch(NodeType type, DataType src, DataType target) { + return new SyntaxErrorException(ResultCode.SET_OPERATION_DATATYPE_MISMATCH, + type.name(), src.getType().name(), target.getType().name()); + } + + public static SyntaxErrorException makeDuplicateAlias(String name) { + return new SyntaxErrorException(ResultCode.DUPLICATE_ALIAS, name); + } + + public static SyntaxErrorException makeInvalidSessionVar(String varName, String message) { + return new SyntaxErrorException(ResultCode.INVALID_SESSION_VARIABLE, varName, message); + } + + public static SyntaxErrorException makeUnknownDataFormat(String dataFormat) { + return new SyntaxErrorException(ResultCode.UNKNOWN_DATAFORMAT, dataFormat); + } +} http://git-wip-us.apache.org/repos/asf/tajo/blob/5d62c409/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/VerificationState.java ---------------------------------------------------------------------- diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/VerificationState.java b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/VerificationState.java index a27b200..d20f8f9 100644 --- a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/VerificationState.java +++ b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/VerificationState.java @@ -21,16 +21,24 @@ package org.apache.tajo.plan.verifier; import com.google.common.collect.Lists; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.tajo.exception.TajoException; +import org.apache.tajo.exception.TajoExceptionInterface; +import org.apache.tajo.exception.TajoRuntimeException; import org.apache.tajo.util.TUtil; import java.util.List; public class VerificationState { private static final Log LOG = LogFactory.getLog(VerificationState.class); - List<String> errorMessages = Lists.newArrayList(); + List<Throwable> errorMessages = Lists.newArrayList(); - public void addVerification(String error) { - LOG.warn(TUtil.getCurrentCodePoint(1) + " causes: " + error); + public void addVerification(TajoException error) { + LOG.warn(TUtil.getCurrentCodePoint(1) + " causes: " + error.getMessage()); + errorMessages.add(error); + } + + public void addVerification(TajoRuntimeException error) { + LOG.warn(TUtil.getCurrentCodePoint(1) + " causes: " + error.getMessage()); errorMessages.add(error); } @@ -38,7 +46,7 @@ public class VerificationState { return errorMessages.size() == 0; } - public List<String> getErrorMessages() { + public List<Throwable> getErrors() { return errorMessages; } } http://git-wip-us.apache.org/repos/asf/tajo/blob/5d62c409/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/json/JsonLineDeserializer.java ---------------------------------------------------------------------- diff --git a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/json/JsonLineDeserializer.java b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/json/JsonLineDeserializer.java index 0d1c94a..73b7592 100644 --- a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/json/JsonLineDeserializer.java +++ b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/json/JsonLineDeserializer.java @@ -26,21 +26,18 @@ import net.minidev.json.parser.ParseException; import org.apache.tajo.catalog.*; import org.apache.commons.net.util.Base64; import org.apache.tajo.catalog.Schema; -import org.apache.tajo.catalog.SchemaUtil; import org.apache.tajo.catalog.TableMeta; import org.apache.tajo.common.TajoDataTypes.Type; -import org.apache.tajo.common.exception.NotImplementedException; import org.apache.tajo.datum.DatumFactory; import org.apache.tajo.datum.NullDatum; import org.apache.tajo.datum.TextDatum; +import org.apache.tajo.exception.UnimplementedException; import org.apache.tajo.storage.Tuple; import org.apache.tajo.storage.text.TextLineDeserializer; import org.apache.tajo.storage.text.TextLineParsingError; -import org.apache.tajo.util.StringUtils; import org.apache.tajo.util.TUtil; import java.io.IOException; -import java.util.Iterator; import java.util.Map; public class JsonLineDeserializer extends TextLineDeserializer { @@ -238,7 +235,7 @@ public class JsonLineDeserializer extends TextLineDeserializer { break; default: - throw new NotImplementedException(types.get(fullPath).name() + " is not supported."); + throw new UnimplementedException(types.get(fullPath).name() + " is not supported."); } } http://git-wip-us.apache.org/repos/asf/tajo/blob/5d62c409/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/json/JsonLineSerializer.java ---------------------------------------------------------------------- diff --git a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/json/JsonLineSerializer.java b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/json/JsonLineSerializer.java index 60c32a7..4d5d2e6 100644 --- a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/json/JsonLineSerializer.java +++ b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/json/JsonLineSerializer.java @@ -25,9 +25,8 @@ import org.apache.tajo.catalog.Schema; import org.apache.tajo.catalog.SchemaUtil; import org.apache.tajo.catalog.TableMeta; import org.apache.tajo.common.TajoDataTypes.Type; -import org.apache.tajo.common.exception.NotImplementedException; import org.apache.tajo.datum.TextDatum; -import org.apache.tajo.datum.protobuf.ProtobufJsonFormat; +import org.apache.tajo.exception.UnimplementedException; import org.apache.tajo.storage.Tuple; import org.apache.tajo.storage.text.TextLineSerializer; @@ -112,7 +111,7 @@ public class JsonLineSerializer extends TextLineSerializer { break; default: - throw new NotImplementedException(types[i].name() + " is not supported."); + throw new UnimplementedException(types[i].name() + " is not supported."); } } http://git-wip-us.apache.org/repos/asf/tajo/blob/5d62c409/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/text/DelimitedLineReader.java ---------------------------------------------------------------------- diff --git a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/text/DelimitedLineReader.java b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/text/DelimitedLineReader.java index f15861c..b73f96b 100644 --- a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/text/DelimitedLineReader.java +++ b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/text/DelimitedLineReader.java @@ -30,8 +30,8 @@ import org.apache.hadoop.io.compress.CompressionCodec; import org.apache.hadoop.io.compress.CompressionCodecFactory; import org.apache.hadoop.io.compress.Decompressor; import org.apache.hadoop.io.compress.SplittableCompressionCodec; -import org.apache.tajo.common.exception.NotImplementedException; import org.apache.tajo.conf.TajoConf; +import org.apache.tajo.exception.UnimplementedException; import org.apache.tajo.exception.UnsupportedException; import org.apache.tajo.storage.*; import org.apache.tajo.storage.compress.CodecPool; @@ -72,7 +72,7 @@ public class DelimitedLineReader implements Closeable { this.bufferSize = bufferSize; if (this.codec instanceof SplittableCompressionCodec) { // bzip2 does not support multi-thread model - throw new NotImplementedException(this.getClass() + " does not support " + this.codec.getDefaultExtension()); + throw new UnimplementedException(this.getClass() + " does not support " + this.codec.getDefaultExtension()); } }
