http://git-wip-us.apache.org/repos/asf/atlas/blob/ac0764be/repository/src/main/java/org/apache/atlas/query/antlr4/AtlasDSLParser.java
----------------------------------------------------------------------
diff --git 
a/repository/src/main/java/org/apache/atlas/query/antlr4/AtlasDSLParser.java 
b/repository/src/main/java/org/apache/atlas/query/antlr4/AtlasDSLParser.java
index 73627a3..e557c4a 100644
--- a/repository/src/main/java/org/apache/atlas/query/antlr4/AtlasDSLParser.java
+++ b/repository/src/main/java/org/apache/atlas/query/antlr4/AtlasDSLParser.java
@@ -1,4 +1,4 @@
-// Generated from AtlasDSLParser.g4 by ANTLR 4.7
+// Generated from 
repository/src/main/java/org/apache/atlas/query/antlr4/AtlasDSLParser.g4 by 
ANTLR 4.7
 package org.apache.atlas.query.antlr4;
 import org.antlr.v4.runtime.atn.*;
 import org.antlr.v4.runtime.dfa.DFA;
@@ -34,9 +34,9 @@ public class AtlasDSLParser extends Parser {
                RULE_compE = 20, RULE_expr = 21, RULE_limitOffset = 22, 
RULE_selectExpression = 23, 
                RULE_selectExpr = 24, RULE_aliasExpr = 25, RULE_orderByExpr = 
26, RULE_fromSrc = 27, 
                RULE_whereClause = 28, RULE_fromExpression = 29, 
RULE_fromClause = 30, 
-               RULE_selectClause = 31, RULE_singleQrySrc = 32, 
RULE_loopExpression = 33, 
-               RULE_groupByExpression = 34, RULE_commaDelimitedQueries = 35, 
RULE_spaceDelimitedQueries = 36, 
-               RULE_querySrc = 37, RULE_query = 38, RULE_queryWithPath = 39;
+               RULE_selectClause = 31, RULE_singleQrySrc = 32, 
RULE_groupByExpression = 33, 
+               RULE_commaDelimitedQueries = 34, RULE_spaceDelimitedQueries = 
35, RULE_querySrc = 36, 
+               RULE_query = 37;
        public static final String[] ruleNames = {
                "identifier", "operator", "sortOrder", "valueArray", "literal", 
"limitClause", 
                "offsetClause", "atomE", "multiERight", "multiE", 
"arithERight", "arithE", 
@@ -44,8 +44,8 @@ public class AtlasDSLParser extends Parser {
                "minClause", "sumClause", "exprRight", "compE", "expr", 
"limitOffset", 
                "selectExpression", "selectExpr", "aliasExpr", "orderByExpr", 
"fromSrc", 
                "whereClause", "fromExpression", "fromClause", "selectClause", 
"singleQrySrc", 
-               "loopExpression", "groupByExpression", "commaDelimitedQueries", 
"spaceDelimitedQueries", 
-               "querySrc", "query", "queryWithPath"
+               "groupByExpression", "commaDelimitedQueries", 
"spaceDelimitedQueries", 
+               "querySrc", "query"
        };
 
        private static final String[] _LITERAL_NAMES = {
@@ -129,7 +129,7 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(80);
+                       setState(76);
                        match(ID);
                        }
                }
@@ -170,7 +170,7 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(82);
+                       setState(78);
                        _la = _input.LA(1);
                        if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << 
K_LIKE) | (1L << K_LT) | (1L << K_LTE) | (1L << K_EQ) | (1L << K_NEQ) | (1L << 
K_GT) | (1L << K_GTE))) != 0)) ) {
                        _errHandler.recoverInline(this);
@@ -214,7 +214,7 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(84);
+                       setState(80);
                        _la = _input.LA(1);
                        if ( !(_la==K_ASC || _la==K_DESC) ) {
                        _errHandler.recoverInline(this);
@@ -266,27 +266,27 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(86);
+                       setState(82);
                        match(K_LBRACKET);
-                       setState(87);
+                       setState(83);
                        match(STRING);
-                       setState(92);
+                       setState(88);
                        _errHandler.sync(this);
                        _la = _input.LA(1);
                        while (_la==K_COMMA) {
                                {
                                {
-                               setState(88);
+                               setState(84);
                                match(K_COMMA);
-                               setState(89);
+                               setState(85);
                                match(STRING);
                                }
                                }
-                               setState(94);
+                               setState(90);
                                _errHandler.sync(this);
                                _la = _input.LA(1);
                        }
-                       setState(95);
+                       setState(91);
                        match(K_RBRACKET);
                        }
                }
@@ -324,27 +324,27 @@ public class AtlasDSLParser extends Parser {
                LiteralContext _localctx = new LiteralContext(_ctx, getState());
                enterRule(_localctx, 8, RULE_literal);
                try {
-                       setState(104);
+                       setState(100);
                        _errHandler.sync(this);
                        switch (_input.LA(1)) {
                        case BOOL:
                                enterOuterAlt(_localctx, 1);
                                {
-                               setState(97);
+                               setState(93);
                                match(BOOL);
                                }
                                break;
                        case NUMBER:
                                enterOuterAlt(_localctx, 2);
                                {
-                               setState(98);
+                               setState(94);
                                match(NUMBER);
                                }
                                break;
                        case FLOATING_NUMBER:
                                enterOuterAlt(_localctx, 3);
                                {
-                               setState(99);
+                               setState(95);
                                match(FLOATING_NUMBER);
                                }
                                break;
@@ -352,18 +352,18 @@ public class AtlasDSLParser extends Parser {
                        case STRING:
                                enterOuterAlt(_localctx, 4);
                                {
-                               setState(102);
+                               setState(98);
                                _errHandler.sync(this);
                                switch (_input.LA(1)) {
                                case STRING:
                                        {
-                                       setState(100);
+                                       setState(96);
                                        match(STRING);
                                        }
                                        break;
                                case K_LBRACKET:
                                        {
-                                       setState(101);
+                                       setState(97);
                                        valueArray();
                                        }
                                        break;
@@ -407,9 +407,9 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(106);
+                       setState(102);
                        match(K_LIMIT);
-                       setState(107);
+                       setState(103);
                        match(NUMBER);
                        }
                }
@@ -444,9 +444,9 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(109);
+                       setState(105);
                        match(K_OFFSET);
-                       setState(110);
+                       setState(106);
                        match(NUMBER);
                        }
                }
@@ -488,7 +488,7 @@ public class AtlasDSLParser extends Parser {
                AtomEContext _localctx = new AtomEContext(_ctx, getState());
                enterRule(_localctx, 14, RULE_atomE);
                try {
-                       setState(120);
+                       setState(116);
                        _errHandler.sync(this);
                        switch (_input.LA(1)) {
                        case NUMBER:
@@ -499,12 +499,12 @@ public class AtlasDSLParser extends Parser {
                        case STRING:
                                enterOuterAlt(_localctx, 1);
                                {
-                               setState(114);
+                               setState(110);
                                _errHandler.sync(this);
                                switch (_input.LA(1)) {
                                case ID:
                                        {
-                                       setState(112);
+                                       setState(108);
                                        identifier();
                                        }
                                        break;
@@ -514,7 +514,7 @@ public class AtlasDSLParser extends Parser {
                                case K_LBRACKET:
                                case STRING:
                                        {
-                                       setState(113);
+                                       setState(109);
                                        literal();
                                        }
                                        break;
@@ -526,11 +526,11 @@ public class AtlasDSLParser extends Parser {
                        case K_LPAREN:
                                enterOuterAlt(_localctx, 2);
                                {
-                               setState(116);
+                               setState(112);
                                match(K_LPAREN);
-                               setState(117);
+                               setState(113);
                                expr();
-                               setState(118);
+                               setState(114);
                                match(K_RPAREN);
                                }
                                break;
@@ -573,7 +573,7 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(122);
+                       setState(118);
                        _la = _input.LA(1);
                        if ( !(_la==K_STAR || _la==K_DIV) ) {
                        _errHandler.recoverInline(this);
@@ -583,7 +583,7 @@ public class AtlasDSLParser extends Parser {
                                _errHandler.reportMatch(this);
                                consume();
                        }
-                       setState(123);
+                       setState(119);
                        atomE();
                        }
                }
@@ -626,19 +626,19 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(125);
+                       setState(121);
                        atomE();
-                       setState(129);
+                       setState(125);
                        _errHandler.sync(this);
                        _la = _input.LA(1);
                        while (_la==K_STAR || _la==K_DIV) {
                                {
                                {
-                               setState(126);
+                               setState(122);
                                multiERight();
                                }
                                }
-                               setState(131);
+                               setState(127);
                                _errHandler.sync(this);
                                _la = _input.LA(1);
                        }
@@ -679,7 +679,7 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(132);
+                       setState(128);
                        _la = _input.LA(1);
                        if ( !(_la==K_PLUS || _la==K_MINUS) ) {
                        _errHandler.recoverInline(this);
@@ -689,7 +689,7 @@ public class AtlasDSLParser extends Parser {
                                _errHandler.reportMatch(this);
                                consume();
                        }
-                       setState(133);
+                       setState(129);
                        multiE();
                        }
                }
@@ -732,19 +732,19 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(135);
+                       setState(131);
                        multiE();
-                       setState(139);
+                       setState(135);
                        _errHandler.sync(this);
                        _la = _input.LA(1);
                        while (_la==K_PLUS || _la==K_MINUS) {
                                {
                                {
-                               setState(136);
+                               setState(132);
                                arithERight();
                                }
                                }
-                               setState(141);
+                               setState(137);
                                _errHandler.sync(this);
                                _la = _input.LA(1);
                        }
@@ -788,11 +788,11 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(142);
+                       setState(138);
                        arithE();
-                       setState(143);
+                       setState(139);
                        operator();
-                       setState(144);
+                       setState(140);
                        arithE();
                        }
                }
@@ -834,9 +834,9 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(146);
+                       setState(142);
                        arithE();
-                       setState(147);
+                       setState(143);
                        _la = _input.LA(1);
                        if ( !(_la==K_ISA || _la==K_IS) ) {
                        _errHandler.recoverInline(this);
@@ -846,7 +846,7 @@ public class AtlasDSLParser extends Parser {
                                _errHandler.reportMatch(this);
                                consume();
                        }
-                       setState(148);
+                       setState(144);
                        identifier();
                        }
                }
@@ -886,11 +886,11 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(150);
+                       setState(146);
                        arithE();
-                       setState(151);
+                       setState(147);
                        match(K_HAS);
-                       setState(152);
+                       setState(148);
                        identifier();
                        }
                }
@@ -926,11 +926,11 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(154);
+                       setState(150);
                        match(K_COUNT);
-                       setState(155);
+                       setState(151);
                        match(K_LPAREN);
-                       setState(156);
+                       setState(152);
                        match(K_RPAREN);
                        }
                }
@@ -969,13 +969,13 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(158);
+                       setState(154);
                        match(K_MAX);
-                       setState(159);
+                       setState(155);
                        match(K_LPAREN);
-                       setState(160);
+                       setState(156);
                        expr();
-                       setState(161);
+                       setState(157);
                        match(K_RPAREN);
                        }
                }
@@ -1014,13 +1014,13 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(163);
+                       setState(159);
                        match(K_MIN);
-                       setState(164);
+                       setState(160);
                        match(K_LPAREN);
-                       setState(165);
+                       setState(161);
                        expr();
-                       setState(166);
+                       setState(162);
                        match(K_RPAREN);
                        }
                }
@@ -1059,13 +1059,13 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(168);
+                       setState(164);
                        match(K_SUM);
-                       setState(169);
+                       setState(165);
                        match(K_LPAREN);
-                       setState(170);
+                       setState(166);
                        expr();
-                       setState(171);
+                       setState(167);
                        match(K_RPAREN);
                        }
                }
@@ -1104,7 +1104,7 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(173);
+                       setState(169);
                        _la = _input.LA(1);
                        if ( !(_la==K_AND || _la==K_OR) ) {
                        _errHandler.recoverInline(this);
@@ -1114,7 +1114,7 @@ public class AtlasDSLParser extends Parser {
                                _errHandler.reportMatch(this);
                                consume();
                        }
-                       setState(174);
+                       setState(170);
                        compE();
                        }
                }
@@ -1169,62 +1169,62 @@ public class AtlasDSLParser extends Parser {
                CompEContext _localctx = new CompEContext(_ctx, getState());
                enterRule(_localctx, 40, RULE_compE);
                try {
-                       setState(184);
+                       setState(180);
                        _errHandler.sync(this);
                        switch ( 
getInterpreter().adaptivePredict(_input,7,_ctx) ) {
                        case 1:
                                enterOuterAlt(_localctx, 1);
                                {
-                               setState(176);
+                               setState(172);
                                comparisonClause();
                                }
                                break;
                        case 2:
                                enterOuterAlt(_localctx, 2);
                                {
-                               setState(177);
+                               setState(173);
                                isClause();
                                }
                                break;
                        case 3:
                                enterOuterAlt(_localctx, 3);
                                {
-                               setState(178);
+                               setState(174);
                                hasClause();
                                }
                                break;
                        case 4:
                                enterOuterAlt(_localctx, 4);
                                {
-                               setState(179);
+                               setState(175);
                                arithE();
                                }
                                break;
                        case 5:
                                enterOuterAlt(_localctx, 5);
                                {
-                               setState(180);
+                               setState(176);
                                countClause();
                                }
                                break;
                        case 6:
                                enterOuterAlt(_localctx, 6);
                                {
-                               setState(181);
+                               setState(177);
                                maxClause();
                                }
                                break;
                        case 7:
                                enterOuterAlt(_localctx, 7);
                                {
-                               setState(182);
+                               setState(178);
                                minClause();
                                }
                                break;
                        case 8:
                                enterOuterAlt(_localctx, 8);
                                {
-                               setState(183);
+                               setState(179);
                                sumClause();
                                }
                                break;
@@ -1269,19 +1269,19 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(186);
+                       setState(182);
                        compE();
-                       setState(190);
+                       setState(186);
                        _errHandler.sync(this);
                        _la = _input.LA(1);
                        while (_la==K_AND || _la==K_OR) {
                                {
                                {
-                               setState(187);
+                               setState(183);
                                exprRight();
                                }
                                }
-                               setState(192);
+                               setState(188);
                                _errHandler.sync(this);
                                _la = _input.LA(1);
                        }
@@ -1323,14 +1323,14 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(193);
+                       setState(189);
                        limitClause();
-                       setState(195);
+                       setState(191);
                        _errHandler.sync(this);
                        _la = _input.LA(1);
                        if (_la==K_OFFSET) {
                                {
-                               setState(194);
+                               setState(190);
                                offsetClause();
                                }
                        }
@@ -1374,16 +1374,16 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(197);
+                       setState(193);
                        expr();
-                       setState(200);
+                       setState(196);
                        _errHandler.sync(this);
                        _la = _input.LA(1);
                        if (_la==K_AS) {
                                {
-                               setState(198);
+                               setState(194);
                                match(K_AS);
-                               setState(199);
+                               setState(195);
                                identifier();
                                }
                        }
@@ -1430,21 +1430,21 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(202);
+                       setState(198);
                        selectExpression();
-                       setState(207);
+                       setState(203);
                        _errHandler.sync(this);
                        _la = _input.LA(1);
                        while (_la==K_COMMA) {
                                {
                                {
-                               setState(203);
+                               setState(199);
                                match(K_COMMA);
-                               setState(204);
+                               setState(200);
                                selectExpression();
                                }
                                }
-                               setState(209);
+                               setState(205);
                                _errHandler.sync(this);
                                _la = _input.LA(1);
                        }
@@ -1489,12 +1489,12 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(212);
+                       setState(208);
                        _errHandler.sync(this);
                        switch (_input.LA(1)) {
                        case ID:
                                {
-                               setState(210);
+                               setState(206);
                                identifier();
                                }
                                break;
@@ -1504,16 +1504,16 @@ public class AtlasDSLParser extends Parser {
                        case K_LBRACKET:
                        case STRING:
                                {
-                               setState(211);
+                               setState(207);
                                literal();
                                }
                                break;
                        default:
                                throw new NoViableAltException(this);
                        }
-                       setState(214);
+                       setState(210);
                        match(K_AS);
-                       setState(215);
+                       setState(211);
                        identifier();
                        }
                }
@@ -1554,16 +1554,16 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(217);
+                       setState(213);
                        match(K_ORDERBY);
-                       setState(218);
+                       setState(214);
                        expr();
-                       setState(220);
+                       setState(216);
                        _errHandler.sync(this);
                        _la = _input.LA(1);
                        if (_la==K_ASC || _la==K_DESC) {
                                {
-                               setState(219);
+                               setState(215);
                                sortOrder();
                                }
                        }
@@ -1606,25 +1606,25 @@ public class AtlasDSLParser extends Parser {
                FromSrcContext _localctx = new FromSrcContext(_ctx, getState());
                enterRule(_localctx, 54, RULE_fromSrc);
                try {
-                       setState(227);
+                       setState(223);
                        _errHandler.sync(this);
                        switch ( 
getInterpreter().adaptivePredict(_input,15,_ctx) ) {
                        case 1:
                                enterOuterAlt(_localctx, 1);
                                {
-                               setState(222);
+                               setState(218);
                                aliasExpr();
                                }
                                break;
                        case 2:
                                enterOuterAlt(_localctx, 2);
                                {
-                               setState(225);
+                               setState(221);
                                _errHandler.sync(this);
                                switch (_input.LA(1)) {
                                case ID:
                                        {
-                                       setState(223);
+                                       setState(219);
                                        identifier();
                                        }
                                        break;
@@ -1634,7 +1634,7 @@ public class AtlasDSLParser extends Parser {
                                case K_LBRACKET:
                                case STRING:
                                        {
-                                       setState(224);
+                                       setState(220);
                                        literal();
                                        }
                                        break;
@@ -1678,9 +1678,9 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(229);
+                       setState(225);
                        match(K_WHERE);
-                       setState(230);
+                       setState(226);
                        expr();
                        }
                }
@@ -1719,14 +1719,14 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(232);
+                       setState(228);
                        fromSrc();
-                       setState(234);
+                       setState(230);
                        _errHandler.sync(this);
                        switch ( 
getInterpreter().adaptivePredict(_input,16,_ctx) ) {
                        case 1:
                                {
-                               setState(233);
+                               setState(229);
                                whereClause();
                                }
                                break;
@@ -1766,9 +1766,9 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(236);
+                       setState(232);
                        match(K_FROM);
-                       setState(237);
+                       setState(233);
                        fromExpression();
                        }
                }
@@ -1805,9 +1805,9 @@ public class AtlasDSLParser extends Parser {
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(239);
+                       setState(235);
                        match(K_SELECT);
-                       setState(240);
+                       setState(236);
                        selectExpr();
                        }
                }
@@ -1850,34 +1850,34 @@ public class AtlasDSLParser extends Parser {
                SingleQrySrcContext _localctx = new SingleQrySrcContext(_ctx, 
getState());
                enterRule(_localctx, 64, RULE_singleQrySrc);
                try {
-                       setState(246);
+                       setState(242);
                        _errHandler.sync(this);
                        switch ( 
getInterpreter().adaptivePredict(_input,17,_ctx) ) {
                        case 1:
                                enterOuterAlt(_localctx, 1);
                                {
-                               setState(242);
+                               setState(238);
                                fromClause();
                                }
                                break;
                        case 2:
                                enterOuterAlt(_localctx, 2);
                                {
-                               setState(243);
+                               setState(239);
                                whereClause();
                                }
                                break;
                        case 3:
                                enterOuterAlt(_localctx, 3);
                                {
-                               setState(244);
+                               setState(240);
                                fromExpression();
                                }
                                break;
                        case 4:
                                enterOuterAlt(_localctx, 4);
                                {
-                               setState(245);
+                               setState(241);
                                expr();
                                }
                                break;
@@ -1894,79 +1894,6 @@ public class AtlasDSLParser extends Parser {
                return _localctx;
        }
 
-       public static class LoopExpressionContext extends ParserRuleContext {
-               public TerminalNode K_LOOP() { return 
getToken(AtlasDSLParser.K_LOOP, 0); }
-               public TerminalNode K_LPAREN() { return 
getToken(AtlasDSLParser.K_LPAREN, 0); }
-               public QueryContext query() {
-                       return getRuleContext(QueryContext.class,0);
-               }
-               public TerminalNode K_RPAREN() { return 
getToken(AtlasDSLParser.K_RPAREN, 0); }
-               public TerminalNode NUMBER() { return 
getToken(AtlasDSLParser.NUMBER, 0); }
-               public TerminalNode K_AS() { return 
getToken(AtlasDSLParser.K_AS, 0); }
-               public IdentifierContext identifier() {
-                       return getRuleContext(IdentifierContext.class,0);
-               }
-               public LoopExpressionContext(ParserRuleContext parent, int 
invokingState) {
-                       super(parent, invokingState);
-               }
-               @Override public int getRuleIndex() { return 
RULE_loopExpression; }
-               @Override
-               public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
-                       if ( visitor instanceof AtlasDSLParserVisitor ) return 
((AtlasDSLParserVisitor<? extends T>)visitor).visitLoopExpression(this);
-                       else return visitor.visitChildren(this);
-               }
-       }
-
-       public final LoopExpressionContext loopExpression() throws 
RecognitionException {
-               LoopExpressionContext _localctx = new 
LoopExpressionContext(_ctx, getState());
-               enterRule(_localctx, 66, RULE_loopExpression);
-               int _la;
-               try {
-                       enterOuterAlt(_localctx, 1);
-                       {
-                       setState(248);
-                       match(K_LOOP);
-                       setState(249);
-                       match(K_LPAREN);
-                       setState(250);
-                       query();
-                       setState(251);
-                       match(K_RPAREN);
-                       setState(253);
-                       _errHandler.sync(this);
-                       _la = _input.LA(1);
-                       if (_la==NUMBER) {
-                               {
-                               setState(252);
-                               match(NUMBER);
-                               }
-                       }
-
-                       setState(257);
-                       _errHandler.sync(this);
-                       _la = _input.LA(1);
-                       if (_la==K_AS) {
-                               {
-                               setState(255);
-                               match(K_AS);
-                               setState(256);
-                               identifier();
-                               }
-                       }
-
-                       }
-               }
-               catch (RecognitionException re) {
-                       _localctx.exception = re;
-                       _errHandler.reportError(this, re);
-                       _errHandler.recover(this, re);
-               }
-               finally {
-                       exitRule();
-               }
-               return _localctx;
-       }
-
        public static class GroupByExpressionContext extends ParserRuleContext {
                public TerminalNode K_GROUPBY() { return 
getToken(AtlasDSLParser.K_GROUPBY, 0); }
                public TerminalNode K_LPAREN() { return 
getToken(AtlasDSLParser.K_LPAREN, 0); }
@@ -1987,17 +1914,17 @@ public class AtlasDSLParser extends Parser {
 
        public final GroupByExpressionContext groupByExpression() throws 
RecognitionException {
                GroupByExpressionContext _localctx = new 
GroupByExpressionContext(_ctx, getState());
-               enterRule(_localctx, 68, RULE_groupByExpression);
+               enterRule(_localctx, 66, RULE_groupByExpression);
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(259);
+                       setState(244);
                        match(K_GROUPBY);
-                       setState(260);
+                       setState(245);
                        match(K_LPAREN);
-                       setState(261);
+                       setState(246);
                        selectExpr();
-                       setState(262);
+                       setState(247);
                        match(K_RPAREN);
                        }
                }
@@ -2036,26 +1963,26 @@ public class AtlasDSLParser extends Parser {
 
        public final CommaDelimitedQueriesContext commaDelimitedQueries() 
throws RecognitionException {
                CommaDelimitedQueriesContext _localctx = new 
CommaDelimitedQueriesContext(_ctx, getState());
-               enterRule(_localctx, 70, RULE_commaDelimitedQueries);
+               enterRule(_localctx, 68, RULE_commaDelimitedQueries);
                int _la;
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(264);
+                       setState(249);
                        singleQrySrc();
-                       setState(269);
+                       setState(254);
                        _errHandler.sync(this);
                        _la = _input.LA(1);
                        while (_la==K_COMMA) {
                                {
                                {
-                               setState(265);
+                               setState(250);
                                match(K_COMMA);
-                               setState(266);
+                               setState(251);
                                singleQrySrc();
                                }
                                }
-                               setState(271);
+                               setState(256);
                                _errHandler.sync(this);
                                _la = _input.LA(1);
                        }
@@ -2092,24 +2019,24 @@ public class AtlasDSLParser extends Parser {
 
        public final SpaceDelimitedQueriesContext spaceDelimitedQueries() 
throws RecognitionException {
                SpaceDelimitedQueriesContext _localctx = new 
SpaceDelimitedQueriesContext(_ctx, getState());
-               enterRule(_localctx, 72, RULE_spaceDelimitedQueries);
+               enterRule(_localctx, 70, RULE_spaceDelimitedQueries);
                int _la;
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(272);
+                       setState(257);
                        singleQrySrc();
-                       setState(276);
+                       setState(261);
                        _errHandler.sync(this);
                        _la = _input.LA(1);
                        while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << 
NUMBER) | (1L << FLOATING_NUMBER) | (1L << BOOL) | (1L << K_LPAREN) | (1L << 
K_LBRACKET) | (1L << K_FROM) | (1L << K_WHERE) | (1L << K_MAX) | (1L << K_MIN) 
| (1L << K_SUM) | (1L << K_COUNT) | (1L << ID) | (1L << STRING))) != 0)) {
                                {
                                {
-                               setState(273);
+                               setState(258);
                                singleQrySrc();
                                }
                                }
-                               setState(278);
+                               setState(263);
                                _errHandler.sync(this);
                                _la = _input.LA(1);
                        }
@@ -2146,22 +2073,22 @@ public class AtlasDSLParser extends Parser {
 
        public final QuerySrcContext querySrc() throws RecognitionException {
                QuerySrcContext _localctx = new QuerySrcContext(_ctx, 
getState());
-               enterRule(_localctx, 74, RULE_querySrc);
+               enterRule(_localctx, 72, RULE_querySrc);
                try {
-                       setState(281);
+                       setState(266);
                        _errHandler.sync(this);
-                       switch ( 
getInterpreter().adaptivePredict(_input,22,_ctx) ) {
+                       switch ( 
getInterpreter().adaptivePredict(_input,20,_ctx) ) {
                        case 1:
                                enterOuterAlt(_localctx, 1);
                                {
-                               setState(279);
+                               setState(264);
                                commaDelimitedQueries();
                                }
                                break;
                        case 2:
                                enterOuterAlt(_localctx, 2);
                                {
-                               setState(280);
+                               setState(265);
                                spaceDelimitedQueries();
                                }
                                break;
@@ -2182,9 +2109,6 @@ public class AtlasDSLParser extends Parser {
                public QuerySrcContext querySrc() {
                        return getRuleContext(QuerySrcContext.class,0);
                }
-               public LoopExpressionContext loopExpression() {
-                       return getRuleContext(LoopExpressionContext.class,0);
-               }
                public GroupByExpressionContext groupByExpression() {
                        return getRuleContext(GroupByExpressionContext.class,0);
                }
@@ -2210,59 +2134,49 @@ public class AtlasDSLParser extends Parser {
 
        public final QueryContext query() throws RecognitionException {
                QueryContext _localctx = new QueryContext(_ctx, getState());
-               enterRule(_localctx, 76, RULE_query);
+               enterRule(_localctx, 74, RULE_query);
                int _la;
                try {
                        enterOuterAlt(_localctx, 1);
                        {
-                       setState(283);
+                       setState(268);
                        querySrc();
-                       setState(285);
-                       _errHandler.sync(this);
-                       _la = _input.LA(1);
-                       if (_la==K_LOOP) {
-                               {
-                               setState(284);
-                               loopExpression();
-                               }
-                       }
-
-                       setState(288);
+                       setState(270);
                        _errHandler.sync(this);
                        _la = _input.LA(1);
                        if (_la==K_GROUPBY) {
                                {
-                               setState(287);
+                               setState(269);
                                groupByExpression();
                                }
                        }
 
-                       setState(291);
+                       setState(273);
                        _errHandler.sync(this);
                        _la = _input.LA(1);
                        if (_la==K_SELECT) {
                                {
-                               setState(290);
+                               setState(272);
                                selectClause();
                                }
                        }
 
-                       setState(294);
+                       setState(276);
                        _errHandler.sync(this);
                        _la = _input.LA(1);
                        if (_la==K_ORDERBY) {
                                {
-                               setState(293);
+                               setState(275);
                                orderByExpr();
                                }
                        }
 
-                       setState(297);
+                       setState(279);
                        _errHandler.sync(this);
                        _la = _input.LA(1);
                        if (_la==K_LIMIT) {
                                {
-                               setState(296);
+                               setState(278);
                                limitOffset();
                                }
                        }
@@ -2280,156 +2194,99 @@ public class AtlasDSLParser extends Parser {
                return _localctx;
        }
 
-       public static class QueryWithPathContext extends ParserRuleContext {
-               public QueryContext query() {
-                       return getRuleContext(QueryContext.class,0);
-               }
-               public TerminalNode K_WITHPATH() { return 
getToken(AtlasDSLParser.K_WITHPATH, 0); }
-               public QueryWithPathContext(ParserRuleContext parent, int 
invokingState) {
-                       super(parent, invokingState);
-               }
-               @Override public int getRuleIndex() { return 
RULE_queryWithPath; }
-               @Override
-               public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
-                       if ( visitor instanceof AtlasDSLParserVisitor ) return 
((AtlasDSLParserVisitor<? extends T>)visitor).visitQueryWithPath(this);
-                       else return visitor.visitChildren(this);
-               }
-       }
-
-       public final QueryWithPathContext queryWithPath() throws 
RecognitionException {
-               QueryWithPathContext _localctx = new QueryWithPathContext(_ctx, 
getState());
-               enterRule(_localctx, 78, RULE_queryWithPath);
-               int _la;
-               try {
-                       enterOuterAlt(_localctx, 1);
-                       {
-                       setState(299);
-                       query();
-                       setState(301);
-                       _errHandler.sync(this);
-                       _la = _input.LA(1);
-                       if (_la==K_WITHPATH) {
-                               {
-                               setState(300);
-                               match(K_WITHPATH);
-                               }
-                       }
-
-                       }
-               }
-               catch (RecognitionException re) {
-                       _localctx.exception = re;
-                       _errHandler.reportError(this, re);
-                       _errHandler.recover(this, re);
-               }
-               finally {
-                       exitRule();
-               }
-               return _localctx;
-       }
-
        public static final String _serializedATN =
-               
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\63\u0132\4\2\t\2"+
+               
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\63\u011c\4\2\t\2"+
                
"\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+
                
"\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
                
"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
                "\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 
\t \4!"+
-               
"\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\3\2\3\2\3\3\3"+
-               
"\3\3\4\3\4\3\5\3\5\3\5\3\5\7\5]\n\5\f\5\16\5`\13\5\3\5\3\5\3\6\3\6\3\6"+
-               
"\3\6\3\6\5\6i\n\6\5\6k\n\6\3\7\3\7\3\7\3\b\3\b\3\b\3\t\3\t\5\tu\n\t\3"+
-               
"\t\3\t\3\t\3\t\5\t{\n\t\3\n\3\n\3\n\3\13\3\13\7\13\u0082\n\13\f\13\16"+
-               
"\13\u0085\13\13\3\f\3\f\3\f\3\r\3\r\7\r\u008c\n\r\f\r\16\r\u008f\13\r"+
-               
"\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\20\3\20\3\20\3\20\3\21\3\21"+
-               
"\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\24\3\24"+
-               
"\3\24\3\24\3\24\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26"+
-               
"\5\26\u00bb\n\26\3\27\3\27\7\27\u00bf\n\27\f\27\16\27\u00c2\13\27\3\30"+
-               
"\3\30\5\30\u00c6\n\30\3\31\3\31\3\31\5\31\u00cb\n\31\3\32\3\32\3\32\7"+
-               
"\32\u00d0\n\32\f\32\16\32\u00d3\13\32\3\33\3\33\5\33\u00d7\n\33\3\33\3"+
-               
"\33\3\33\3\34\3\34\3\34\5\34\u00df\n\34\3\35\3\35\3\35\5\35\u00e4\n\35"+
-               "\5\35\u00e6\n\35\3\36\3\36\3\36\3\37\3\37\5\37\u00ed\n\37\3 \3 
\3 \3!"+
-               
"\3!\3!\3\"\3\"\3\"\3\"\5\"\u00f9\n\"\3#\3#\3#\3#\3#\5#\u0100\n#\3#\3#"+
-               
"\5#\u0104\n#\3$\3$\3$\3$\3$\3%\3%\3%\7%\u010e\n%\f%\16%\u0111\13%\3&\3"+
-               
"&\7&\u0115\n&\f&\16&\u0118\13&\3\'\3\'\5\'\u011c\n\'\3(\3(\5(\u0120\n"+
-               
"(\3(\5(\u0123\n(\3(\5(\u0126\n(\3(\5(\u0129\n(\3(\5(\u012c\n(\3)\3)\5"+
-               ")\u0130\n)\3)\2\2*\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 
\"$&(*,.\60"+
-               
"\62\64\668:<>@BDFHJLNP\2\b\4\2\17\17\26\33\3\2,-\3\2\f\r\3\2\n\13\3\2"+
-               
")*\3\2\20\21\2\u0130\2R\3\2\2\2\4T\3\2\2\2\6V\3\2\2\2\bX\3\2\2\2\nj\3"+
-               
"\2\2\2\fl\3\2\2\2\16o\3\2\2\2\20z\3\2\2\2\22|\3\2\2\2\24\177\3\2\2\2\26"+
-               
"\u0086\3\2\2\2\30\u0089\3\2\2\2\32\u0090\3\2\2\2\34\u0094\3\2\2\2\36\u0098"+
-               "\3\2\2\2 
\u009c\3\2\2\2\"\u00a0\3\2\2\2$\u00a5\3\2\2\2&\u00aa\3\2\2\2"+
-               
"(\u00af\3\2\2\2*\u00ba\3\2\2\2,\u00bc\3\2\2\2.\u00c3\3\2\2\2\60\u00c7"+
-               
"\3\2\2\2\62\u00cc\3\2\2\2\64\u00d6\3\2\2\2\66\u00db\3\2\2\28\u00e5\3\2"+
-               
"\2\2:\u00e7\3\2\2\2<\u00ea\3\2\2\2>\u00ee\3\2\2\2@\u00f1\3\2\2\2B\u00f8"+
-               
"\3\2\2\2D\u00fa\3\2\2\2F\u0105\3\2\2\2H\u010a\3\2\2\2J\u0112\3\2\2\2L"+
-               
"\u011b\3\2\2\2N\u011d\3\2\2\2P\u012d\3\2\2\2RS\7\62\2\2S\3\3\2\2\2TU\t"+
-               
"\2\2\2U\5\3\2\2\2VW\t\3\2\2W\7\3\2\2\2XY\7\23\2\2Y^\7\63\2\2Z[\7\t\2\2"+
-               
"[]\7\63\2\2\\Z\3\2\2\2]`\3\2\2\2^\\\3\2\2\2^_\3\2\2\2_a\3\2\2\2`^\3\2"+
-               
"\2\2ab\7\25\2\2b\t\3\2\2\2ck\7\b\2\2dk\7\6\2\2ek\7\7\2\2fi\7\63\2\2gi"+
-               
"\5\b\5\2hf\3\2\2\2hg\3\2\2\2ik\3\2\2\2jc\3\2\2\2jd\3\2\2\2je\3\2\2\2j"+
-               "h\3\2\2\2k\13\3\2\2\2lm\7 
\2\2mn\7\6\2\2n\r\3\2\2\2op\7\'\2\2pq\7\6\2"+
-               
"\2q\17\3\2\2\2ru\5\2\2\2su\5\n\6\2tr\3\2\2\2ts\3\2\2\2u{\3\2\2\2vw\7\22"+
-               
"\2\2wx\5,\27\2xy\7\24\2\2y{\3\2\2\2zt\3\2\2\2zv\3\2\2\2{\21\3\2\2\2|}"+
-               
"\t\4\2\2}~\5\20\t\2~\23\3\2\2\2\177\u0083\5\20\t\2\u0080\u0082\5\22\n"+
-               
"\2\u0081\u0080\3\2\2\2\u0082\u0085\3\2\2\2\u0083\u0081\3\2\2\2\u0083\u0084"+
-               
"\3\2\2\2\u0084\25\3\2\2\2\u0085\u0083\3\2\2\2\u0086\u0087\t\5\2\2\u0087"+
-               
"\u0088\5\24\13\2\u0088\27\3\2\2\2\u0089\u008d\5\24\13\2\u008a\u008c\5"+
-               
"\26\f\2\u008b\u008a\3\2\2\2\u008c\u008f\3\2\2\2\u008d\u008b\3\2\2\2\u008d"+
-               
"\u008e\3\2\2\2\u008e\31\3\2\2\2\u008f\u008d\3\2\2\2\u0090\u0091\5\30\r"+
-               
"\2\u0091\u0092\5\4\3\2\u0092\u0093\5\30\r\2\u0093\33\3\2\2\2\u0094\u0095"+
-               
"\5\30\r\2\u0095\u0096\t\6\2\2\u0096\u0097\5\2\2\2\u0097\35\3\2\2\2\u0098"+
-               
"\u0099\5\30\r\2\u0099\u009a\7+\2\2\u009a\u009b\5\2\2\2\u009b\37\3\2\2"+
-               
"\2\u009c\u009d\7%\2\2\u009d\u009e\7\22\2\2\u009e\u009f\7\24\2\2\u009f"+
-               
"!\3\2\2\2\u00a0\u00a1\7\"\2\2\u00a1\u00a2\7\22\2\2\u00a2\u00a3\5,\27\2"+
-               
"\u00a3\u00a4\7\24\2\2\u00a4#\3\2\2\2\u00a5\u00a6\7#\2\2\u00a6\u00a7\7"+
-               
"\22\2\2\u00a7\u00a8\5,\27\2\u00a8\u00a9\7\24\2\2\u00a9%\3\2\2\2\u00aa"+
-               
"\u00ab\7$\2\2\u00ab\u00ac\7\22\2\2\u00ac\u00ad\5,\27\2\u00ad\u00ae\7\24"+
-               
"\2\2\u00ae\'\3\2\2\2\u00af\u00b0\t\7\2\2\u00b0\u00b1\5*\26\2\u00b1)\3"+
-               
"\2\2\2\u00b2\u00bb\5\32\16\2\u00b3\u00bb\5\34\17\2\u00b4\u00bb\5\36\20"+
-               "\2\u00b5\u00bb\5\30\r\2\u00b6\u00bb\5 
\21\2\u00b7\u00bb\5\"\22\2\u00b8"+
-               
"\u00bb\5$\23\2\u00b9\u00bb\5&\24\2\u00ba\u00b2\3\2\2\2\u00ba\u00b3\3\2"+
-               
"\2\2\u00ba\u00b4\3\2\2\2\u00ba\u00b5\3\2\2\2\u00ba\u00b6\3\2\2\2\u00ba"+
-               
"\u00b7\3\2\2\2\u00ba\u00b8\3\2\2\2\u00ba\u00b9\3\2\2\2\u00bb+\3\2\2\2"+
-               
"\u00bc\u00c0\5*\26\2\u00bd\u00bf\5(\25\2\u00be\u00bd\3\2\2\2\u00bf\u00c2"+
-               
"\3\2\2\2\u00c0\u00be\3\2\2\2\u00c0\u00c1\3\2\2\2\u00c1-\3\2\2\2\u00c2"+
-               
"\u00c0\3\2\2\2\u00c3\u00c5\5\f\7\2\u00c4\u00c6\5\16\b\2\u00c5\u00c4\3"+
-               
"\2\2\2\u00c5\u00c6\3\2\2\2\u00c6/\3\2\2\2\u00c7\u00ca\5,\27\2\u00c8\u00c9"+
-               
"\7(\2\2\u00c9\u00cb\5\2\2\2\u00ca\u00c8\3\2\2\2\u00ca\u00cb\3\2\2\2\u00cb"+
-               
"\61\3\2\2\2\u00cc\u00d1\5\60\31\2\u00cd\u00ce\7\t\2\2\u00ce\u00d0\5\60"+
-               
"\31\2\u00cf\u00cd\3\2\2\2\u00d0\u00d3\3\2\2\2\u00d1\u00cf\3\2\2\2\u00d1"+
-               
"\u00d2\3\2\2\2\u00d2\63\3\2\2\2\u00d3\u00d1\3\2\2\2\u00d4\u00d7\5\2\2"+
-               
"\2\u00d5\u00d7\5\n\6\2\u00d6\u00d4\3\2\2\2\u00d6\u00d5\3\2\2\2\u00d7\u00d8"+
-               
"\3\2\2\2\u00d8\u00d9\7(\2\2\u00d9\u00da\5\2\2\2\u00da\65\3\2\2\2\u00db"+
-               
"\u00dc\7\36\2\2\u00dc\u00de\5,\27\2\u00dd\u00df\5\6\4\2\u00de\u00dd\3"+
-               
"\2\2\2\u00de\u00df\3\2\2\2\u00df\67\3\2\2\2\u00e0\u00e6\5\64\33\2\u00e1"+
-               
"\u00e4\5\2\2\2\u00e2\u00e4\5\n\6\2\u00e3\u00e1\3\2\2\2\u00e3\u00e2\3\2"+
-               
"\2\2\u00e4\u00e6\3\2\2\2\u00e5\u00e0\3\2\2\2\u00e5\u00e3\3\2\2\2\u00e6"+
-               
"9\3\2\2\2\u00e7\u00e8\7\35\2\2\u00e8\u00e9\5,\27\2\u00e9;\3\2\2\2\u00ea"+
-               
"\u00ec\58\35\2\u00eb\u00ed\5:\36\2\u00ec\u00eb\3\2\2\2\u00ec\u00ed\3\2"+
-               
"\2\2\u00ed=\3\2\2\2\u00ee\u00ef\7\34\2\2\u00ef\u00f0\5<\37\2\u00f0?\3"+
-               
"\2\2\2\u00f1\u00f2\7!\2\2\u00f2\u00f3\5\62\32\2\u00f3A\3\2\2\2\u00f4\u00f9"+
-               "\5> 
\2\u00f5\u00f9\5:\36\2\u00f6\u00f9\5<\37\2\u00f7\u00f9\5,\27\2\u00f8"+
-               
"\u00f4\3\2\2\2\u00f8\u00f5\3\2\2\2\u00f8\u00f6\3\2\2\2\u00f8\u00f7\3\2"+
-               
"\2\2\u00f9C\3\2\2\2\u00fa\u00fb\7&\2\2\u00fb\u00fc\7\22\2\2\u00fc\u00fd"+
-               
"\5N(\2\u00fd\u00ff\7\24\2\2\u00fe\u0100\7\6\2\2\u00ff\u00fe\3\2\2\2\u00ff"+
-               
"\u0100\3\2\2\2\u0100\u0103\3\2\2\2\u0101\u0102\7(\2\2\u0102\u0104\5\2"+
-               
"\2\2\u0103\u0101\3\2\2\2\u0103\u0104\3\2\2\2\u0104E\3\2\2\2\u0105\u0106"+
-               
"\7\37\2\2\u0106\u0107\7\22\2\2\u0107\u0108\5\62\32\2\u0108\u0109\7\24"+
-               
"\2\2\u0109G\3\2\2\2\u010a\u010f\5B\"\2\u010b\u010c\7\t\2\2\u010c\u010e"+
-               
"\5B\"\2\u010d\u010b\3\2\2\2\u010e\u0111\3\2\2\2\u010f\u010d\3\2\2\2\u010f"+
-               
"\u0110\3\2\2\2\u0110I\3\2\2\2\u0111\u010f\3\2\2\2\u0112\u0116\5B\"\2\u0113"+
-               
"\u0115\5B\"\2\u0114\u0113\3\2\2\2\u0115\u0118\3\2\2\2\u0116\u0114\3\2"+
-               
"\2\2\u0116\u0117\3\2\2\2\u0117K\3\2\2\2\u0118\u0116\3\2\2\2\u0119\u011c"+
-               
"\5H%\2\u011a\u011c\5J&\2\u011b\u0119\3\2\2\2\u011b\u011a\3\2\2\2\u011c"+
-               
"M\3\2\2\2\u011d\u011f\5L\'\2\u011e\u0120\5D#\2\u011f\u011e\3\2\2\2\u011f"+
-               
"\u0120\3\2\2\2\u0120\u0122\3\2\2\2\u0121\u0123\5F$\2\u0122\u0121\3\2\2"+
-               
"\2\u0122\u0123\3\2\2\2\u0123\u0125\3\2\2\2\u0124\u0126\5@!\2\u0125\u0124"+
-               
"\3\2\2\2\u0125\u0126\3\2\2\2\u0126\u0128\3\2\2\2\u0127\u0129\5\66\34\2"+
-               
"\u0128\u0127\3\2\2\2\u0128\u0129\3\2\2\2\u0129\u012b\3\2\2\2\u012a\u012c"+
-               
"\5.\30\2\u012b\u012a\3\2\2\2\u012b\u012c\3\2\2\2\u012cO\3\2\2\2\u012d"+
-               
"\u012f\5N(\2\u012e\u0130\7.\2\2\u012f\u012e\3\2\2\2\u012f\u0130\3\2\2"+
-               
"\2\u0130Q\3\2\2\2\37^hjtz\u0083\u008d\u00ba\u00c0\u00c5\u00ca\u00d1\u00d6"+
-               
"\u00de\u00e3\u00e5\u00ec\u00f8\u00ff\u0103\u010f\u0116\u011b\u011f\u0122"+
-               "\u0125\u0128\u012b\u012f";
+               
"\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\3\2\3\2\3\3\3\3\3\4\3\4\3"+
+               
"\5\3\5\3\5\3\5\7\5Y\n\5\f\5\16\5\\\13\5\3\5\3\5\3\6\3\6\3\6\3\6\3\6\5"+
+               
"\6e\n\6\5\6g\n\6\3\7\3\7\3\7\3\b\3\b\3\b\3\t\3\t\5\tq\n\t\3\t\3\t\3\t"+
+               
"\3\t\5\tw\n\t\3\n\3\n\3\n\3\13\3\13\7\13~\n\13\f\13\16\13\u0081\13\13"+
+               
"\3\f\3\f\3\f\3\r\3\r\7\r\u0088\n\r\f\r\16\r\u008b\13\r\3\16\3\16\3\16"+
+               
"\3\16\3\17\3\17\3\17\3\17\3\20\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3\22"+
+               
"\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24"+
+               
"\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\5\26\u00b7\n\26"+
+               
"\3\27\3\27\7\27\u00bb\n\27\f\27\16\27\u00be\13\27\3\30\3\30\5\30\u00c2"+
+               
"\n\30\3\31\3\31\3\31\5\31\u00c7\n\31\3\32\3\32\3\32\7\32\u00cc\n\32\f"+
+               
"\32\16\32\u00cf\13\32\3\33\3\33\5\33\u00d3\n\33\3\33\3\33\3\33\3\34\3"+
+               
"\34\3\34\5\34\u00db\n\34\3\35\3\35\3\35\5\35\u00e0\n\35\5\35\u00e2\n\35"+
+               "\3\36\3\36\3\36\3\37\3\37\5\37\u00e9\n\37\3 \3 \3 
\3!\3!\3!\3\"\3\"\3"+
+               
"\"\3\"\5\"\u00f5\n\"\3#\3#\3#\3#\3#\3$\3$\3$\7$\u00ff\n$\f$\16$\u0102"+
+               
"\13$\3%\3%\7%\u0106\n%\f%\16%\u0109\13%\3&\3&\5&\u010d\n&\3\'\3\'\5\'"+
+               
"\u0111\n\'\3\'\5\'\u0114\n\'\3\'\5\'\u0117\n\'\3\'\5\'\u011a\n\'\3\'\2"+
+               "\2(\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 
\"$&(*,.\60\62\64\668:<>@B"+
+               
"DFHJL\2\b\4\2\17\17\26\33\3\2,-\3\2\f\r\3\2\n\13\3\2)*\3\2\20\21\2\u0118"+
+               
"\2N\3\2\2\2\4P\3\2\2\2\6R\3\2\2\2\bT\3\2\2\2\nf\3\2\2\2\fh\3\2\2\2\16"+
+               
"k\3\2\2\2\20v\3\2\2\2\22x\3\2\2\2\24{\3\2\2\2\26\u0082\3\2\2\2\30\u0085"+
+               "\3\2\2\2\32\u008c\3\2\2\2\34\u0090\3\2\2\2\36\u0094\3\2\2\2 
\u0098\3\2"+
+               
"\2\2\"\u009c\3\2\2\2$\u00a1\3\2\2\2&\u00a6\3\2\2\2(\u00ab\3\2\2\2*\u00b6"+
+               
"\3\2\2\2,\u00b8\3\2\2\2.\u00bf\3\2\2\2\60\u00c3\3\2\2\2\62\u00c8\3\2\2"+
+               
"\2\64\u00d2\3\2\2\2\66\u00d7\3\2\2\28\u00e1\3\2\2\2:\u00e3\3\2\2\2<\u00e6"+
+               
"\3\2\2\2>\u00ea\3\2\2\2@\u00ed\3\2\2\2B\u00f4\3\2\2\2D\u00f6\3\2\2\2F"+
+               
"\u00fb\3\2\2\2H\u0103\3\2\2\2J\u010c\3\2\2\2L\u010e\3\2\2\2NO\7\62\2\2"+
+               
"O\3\3\2\2\2PQ\t\2\2\2Q\5\3\2\2\2RS\t\3\2\2S\7\3\2\2\2TU\7\23\2\2UZ\7\63"+
+               
"\2\2VW\7\t\2\2WY\7\63\2\2XV\3\2\2\2Y\\\3\2\2\2ZX\3\2\2\2Z[\3\2\2\2[]\3"+
+               
"\2\2\2\\Z\3\2\2\2]^\7\25\2\2^\t\3\2\2\2_g\7\b\2\2`g\7\6\2\2ag\7\7\2\2"+
+               
"be\7\63\2\2ce\5\b\5\2db\3\2\2\2dc\3\2\2\2eg\3\2\2\2f_\3\2\2\2f`\3\2\2"+
+               "\2fa\3\2\2\2fd\3\2\2\2g\13\3\2\2\2hi\7 
\2\2ij\7\6\2\2j\r\3\2\2\2kl\7\'"+
+               
"\2\2lm\7\6\2\2m\17\3\2\2\2nq\5\2\2\2oq\5\n\6\2pn\3\2\2\2po\3\2\2\2qw\3"+
+               
"\2\2\2rs\7\22\2\2st\5,\27\2tu\7\24\2\2uw\3\2\2\2vp\3\2\2\2vr\3\2\2\2w"+
+               
"\21\3\2\2\2xy\t\4\2\2yz\5\20\t\2z\23\3\2\2\2{\177\5\20\t\2|~\5\22\n\2"+
+               
"}|\3\2\2\2~\u0081\3\2\2\2\177}\3\2\2\2\177\u0080\3\2\2\2\u0080\25\3\2"+
+               
"\2\2\u0081\177\3\2\2\2\u0082\u0083\t\5\2\2\u0083\u0084\5\24\13\2\u0084"+
+               
"\27\3\2\2\2\u0085\u0089\5\24\13\2\u0086\u0088\5\26\f\2\u0087\u0086\3\2"+
+               
"\2\2\u0088\u008b\3\2\2\2\u0089\u0087\3\2\2\2\u0089\u008a\3\2\2\2\u008a"+
+               
"\31\3\2\2\2\u008b\u0089\3\2\2\2\u008c\u008d\5\30\r\2\u008d\u008e\5\4\3"+
+               
"\2\u008e\u008f\5\30\r\2\u008f\33\3\2\2\2\u0090\u0091\5\30\r\2\u0091\u0092"+
+               
"\t\6\2\2\u0092\u0093\5\2\2\2\u0093\35\3\2\2\2\u0094\u0095\5\30\r\2\u0095"+
+               
"\u0096\7+\2\2\u0096\u0097\5\2\2\2\u0097\37\3\2\2\2\u0098\u0099\7%\2\2"+
+               
"\u0099\u009a\7\22\2\2\u009a\u009b\7\24\2\2\u009b!\3\2\2\2\u009c\u009d"+
+               
"\7\"\2\2\u009d\u009e\7\22\2\2\u009e\u009f\5,\27\2\u009f\u00a0\7\24\2\2"+
+               
"\u00a0#\3\2\2\2\u00a1\u00a2\7#\2\2\u00a2\u00a3\7\22\2\2\u00a3\u00a4\5"+
+               
",\27\2\u00a4\u00a5\7\24\2\2\u00a5%\3\2\2\2\u00a6\u00a7\7$\2\2\u00a7\u00a8"+
+               
"\7\22\2\2\u00a8\u00a9\5,\27\2\u00a9\u00aa\7\24\2\2\u00aa\'\3\2\2\2\u00ab"+
+               
"\u00ac\t\7\2\2\u00ac\u00ad\5*\26\2\u00ad)\3\2\2\2\u00ae\u00b7\5\32\16"+
+               
"\2\u00af\u00b7\5\34\17\2\u00b0\u00b7\5\36\20\2\u00b1\u00b7\5\30\r\2\u00b2"+
+               "\u00b7\5 
\21\2\u00b3\u00b7\5\"\22\2\u00b4\u00b7\5$\23\2\u00b5\u00b7\5"+
+               
"&\24\2\u00b6\u00ae\3\2\2\2\u00b6\u00af\3\2\2\2\u00b6\u00b0\3\2\2\2\u00b6"+
+               
"\u00b1\3\2\2\2\u00b6\u00b2\3\2\2\2\u00b6\u00b3\3\2\2\2\u00b6\u00b4\3\2"+
+               
"\2\2\u00b6\u00b5\3\2\2\2\u00b7+\3\2\2\2\u00b8\u00bc\5*\26\2\u00b9\u00bb"+
+               
"\5(\25\2\u00ba\u00b9\3\2\2\2\u00bb\u00be\3\2\2\2\u00bc\u00ba\3\2\2\2\u00bc"+
+               
"\u00bd\3\2\2\2\u00bd-\3\2\2\2\u00be\u00bc\3\2\2\2\u00bf\u00c1\5\f\7\2"+
+               
"\u00c0\u00c2\5\16\b\2\u00c1\u00c0\3\2\2\2\u00c1\u00c2\3\2\2\2\u00c2/\3"+
+               
"\2\2\2\u00c3\u00c6\5,\27\2\u00c4\u00c5\7(\2\2\u00c5\u00c7\5\2\2\2\u00c6"+
+               
"\u00c4\3\2\2\2\u00c6\u00c7\3\2\2\2\u00c7\61\3\2\2\2\u00c8\u00cd\5\60\31"+
+               
"\2\u00c9\u00ca\7\t\2\2\u00ca\u00cc\5\60\31\2\u00cb\u00c9\3\2\2\2\u00cc"+
+               
"\u00cf\3\2\2\2\u00cd\u00cb\3\2\2\2\u00cd\u00ce\3\2\2\2\u00ce\63\3\2\2"+
+               
"\2\u00cf\u00cd\3\2\2\2\u00d0\u00d3\5\2\2\2\u00d1\u00d3\5\n\6\2\u00d2\u00d0"+
+               
"\3\2\2\2\u00d2\u00d1\3\2\2\2\u00d3\u00d4\3\2\2\2\u00d4\u00d5\7(\2\2\u00d5"+
+               
"\u00d6\5\2\2\2\u00d6\65\3\2\2\2\u00d7\u00d8\7\36\2\2\u00d8\u00da\5,\27"+
+               
"\2\u00d9\u00db\5\6\4\2\u00da\u00d9\3\2\2\2\u00da\u00db\3\2\2\2\u00db\67"+
+               
"\3\2\2\2\u00dc\u00e2\5\64\33\2\u00dd\u00e0\5\2\2\2\u00de\u00e0\5\n\6\2"+
+               
"\u00df\u00dd\3\2\2\2\u00df\u00de\3\2\2\2\u00e0\u00e2\3\2\2\2\u00e1\u00dc"+
+               
"\3\2\2\2\u00e1\u00df\3\2\2\2\u00e29\3\2\2\2\u00e3\u00e4\7\35\2\2\u00e4"+
+               
"\u00e5\5,\27\2\u00e5;\3\2\2\2\u00e6\u00e8\58\35\2\u00e7\u00e9\5:\36\2"+
+               
"\u00e8\u00e7\3\2\2\2\u00e8\u00e9\3\2\2\2\u00e9=\3\2\2\2\u00ea\u00eb\7"+
+               
"\34\2\2\u00eb\u00ec\5<\37\2\u00ec?\3\2\2\2\u00ed\u00ee\7!\2\2\u00ee\u00ef"+
+               "\5\62\32\2\u00efA\3\2\2\2\u00f0\u00f5\5> 
\2\u00f1\u00f5\5:\36\2\u00f2"+
+               
"\u00f5\5<\37\2\u00f3\u00f5\5,\27\2\u00f4\u00f0\3\2\2\2\u00f4\u00f1\3\2"+
+               
"\2\2\u00f4\u00f2\3\2\2\2\u00f4\u00f3\3\2\2\2\u00f5C\3\2\2\2\u00f6\u00f7"+
+               
"\7\37\2\2\u00f7\u00f8\7\22\2\2\u00f8\u00f9\5\62\32\2\u00f9\u00fa\7\24"+
+               
"\2\2\u00faE\3\2\2\2\u00fb\u0100\5B\"\2\u00fc\u00fd\7\t\2\2\u00fd\u00ff"+
+               
"\5B\"\2\u00fe\u00fc\3\2\2\2\u00ff\u0102\3\2\2\2\u0100\u00fe\3\2\2\2\u0100"+
+               
"\u0101\3\2\2\2\u0101G\3\2\2\2\u0102\u0100\3\2\2\2\u0103\u0107\5B\"\2\u0104"+
+               
"\u0106\5B\"\2\u0105\u0104\3\2\2\2\u0106\u0109\3\2\2\2\u0107\u0105\3\2"+
+               
"\2\2\u0107\u0108\3\2\2\2\u0108I\3\2\2\2\u0109\u0107\3\2\2\2\u010a\u010d"+
+               
"\5F$\2\u010b\u010d\5H%\2\u010c\u010a\3\2\2\2\u010c\u010b\3\2\2\2\u010d"+
+               
"K\3\2\2\2\u010e\u0110\5J&\2\u010f\u0111\5D#\2\u0110\u010f\3\2\2\2\u0110"+
+               
"\u0111\3\2\2\2\u0111\u0113\3\2\2\2\u0112\u0114\5@!\2\u0113\u0112\3\2\2"+
+               
"\2\u0113\u0114\3\2\2\2\u0114\u0116\3\2\2\2\u0115\u0117\5\66\34\2\u0116"+
+               
"\u0115\3\2\2\2\u0116\u0117\3\2\2\2\u0117\u0119\3\2\2\2\u0118\u011a\5."+
+               
"\30\2\u0119\u0118\3\2\2\2\u0119\u011a\3\2\2\2\u011aM\3\2\2\2\33Zdfpv\177"+
+               
"\u0089\u00b6\u00bc\u00c1\u00c6\u00cd\u00d2\u00da\u00df\u00e1\u00e8\u00f4"+
+               "\u0100\u0107\u010c\u0110\u0113\u0116\u0119";
        public static final ATN _ATN =
                new ATNDeserializer().deserialize(_serializedATN.toCharArray());
        static {

http://git-wip-us.apache.org/repos/asf/atlas/blob/ac0764be/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
index 4495f77..4423c0e 100644
--- 
a/repository/src/main/java/org/apache/atlas/query/antlr4/AtlasDSLParserBaseVisitor.java
+++ 
b/repository/src/main/java/org/apache/atlas/query/antlr4/AtlasDSLParserBaseVisitor.java
@@ -1,4 +1,4 @@
-// Generated from AtlasDSLParser.g4 by ANTLR 4.7
+// Generated from 
repository/src/main/java/org/apache/atlas/query/antlr4/AtlasDSLParser.g4 by 
ANTLR 4.7
 package org.apache.atlas.query.antlr4;
 import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
 
@@ -248,13 +248,6 @@ public class AtlasDSLParserBaseVisitor<T> extends 
AbstractParseTreeVisitor<T> im
         * <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}
@@ -284,11 +277,4 @@ public class AtlasDSLParserBaseVisitor<T> extends 
AbstractParseTreeVisitor<T> im
         * {@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/ac0764be/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
index 4985f8a..8c59d7a 100644
--- 
a/repository/src/main/java/org/apache/atlas/query/antlr4/AtlasDSLParserVisitor.java
+++ 
b/repository/src/main/java/org/apache/atlas/query/antlr4/AtlasDSLParserVisitor.java
@@ -1,4 +1,4 @@
-// Generated from AtlasDSLParser.g4 by ANTLR 4.7
+// Generated from 
repository/src/main/java/org/apache/atlas/query/antlr4/AtlasDSLParser.g4 by 
ANTLR 4.7
 package org.apache.atlas.query.antlr4;
 import org.antlr.v4.runtime.tree.ParseTreeVisitor;
 
@@ -209,12 +209,6 @@ public interface AtlasDSLParserVisitor<T> extends 
ParseTreeVisitor<T> {
         */
        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
@@ -244,10 +238,4 @@ public interface AtlasDSLParserVisitor<T> extends 
ParseTreeVisitor<T> {
         * @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/ac0764be/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
index 2aecf2b..c8d3378 100644
--- a/repository/src/test/java/org/apache/atlas/query/BasicTestSetup.java
+++ b/repository/src/test/java/org/apache/atlas/query/BasicTestSetup.java
@@ -23,17 +23,18 @@ 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.model.instance.AtlasObjectId;
+import org.apache.atlas.model.instance.AtlasStruct;
+import org.apache.atlas.model.typedef.*;
 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 org.apache.atlas.type.AtlasTypeUtil;
 
 import javax.inject.Inject;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -46,17 +47,24 @@ public abstract class BasicTestSetup {
     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";
+    private static final   String STORAGE_DESC_TYPE = "hive_storagedesc";
+    private static final   String VIEW_TYPE         = "hive_process";
+    protected static final String DATASET_SUBTYPE   = "Asset";
+
+    public static final String DIMENSION_CLASSIFICATION    = "Dimension";
+    public static final String FACT_CLASSIFICATION         = "Fact";
+    public static final String PII_CLASSIFICATION          = "PII";
+    public static final String METRIC_CLASSIFICATION       = "Metric";
+    public static final String ETL_CLASSIFICATION          = "ETL";
+    public static final String JDBC_CLASSIFICATION         = "JdbcAccess";
+    public static final String LOGDATA_CLASSIFICATION      = "Log Data";
 
     @Inject
-    protected AtlasTypeRegistry atlasTypeRegistry;
+    protected AtlasTypeRegistry typeRegistry;
     @Inject
-    protected AtlasTypeDefStore atlasTypeDefStore;
+    protected AtlasTypeDefStore typeDefStore;
     @Inject
-    protected AtlasEntityStore  atlasEntityStore;
+    protected AtlasEntityStore entityStore;
 
     private boolean baseLoaded = false;
 
@@ -67,9 +75,8 @@ public abstract class BasicTestSetup {
     }
 
     private void loadBaseModels() {
-        // Load all base models
         try {
-            loadModelFromJson("0000-Area0/0010-base_model.json", 
atlasTypeDefStore, atlasTypeRegistry);
+            loadModelFromJson("0000-Area0/0010-base_model.json", typeDefStore, 
typeRegistry);
             baseLoaded = true;
         } catch (IOException | AtlasBaseException e) {
             fail("Base model setup is required for test to run");
@@ -82,7 +89,7 @@ public abstract class BasicTestSetup {
         }
 
         try {
-            loadModelFromJson("1000-Hadoop/1030-hive_model.json", 
atlasTypeDefStore, atlasTypeRegistry);
+            loadModelFromJson("1000-Hadoop/1030-hive_model.json", 
typeDefStore, typeRegistry);
         } catch (IOException | AtlasBaseException e) {
             fail("Hive model setup is required for test to run");
         }
@@ -90,7 +97,7 @@ public abstract class BasicTestSetup {
         AtlasEntity.AtlasEntitiesWithExtInfo hiveTestEntities = 
hiveTestEntities();
 
         try {
-            atlasEntityStore.createOrUpdate(new 
AtlasEntityStream(hiveTestEntities), false);
+            entityStore.createOrUpdate(new 
AtlasEntityStream(hiveTestEntities), false);
         } catch (AtlasBaseException e) {
             fail("Hive instance setup is needed for test to run");
         }
@@ -105,7 +112,7 @@ public abstract class BasicTestSetup {
         AtlasTypesDef employeeTypes = TestUtilsV2.defineDeptEmployeeTypes();
 
         try {
-            atlasTypeDefStore.createTypesDef(employeeTypes);
+            typeDefStore.createTypesDef(employeeTypes);
         } catch (AtlasBaseException e) {
             fail("Employee Type setup is required");
         }
@@ -114,7 +121,7 @@ public abstract class BasicTestSetup {
         AtlasEntity.AtlasEntitiesWithExtInfo deptEg2 = 
TestUtilsV2.createDeptEg2();
 
         try {
-            atlasEntityStore.createOrUpdate(new AtlasEntityStream(deptEg2), 
false);
+            entityStore.createOrUpdate(new AtlasEntityStream(deptEg2), false);
         } catch (AtlasBaseException e) {
             fail("Employee entity setup should've passed");
         }
@@ -122,9 +129,10 @@ public abstract class BasicTestSetup {
 
     public AtlasEntity.AtlasEntitiesWithExtInfo hiveTestEntities() {
         List<AtlasEntity> entities = new ArrayList<>();
+        
+        createClassificationTypes();
 
         AtlasEntity salesDB = database("Sales", "Sales Database", "John ETL", 
"hdfs://host:8000/apps/warehouse/sales");
-
         entities.add(salesDB);
 
         AtlasEntity sd =
@@ -133,18 +141,20 @@ public abstract class BasicTestSetup {
         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"));
+                .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"));
+                    .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
@@ -193,9 +203,9 @@ public abstract class BasicTestSetup {
         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"));
+                    .of(column("product_id", "int", "product id"),
+                        column("product_name", "string", "product name"),
+                        column("brand_name", "int", "brand name"));
         entities.addAll(productDimColumns);
 
         AtlasEntity productDim =
@@ -238,24 +248,46 @@ public abstract class BasicTestSetup {
                                          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);
     }
 
+    protected void createClassificationTypes() {
+        List<AtlasClassificationDef> cds =  Arrays.asList(new 
AtlasClassificationDef(DIMENSION_CLASSIFICATION, "Dimension Classification", 
"1.0"),
+                new AtlasClassificationDef(FACT_CLASSIFICATION, "Fact 
Classification", "1.0"),
+                new AtlasClassificationDef(PII_CLASSIFICATION, "PII 
Classification", "1.0"),
+                new AtlasClassificationDef(METRIC_CLASSIFICATION, "Metric 
Classification", "1.0"),
+                new AtlasClassificationDef(ETL_CLASSIFICATION, "ETL 
Classification", "1.0"),
+                new AtlasClassificationDef(JDBC_CLASSIFICATION, "JdbcAccess 
Classification", "1.0"),
+                new AtlasClassificationDef(LOGDATA_CLASSIFICATION, "LogData 
Classification", "1.0"));
+
+        AtlasTypesDef tds = new 
AtlasTypesDef(Collections.<AtlasEnumDef>emptyList(),
+                Collections.<AtlasStructDef>emptyList(),
+                cds,
+                Collections.<AtlasEntityDef>emptyList());
+        createUpdateClassificationDef(tds);
+    }
+
+    private void createUpdateClassificationDef(AtlasTypesDef td) {
+        try {
+            typeDefStore.createTypesDef(td);
+        }
+        catch(Exception e) {
+            fail("Error creating classifications definitions.");
+        }
+    }
+
     AtlasEntity database(String name, String description, String owner, String 
locationUri, String... traitNames) {
         AtlasEntity database = new AtlasEntity(DATABASE_TYPE);
         database.setAttribute("name", name);
+        database.setAttribute(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME, 
"qualified:" + name);
         database.setAttribute("description", description);
         database.setAttribute("owner", owner);
         database.setAttribute("locationUri", locationUri);
         database.setAttribute("createTime", System.currentTimeMillis());
+        database.setAttribute("clusterName", "cl1");
         
database.setClassifications(Stream.of(traitNames).map(AtlasClassification::new).collect(Collectors.toList()));
 
         return database;
@@ -264,10 +296,11 @@ public abstract class BasicTestSetup {
     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(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME, 
"qualified:" + location);
         storageDescriptor.setAttribute("inputFormat", inputFormat);
         storageDescriptor.setAttribute("outputFormat", outputFormat);
         storageDescriptor.setAttribute("compressed", compressed);
-        storageDescriptor.setAttribute("cols", columns);
+        storageDescriptor.setAttribute("cols", getAtlasObjectIds(columns));
 
         return storageDescriptor;
     }
@@ -275,7 +308,8 @@ public abstract class BasicTestSetup {
     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(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME, 
"qualified:" + name);
+        column.setAttribute("type", dataType);
         column.setAttribute("comment", comment);
         
column.setClassifications(Stream.of(traitNames).map(AtlasClassification::new).collect(Collectors.toList()));
 
@@ -295,27 +329,42 @@ public abstract class BasicTestSetup {
         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.setAttribute("db", getAtlasObjectId(db));
+        table.setAttribute("sd", getAtlasObjectId(sd));
+
+        table.setAttribute("columns", getAtlasObjectIds(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,
+    private List<AtlasObjectId> getAtlasObjectIds(List<AtlasEntity> columns) {
+        List<AtlasObjectId> objIds = new ArrayList<>();
+        for (AtlasEntity e : columns) {
+            AtlasObjectId oid = getAtlasObjectId(e);
+            objIds.add(oid);
+        }
+        return objIds;
+    }
+
+    private AtlasObjectId getAtlasObjectId(AtlasEntity e) {
+        return new AtlasObjectId(e.getGuid(), e.getTypeName());
+    }
+
+    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("userName", user);
         process.setAttribute("startTime", System.currentTimeMillis());
         process.setAttribute("endTime", System.currentTimeMillis() + 10000);
 
-        process.setAttribute("inputs", inputTables);
-        process.setAttribute("outputs", outputTables);
+        process.setAttribute("operationType", "load");
+        process.setAttribute("inputs", getAtlasObjectIds(inputTables));
+        process.setAttribute("outputs", getAtlasObjectIds(outputTables));
 
         process.setAttribute("queryText", queryText);
         process.setAttribute("queryPlan", queryPlan);
@@ -331,22 +380,22 @@ public abstract class BasicTestSetup {
         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.setAttribute("userName", "testUser");
+        view.setAttribute("startTime", System.currentTimeMillis());
+        view.setAttribute("endTime", System.currentTimeMillis() + 10000);
+
+        view.setAttribute("operationType", "view");
+        view.setAttribute("query", "create table as select");
+        view.setAttribute("queryText", "create table as select");
+        view.setAttribute("queryPlan", "viewPlan");
+        view.setAttribute("queryId", "view1");
+        view.setAttribute("db", getAtlasObjectId(dbId));
+        view.setAttribute("inputs", getAtlasObjectIds(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);

Reply via email to