You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by ma...@apache.org on 2017/12/12 18:52:41 UTC

[2/4] atlas git commit: ATLAS-2229: DSL implementation using Antlr

http://git-wip-us.apache.org/repos/asf/atlas/blob/5bd5327c/repository/src/main/java/org/apache/atlas/query/antlr4/AtlasDSLParserBaseVisitor.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/query/antlr4/AtlasDSLParserBaseVisitor.java b/repository/src/main/java/org/apache/atlas/query/antlr4/AtlasDSLParserBaseVisitor.java
new file mode 100644
index 0000000..4495f77
--- /dev/null
+++ b/repository/src/main/java/org/apache/atlas/query/antlr4/AtlasDSLParserBaseVisitor.java
@@ -0,0 +1,294 @@
+// Generated from AtlasDSLParser.g4 by ANTLR 4.7
+package org.apache.atlas.query.antlr4;
+import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
+
+/**
+ * This class provides an empty implementation of {@link AtlasDSLParserVisitor},
+ * which can be extended to create a visitor which only needs to handle a subset
+ * of the available methods.
+ *
+ * @param <T> The return type of the visit operation. Use {@link Void} for
+ * operations with no return type.
+ */
+public class AtlasDSLParserBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements AtlasDSLParserVisitor<T> {
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitIdentifier(AtlasDSLParser.IdentifierContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitOperator(AtlasDSLParser.OperatorContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitSortOrder(AtlasDSLParser.SortOrderContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitValueArray(AtlasDSLParser.ValueArrayContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitLiteral(AtlasDSLParser.LiteralContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitLimitClause(AtlasDSLParser.LimitClauseContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitOffsetClause(AtlasDSLParser.OffsetClauseContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitAtomE(AtlasDSLParser.AtomEContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitMultiERight(AtlasDSLParser.MultiERightContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitMultiE(AtlasDSLParser.MultiEContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitArithERight(AtlasDSLParser.ArithERightContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitArithE(AtlasDSLParser.ArithEContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitComparisonClause(AtlasDSLParser.ComparisonClauseContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitIsClause(AtlasDSLParser.IsClauseContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitHasClause(AtlasDSLParser.HasClauseContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitCountClause(AtlasDSLParser.CountClauseContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitMaxClause(AtlasDSLParser.MaxClauseContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitMinClause(AtlasDSLParser.MinClauseContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitSumClause(AtlasDSLParser.SumClauseContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitExprRight(AtlasDSLParser.ExprRightContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitCompE(AtlasDSLParser.CompEContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitExpr(AtlasDSLParser.ExprContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitLimitOffset(AtlasDSLParser.LimitOffsetContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitSelectExpression(AtlasDSLParser.SelectExpressionContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitSelectExpr(AtlasDSLParser.SelectExprContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitAliasExpr(AtlasDSLParser.AliasExprContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitOrderByExpr(AtlasDSLParser.OrderByExprContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitFromSrc(AtlasDSLParser.FromSrcContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitWhereClause(AtlasDSLParser.WhereClauseContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitFromExpression(AtlasDSLParser.FromExpressionContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitFromClause(AtlasDSLParser.FromClauseContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitSelectClause(AtlasDSLParser.SelectClauseContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitSingleQrySrc(AtlasDSLParser.SingleQrySrcContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitLoopExpression(AtlasDSLParser.LoopExpressionContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitGroupByExpression(AtlasDSLParser.GroupByExpressionContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitCommaDelimitedQueries(AtlasDSLParser.CommaDelimitedQueriesContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitSpaceDelimitedQueries(AtlasDSLParser.SpaceDelimitedQueriesContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitQuerySrc(AtlasDSLParser.QuerySrcContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitQuery(AtlasDSLParser.QueryContext ctx) { return visitChildren(ctx); }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public T visitQueryWithPath(AtlasDSLParser.QueryWithPathContext ctx) { return visitChildren(ctx); }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/atlas/blob/5bd5327c/repository/src/main/java/org/apache/atlas/query/antlr4/AtlasDSLParserVisitor.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/query/antlr4/AtlasDSLParserVisitor.java b/repository/src/main/java/org/apache/atlas/query/antlr4/AtlasDSLParserVisitor.java
new file mode 100644
index 0000000..4985f8a
--- /dev/null
+++ b/repository/src/main/java/org/apache/atlas/query/antlr4/AtlasDSLParserVisitor.java
@@ -0,0 +1,253 @@
+// Generated from AtlasDSLParser.g4 by ANTLR 4.7
+package org.apache.atlas.query.antlr4;
+import org.antlr.v4.runtime.tree.ParseTreeVisitor;
+
+/**
+ * This interface defines a complete generic visitor for a parse tree produced
+ * by {@link AtlasDSLParser}.
+ *
+ * @param <T> The return type of the visit operation. Use {@link Void} for
+ * operations with no return type.
+ */
+public interface AtlasDSLParserVisitor<T> extends ParseTreeVisitor<T> {
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#identifier}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitIdentifier(AtlasDSLParser.IdentifierContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#operator}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitOperator(AtlasDSLParser.OperatorContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#sortOrder}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitSortOrder(AtlasDSLParser.SortOrderContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#valueArray}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitValueArray(AtlasDSLParser.ValueArrayContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#literal}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitLiteral(AtlasDSLParser.LiteralContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#limitClause}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitLimitClause(AtlasDSLParser.LimitClauseContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#offsetClause}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitOffsetClause(AtlasDSLParser.OffsetClauseContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#atomE}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitAtomE(AtlasDSLParser.AtomEContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#multiERight}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitMultiERight(AtlasDSLParser.MultiERightContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#multiE}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitMultiE(AtlasDSLParser.MultiEContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#arithERight}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitArithERight(AtlasDSLParser.ArithERightContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#arithE}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitArithE(AtlasDSLParser.ArithEContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#comparisonClause}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitComparisonClause(AtlasDSLParser.ComparisonClauseContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#isClause}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitIsClause(AtlasDSLParser.IsClauseContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#hasClause}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitHasClause(AtlasDSLParser.HasClauseContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#countClause}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitCountClause(AtlasDSLParser.CountClauseContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#maxClause}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitMaxClause(AtlasDSLParser.MaxClauseContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#minClause}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitMinClause(AtlasDSLParser.MinClauseContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#sumClause}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitSumClause(AtlasDSLParser.SumClauseContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#exprRight}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitExprRight(AtlasDSLParser.ExprRightContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#compE}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitCompE(AtlasDSLParser.CompEContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#expr}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitExpr(AtlasDSLParser.ExprContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#limitOffset}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitLimitOffset(AtlasDSLParser.LimitOffsetContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#selectExpression}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitSelectExpression(AtlasDSLParser.SelectExpressionContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#selectExpr}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitSelectExpr(AtlasDSLParser.SelectExprContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#aliasExpr}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitAliasExpr(AtlasDSLParser.AliasExprContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#orderByExpr}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitOrderByExpr(AtlasDSLParser.OrderByExprContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#fromSrc}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitFromSrc(AtlasDSLParser.FromSrcContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#whereClause}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitWhereClause(AtlasDSLParser.WhereClauseContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#fromExpression}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitFromExpression(AtlasDSLParser.FromExpressionContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#fromClause}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitFromClause(AtlasDSLParser.FromClauseContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#selectClause}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitSelectClause(AtlasDSLParser.SelectClauseContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#singleQrySrc}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitSingleQrySrc(AtlasDSLParser.SingleQrySrcContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#loopExpression}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitLoopExpression(AtlasDSLParser.LoopExpressionContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#groupByExpression}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitGroupByExpression(AtlasDSLParser.GroupByExpressionContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#commaDelimitedQueries}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitCommaDelimitedQueries(AtlasDSLParser.CommaDelimitedQueriesContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#spaceDelimitedQueries}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitSpaceDelimitedQueries(AtlasDSLParser.SpaceDelimitedQueriesContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#querySrc}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitQuerySrc(AtlasDSLParser.QuerySrcContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#query}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitQuery(AtlasDSLParser.QueryContext ctx);
+	/**
+	 * Visit a parse tree produced by {@link AtlasDSLParser#queryWithPath}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	T visitQueryWithPath(AtlasDSLParser.QueryWithPathContext ctx);
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/atlas/blob/5bd5327c/repository/src/test/java/org/apache/atlas/query/BasicTestSetup.java
----------------------------------------------------------------------
diff --git a/repository/src/test/java/org/apache/atlas/query/BasicTestSetup.java b/repository/src/test/java/org/apache/atlas/query/BasicTestSetup.java
new file mode 100644
index 0000000..2aecf2b
--- /dev/null
+++ b/repository/src/test/java/org/apache/atlas/query/BasicTestSetup.java
@@ -0,0 +1,358 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.atlas.query;
+
+import com.google.common.collect.ImmutableList;
+import org.apache.atlas.AtlasClient;
+import org.apache.atlas.TestUtilsV2;
+import org.apache.atlas.exception.AtlasBaseException;
+import org.apache.atlas.model.instance.AtlasClassification;
+import org.apache.atlas.model.instance.AtlasEntity;
+import org.apache.atlas.model.typedef.AtlasTypesDef;
+import org.apache.atlas.repository.store.graph.AtlasEntityStore;
+import org.apache.atlas.repository.store.graph.v1.AtlasEntityStream;
+import org.apache.atlas.store.AtlasTypeDefStore;
+import org.apache.atlas.type.AtlasTypeRegistry;
+
+import javax.inject.Inject;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import static org.apache.atlas.repository.impexp.ZipFileResourceTestUtils.loadModelFromJson;
+import static org.testng.Assert.fail;
+
+public abstract class BasicTestSetup {
+
+    protected static final String DATABASE_TYPE     = "hive_db";
+    protected static final String HIVE_TABLE_TYPE   = "hive_table";
+    private static final   String COLUMN_TYPE       = "hive_column";
+    private static final   String HIVE_PROCESS_TYPE = "hive_process";
+    private static final   String STORAGE_DESC_TYPE = "StorageDesc";
+    private static final   String VIEW_TYPE         = "View";
+    private static final   String PARTITION_TYPE    = "hive_partition";
+    protected static final String DATASET_SUBTYPE   = "dataset_subtype";
+
+    @Inject
+    protected AtlasTypeRegistry atlasTypeRegistry;
+    @Inject
+    protected AtlasTypeDefStore atlasTypeDefStore;
+    @Inject
+    protected AtlasEntityStore  atlasEntityStore;
+
+    private boolean baseLoaded = false;
+
+    protected void setupTestData() {
+        loadBaseModels();
+        loadHiveDataset();
+        loadEmployeeDataset();
+    }
+
+    private void loadBaseModels() {
+        // Load all base models
+        try {
+            loadModelFromJson("0000-Area0/0010-base_model.json", atlasTypeDefStore, atlasTypeRegistry);
+            baseLoaded = true;
+        } catch (IOException | AtlasBaseException e) {
+            fail("Base model setup is required for test to run");
+        }
+    }
+
+    protected void loadHiveDataset() {
+        if (!baseLoaded) {
+            loadBaseModels();
+        }
+
+        try {
+            loadModelFromJson("1000-Hadoop/1030-hive_model.json", atlasTypeDefStore, atlasTypeRegistry);
+        } catch (IOException | AtlasBaseException e) {
+            fail("Hive model setup is required for test to run");
+        }
+
+        AtlasEntity.AtlasEntitiesWithExtInfo hiveTestEntities = hiveTestEntities();
+
+        try {
+            atlasEntityStore.createOrUpdate(new AtlasEntityStream(hiveTestEntities), false);
+        } catch (AtlasBaseException e) {
+            fail("Hive instance setup is needed for test to run");
+        }
+    }
+
+    protected void loadEmployeeDataset() {
+        if (!baseLoaded) {
+            loadBaseModels();
+        }
+
+        // Define employee dataset types
+        AtlasTypesDef employeeTypes = TestUtilsV2.defineDeptEmployeeTypes();
+
+        try {
+            atlasTypeDefStore.createTypesDef(employeeTypes);
+        } catch (AtlasBaseException e) {
+            fail("Employee Type setup is required");
+        }
+
+        // Define entities for department
+        AtlasEntity.AtlasEntitiesWithExtInfo deptEg2 = TestUtilsV2.createDeptEg2();
+
+        try {
+            atlasEntityStore.createOrUpdate(new AtlasEntityStream(deptEg2), false);
+        } catch (AtlasBaseException e) {
+            fail("Employee entity setup should've passed");
+        }
+    }
+
+    public AtlasEntity.AtlasEntitiesWithExtInfo hiveTestEntities() {
+        List<AtlasEntity> entities = new ArrayList<>();
+
+        AtlasEntity salesDB = database("Sales", "Sales Database", "John ETL", "hdfs://host:8000/apps/warehouse/sales");
+
+        entities.add(salesDB);
+
+        AtlasEntity sd =
+                storageDescriptor("hdfs://host:8000/apps/warehouse/sales", "TextInputFormat", "TextOutputFormat", true, ImmutableList.of(
+                        column("time_id", "int", "time id")));
+        entities.add(sd);
+
+        List<AtlasEntity> salesFactColumns = ImmutableList
+                                                     .of(column("time_id", "int", "time id"),
+                                                         column("product_id", "int", "product id"),
+                                                         column("customer_id", "int", "customer id", "PII"),
+                                                         column("sales", "double", "product id", "Metric"));
+        entities.addAll(salesFactColumns);
+
+        AtlasEntity salesFact = table("sales_fact", "sales fact table", salesDB, sd, "Joe", "Managed", salesFactColumns, "Fact");
+        entities.add(salesFact);
+
+        List<AtlasEntity> logFactColumns = ImmutableList
+                                                   .of(column("time_id", "int", "time id"), column("app_id", "int", "app id"),
+                                                       column("machine_id", "int", "machine id"), column("log", "string", "log data", "Log Data"));
+        entities.addAll(logFactColumns);
+
+        List<AtlasEntity> timeDimColumns = ImmutableList
+                                                   .of(column("time_id", "int", "time id"),
+                                                       column("dayOfYear", "int", "day Of Year"),
+                                                       column("weekDay", "int", "week Day"));
+        entities.addAll(timeDimColumns);
+
+        AtlasEntity timeDim = table("time_dim", "time dimension table", salesDB, sd, "John Doe", "External", timeDimColumns,
+                                    "Dimension");
+        entities.add(timeDim);
+
+        AtlasEntity reportingDB =
+                database("Reporting", "reporting database", "Jane BI", "hdfs://host:8000/apps/warehouse/reporting");
+        entities.add(reportingDB);
+
+        AtlasEntity salesFactDaily =
+                table("sales_fact_daily_mv", "sales fact daily materialized view", reportingDB, sd, "Joe BI", "Managed",
+                      salesFactColumns, "Metric");
+        entities.add(salesFactDaily);
+
+        AtlasEntity circularLineageTable1 = table("table1", "", reportingDB, sd, "Vimal", "Managed", salesFactColumns, "Metric");
+        entities.add(circularLineageTable1);
+
+        AtlasEntity circularLineageTable2 = table("table2", "", reportingDB, sd, "Vimal", "Managed", salesFactColumns, "Metric");
+        entities.add(circularLineageTable2);
+
+        AtlasEntity circularLineage1Process = loadProcess("circularLineage1", "hive query for daily summary", "John ETL", ImmutableList.of(circularLineageTable1),
+                                         ImmutableList.of(circularLineageTable2), "create table as select ", "plan", "id", "graph", "ETL");
+        entities.add(circularLineage1Process);
+
+        AtlasEntity circularLineage2Process = loadProcess("circularLineage2", "hive query for daily summary", "John ETL", ImmutableList.of(circularLineageTable2),
+                                         ImmutableList.of(circularLineageTable1), "create table as select ", "plan", "id", "graph", "ETL");
+        entities.add(circularLineage2Process);
+
+        AtlasEntity loadSalesDaily = loadProcess("loadSalesDaily", "hive query for daily summary", "John ETL", ImmutableList.of(salesFact, timeDim),
+                                         ImmutableList.of(salesFactDaily), "create table as select ", "plan", "id", "graph", "ETL");
+        entities.add(loadSalesDaily);
+
+        AtlasEntity logDB = database("Logging", "logging database", "Tim ETL", "hdfs://host:8000/apps/warehouse/logging");
+        entities.add(logDB);
+
+        AtlasEntity loggingFactDaily =
+                table("log_fact_daily_mv", "log fact daily materialized view", logDB, sd, "Tim ETL", "Managed",
+                      logFactColumns, "Log Data");
+        entities.add(loggingFactDaily);
+
+        List<AtlasEntity> productDimColumns = ImmutableList
+                                                      .of(column("product_id", "int", "product id"),
+                                                          column("product_name", "string", "product name"),
+                                                          column("brand_name", "int", "brand name"));
+        entities.addAll(productDimColumns);
+
+        AtlasEntity productDim =
+                table("product_dim", "product dimension table", salesDB, sd, "John Doe", "Managed", productDimColumns,
+                      "Dimension");
+        entities.add(productDim);
+
+        AtlasEntity productDimView = view("product_dim_view", reportingDB, ImmutableList.of(productDim), "Dimension", "JdbcAccess");
+        entities.add(productDimView);
+
+        List<AtlasEntity> customerDimColumns = ImmutableList.of(
+                column("customer_id", "int", "customer id", "PII"),
+                column("name", "string", "customer name", "PII"),
+                column("address", "string", "customer address", "PII"));
+        entities.addAll(customerDimColumns);
+
+        AtlasEntity customerDim =
+                table("customer_dim", "customer dimension table", salesDB, sd, "fetl", "External", customerDimColumns,
+                      "Dimension");
+        entities.add(customerDim);
+
+        AtlasEntity customerDimView = view("customer_dim_view", reportingDB, ImmutableList.of(customerDim), "Dimension", "JdbcAccess");
+        entities.add(customerDimView);
+
+        AtlasEntity salesFactMonthly =
+                table("sales_fact_monthly_mv", "sales fact monthly materialized view", reportingDB, sd, "Jane BI",
+                      "Managed", salesFactColumns, "Metric");
+        entities.add(salesFactMonthly);
+
+        AtlasEntity loadSalesMonthly = loadProcess("loadSalesMonthly", "hive query for monthly summary", "John ETL", ImmutableList.of(salesFactDaily),
+                                         ImmutableList.of(salesFactMonthly), "create table as select ", "plan", "id", "graph", "ETL");
+        entities.add(loadSalesMonthly);
+
+        AtlasEntity loggingFactMonthly =
+                table("logging_fact_monthly_mv", "logging fact monthly materialized view", logDB, sd, "Tim ETL",
+                      "Managed", logFactColumns, "Log Data");
+        entities.add(loggingFactMonthly);
+
+        AtlasEntity loadLogsMonthly = loadProcess("loadLogsMonthly", "hive query for monthly summary", "Tim ETL", ImmutableList.of(loggingFactDaily),
+                                         ImmutableList.of(loggingFactMonthly), "create table as select ", "plan", "id", "graph", "ETL");
+        entities.add(loadLogsMonthly);
+
+        AtlasEntity partition = partition(new ArrayList() {{
+            add("2015-01-01");
+        }}, salesFactDaily);
+        entities.add(partition);
+
+        AtlasEntity datasetSubType = datasetSubType("dataSetSubTypeInst1", "testOwner");
+        entities.add(datasetSubType);
+
+        return new AtlasEntity.AtlasEntitiesWithExtInfo(entities);
+    }
+
+    AtlasEntity database(String name, String description, String owner, String locationUri, String... traitNames) {
+        AtlasEntity database = new AtlasEntity(DATABASE_TYPE);
+        database.setAttribute("name", name);
+        database.setAttribute("description", description);
+        database.setAttribute("owner", owner);
+        database.setAttribute("locationUri", locationUri);
+        database.setAttribute("createTime", System.currentTimeMillis());
+        database.setClassifications(Stream.of(traitNames).map(AtlasClassification::new).collect(Collectors.toList()));
+
+        return database;
+    }
+
+    protected AtlasEntity storageDescriptor(String location, String inputFormat, String outputFormat, boolean compressed, List<AtlasEntity> columns) {
+        AtlasEntity storageDescriptor = new AtlasEntity(STORAGE_DESC_TYPE);
+        storageDescriptor.setAttribute("location", location);
+        storageDescriptor.setAttribute("inputFormat", inputFormat);
+        storageDescriptor.setAttribute("outputFormat", outputFormat);
+        storageDescriptor.setAttribute("compressed", compressed);
+        storageDescriptor.setAttribute("cols", columns);
+
+        return storageDescriptor;
+    }
+
+    protected AtlasEntity column(String name, String dataType, String comment, String... traitNames) {
+        AtlasEntity column = new AtlasEntity(COLUMN_TYPE);
+        column.setAttribute("name", name);
+        column.setAttribute("dataType", dataType);
+        column.setAttribute("comment", comment);
+        column.setClassifications(Stream.of(traitNames).map(AtlasClassification::new).collect(Collectors.toList()));
+
+        return column;
+    }
+
+    protected AtlasEntity table(String name, String description, AtlasEntity db, AtlasEntity sd, String owner, String tableType,
+                                List<AtlasEntity> columns, String... traitNames) {
+        AtlasEntity table = new AtlasEntity(HIVE_TABLE_TYPE);
+        table.setAttribute("name", name);
+        table.setAttribute(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME, "qualified:" + name);
+        table.setAttribute("description", description);
+        table.setAttribute("owner", owner);
+        table.setAttribute("tableType", tableType);
+        table.setAttribute("temporary", false);
+        table.setAttribute("createTime", new Date(System.currentTimeMillis()));
+        table.setAttribute("lastAccessTime", System.currentTimeMillis());
+        table.setAttribute("retention", System.currentTimeMillis());
+
+        table.setAttribute("db", db);
+        // todo - uncomment this, something is broken
+        table.setAttribute("sd", sd);
+        table.setAttribute("columns", columns);
+        table.setClassifications(Stream.of(traitNames).map(AtlasClassification::new).collect(Collectors.toList()));
+
+        return table;
+    }
+
+    protected AtlasEntity loadProcess(String name, String description, String user, List<AtlasEntity> inputTables, List<AtlasEntity> outputTables,
+                                      String queryText, String queryPlan, String queryId, String queryGraph, String... traitNames) {
+        AtlasEntity process = new AtlasEntity(HIVE_PROCESS_TYPE);
+        process.setAttribute("name", name);
+        process.setAttribute(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME, name);
+        process.setAttribute("description", description);
+        process.setAttribute("user", user);
+        process.setAttribute("startTime", System.currentTimeMillis());
+        process.setAttribute("endTime", System.currentTimeMillis() + 10000);
+
+        process.setAttribute("inputs", inputTables);
+        process.setAttribute("outputs", outputTables);
+
+        process.setAttribute("queryText", queryText);
+        process.setAttribute("queryPlan", queryPlan);
+        process.setAttribute("queryId", queryId);
+        process.setAttribute("queryGraph", queryGraph);
+
+        process.setClassifications(Stream.of(traitNames).map(AtlasClassification::new).collect(Collectors.toList()));
+
+        return process;
+    }
+
+    AtlasEntity view(String name, AtlasEntity dbId, List<AtlasEntity> inputTables, String... traitNames) {
+        AtlasEntity view = new AtlasEntity(VIEW_TYPE);
+        view.setAttribute("name", name);
+        view.setAttribute(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME, name);
+        view.setAttribute("db", dbId);
+
+        view.setAttribute("inputTables", inputTables);
+        view.setClassifications(Stream.of(traitNames).map(AtlasClassification::new).collect(Collectors.toList()));
+
+        return view;
+    }
+
+    AtlasEntity partition(List<String> values, AtlasEntity table, String... traitNames) {
+        AtlasEntity partition = new AtlasEntity(PARTITION_TYPE);
+        partition.setAttribute("values", values);
+        partition.setAttribute("table", table);
+        partition.setClassifications(Stream.of(traitNames).map(AtlasClassification::new).collect(Collectors.toList()));
+        return partition;
+    }
+
+    AtlasEntity datasetSubType(final String name, String owner) {
+        AtlasEntity datasetSubType = new AtlasEntity(DATASET_SUBTYPE);
+        datasetSubType.setAttribute(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME, name);
+        datasetSubType.setAttribute(AtlasClient.NAME, name);
+        datasetSubType.setAttribute("owner", owner);
+
+        return datasetSubType;
+    }
+}

http://git-wip-us.apache.org/repos/asf/atlas/blob/5bd5327c/repository/src/test/java/org/apache/atlas/query/DSLQueriesTest.java
----------------------------------------------------------------------
diff --git a/repository/src/test/java/org/apache/atlas/query/DSLQueriesTest.java b/repository/src/test/java/org/apache/atlas/query/DSLQueriesTest.java
new file mode 100644
index 0000000..a794a2a
--- /dev/null
+++ b/repository/src/test/java/org/apache/atlas/query/DSLQueriesTest.java
@@ -0,0 +1,675 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.atlas.query;
+
+import org.apache.atlas.TestModules;
+import org.apache.atlas.discovery.EntityDiscoveryService;
+import org.apache.atlas.exception.AtlasBaseException;
+import org.apache.atlas.model.discovery.AtlasSearchResult;
+import org.apache.atlas.runner.LocalSolrRunner;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Guice;
+import org.testng.annotations.Test;
+
+import javax.inject.Inject;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+
+@Guice(modules = TestModules.TestOnlyModule.class)
+public class DSLQueriesTest extends BasicTestSetup {
+    @Inject
+    private EntityDiscoveryService discoveryService;
+
+    @BeforeClass
+    public void setup() throws Exception {
+        LocalSolrRunner.start();
+        setupTestData();
+    }
+
+    @AfterClass
+    public void teardown() throws Exception {
+        LocalSolrRunner.stop();
+    }
+
+    @DataProvider(name = "comparisonQueriesProvider")
+    private Object[][] createComparisonQueries() {
+        //create queries the exercise the comparison logic for
+        //all of the different supported data types
+        return new Object[][] {
+                {"Person where (birthday < \"1950-01-01T02:35:58.440Z\" )", 0},
+                {"Person where (birthday > \"1975-01-01T02:35:58.440Z\" )", 2},
+                {"Person where (birthday >= \"1975-01-01T02:35:58.440Z\" )", 2},
+                {"Person where (birthday <= \"1950-01-01T02:35:58.440Z\" )", 0},
+                {"Person where (birthday = \"1975-01-01T02:35:58.440Z\" )", 0},
+                {"Person where (birthday != \"1975-01-01T02:35:58.440Z\" )", 4},
+
+                {"Person where (hasPets = true)", 2},
+                {"Person where (hasPets = false)", 2},
+                {"Person where (hasPets != false)", 2},
+                {"Person where (hasPets != true)", 2},
+
+                {"Person where (numberOfCars > 0)", 2},
+                {"Person where (numberOfCars > 1)", 1},
+                {"Person where (numberOfCars >= 1)", 2},
+                {"Person where (numberOfCars < 2)", 3},
+                {"Person where (numberOfCars <= 2)", 4},
+                {"Person where (numberOfCars = 2)", 1},
+                {"Person where (numberOfCars != 2)", 3},
+
+                {"Person where (houseNumber > 0)", 2},
+                {"Person where (houseNumber > 17)", 1},
+                {"Person where (houseNumber >= 17)", 2},
+                {"Person where (houseNumber < 153)", 3},
+                {"Person where (houseNumber <= 153)", 4},
+                {"Person where (houseNumber =  17)", 1},
+                {"Person where (houseNumber != 17)", 3},
+
+                {"Person where (carMileage > 0)", 2},
+                {"Person where (carMileage > 13)", 1},
+                {"Person where (carMileage >= 13)", 2},
+                {"Person where (carMileage < 13364)", 3},
+                {"Person where (carMileage <= 13364)", 4},
+                {"Person where (carMileage =  13)", 1},
+                {"Person where (carMileage != 13)", 3},
+
+                {"Person where (shares > 0)", 2},
+                {"Person where (shares > 13)", 2},
+                {"Person where (shares >= 16000)", 1},
+                {"Person where (shares < 13364)", 2},
+                {"Person where (shares <= 15000)", 3},
+                {"Person where (shares =  15000)", 1},
+                {"Person where (shares != 1)", 4},
+
+                {"Person where (salary > 0)", 2},
+                {"Person where (salary > 100000)", 2},
+                {"Person where (salary >= 200000)", 1},
+                {"Person where (salary < 13364)", 2},
+                {"Person where (salary <= 150000)", 3},
+                {"Person where (salary =  12334)", 0},
+                {"Person where (salary != 12344)", 4},
+
+                {"Person where (age > 36)", 1},
+                {"Person where (age > 49)", 1},
+                {"Person where (age >= 49)", 1},
+                {"Person where (age < 50)", 3},
+                {"Person where (age <= 35)", 2},
+                {"Person where (age =  35)", 0},
+                {"Person where (age != 35)", 4}
+        };
+    }
+
+    @Test(dataProvider = "comparisonQueriesProvider")
+    public void testComparisonQueries(String query, int expected) throws AtlasBaseException {
+        AtlasSearchResult searchResult = discoveryService.searchUsingDslQuery(query, 25, 0);
+        assertNotNull(searchResult.getEntities());
+        assertEquals(searchResult.getEntities().size(), expected);
+    }
+
+    @DataProvider(name = "dslQueriesProvider")
+    private Object[][] createDSLQueries() {
+        return new Object[][]{
+                {"hive_db as inst where inst.name=\"Reporting\" select inst as id, inst.name", 1},
+                {"from hive_db as h select h as id", 3},
+                {"from hive_db", 3},
+                {"hive_db", 3},
+                {"hive_db where hive_db.name=\"Reporting\"", 1},
+                {"hive_db hive_db.name = \"Reporting\"", 1},
+                {"hive_db where hive_db.name=\"Reporting\" select name, owner", 1},
+                {"hive_db has name", 3},
+                {"hive_db, hive_table", 10},
+                {"View is JdbcAccess", 2},
+                {"hive_db as db1, hive_table where db1.name = \"Reporting\"", 0}, //Not working - ATLAS-145
+                // - Final working query -> discoveryService.searchByGremlin("L:{_var_0 = [] as Set;g.V().has(\"__typeName\", \"hive_db\").fill(_var_0);g.V().has(\"__superTypeNames\", \"hive_db\").fill(_var_0);_var_0._().as(\"db1\").in(\"__hive_table.db\").back(\"db1\").and(_().has(\"hive_db.name\", T.eq, \"Reporting\")).toList()}")
+                /*
+                {"hive_db, hive_process has name"}, //Invalid query
+                {"hive_db where hive_db.name=\"Reporting\" and hive_db.createTime < " + System.currentTimeMillis()}
+                */
+                {"from hive_table", 10},
+                {"hive_table", 10},
+                {"hive_table isa Dimension", 3},
+                {"hive_column where hive_column isa PII", 8},
+                {"View is Dimension" , 2},
+//                {"hive_column where hive_column isa PII select hive_column.name", 6}, //Not working - ATLAS-175
+                {"hive_column select hive_column.name", 37},
+                {"hive_column select name",37},
+                {"hive_column where hive_column.name=\"customer_id\"", 6},
+                {"from hive_table select hive_table.name", 10},
+                {"hive_db where (name = \"Reporting\")", 1},
+                {"hive_db where (name = \"Reporting\") select name as _col_0, owner as _col_1", 1},
+                {"hive_db where hive_db is JdbcAccess", 0}, //Not supposed to work
+                {"hive_db hive_table", 10},
+                {"hive_db where hive_db has name", 3},
+                {"hive_db as db1 hive_table where (db1.name = \"Reporting\")", 0}, //Not working -> ATLAS-145
+                {"hive_db where (name = \"Reporting\") select name as _col_0, (createTime + 1) as _col_1 ", 1},
+                {"hive_table where (name = \"sales_fact\" and createTime > \"2014-01-01\" ) select name as _col_0, createTime as _col_1 ", 1},
+                {"hive_table where (name = \"sales_fact\" and createTime >= \"2014-12-11T02:35:58.440Z\" ) select name as _col_0, createTime as _col_1 ", 1},
+
+                /*
+                todo: does not work - ATLAS-146
+                {"hive_db where (name = \"Reporting\") and ((createTime + 1) > 0)"},
+                {"hive_db as db1 hive_table as tab where ((db1.createTime + 1) > 0) and (db1.name = \"Reporting\") select db1.name
+                as dbName, tab.name as tabName"},
+                {"hive_db as db1 hive_table as tab where ((db1.createTime + 1) > 0) or (db1.name = \"Reporting\") select db1.name
+                as dbName, tab.name as tabName"},
+                {"hive_db as db1 hive_table as tab where ((db1.createTime + 1) > 0) and (db1.name = \"Reporting\") or db1 has owner
+                 select db1.name as dbName, tab.name as tabName"},
+                {"hive_db as db1 hive_table as tab where ((db1.createTime + 1) > 0) and (db1.name = \"Reporting\") or db1 has owner
+                 select db1.name as dbName, tab.name as tabName"},
+                */
+                // trait searches
+                {"Dimension", 5},
+                {"JdbcAccess", 2},
+                {"ETL", 5},
+                {"Metric", 9},
+                {"PII", 8},
+                {"`Log Data`", 4},
+                // Not sure what the expected rows should be, but since we didn't assign or do anything with the created
+                // I assume it'll be zero
+                {"`isa`", 0},
+
+                /* Lineage queries are fired through ClosureQuery and are tested through HiveLineageJerseyResourceIt in webapp module.
+                   Commenting out the below queries since DSL to Gremlin parsing/translation fails with lineage queries when there are array types
+                   used within loop expressions which is the case with DataSet.inputs and outputs.`
+                  // Lineage
+                  {"Table LoadProcess outputTable"}, {"Table loop (LoadProcess outputTable)"},
+                  {"Table as _loop0 loop (LoadProcess outputTable) withPath"},
+                  {"Table as src loop (LoadProcess outputTable) as dest select src.name as srcTable, dest.name as "
+                                        + "destTable withPath"},
+                 */
+//                {"hive_table as t, sd, hive_column as c where t.name=\"sales_fact\" select c.name as colName, c.dataType as "
+//                        + "colType", 0}, //Not working - ATLAS-145 and ATLAS-166
+
+                {"hive_table where name='sales_fact', db where name='Sales'", 1},
+                {"hive_table where name='sales_fact', db where name='Reporting'", 0},
+                {"hive_partition as p where values = ['2015-01-01']", 1},
+//              {"StorageDesc select cols", 6} //Not working since loading of lists needs to be fixed yet
+
+                //check supertypeNames
+                {"DataSet where name='sales_fact'", 1},
+                {"Asset where name='sales_fact'", 1}
+        };
+    }
+
+    @Test(dataProvider = "dslQueriesProvider")
+    public void testBasicDSL(String query, int expected) throws AtlasBaseException {
+        AtlasSearchResult searchResult = discoveryService.searchUsingDslQuery(query, 25, 0);
+        assertNotNull(searchResult.getEntities());
+        assertEquals(searchResult.getEntities().size(), expected);
+    }
+
+
+    @DataProvider(name = "dslExplicitLimitQueriesProvider")
+    private Object[][] createDSLQueriesWithExplicitLimit() {
+        return new Object[][]{
+                {"hive_column", 37, 40, 0},//with higher limit all rows returned
+                {"hive_column limit 10", 10, 50, 0},//lower limit in query
+                {"hive_column select hive_column.name limit 10", 5, 5, 0},//lower limit in query param
+                {"hive_column select hive_column.name withPath", 20, 20, 0},//limit only in params
+                //with offset, only remaining rows returned
+                {"hive_column select hive_column.name limit 40 withPath", 17, 40, 20},
+                //with higher offset, no rows returned
+                {"hive_column select hive_column.name limit 40 withPath", 0, 40, 40},
+                //offset used from query
+                {"hive_column select hive_column.name limit 40 offset 10", 27, 40, 0},
+                //offsets in query and parameter added up
+                {"hive_column select hive_column.name limit 40 offset 10", 17, 40, 10},
+                //works with where clause
+                {"hive_db where name = 'Reporting' limit 10 offset 0", 1, 40, 0},
+                //works with joins
+                {"hive_db, hive_table where db.name = 'Reporting' limit 10", 1, 1, 0},
+                {"hive_column limit 25", 5, 10, 20},    //last page should return records limited by limit in query
+                {"hive_column limit 25", 0, 10, 30},    //offset > limit returns 0 rows
+        };
+    }
+
+    @Test(dataProvider = "dslExplicitLimitQueriesProvider")
+    public void testExplicitDSL(String query, int expected, int limit, int offset) throws AtlasBaseException {
+        AtlasSearchResult searchResult = discoveryService.searchUsingDslQuery(query, limit, offset);
+        assertNotNull(searchResult.getEntities());
+        assertEquals(searchResult.getEntities().size(), expected);
+    }
+
+    @DataProvider(name = "dslLimitQueriesProvider")
+    private Object[][] createDSLQueriesWithLimit() {
+        return new Object[][]{
+                {"hive_column  limit 10 ", 10},
+                {"hive_column select hive_column.name limit 10 ", 10},
+                {"hive_column select hive_column.name  withPath", 37},
+                {"hive_column select hive_column.name limit 10 withPath", 10},
+
+                {"from hive_db", 3},
+                {"from hive_db limit 2", 2},
+                {"from hive_db limit 2 offset 0", 2},
+                {"from hive_db limit 2 offset 1", 2},
+                {"from hive_db limit 3 offset 1", 2},
+                {"hive_db", 3},
+                {"hive_db where hive_db.name=\"Reporting\"", 1},
+                {"hive_db where hive_db.name=\"Reporting\" or hive_db.name=\"Sales\" or hive_db.name=\"Logging\" limit 1 offset 1", 1},
+                {"hive_db where hive_db.name=\"Reporting\" or hive_db.name=\"Sales\" or hive_db.name=\"Logging\" limit 1 offset 2", 1},
+                {"hive_db where hive_db.name=\"Reporting\" or hive_db.name=\"Sales\" or hive_db.name=\"Logging\" limit 2 offset 1", 2},
+                {"hive_db where hive_db.name=\"Reporting\" limit 10 ", 1},
+                {"hive_db hive_db.name = \"Reporting\"", 1},
+                {"hive_db where hive_db.name=\"Reporting\" select name, owner", 1},
+                {"hive_db has name", 3},
+                {"hive_db has name limit 2 offset 0", 2},
+                {"hive_db has name limit 2 offset 1", 2},
+                {"hive_db has name limit 10 offset 1", 2},
+                {"hive_db has name limit 10 offset 0", 3},
+                {"hive_db, hive_table", 10},
+                {"hive_db, hive_table limit 5", 5},
+                {"hive_db, hive_table limit 5 offset 0", 5},
+                {"hive_db, hive_table limit 5 offset 5", 5},
+
+                {"View is JdbcAccess", 2},
+                {"View is JdbcAccess limit 1", 1},
+                {"View is JdbcAccess limit 2 offset 1", 1},
+                {"hive_db as db1, hive_table where db1.name = \"Reporting\"", 0}, //Not working - ATLAS-145
+
+
+                {"from hive_table", 10},
+                {"from hive_table limit 5", 5},
+                {"from hive_table limit 5 offset 5", 5},
+
+                {"hive_table", 10},
+                {"hive_table limit 5", 5},
+                {"hive_table limit 5 offset 5", 5},
+
+                {"hive_table isa Dimension", 3},
+                {"hive_table isa Dimension limit 2", 2},
+                {"hive_table isa Dimension limit 2 offset 0", 2},
+                {"hive_table isa Dimension limit 2 offset 1", 2},
+                {"hive_table isa Dimension limit 3 offset 1", 2},
+
+                {"hive_column where hive_column isa PII", 8},
+                {"hive_column where hive_column isa PII limit 5", 5},
+                {"hive_column where hive_column isa PII limit 5 offset 1", 5},
+                {"hive_column where hive_column isa PII limit 5 offset 5", 3},
+
+
+                {"View is Dimension" , 2},
+                {"View is Dimension limit 1" , 1},
+                {"View is Dimension limit 1 offset 1" , 1},
+                {"View is Dimension limit 10 offset 1" , 1},
+
+                {"hive_column select hive_column.name", 37},
+                {"hive_column select hive_column.name limit 5", 5},
+                {"hive_column select hive_column.name limit 5 offset 36", 1},
+
+                {"hive_column select name", 37},
+                {"hive_column select name limit 5", 5},
+                {"hive_column select name limit 5 offset 36 ", 1},
+
+                {"hive_column where hive_column.name=\"customer_id\"", 6},
+                {"hive_column where hive_column.name=\"customer_id\" limit 2", 2},
+                {"hive_column where hive_column.name=\"customer_id\" limit 2 offset 1", 2},
+                {"hive_column where hive_column.name=\"customer_id\" limit 10 offset 3", 3},
+
+                {"from hive_table select hive_table.name", 10},
+                {"from hive_table select hive_table.name limit 5", 5},
+                {"from hive_table select hive_table.name limit 5 offset 5", 5},
+
+                {"hive_db where (name = \"Reporting\")", 1},
+                {"hive_db where (name = \"Reporting\") limit 10", 1},
+                {"hive_db where (name = \"Reporting\") select name as _col_0, owner as _col_1", 1},
+                {"hive_db where (name = \"Reporting\") select name as _col_0, owner as _col_1 limit 10", 1},
+                {"hive_db where hive_db is JdbcAccess", 0}, //Not supposed to work
+                {"hive_db hive_table", 10},
+                {"hive_db hive_table limit 5", 5},
+                {"hive_db hive_table limit 5 offset 5", 5},
+                {"hive_db where hive_db has name", 3},
+                {"hive_db where hive_db has name limit 5", 3},
+                {"hive_db where hive_db has name limit 2 offset 0", 2},
+                {"hive_db where hive_db has name limit 2 offset 1", 2},
+
+                {"hive_db as db1 hive_table where (db1.name = \"Reporting\")", 0}, //Not working -> ATLAS-145
+                {"hive_db where (name = \"Reporting\") select name as _col_0, (createTime + 1) as _col_1 ", 1},
+                {"hive_db where (name = \"Reporting\") select name as _col_0, (createTime + 1) as _col_1 limit 10", 1},
+                {"hive_db where (name = \"Reporting\") select name as _col_0, (createTime + 1) as _col_1 limit 10 offset 1", 0},
+                {"hive_db where (name = \"Reporting\") select name as _col_0, (createTime + 1) as _col_1 limit 10 offset 0", 1},
+
+                {"hive_table where (name = \"sales_fact\" and createTime > \"2014-01-01\" ) select name as _col_0, createTime as _col_1 ", 1},
+                {"hive_table where (name = \"sales_fact\" and createTime > \"2014-01-01\" ) select name as _col_0, createTime as _col_1 limit 10 ", 1},
+                {"hive_table where (name = \"sales_fact\" and createTime > \"2014-01-01\" ) select name as _col_0, createTime as _col_1 limit 10 offset 0", 1},
+                {"hive_table where (name = \"sales_fact\" and createTime > \"2014-01-01\" ) select name as _col_0, createTime as _col_1 limit 10 offset 5", 0},
+
+                {"hive_table where (name = \"sales_fact\" and createTime >= \"2014-12-11T02:35:58.440Z\" ) select name as _col_0, createTime as _col_1 ", 1},
+                {"hive_table where (name = \"sales_fact\" and createTime >= \"2014-12-11T02:35:58.440Z\" ) select name as _col_0, createTime as _col_1 limit 10 offset 0", 1},
+                {"hive_table where (name = \"sales_fact\" and createTime >= \"2014-12-11T02:35:58.440Z\" ) select name as _col_0, createTime as _col_1 limit 10 offset 1", 0},
+                {"hive_table where (name = \"sales_fact\" and createTime >= \"2014-12-11T02:35:58.440Z\" ) select name as _col_0, createTime as _col_1 limit 10", 1},
+                {"hive_table where (name = \"sales_fact\" and createTime >= \"2014-12-11T02:35:58.440Z\" ) select name as _col_0, createTime as _col_1 limit 0 offset 1", 0},
+
+                // trait searches
+                {"Dimension", 5},
+                {"Dimension limit 2", 2},
+                {"Dimension limit 2 offset 1", 2},
+                {"Dimension limit 5 offset 4", 1},
+
+                {"JdbcAccess", 2},
+                {"JdbcAccess limit 5 offset 0", 2},
+                {"JdbcAccess limit 2 offset 1", 1},
+                {"JdbcAccess limit 1", 1},
+
+                {"ETL", 5},
+                {"ETL limit 2", 2},
+                {"ETL limit 1", 1},
+                {"ETL limit 1 offset 0", 1},
+                {"ETL limit 2 offset 1", 2},
+
+                {"Metric", 9},
+                {"Metric limit 10", 9},
+                {"Metric limit 2", 2},
+                {"Metric limit 10 offset 1", 8},
+
+
+
+                {"PII", 8},
+                {"PII limit 10", 8},
+                {"PII limit 2", 2},
+                {"PII limit 10 offset 1", 7},
+
+                {"`Log Data`", 4},
+                {"`Log Data` limit 3", 3},
+                {"`Log Data` limit 10 offset 2", 2},
+
+
+                {"hive_table where name='sales_fact', db where name='Sales'", 1},
+                {"hive_table where name='sales_fact', db where name='Sales' limit 10", 1},
+                {"hive_table where name='sales_fact', db where name='Sales' limit 10 offset 1", 0},
+                {"hive_table where name='sales_fact', db where name='Reporting'", 0},
+                {"hive_table where name='sales_fact', db where name='Reporting' limit 10", 0},
+                {"hive_table where name='sales_fact', db where name='Reporting' limit 10 offset 1", 0},
+                {"hive_partition as p where values = ['2015-01-01']", 1},
+                {"hive_partition as p where values = ['2015-01-01'] limit 10", 1},
+                {"hive_partition as p where values = ['2015-01-01'] limit 10 offset 1", 0},
+
+        };
+    }
+
+    @Test(dataProvider = "dslLimitQueriesProvider")
+    public void testDSLLimitQueries(String query, int expected) throws AtlasBaseException {
+        AtlasSearchResult searchResult = discoveryService.searchUsingDslQuery(query, 25, 0);
+        assertNotNull(searchResult.getEntities());
+        assertEquals(searchResult.getEntities().size(), expected);
+    }
+
+
+
+    @DataProvider(name = "dslOrderByQueriesProvider")
+    private Object[][] createDSLQueriesWithOrderBy() {
+        return new Object[][]{
+                //test with alias
+                // {"from hive_db select hive_db.name as 'o' orderby o limit 3", 3, "name", isAscending},
+                {"from hive_db as h orderby h.owner limit 3", 3, "owner", true},
+                {"hive_column as c select c.name orderby hive_column.name ", 37, "c.name", true},
+                {"hive_column as c select c.name orderby hive_column.name limit 5", 5, "c.name", true},
+                {"hive_column as c select c.name orderby hive_column.name desc limit 5", 5, "c.name", false},
+
+                {"from hive_db orderby hive_db.owner limit 3", 3, "owner", true},
+                {"hive_column select hive_column.name orderby hive_column.name ", 37, "hive_column.name", true},
+                {"hive_column select hive_column.name orderby hive_column.name limit 5", 5, "hive_column.name", true},
+                {"hive_column select hive_column.name orderby hive_column.name desc limit 5", 5, "hive_column.name", false},
+
+                {"from hive_db orderby owner limit 3", 3, "owner", true},
+                {"hive_column select hive_column.name orderby name ", 37, "hive_column.name", true},
+                {"hive_column select hive_column.name orderby name limit 5", 5, "hive_column.name", true},
+                {"hive_column select hive_column.name orderby name desc limit 5", 5, "hive_column.name", false},
+
+                //Not working, the problem is in server code not figuring out how to sort. not sure if it is valid use case.
+//               {"hive_db  hive_table  orderby 'hive_db.owner'", 10, "owner", isAscending},
+//               {"hive_db hive_table orderby 'hive_db.owner' limit 5", 5, "owner", isAscending},
+//               {"hive_db hive_table orderby 'hive_db.owner' limit 5 offset 5", 3, "owner", isAscending},
+
+                {"hive_db select hive_db.description orderby hive_db.description limit 10 withPath", 3, "hive_db.description", true},
+                {"hive_db select hive_db.description orderby hive_db.description desc limit 10 withPath", 3, "hive_db.description", false},
+
+                {"hive_column select hive_column.name orderby hive_column.name limit 10 withPath", 10, "hive_column.name", true},
+                {"hive_column select hive_column.name orderby hive_column.name asc limit 10 withPath", 10, "hive_column.name", true},
+                {"hive_column select hive_column.name orderby hive_column.name desc limit 10 withPath", 10, "hive_column.name", false},
+                {"from hive_db orderby hive_db.owner limit 3", 3, "owner", true},
+                {"hive_db where hive_db.name=\"Reporting\" orderby 'owner'", 1, "owner", true},
+
+                {"hive_db where hive_db.name=\"Reporting\" orderby hive_db.owner limit 10 ", 1, "owner", true},
+                {"hive_db where hive_db.name=\"Reporting\" select name, owner orderby hive_db.name ", 1, "name", true},
+                {"hive_db has name orderby hive_db.owner limit 10 offset 0", 3, "owner", true},
+
+                {"from hive_table select hive_table.owner orderby hive_table.owner", 10, "hive_table.owner", true},
+                {"from hive_table select hive_table.owner  orderby hive_table.owner limit 8", 8, "hive_table.owner", true},
+
+                {"hive_table orderby hive_table.name", 10, "name", true},
+
+                {"hive_table orderby hive_table.owner", 10, "owner", true},
+                {"hive_table orderby hive_table.owner limit 8", 8, "owner", true},
+                {"hive_table orderby hive_table.owner limit 8 offset 0", 8, "owner", true},
+                {"hive_table orderby hive_table.owner desc limit 8 offset 0", 8, "owner", false},
+
+                //Not working because of existing bug Atlas-175
+//                   {"hive_table isa Dimension orderby hive_table.owner", 3, "hive_table.owner", isAscending},//order not working
+//                   {"hive_table isa Dimension orderby hive_table.owner limit 3", 3, "hive_table.owner", isAscending},
+//                   {"hive_table isa Dimension orderby hive_table.owner limit 3 offset 0", 3, "hive_table.owner", isAscending},
+//                   {"hive_table isa Dimension orderby hive_table.owner desc limit 3 offset 0", 3, "hive_table.owner", !isAscending},
+//
+//                   {"hive_column where hive_column isa PII orderby hive_column.name", 6, "hive_column.name", isAscending},
+//                   {"hive_column where hive_column isa PII orderby hive_column.name limit 5", 5, "hive_column.name", isAscending},
+//                   {"hive_column where hive_column isa PII orderby hive_column.name limit 5 offset 1", 5, "hive_column.name", isAscending},
+//                   {"hive_column where hive_column isa PII orderby hive_column.name desc limit 5 offset 1", 5, "hive_column.name", !isAscending},
+
+                {"hive_column select hive_column.name orderby hive_column.name ", 37, "hive_column.name", true},
+                {"hive_column select hive_column.name orderby hive_column.name limit 5", 5, "hive_column.name", true},
+                {"hive_column select hive_column.name orderby hive_column.name desc limit 5", 5, "hive_column.name", false},
+
+                {"hive_column select hive_column.name orderby hive_column.name limit 5 offset 28", 5, "hive_column.name", true},
+
+                {"hive_column select name orderby hive_column.name", 37, "name", true},
+                {"hive_column select name orderby hive_column.name limit 5", 5, "name", true},
+                {"hive_column select name orderby hive_column.name desc", 37, "name", false},
+
+                {"hive_column where hive_column.name=\"customer_id\" orderby hive_column.name", 6, "name", true},
+                {"hive_column where hive_column.name=\"customer_id\" orderby hive_column.name limit 2", 2, "name", true},
+                {"hive_column where hive_column.name=\"customer_id\" orderby hive_column.name limit 2 offset 1", 2, "name", true},
+
+                {"from hive_table select owner orderby hive_table.owner",10, "owner", true},
+                {"from hive_table select owner orderby hive_table.owner limit 5", 5, "owner", true},
+                {"from hive_table select owner orderby hive_table.owner desc limit 5", 5, "owner", false},
+                {"from hive_table select owner orderby hive_table.owner limit 5 offset 5", 5, "owner", true},
+
+                {"hive_db where (name = \"Reporting\") orderby hive_db.name", 1, "name", true},
+                {"hive_db where (name = \"Reporting\") orderby hive_db.name limit 10", 1, "name", true},
+                {"hive_db where hive_db has name orderby hive_db.owner", 3, "owner", true},
+                {"hive_db where hive_db has name orderby hive_db.owner limit 5", 3, "owner", true},
+                {"hive_db where hive_db has name orderby hive_db.owner limit 2 offset 0", 2, "owner", true},
+                {"hive_db where hive_db has name orderby hive_db.owner limit 2 offset 1", 2, "owner", true},
+
+
+                {"hive_db where (name = \"Reporting\") select name as _col_0, (createTime + 1) as _col_1 orderby '_col_1'", 1, "_col_1", true},
+                {"hive_db where (name = \"Reporting\") select name as _col_0, (createTime + 1) as _col_1 orderby '_col_1' limit 10", 1, "_col_1", true},
+                {"hive_db where (name = \"Reporting\") select name as _col_0, (createTime + 1) as _col_1 orderby '_col_1' limit 10 offset 1", 0, "_col_1", true},
+                {"hive_db where (name = \"Reporting\") select name as _col_0, (createTime + 1) as _col_1 orderby '_col_1' limit 10 offset 0", 1, "_col_1", true},
+
+                {"hive_table where (name = \"sales_fact\" and createTime > \"2014-01-01\" ) select name as _col_0, createTime as _col_1 orderby '_col_1' ", 1, "_col_1", true},
+                {"hive_table where (name = \"sales_fact\" and createTime > \"2014-01-01\" ) select name as _col_0, createTime as _col_1 orderby '_col_1' limit 10 ", 1, "_col_1", true},
+                {"hive_table where (name = \"sales_fact\" and createTime > \"2014-01-01\" ) select name as _col_0, createTime as _col_1 orderby '_col_1' limit 10 offset 0", 1, "_col_1", true},
+                {"hive_table where (name = \"sales_fact\" and createTime > \"2014-01-01\" ) select name as _col_0, createTime as _col_1 orderby '_col_1' limit 10 offset 5", 0, "_col_1", true},
+
+                {"hive_table where (name = \"sales_fact\" and createTime >= \"2014-12-11T02:35:58.440Z\" ) select name as _col_0, createTime as _col_1 orderby '_col_0' ", 1, "_col_0", true},
+                {"hive_table where (name = \"sales_fact\" and createTime >= \"2014-12-11T02:35:58.440Z\" ) select name as _col_0, createTime as _col_1 orderby '_col_0' limit 10 offset 0", 1, "_col_0", true},
+                {"hive_table where (name = \"sales_fact\" and createTime >= \"2014-12-11T02:35:58.440Z\" ) select name as _col_0, createTime as _col_1 orderby '_col_0' limit 10 offset 1", 0, "_col_0", true},
+                {"hive_table where (name = \"sales_fact\" and createTime >= \"2014-12-11T02:35:58.440Z\" ) select name as _col_0, createTime as _col_1 orderby '_col_0' limit 10", 1, "_col_0", true},
+                {"hive_table where (name = \"sales_fact\" and createTime >= \"2014-12-11T02:35:58.440Z\" ) select name as _col_0, createTime as _col_1 orderby '_col_0' limit 0 offset 1", 0, "_col_0", true},
+
+                {"hive_column select hive_column.name orderby hive_column.name limit 10 withPath", 10, "hive_column.name", true},
+                {"hive_column select hive_column.name orderby hive_column.name limit 10 withPath", 10, "hive_column.name", true},
+                {"hive_table orderby 'hive_table.owner_notdefined'", 10, null, true},
+        };
+    }
+
+    @Test(dataProvider = "dslOrderByQueriesProvider")
+    public void testOrderByDSL(String query, int expected, String orderBy, boolean ascending) throws AtlasBaseException {
+        AtlasSearchResult searchResult = discoveryService.searchUsingDslQuery(query, 25, 0);
+        assertNotNull(searchResult.getEntities());
+        assertEquals(searchResult.getEntities().size(), expected);
+        // TODO: Implement order checking here
+    }
+
+    @DataProvider(name = "dslLikeQueriesProvider")
+    private Object[][] createDslLikeQueries() {
+        return new Object[][]{
+                {"hive_table where name like \"sa?es*\"", 3},
+                {"hive_db where name like \"R*\"", 1},
+                {"hive_db where hive_db.name like \"R???rt?*\" or hive_db.name like \"S?l?s\" or hive_db.name like\"Log*\"", 3},
+                {"hive_db where hive_db.name like \"R???rt?*\" and hive_db.name like \"S?l?s\" and hive_db.name like\"Log*\"", 0},
+                {"hive_table where name like 'sales*', db where name like 'Sa?es'", 1},
+                {"hive_table where name like 'sales*' and db.name like 'Sa?es'", 1},
+                {"hive_table where db.name like \"Sa*\"", 4},
+                {"hive_table where db.name like \"Sa*\" and name like \"*dim\"", 3},
+        };
+    }
+
+    @Test(dataProvider = "comparisonQueriesProvider")
+    public void testLikeQueries(String query, int expected) throws AtlasBaseException {
+        AtlasSearchResult searchResult = discoveryService.searchUsingDslQuery(query, 25, 0);
+        assertNotNull(searchResult.getEntities());
+        assertEquals(searchResult.getEntities().size(), expected);
+    }
+
+
+
+    // TODO: Implement FieldValidator with new Data types
+//    @DataProvider(name = "dslGroupByQueriesProvider")
+//    private Object[][] createDSLGroupByQueries() {
+//        return new Object[][]{
+//                { "from Person as p, mentor as m groupby(m.name) select m.name, count()",
+//                        new FieldValueValidator().withFieldNames("m.name", "count()").withExpectedValues("Max", 1)
+//                                .withExpectedValues("Julius", 1) },
+//
+//                // This variant of this query is currently failing.  See OMS-335 for details.
+//                { "from Person as p, mentor groupby(mentor.name) select mentor.name, count()",
+//                        new FieldValueValidator().withFieldNames("mentor.name", "count()").withExpectedValues("Max", 1)
+//                                .withExpectedValues("Julius", 1) },
+//
+//                { "from Person, mentor groupby(mentor.name) select mentor.name, count()",
+//                        new FieldValueValidator().withFieldNames("mentor.name", "count()").withExpectedValues("Max", 1)
+//                                .withExpectedValues("Julius", 1) },
+//
+//                { "from Person, mentor as m groupby(m.name) select m.name, count()",
+//                        new FieldValueValidator().withFieldNames("m.name", "count()").withExpectedValues("Max", 1)
+//                                .withExpectedValues("Julius", 1) },
+//
+//                { "from Person groupby (isOrganDonor) select count()",
+//                        new FieldValueValidator().withFieldNames("count()").withExpectedValues(2)
+//                                .withExpectedValues(2) },
+//                { "from Person groupby (isOrganDonor) select Person.isOrganDonor, count()",
+//                        new FieldValueValidator().withFieldNames("Person.isOrganDonor", "count()")
+//                                                 .withExpectedValues(true, 2).withExpectedValues(false, 2) },
+//
+//                { "from Person groupby (isOrganDonor) select Person.isOrganDonor as 'organDonor', count() as 'count', max(Person.age) as 'max', min(Person.age) as 'min'",
+//                        new FieldValueValidator().withFieldNames("organDonor", "max", "min", "count")
+//                                                 .withExpectedValues(true, 50, 36, 2).withExpectedValues(false, 0, 0, 2) },
+//
+//                { "from hive_db groupby (owner, name) select count() ", new FieldValueValidator()
+//                                                                                .withFieldNames("count()").withExpectedValues(1).withExpectedValues(1).withExpectedValues(1) },
+//
+//                { "from hive_db groupby (owner, name) select hive_db.owner, hive_db.name, count() ",
+//                        new FieldValueValidator().withFieldNames("hive_db.owner", "hive_db.name", "count()")
+//                                                 .withExpectedValues("Jane BI", "Reporting", 1)
+//                                                 .withExpectedValues("Tim ETL", "Logging", 1)
+//                                .withExpectedValues("John ETL", "Sales", 1) },
+//
+//                { "from hive_db groupby (owner) select count() ",
+//                        new FieldValueValidator().withFieldNames("count()").withExpectedValues(1).withExpectedValues(1)
+//                                .withExpectedValues(1) },
+//
+//                { "from hive_db groupby (owner) select hive_db.owner, count() ",
+//                        new FieldValueValidator().withFieldNames("hive_db.owner", "count()")
+//                                                 .withExpectedValues("Jane BI", 1).withExpectedValues("Tim ETL", 1)
+//                                .withExpectedValues("John ETL", 1) },
+//
+//                { "from hive_db groupby (owner) select hive_db.owner, max(hive_db.name) ",
+//                        new FieldValueValidator().withFieldNames("hive_db.owner", "max(hive_db.name)")
+//                                                 .withExpectedValues("Tim ETL", "Logging").withExpectedValues("Jane BI", "Reporting")
+//                                .withExpectedValues("John ETL", "Sales") },
+//
+//                { "from hive_db groupby (owner) select max(hive_db.name) ",
+//                        new FieldValueValidator().withFieldNames("max(hive_db.name)").withExpectedValues("Logging")
+//                                                 .withExpectedValues("Reporting").withExpectedValues("Sales") },
+//
+//                { "from hive_db groupby (owner) select owner, hive_db.name, min(hive_db.name)  ",
+//                        new FieldValueValidator().withFieldNames("owner", "hive_db.name", "min(hive_db.name)")
+//                                                 .withExpectedValues("Tim ETL", "Logging", "Logging")
+//                                                 .withExpectedValues("Jane BI", "Reporting", "Reporting")
+//                                .withExpectedValues("John ETL", "Sales", "Sales") },
+//
+//                { "from hive_db groupby (owner) select owner, min(hive_db.name)  ",
+//                        new FieldValueValidator().withFieldNames("owner", "min(hive_db.name)")
+//                                                 .withExpectedValues("Tim ETL", "Logging").withExpectedValues("Jane BI", "Reporting")
+//                                .withExpectedValues("John ETL", "Sales") },
+//
+//                { "from hive_db groupby (owner) select min(name)  ",
+//                        new FieldValueValidator().withFieldNames("min(name)")
+//                                                 .withExpectedValues("Reporting").withExpectedValues("Logging")
+//                                .withExpectedValues("Sales") },
+//
+//                { "from hive_db groupby (owner) select min('name') ",
+//                        new FieldValueValidator().withFieldNames("min(\"name\")").withExpectedValues("name")
+//                                                 .withExpectedValues("name").withExpectedValues("name") }, //finding the minimum of a constant literal expression...
+//
+//                { "from hive_db groupby (owner) select name ",
+//                        new FieldValueValidator().withFieldNames("name").withExpectedValues("Reporting")
+//                                                 .withExpectedValues("Sales").withExpectedValues("Logging") },
+//
+//                //implied group by
+//                { "from hive_db select count() ",
+//                        new FieldValueValidator().withFieldNames("count()").withExpectedValues(3) },
+//                //implied group by
+//                { "from Person select count() as 'count', max(Person.age) as 'max', min(Person.age) as 'min'",
+//                        new FieldValueValidator().withFieldNames("max", "min", "count").withExpectedValues(50, 0, 4) },
+//                //Sum
+//                { "from Person groupby (isOrganDonor) select count() as 'count', sum(Person.age) as 'sum'",
+//                        new FieldValueValidator().withFieldNames("count", "sum").withExpectedValues(2, 0)
+//                                .withExpectedValues(2, 86) },
+//                { "from Person groupby (isOrganDonor) select Person.isOrganDonor as 'organDonor', count() as 'count', sum(Person.age) as 'sum'",
+//                        new FieldValueValidator().withFieldNames("organDonor", "count", "sum").withExpectedValues(false, 2, 0)
+//                                .withExpectedValues(true, 2, 86) },
+//                { "from Person select count() as 'count', sum(Person.age) as 'sum'",
+//                        new FieldValueValidator().withFieldNames("count", "sum").withExpectedValues(4, 86) },
+//                // tests to ensure that group by works with order by and limit
+//                { "from hive_db groupby (owner) select min(name) orderby name limit 2 ",
+//                        new FieldValueValidator().withFieldNames("min(name)")
+//                                                 .withExpectedValues("Logging").withExpectedValues("Reporting")
+//                },
+//
+//                { "from hive_db groupby (owner) select min(name) orderby name desc limit 2 ",
+//                        new FieldValueValidator().withFieldNames("min(name)")
+//                                                 .withExpectedValues("Reporting").withExpectedValues("Sales")
+//                },
+//        };
+//    }
+//
+//    @DataProvider(name = "dslObjectQueriesReturnIdProvider")
+//    private Object[][] createDSLObjectIdQueries() {
+//        return new Object[][] { {
+//                "from hive_db as h select h as id",
+//                new FieldValueValidator().withFieldNames("id")
+//                                         .withExpectedValues(idType).withExpectedValues(idType)
+//                        .withExpectedValues(idType) }
+//        };
+//    }
+
+}