From 00383de6c6eb406626e7977da1f312be61ebf072 Mon Sep 17 00:00:00 2001 From: Airat Arifullin Date: Wed, 24 May 2023 10:24:47 +0300 Subject: [PATCH] [#26] Add new keywords NOT and UNIQUE --- netmap/filter.go | 12 +- netmap/parser/Query.g4 | 3 +- netmap/parser/Query.interp | Bin 4300 -> 4477 bytes netmap/parser/Query.tokens | Bin 331 -> 350 bytes netmap/parser/QueryLexer.g4 | 1 + netmap/parser/QueryLexer.interp | Bin 6957 -> 7164 bytes netmap/parser/QueryLexer.tokens | Bin 331 -> 350 bytes netmap/parser/query_lexer.go | 233 ++++++++++++++-------------- netmap/parser/query_parser.go | 264 ++++++++++++++++++-------------- netmap/policy.go | 37 ++++- netmap/policy_test.go | 4 + netmap/selector_test.go | 21 +-- 12 files changed, 324 insertions(+), 251 deletions(-) diff --git a/netmap/filter.go b/netmap/filter.go index 7b1abb1..c6e2e61 100644 --- a/netmap/filter.go +++ b/netmap/filter.go @@ -39,7 +39,7 @@ func (c *context) processFilter(f netmap.Filter, top bool) error { inner := f.GetFilters() switch op := f.GetOp(); op { - case netmap.AND, netmap.OR: + case netmap.AND, netmap.OR, netmap.NOT: for i := range inner { if err := c.processFilter(inner[i], false); err != nil { return fmt.Errorf("process inner filter #%d: %w", i, err) @@ -79,6 +79,16 @@ func (c *context) processFilter(f netmap.Filter, top bool) error { // and missing node properties are considered as a regular fail. func (c *context) match(f *netmap.Filter, b NodeInfo) bool { switch f.GetOp() { + case netmap.NOT: + inner := f.GetFilters() + fSub := &inner[0] + if name := inner[0].GetName(); name != "" { + fSub = c.processedFilters[name] + } + if ok := c.match(fSub, b); !ok { + return true + } + return false case netmap.AND, netmap.OR: inner := f.GetFilters() for i := range inner { diff --git a/netmap/parser/Query.g4 b/netmap/parser/Query.g4 index 52fcb4f..a52746a 100644 --- a/netmap/parser/Query.g4 +++ b/netmap/parser/Query.g4 @@ -22,7 +22,8 @@ selectStmt: clause: CLAUSE_SAME | CLAUSE_DISTINCT; // nodes from distinct buckets filterExpr: - F1 = filterExpr Op = AND_OP F2 = filterExpr + Op = NOT_OP '(' F1 = filterExpr ')' + | F1 = filterExpr Op = AND_OP F2 = filterExpr | F1 = filterExpr Op = OR_OP F2 = filterExpr | '(' Inner = filterExpr ')' | expr diff --git a/netmap/parser/Query.interp b/netmap/parser/Query.interp index 298ddaebe73fcd27e8b70021fc7ba1a1add1ab2d..60db0a9f647f693717d038b8e90e24368ed60b30 100644 GIT binary patch literal 4477 zcmbW4UvC>X5X9g4DfH&HZ~>kED^FEyr4VXMhNRR$i^8y-3t&XH16fAvZ{OeS@+6W< zi=x1VCp$e$eLRa>{f*TdikvV|_>XJ^y}+s$Q_2 zMqy{pUfv$>o;MHonKhiX#P46}KdtODMGI}7p^+*P=qU7Vjy zmgnK@V)Ah{y^+6W-Ixp)H&>J8bRL#*o~*;{d^%r;`Nzxm(`6NYn=Th&wO-EVKZom8 z2;0|9-MIWJ%Wq*@e_ib!cj5l-v&}E{roP`fw7GqKsl(@o4JSYS>+3cyZL>baztnGW z=hxfKYt2n~ysNk2Oa1oe^Y&AC_*6gbe7rsjA>8hs-i6*L=)#)&G`z%gd?bFuK zMq#!V!7gxLbPZ=DL;;+UH43al)1IY5G9{6(I{ghGKLO2iejd!%AeK*H`(@|$d2rfkn){O08i z^xcm$)Sfrlj7};>Lau?k*zZLY4|v<7=oM?{4Vm^ll;HV@AJ+eSL{=Rk&GjEupmB|P zT4E08tyGRfI7iAQfTsU-)KlWm%0G;_6GzIFayko=82v=5%6&LYVK(<86sX(g^d*0?ct^LTS6YRf94Bq48;m0#%grPIW$k?X5;0ulC$MC6A1!mcIrBfkv} zFxttqwMgX5aXi!mQ#C7pFb<&3PA#SB7TbF+(X?1clra@|q>(aJsH;OxK}dS*aGv`e zomH7^91_!9y_L#y6;{?z+$|h-DX6y?6FU&(ftB#AhOpvrEU&mNU7FMTk94hEk9#6K z(}Sb;VTPgAE$&|ztXG`B;$GoJTH>a9J=)RRRjshZff9+dkr5&Fioz-&ZpIT7kE5KyOTmiUFAHNrWO)sYSnHy5B*l8idpk)|w;ZZNcVOl{&iE)%=Vr!^&%+8O#C16%>qV1)Nv5?}-+mn1rpq@XZm>j130eglSV zWVOLm{|GC2h>hW9Jh~p!mRhEWHz;5X3scBOj94EYhhEqnvptRoQ)IFlqs9IKBhIr0 zsOjP!3X^K;QHlDt$uRm5_XsQQ%UCg_jHjN9bExchv<*$7dv+zHYGWvN$u3VKM)Hy}D1N0l(3GH4c#=o(n}2)ZpX&~4l7epe{C8 zkqH43EbHkk8eEkc5uJu`3MW47Q|CzBQ7JWsrR1n|GL%Ta6FI1-w}Z9RwgIZ0Q@LYR z2Uk$ZigpDkKd0&-^dY34Rl#?wj-3U#4i(pph8=}+8pygZH1%aD*{YdQ^(|J}2NauT z(}XJfU!rg&96a0SnB}DP97Q*mRtu#GtlDRt{&?`CFAV*T+ixIy`k~OP&t4D8wZCb5 NX8em)opn2Z{0;aeFINBn literal 4300 zcmaKvTTdfL5QX3SSMWv>5y|bl_bFbOjjR|O+1?-}iV(1~5?XVSF-rLN`<<$p@pQ96 z8oIkqpQ<`lGoESokKf9NqwU?k++A;v9)5Y0wI9{%fD|=O3V9yo| z(>25C$4`vwVqTnXSbSP7&o#~Fn*yKXU$i+rFPP3|>&8?mKR~U(zu?TU(5@wkQQc(FkJ^k1(y^gD7c((Ih&uIPFH8)bUyvO zF0Lf3Uf1fv{OV%5Di&c?&C^YoofV5sSbRSJSgd0Bt5_|=db64>eh-)H5Oy!yvX=KG zt*>EMKCSon`*3^n)#m4NTi)&++Frjrm*MN(mSz|KJ?*NcZI%c7kMgzJ`SW`FQqukV zn{pSvm9PIk?!JV(FXhAD$IH_Y!u9^)L-@OYauiRFy8OjnhsDVecLX7TChd88O>Dy_IivIw zmQl`{;0nib00-IVt9WK(3I(cAEUwDCk1GNNwAg)8{*aBzHrss|e|UKT1J~mWmFGp) zqm!}`lWXWIn!O4|1KJvtc-h){Bc_H&BzQiehxI!nj?(P@@9^4Dpm9xr$SEH>s)>Sy zlbOB=uqWr8QO|)t4gWJDOPr3k!Rh4m%&s}=2?2AM#F)(pMeE3;%f7=>3#Xp66vZdM zXQ~8OO|k1Y#@3jEebUNERr145D*?_}#9`qgEUyBCNLR$YD-M`)b-^$_nj(pNuv8{> z0J4_`?K#->GTHVEbf7r3?S2ELZb6uX%#l68{5n|*tF~(U zfvJLG=B|Fk=(oFJszFh;x09=5vD>uA$!cNj=I$iYYXxpofLhg+fL1xi0Z1^6ysdf_ zspAO`yO*`BM?$@(nAm|J4XlJGzQVFTm|s?LkK*)#!(A(nN3Ft>cyRQ>OE6;fvcB}d z`eIiY0Esqa3|HRSHWK$PufLl@KBIv&2duZo(6m6(YNz-6X|&BTxk+kPxWw ziewYNokG8b0e~{qOtZ1T^mBCg0W}QJ2iSx(8w=QIQnNkxRgsg4icng<+@OB%6rL+~mMEjHn5Qq2on@5n9|gnDo_I6;C!mf+=^_2Yt#W zRmr&dC18S>L(Pf^F!8&}c16UV_)TrSAcP#g;m(X5=GZ|F3H52LVQJKXhg_`?u_K)w zKxu$ZA`4)WsDmgh>mX`U$05B#$Zuq&QtWmU{5x%GYJcOB!;>bcoE0Sj$zaDY1SFDG zwt9|(KIxS>JtMIrpBfV2s5}xBD?bQCI})h}Sw3rVjaw26740-4Jky~%s&k!7GaZJi ztBDRnvq#U)mHCOp&n;?tyU$U8{cDy)Rk`X6)aDmrKz^i&=BwtaW<3fnFWOqT1QNyz z@gvcjd=}L_YN9HZcUSHSC_rbUtjB(~0=I_L9)8+-8$>NIkD6%t)QWa<1nO=gz)nVV hMIU#4LhbXzo?g;=lj)akzgRn5+B0L1qgOWi=R3Yv5C8xG diff --git a/netmap/parser/Query.tokens b/netmap/parser/Query.tokens index 7f5aee960e912a0eb93d1254eb0be4dcdb88ee23..8fdec7d8bace57f62664e5a0fc14b64c49b7f0cd 100644 GIT binary patch literal 350 zcmXw!L2kn^3dFUwr-BaJCjzi8fCk=i VJEoEN0|EF60r)op@B#Y=dIL*mP;USL literal 331 zcmXw!!D_=m3`Fnx5w$&8cACToK{sBxEUb5p)*;Y~|Nk#KCipZXghp>diF;jDsQRHj zwY03+4nL6FsuxN{zbQ1m()5`1M$NKKo8D>my68xA%A2`LN3WFQ6g;X3O*uT9?JX>( z(w}2YZA%5$GEm;v;8s*Foe6_^{9=khQYl{@{JSCx_4=BfN@kAF>jAr2)n z8gO++0R}Y#n^R$cb7%~720H_u-}DT8KKL00_}u^*9q|_gSqC>9;!b2t1Mvq0*`E+( L|3Hx4K}Pxq{%=e0 diff --git a/netmap/parser/QueryLexer.g4 b/netmap/parser/QueryLexer.g4 index 6c245b6..f32023c 100644 --- a/netmap/parser/QueryLexer.g4 +++ b/netmap/parser/QueryLexer.g4 @@ -1,5 +1,6 @@ lexer grammar QueryLexer; +NOT_OP : 'NOT'; AND_OP : 'AND'; OR_OP : 'OR'; SIMPLE_OP : 'EQ' | 'NE' | 'GE' | 'GT' | 'LT' | 'LE'; diff --git a/netmap/parser/QueryLexer.interp b/netmap/parser/QueryLexer.interp index 80a47ce78550f67276c2402cfc6719ca56b462ca..71b093c1f05cead0ee1535f20cee74dbb4f0bd2f 100644 GIT binary patch literal 7164 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 H(fI8X@5$ho diff --git a/netmap/parser/QueryLexer.tokens b/netmap/parser/QueryLexer.tokens index 7f5aee960e912a0eb93d1254eb0be4dcdb88ee23..8fdec7d8bace57f62664e5a0fc14b64c49b7f0cd 100644 GIT binary patch literal 350 zcmXw!L2kn^3dFUwr-BaJCjzi8fCk=i VJEoEN0|EF60r)op@B#Y=dIL*mP;USL literal 331 zcmXw!!D_=m3`Fnx5w$&8cACToK{sBxEUb5p)*;Y~|Nk#KCipZXghp>diF;jDsQRHj zwY03+4nL6FsuxN{zbQ1m()5`1M$NKKo8D>my68xA%A2`LN3WFQ6g;X3O*uT9?JX>( z(w}2YZA%5$GEm;v;8s*Foe6_^{9=khQYl{@{JSCx_4=BfN@kAF>jAr2)n z8gO++0R}Y#n^R$cb7%~720H_u-}DT8KKL00_}u^*9q|_gSqC>9;!b2t1Mvq0*`E+( L|3Hx4K}Pxq{%=e0 diff --git a/netmap/parser/query_lexer.go b/netmap/parser/query_lexer.go index 7c24aae..f831e9a 100644 --- a/netmap/parser/query_lexer.go +++ b/netmap/parser/query_lexer.go @@ -44,112 +44,114 @@ func querylexerLexerInit() { "DEFAULT_MODE", } staticData.literalNames = []string{ - "", "'AND'", "'OR'", "", "'REP'", "'IN'", "'AS'", "'CBF'", "'SELECT'", - "'FROM'", "'FILTER'", "'*'", "'SAME'", "'DISTINCT'", "'('", "')'", "'@'", - "", "", "'0'", + "", "'NOT'", "'AND'", "'OR'", "", "'REP'", "'IN'", "'AS'", "'CBF'", + "'SELECT'", "'FROM'", "'FILTER'", "'*'", "'SAME'", "'DISTINCT'", "'('", + "')'", "'@'", "", "", "'0'", } staticData.symbolicNames = []string{ - "", "AND_OP", "OR_OP", "SIMPLE_OP", "REP", "IN", "AS", "CBF", "SELECT", - "FROM", "FILTER", "WILDCARD", "CLAUSE_SAME", "CLAUSE_DISTINCT", "L_PAREN", - "R_PAREN", "AT", "IDENT", "NUMBER1", "ZERO", "STRING", "WS", + "", "NOT_OP", "AND_OP", "OR_OP", "SIMPLE_OP", "REP", "IN", "AS", "CBF", + "SELECT", "FROM", "FILTER", "WILDCARD", "CLAUSE_SAME", "CLAUSE_DISTINCT", + "L_PAREN", "R_PAREN", "AT", "IDENT", "NUMBER1", "ZERO", "STRING", "WS", } staticData.ruleNames = []string{ - "AND_OP", "OR_OP", "SIMPLE_OP", "REP", "IN", "AS", "CBF", "SELECT", - "FROM", "FILTER", "WILDCARD", "CLAUSE_SAME", "CLAUSE_DISTINCT", "L_PAREN", - "R_PAREN", "AT", "IDENT", "Digit", "Nondigit", "NUMBER1", "ZERO", "STRING", - "ESC", "UNICODE", "HEX", "SAFECODEPOINTSINGLE", "SAFECODEPOINTDOUBLE", + "NOT_OP", "AND_OP", "OR_OP", "SIMPLE_OP", "REP", "IN", "AS", "CBF", + "SELECT", "FROM", "FILTER", "WILDCARD", "CLAUSE_SAME", "CLAUSE_DISTINCT", + "L_PAREN", "R_PAREN", "AT", "IDENT", "Digit", "Nondigit", "NUMBER1", + "ZERO", "STRING", "ESC", "UNICODE", "HEX", "SAFECODEPOINTSINGLE", "SAFECODEPOINTDOUBLE", "WS", } staticData.predictionContextCache = antlr.NewPredictionContextCache() staticData.serializedATN = []int32{ - 4, 0, 21, 198, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, + 4, 0, 22, 204, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, - 2, 26, 7, 26, 2, 27, 7, 27, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, - 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, - 2, 77, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, - 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, - 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, - 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, - 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, - 1, 16, 1, 16, 1, 16, 5, 16, 137, 8, 16, 10, 16, 12, 16, 140, 9, 16, 1, - 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 5, 19, 148, 8, 19, 10, 19, 12, 19, - 151, 9, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 5, 21, 158, 8, 21, 10, 21, - 12, 21, 161, 9, 21, 1, 21, 1, 21, 1, 21, 1, 21, 5, 21, 167, 8, 21, 10, - 21, 12, 21, 170, 9, 21, 1, 21, 3, 21, 173, 8, 21, 1, 22, 1, 22, 1, 22, - 3, 22, 178, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, - 24, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 4, 27, 193, 8, 27, 11, 27, 12, 27, - 194, 1, 27, 1, 27, 0, 0, 28, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, - 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, - 17, 35, 0, 37, 0, 39, 18, 41, 19, 43, 20, 45, 0, 47, 0, 49, 0, 51, 0, 53, - 0, 55, 21, 1, 0, 8, 1, 0, 48, 57, 3, 0, 65, 90, 95, 95, 97, 122, 1, 0, - 49, 57, 9, 0, 34, 34, 39, 39, 47, 47, 92, 92, 98, 98, 102, 102, 110, 110, - 114, 114, 116, 116, 3, 0, 48, 57, 65, 70, 97, 102, 3, 0, 0, 31, 39, 39, - 92, 92, 3, 0, 0, 31, 34, 34, 92, 92, 3, 0, 9, 10, 13, 13, 32, 32, 205, - 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, - 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, - 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, - 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, - 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, - 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 1, 57, 1, 0, 0, 0, 3, 61, 1, 0, 0, 0, 5, - 76, 1, 0, 0, 0, 7, 78, 1, 0, 0, 0, 9, 82, 1, 0, 0, 0, 11, 85, 1, 0, 0, - 0, 13, 88, 1, 0, 0, 0, 15, 92, 1, 0, 0, 0, 17, 99, 1, 0, 0, 0, 19, 104, - 1, 0, 0, 0, 21, 111, 1, 0, 0, 0, 23, 113, 1, 0, 0, 0, 25, 118, 1, 0, 0, - 0, 27, 127, 1, 0, 0, 0, 29, 129, 1, 0, 0, 0, 31, 131, 1, 0, 0, 0, 33, 133, - 1, 0, 0, 0, 35, 141, 1, 0, 0, 0, 37, 143, 1, 0, 0, 0, 39, 145, 1, 0, 0, - 0, 41, 152, 1, 0, 0, 0, 43, 172, 1, 0, 0, 0, 45, 174, 1, 0, 0, 0, 47, 179, - 1, 0, 0, 0, 49, 185, 1, 0, 0, 0, 51, 187, 1, 0, 0, 0, 53, 189, 1, 0, 0, - 0, 55, 192, 1, 0, 0, 0, 57, 58, 5, 65, 0, 0, 58, 59, 5, 78, 0, 0, 59, 60, - 5, 68, 0, 0, 60, 2, 1, 0, 0, 0, 61, 62, 5, 79, 0, 0, 62, 63, 5, 82, 0, - 0, 63, 4, 1, 0, 0, 0, 64, 65, 5, 69, 0, 0, 65, 77, 5, 81, 0, 0, 66, 67, - 5, 78, 0, 0, 67, 77, 5, 69, 0, 0, 68, 69, 5, 71, 0, 0, 69, 77, 5, 69, 0, - 0, 70, 71, 5, 71, 0, 0, 71, 77, 5, 84, 0, 0, 72, 73, 5, 76, 0, 0, 73, 77, - 5, 84, 0, 0, 74, 75, 5, 76, 0, 0, 75, 77, 5, 69, 0, 0, 76, 64, 1, 0, 0, - 0, 76, 66, 1, 0, 0, 0, 76, 68, 1, 0, 0, 0, 76, 70, 1, 0, 0, 0, 76, 72, - 1, 0, 0, 0, 76, 74, 1, 0, 0, 0, 77, 6, 1, 0, 0, 0, 78, 79, 5, 82, 0, 0, - 79, 80, 5, 69, 0, 0, 80, 81, 5, 80, 0, 0, 81, 8, 1, 0, 0, 0, 82, 83, 5, - 73, 0, 0, 83, 84, 5, 78, 0, 0, 84, 10, 1, 0, 0, 0, 85, 86, 5, 65, 0, 0, - 86, 87, 5, 83, 0, 0, 87, 12, 1, 0, 0, 0, 88, 89, 5, 67, 0, 0, 89, 90, 5, - 66, 0, 0, 90, 91, 5, 70, 0, 0, 91, 14, 1, 0, 0, 0, 92, 93, 5, 83, 0, 0, - 93, 94, 5, 69, 0, 0, 94, 95, 5, 76, 0, 0, 95, 96, 5, 69, 0, 0, 96, 97, - 5, 67, 0, 0, 97, 98, 5, 84, 0, 0, 98, 16, 1, 0, 0, 0, 99, 100, 5, 70, 0, - 0, 100, 101, 5, 82, 0, 0, 101, 102, 5, 79, 0, 0, 102, 103, 5, 77, 0, 0, - 103, 18, 1, 0, 0, 0, 104, 105, 5, 70, 0, 0, 105, 106, 5, 73, 0, 0, 106, - 107, 5, 76, 0, 0, 107, 108, 5, 84, 0, 0, 108, 109, 5, 69, 0, 0, 109, 110, - 5, 82, 0, 0, 110, 20, 1, 0, 0, 0, 111, 112, 5, 42, 0, 0, 112, 22, 1, 0, - 0, 0, 113, 114, 5, 83, 0, 0, 114, 115, 5, 65, 0, 0, 115, 116, 5, 77, 0, - 0, 116, 117, 5, 69, 0, 0, 117, 24, 1, 0, 0, 0, 118, 119, 5, 68, 0, 0, 119, - 120, 5, 73, 0, 0, 120, 121, 5, 83, 0, 0, 121, 122, 5, 84, 0, 0, 122, 123, - 5, 73, 0, 0, 123, 124, 5, 78, 0, 0, 124, 125, 5, 67, 0, 0, 125, 126, 5, - 84, 0, 0, 126, 26, 1, 0, 0, 0, 127, 128, 5, 40, 0, 0, 128, 28, 1, 0, 0, - 0, 129, 130, 5, 41, 0, 0, 130, 30, 1, 0, 0, 0, 131, 132, 5, 64, 0, 0, 132, - 32, 1, 0, 0, 0, 133, 138, 3, 37, 18, 0, 134, 137, 3, 35, 17, 0, 135, 137, - 3, 37, 18, 0, 136, 134, 1, 0, 0, 0, 136, 135, 1, 0, 0, 0, 137, 140, 1, - 0, 0, 0, 138, 136, 1, 0, 0, 0, 138, 139, 1, 0, 0, 0, 139, 34, 1, 0, 0, - 0, 140, 138, 1, 0, 0, 0, 141, 142, 7, 0, 0, 0, 142, 36, 1, 0, 0, 0, 143, - 144, 7, 1, 0, 0, 144, 38, 1, 0, 0, 0, 145, 149, 7, 2, 0, 0, 146, 148, 3, - 35, 17, 0, 147, 146, 1, 0, 0, 0, 148, 151, 1, 0, 0, 0, 149, 147, 1, 0, - 0, 0, 149, 150, 1, 0, 0, 0, 150, 40, 1, 0, 0, 0, 151, 149, 1, 0, 0, 0, - 152, 153, 5, 48, 0, 0, 153, 42, 1, 0, 0, 0, 154, 159, 5, 34, 0, 0, 155, - 158, 3, 45, 22, 0, 156, 158, 3, 53, 26, 0, 157, 155, 1, 0, 0, 0, 157, 156, - 1, 0, 0, 0, 158, 161, 1, 0, 0, 0, 159, 157, 1, 0, 0, 0, 159, 160, 1, 0, - 0, 0, 160, 162, 1, 0, 0, 0, 161, 159, 1, 0, 0, 0, 162, 173, 5, 34, 0, 0, - 163, 168, 5, 39, 0, 0, 164, 167, 3, 45, 22, 0, 165, 167, 3, 51, 25, 0, - 166, 164, 1, 0, 0, 0, 166, 165, 1, 0, 0, 0, 167, 170, 1, 0, 0, 0, 168, - 166, 1, 0, 0, 0, 168, 169, 1, 0, 0, 0, 169, 171, 1, 0, 0, 0, 170, 168, - 1, 0, 0, 0, 171, 173, 5, 39, 0, 0, 172, 154, 1, 0, 0, 0, 172, 163, 1, 0, - 0, 0, 173, 44, 1, 0, 0, 0, 174, 177, 5, 92, 0, 0, 175, 178, 7, 3, 0, 0, - 176, 178, 3, 47, 23, 0, 177, 175, 1, 0, 0, 0, 177, 176, 1, 0, 0, 0, 178, - 46, 1, 0, 0, 0, 179, 180, 5, 117, 0, 0, 180, 181, 3, 49, 24, 0, 181, 182, - 3, 49, 24, 0, 182, 183, 3, 49, 24, 0, 183, 184, 3, 49, 24, 0, 184, 48, - 1, 0, 0, 0, 185, 186, 7, 4, 0, 0, 186, 50, 1, 0, 0, 0, 187, 188, 8, 5, - 0, 0, 188, 52, 1, 0, 0, 0, 189, 190, 8, 6, 0, 0, 190, 54, 1, 0, 0, 0, 191, - 193, 7, 7, 0, 0, 192, 191, 1, 0, 0, 0, 193, 194, 1, 0, 0, 0, 194, 192, - 1, 0, 0, 0, 194, 195, 1, 0, 0, 0, 195, 196, 1, 0, 0, 0, 196, 197, 6, 27, - 0, 0, 197, 56, 1, 0, 0, 0, 12, 0, 76, 136, 138, 149, 157, 159, 166, 168, - 172, 177, 194, 1, 6, 0, 0, + 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, + 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 83, 8, 3, 1, 4, 1, 4, 1, 4, 1, + 4, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, + 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, + 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, + 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, + 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 5, 17, + 143, 8, 17, 10, 17, 12, 17, 146, 9, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, + 20, 1, 20, 5, 20, 154, 8, 20, 10, 20, 12, 20, 157, 9, 20, 1, 21, 1, 21, + 1, 22, 1, 22, 1, 22, 5, 22, 164, 8, 22, 10, 22, 12, 22, 167, 9, 22, 1, + 22, 1, 22, 1, 22, 1, 22, 5, 22, 173, 8, 22, 10, 22, 12, 22, 176, 9, 22, + 1, 22, 3, 22, 179, 8, 22, 1, 23, 1, 23, 1, 23, 3, 23, 184, 8, 23, 1, 24, + 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, + 27, 1, 28, 4, 28, 199, 8, 28, 11, 28, 12, 28, 200, 1, 28, 1, 28, 0, 0, + 29, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, + 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 0, 39, + 0, 41, 19, 43, 20, 45, 21, 47, 0, 49, 0, 51, 0, 53, 0, 55, 0, 57, 22, 1, + 0, 8, 1, 0, 48, 57, 3, 0, 65, 90, 95, 95, 97, 122, 1, 0, 49, 57, 9, 0, + 34, 34, 39, 39, 47, 47, 92, 92, 98, 98, 102, 102, 110, 110, 114, 114, 116, + 116, 3, 0, 48, 57, 65, 70, 97, 102, 3, 0, 0, 31, 39, 39, 92, 92, 3, 0, + 0, 31, 34, 34, 92, 92, 3, 0, 9, 10, 13, 13, 32, 32, 211, 0, 1, 1, 0, 0, + 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, + 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, + 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, + 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, + 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, + 45, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 1, 59, 1, 0, 0, 0, 3, 63, 1, 0, 0, 0, + 5, 67, 1, 0, 0, 0, 7, 82, 1, 0, 0, 0, 9, 84, 1, 0, 0, 0, 11, 88, 1, 0, + 0, 0, 13, 91, 1, 0, 0, 0, 15, 94, 1, 0, 0, 0, 17, 98, 1, 0, 0, 0, 19, 105, + 1, 0, 0, 0, 21, 110, 1, 0, 0, 0, 23, 117, 1, 0, 0, 0, 25, 119, 1, 0, 0, + 0, 27, 124, 1, 0, 0, 0, 29, 133, 1, 0, 0, 0, 31, 135, 1, 0, 0, 0, 33, 137, + 1, 0, 0, 0, 35, 139, 1, 0, 0, 0, 37, 147, 1, 0, 0, 0, 39, 149, 1, 0, 0, + 0, 41, 151, 1, 0, 0, 0, 43, 158, 1, 0, 0, 0, 45, 178, 1, 0, 0, 0, 47, 180, + 1, 0, 0, 0, 49, 185, 1, 0, 0, 0, 51, 191, 1, 0, 0, 0, 53, 193, 1, 0, 0, + 0, 55, 195, 1, 0, 0, 0, 57, 198, 1, 0, 0, 0, 59, 60, 5, 78, 0, 0, 60, 61, + 5, 79, 0, 0, 61, 62, 5, 84, 0, 0, 62, 2, 1, 0, 0, 0, 63, 64, 5, 65, 0, + 0, 64, 65, 5, 78, 0, 0, 65, 66, 5, 68, 0, 0, 66, 4, 1, 0, 0, 0, 67, 68, + 5, 79, 0, 0, 68, 69, 5, 82, 0, 0, 69, 6, 1, 0, 0, 0, 70, 71, 5, 69, 0, + 0, 71, 83, 5, 81, 0, 0, 72, 73, 5, 78, 0, 0, 73, 83, 5, 69, 0, 0, 74, 75, + 5, 71, 0, 0, 75, 83, 5, 69, 0, 0, 76, 77, 5, 71, 0, 0, 77, 83, 5, 84, 0, + 0, 78, 79, 5, 76, 0, 0, 79, 83, 5, 84, 0, 0, 80, 81, 5, 76, 0, 0, 81, 83, + 5, 69, 0, 0, 82, 70, 1, 0, 0, 0, 82, 72, 1, 0, 0, 0, 82, 74, 1, 0, 0, 0, + 82, 76, 1, 0, 0, 0, 82, 78, 1, 0, 0, 0, 82, 80, 1, 0, 0, 0, 83, 8, 1, 0, + 0, 0, 84, 85, 5, 82, 0, 0, 85, 86, 5, 69, 0, 0, 86, 87, 5, 80, 0, 0, 87, + 10, 1, 0, 0, 0, 88, 89, 5, 73, 0, 0, 89, 90, 5, 78, 0, 0, 90, 12, 1, 0, + 0, 0, 91, 92, 5, 65, 0, 0, 92, 93, 5, 83, 0, 0, 93, 14, 1, 0, 0, 0, 94, + 95, 5, 67, 0, 0, 95, 96, 5, 66, 0, 0, 96, 97, 5, 70, 0, 0, 97, 16, 1, 0, + 0, 0, 98, 99, 5, 83, 0, 0, 99, 100, 5, 69, 0, 0, 100, 101, 5, 76, 0, 0, + 101, 102, 5, 69, 0, 0, 102, 103, 5, 67, 0, 0, 103, 104, 5, 84, 0, 0, 104, + 18, 1, 0, 0, 0, 105, 106, 5, 70, 0, 0, 106, 107, 5, 82, 0, 0, 107, 108, + 5, 79, 0, 0, 108, 109, 5, 77, 0, 0, 109, 20, 1, 0, 0, 0, 110, 111, 5, 70, + 0, 0, 111, 112, 5, 73, 0, 0, 112, 113, 5, 76, 0, 0, 113, 114, 5, 84, 0, + 0, 114, 115, 5, 69, 0, 0, 115, 116, 5, 82, 0, 0, 116, 22, 1, 0, 0, 0, 117, + 118, 5, 42, 0, 0, 118, 24, 1, 0, 0, 0, 119, 120, 5, 83, 0, 0, 120, 121, + 5, 65, 0, 0, 121, 122, 5, 77, 0, 0, 122, 123, 5, 69, 0, 0, 123, 26, 1, + 0, 0, 0, 124, 125, 5, 68, 0, 0, 125, 126, 5, 73, 0, 0, 126, 127, 5, 83, + 0, 0, 127, 128, 5, 84, 0, 0, 128, 129, 5, 73, 0, 0, 129, 130, 5, 78, 0, + 0, 130, 131, 5, 67, 0, 0, 131, 132, 5, 84, 0, 0, 132, 28, 1, 0, 0, 0, 133, + 134, 5, 40, 0, 0, 134, 30, 1, 0, 0, 0, 135, 136, 5, 41, 0, 0, 136, 32, + 1, 0, 0, 0, 137, 138, 5, 64, 0, 0, 138, 34, 1, 0, 0, 0, 139, 144, 3, 39, + 19, 0, 140, 143, 3, 37, 18, 0, 141, 143, 3, 39, 19, 0, 142, 140, 1, 0, + 0, 0, 142, 141, 1, 0, 0, 0, 143, 146, 1, 0, 0, 0, 144, 142, 1, 0, 0, 0, + 144, 145, 1, 0, 0, 0, 145, 36, 1, 0, 0, 0, 146, 144, 1, 0, 0, 0, 147, 148, + 7, 0, 0, 0, 148, 38, 1, 0, 0, 0, 149, 150, 7, 1, 0, 0, 150, 40, 1, 0, 0, + 0, 151, 155, 7, 2, 0, 0, 152, 154, 3, 37, 18, 0, 153, 152, 1, 0, 0, 0, + 154, 157, 1, 0, 0, 0, 155, 153, 1, 0, 0, 0, 155, 156, 1, 0, 0, 0, 156, + 42, 1, 0, 0, 0, 157, 155, 1, 0, 0, 0, 158, 159, 5, 48, 0, 0, 159, 44, 1, + 0, 0, 0, 160, 165, 5, 34, 0, 0, 161, 164, 3, 47, 23, 0, 162, 164, 3, 55, + 27, 0, 163, 161, 1, 0, 0, 0, 163, 162, 1, 0, 0, 0, 164, 167, 1, 0, 0, 0, + 165, 163, 1, 0, 0, 0, 165, 166, 1, 0, 0, 0, 166, 168, 1, 0, 0, 0, 167, + 165, 1, 0, 0, 0, 168, 179, 5, 34, 0, 0, 169, 174, 5, 39, 0, 0, 170, 173, + 3, 47, 23, 0, 171, 173, 3, 53, 26, 0, 172, 170, 1, 0, 0, 0, 172, 171, 1, + 0, 0, 0, 173, 176, 1, 0, 0, 0, 174, 172, 1, 0, 0, 0, 174, 175, 1, 0, 0, + 0, 175, 177, 1, 0, 0, 0, 176, 174, 1, 0, 0, 0, 177, 179, 5, 39, 0, 0, 178, + 160, 1, 0, 0, 0, 178, 169, 1, 0, 0, 0, 179, 46, 1, 0, 0, 0, 180, 183, 5, + 92, 0, 0, 181, 184, 7, 3, 0, 0, 182, 184, 3, 49, 24, 0, 183, 181, 1, 0, + 0, 0, 183, 182, 1, 0, 0, 0, 184, 48, 1, 0, 0, 0, 185, 186, 5, 117, 0, 0, + 186, 187, 3, 51, 25, 0, 187, 188, 3, 51, 25, 0, 188, 189, 3, 51, 25, 0, + 189, 190, 3, 51, 25, 0, 190, 50, 1, 0, 0, 0, 191, 192, 7, 4, 0, 0, 192, + 52, 1, 0, 0, 0, 193, 194, 8, 5, 0, 0, 194, 54, 1, 0, 0, 0, 195, 196, 8, + 6, 0, 0, 196, 56, 1, 0, 0, 0, 197, 199, 7, 7, 0, 0, 198, 197, 1, 0, 0, + 0, 199, 200, 1, 0, 0, 0, 200, 198, 1, 0, 0, 0, 200, 201, 1, 0, 0, 0, 201, + 202, 1, 0, 0, 0, 202, 203, 6, 28, 0, 0, 203, 58, 1, 0, 0, 0, 12, 0, 82, + 142, 144, 155, 163, 165, 172, 174, 178, 183, 200, 1, 6, 0, 0, } deserializer := antlr.NewATNDeserializer(nil) staticData.atn = deserializer.Deserialize(staticData.serializedATN) @@ -190,25 +192,26 @@ func NewQueryLexer(input antlr.CharStream) *QueryLexer { // QueryLexer tokens. const ( - QueryLexerAND_OP = 1 - QueryLexerOR_OP = 2 - QueryLexerSIMPLE_OP = 3 - QueryLexerREP = 4 - QueryLexerIN = 5 - QueryLexerAS = 6 - QueryLexerCBF = 7 - QueryLexerSELECT = 8 - QueryLexerFROM = 9 - QueryLexerFILTER = 10 - QueryLexerWILDCARD = 11 - QueryLexerCLAUSE_SAME = 12 - QueryLexerCLAUSE_DISTINCT = 13 - QueryLexerL_PAREN = 14 - QueryLexerR_PAREN = 15 - QueryLexerAT = 16 - QueryLexerIDENT = 17 - QueryLexerNUMBER1 = 18 - QueryLexerZERO = 19 - QueryLexerSTRING = 20 - QueryLexerWS = 21 + QueryLexerNOT_OP = 1 + QueryLexerAND_OP = 2 + QueryLexerOR_OP = 3 + QueryLexerSIMPLE_OP = 4 + QueryLexerREP = 5 + QueryLexerIN = 6 + QueryLexerAS = 7 + QueryLexerCBF = 8 + QueryLexerSELECT = 9 + QueryLexerFROM = 10 + QueryLexerFILTER = 11 + QueryLexerWILDCARD = 12 + QueryLexerCLAUSE_SAME = 13 + QueryLexerCLAUSE_DISTINCT = 14 + QueryLexerL_PAREN = 15 + QueryLexerR_PAREN = 16 + QueryLexerAT = 17 + QueryLexerIDENT = 18 + QueryLexerNUMBER1 = 19 + QueryLexerZERO = 20 + QueryLexerSTRING = 21 + QueryLexerWS = 22 ) diff --git a/netmap/parser/query_parser.go b/netmap/parser/query_parser.go index 08d40b8..9f6e74a 100644 --- a/netmap/parser/query_parser.go +++ b/netmap/parser/query_parser.go @@ -33,14 +33,14 @@ var queryParserStaticData struct { func queryParserInit() { staticData := &queryParserStaticData staticData.literalNames = []string{ - "", "'AND'", "'OR'", "", "'REP'", "'IN'", "'AS'", "'CBF'", "'SELECT'", - "'FROM'", "'FILTER'", "'*'", "'SAME'", "'DISTINCT'", "'('", "')'", "'@'", - "", "", "'0'", + "", "'NOT'", "'AND'", "'OR'", "", "'REP'", "'IN'", "'AS'", "'CBF'", + "'SELECT'", "'FROM'", "'FILTER'", "'*'", "'SAME'", "'DISTINCT'", "'('", + "')'", "'@'", "", "", "'0'", } staticData.symbolicNames = []string{ - "", "AND_OP", "OR_OP", "SIMPLE_OP", "REP", "IN", "AS", "CBF", "SELECT", - "FROM", "FILTER", "WILDCARD", "CLAUSE_SAME", "CLAUSE_DISTINCT", "L_PAREN", - "R_PAREN", "AT", "IDENT", "NUMBER1", "ZERO", "STRING", "WS", + "", "NOT_OP", "AND_OP", "OR_OP", "SIMPLE_OP", "REP", "IN", "AS", "CBF", + "SELECT", "FROM", "FILTER", "WILDCARD", "CLAUSE_SAME", "CLAUSE_DISTINCT", + "L_PAREN", "R_PAREN", "AT", "IDENT", "NUMBER1", "ZERO", "STRING", "WS", } staticData.ruleNames = []string{ "policy", "repStmt", "cbfStmt", "selectStmt", "clause", "filterExpr", @@ -49,60 +49,62 @@ func queryParserInit() { } staticData.predictionContextCache = antlr.NewPredictionContextCache() staticData.serializedATN = []int32{ - 4, 1, 21, 130, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, + 4, 1, 22, 135, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 1, 0, 4, 0, 30, 8, 0, 11, 0, 12, 0, 31, 1, 0, 3, 0, 35, 8, 0, 1, 0, 5, 0, 38, 8, 0, 10, 0, 12, 0, 41, 9, 0, 1, 0, 5, 0, 44, 8, 0, 10, 0, 12, 0, 47, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 55, 8, 1, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 64, 8, 3, 1, 3, 3, 3, 67, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, - 3, 73, 8, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 83, - 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 91, 8, 5, 10, 5, 12, 5, - 94, 9, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, - 7, 3, 7, 107, 8, 7, 1, 8, 1, 8, 3, 8, 111, 8, 8, 1, 9, 1, 9, 1, 9, 3, 9, - 116, 8, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 3, 12, 124, 8, 12, - 1, 13, 1, 13, 3, 13, 128, 8, 13, 1, 13, 0, 1, 10, 14, 0, 2, 4, 6, 8, 10, - 12, 14, 16, 18, 20, 22, 24, 26, 0, 3, 1, 0, 12, 13, 1, 0, 18, 19, 2, 0, - 4, 6, 8, 10, 132, 0, 29, 1, 0, 0, 0, 2, 50, 1, 0, 0, 0, 4, 56, 1, 0, 0, - 0, 6, 59, 1, 0, 0, 0, 8, 74, 1, 0, 0, 0, 10, 82, 1, 0, 0, 0, 12, 95, 1, - 0, 0, 0, 14, 106, 1, 0, 0, 0, 16, 110, 1, 0, 0, 0, 18, 115, 1, 0, 0, 0, - 20, 117, 1, 0, 0, 0, 22, 119, 1, 0, 0, 0, 24, 123, 1, 0, 0, 0, 26, 127, - 1, 0, 0, 0, 28, 30, 3, 2, 1, 0, 29, 28, 1, 0, 0, 0, 30, 31, 1, 0, 0, 0, - 31, 29, 1, 0, 0, 0, 31, 32, 1, 0, 0, 0, 32, 34, 1, 0, 0, 0, 33, 35, 3, - 4, 2, 0, 34, 33, 1, 0, 0, 0, 34, 35, 1, 0, 0, 0, 35, 39, 1, 0, 0, 0, 36, - 38, 3, 6, 3, 0, 37, 36, 1, 0, 0, 0, 38, 41, 1, 0, 0, 0, 39, 37, 1, 0, 0, - 0, 39, 40, 1, 0, 0, 0, 40, 45, 1, 0, 0, 0, 41, 39, 1, 0, 0, 0, 42, 44, - 3, 12, 6, 0, 43, 42, 1, 0, 0, 0, 44, 47, 1, 0, 0, 0, 45, 43, 1, 0, 0, 0, - 45, 46, 1, 0, 0, 0, 46, 48, 1, 0, 0, 0, 47, 45, 1, 0, 0, 0, 48, 49, 5, - 0, 0, 1, 49, 1, 1, 0, 0, 0, 50, 51, 5, 4, 0, 0, 51, 54, 5, 18, 0, 0, 52, - 53, 5, 5, 0, 0, 53, 55, 3, 24, 12, 0, 54, 52, 1, 0, 0, 0, 54, 55, 1, 0, - 0, 0, 55, 3, 1, 0, 0, 0, 56, 57, 5, 7, 0, 0, 57, 58, 5, 18, 0, 0, 58, 5, - 1, 0, 0, 0, 59, 60, 5, 8, 0, 0, 60, 66, 5, 18, 0, 0, 61, 63, 5, 5, 0, 0, - 62, 64, 3, 8, 4, 0, 63, 62, 1, 0, 0, 0, 63, 64, 1, 0, 0, 0, 64, 65, 1, - 0, 0, 0, 65, 67, 3, 24, 12, 0, 66, 61, 1, 0, 0, 0, 66, 67, 1, 0, 0, 0, - 67, 68, 1, 0, 0, 0, 68, 69, 5, 9, 0, 0, 69, 72, 3, 26, 13, 0, 70, 71, 5, - 6, 0, 0, 71, 73, 3, 24, 12, 0, 72, 70, 1, 0, 0, 0, 72, 73, 1, 0, 0, 0, - 73, 7, 1, 0, 0, 0, 74, 75, 7, 0, 0, 0, 75, 9, 1, 0, 0, 0, 76, 77, 6, 5, - -1, 0, 77, 78, 5, 14, 0, 0, 78, 79, 3, 10, 5, 0, 79, 80, 5, 15, 0, 0, 80, - 83, 1, 0, 0, 0, 81, 83, 3, 14, 7, 0, 82, 76, 1, 0, 0, 0, 82, 81, 1, 0, - 0, 0, 83, 92, 1, 0, 0, 0, 84, 85, 10, 4, 0, 0, 85, 86, 5, 1, 0, 0, 86, - 91, 3, 10, 5, 5, 87, 88, 10, 3, 0, 0, 88, 89, 5, 2, 0, 0, 89, 91, 3, 10, - 5, 4, 90, 84, 1, 0, 0, 0, 90, 87, 1, 0, 0, 0, 91, 94, 1, 0, 0, 0, 92, 90, - 1, 0, 0, 0, 92, 93, 1, 0, 0, 0, 93, 11, 1, 0, 0, 0, 94, 92, 1, 0, 0, 0, - 95, 96, 5, 10, 0, 0, 96, 97, 3, 10, 5, 0, 97, 98, 5, 6, 0, 0, 98, 99, 3, - 24, 12, 0, 99, 13, 1, 0, 0, 0, 100, 101, 5, 16, 0, 0, 101, 107, 3, 24, - 12, 0, 102, 103, 3, 16, 8, 0, 103, 104, 5, 3, 0, 0, 104, 105, 3, 18, 9, - 0, 105, 107, 1, 0, 0, 0, 106, 100, 1, 0, 0, 0, 106, 102, 1, 0, 0, 0, 107, - 15, 1, 0, 0, 0, 108, 111, 3, 24, 12, 0, 109, 111, 5, 20, 0, 0, 110, 108, - 1, 0, 0, 0, 110, 109, 1, 0, 0, 0, 111, 17, 1, 0, 0, 0, 112, 116, 3, 24, - 12, 0, 113, 116, 3, 20, 10, 0, 114, 116, 5, 20, 0, 0, 115, 112, 1, 0, 0, - 0, 115, 113, 1, 0, 0, 0, 115, 114, 1, 0, 0, 0, 116, 19, 1, 0, 0, 0, 117, - 118, 7, 1, 0, 0, 118, 21, 1, 0, 0, 0, 119, 120, 7, 2, 0, 0, 120, 23, 1, - 0, 0, 0, 121, 124, 3, 22, 11, 0, 122, 124, 5, 17, 0, 0, 123, 121, 1, 0, - 0, 0, 123, 122, 1, 0, 0, 0, 124, 25, 1, 0, 0, 0, 125, 128, 3, 24, 12, 0, - 126, 128, 5, 11, 0, 0, 127, 125, 1, 0, 0, 0, 127, 126, 1, 0, 0, 0, 128, - 27, 1, 0, 0, 0, 16, 31, 34, 39, 45, 54, 63, 66, 72, 82, 90, 92, 106, 110, - 115, 123, 127, + 3, 73, 8, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, + 1, 5, 1, 5, 1, 5, 3, 5, 88, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, + 5, 96, 8, 5, 10, 5, 12, 5, 99, 9, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, + 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 112, 8, 7, 1, 8, 1, 8, 3, 8, 116, 8, + 8, 1, 9, 1, 9, 1, 9, 3, 9, 121, 8, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, + 1, 12, 3, 12, 129, 8, 12, 1, 13, 1, 13, 3, 13, 133, 8, 13, 1, 13, 0, 1, + 10, 14, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 0, 3, 1, 0, + 13, 14, 1, 0, 19, 20, 2, 0, 5, 7, 9, 11, 138, 0, 29, 1, 0, 0, 0, 2, 50, + 1, 0, 0, 0, 4, 56, 1, 0, 0, 0, 6, 59, 1, 0, 0, 0, 8, 74, 1, 0, 0, 0, 10, + 87, 1, 0, 0, 0, 12, 100, 1, 0, 0, 0, 14, 111, 1, 0, 0, 0, 16, 115, 1, 0, + 0, 0, 18, 120, 1, 0, 0, 0, 20, 122, 1, 0, 0, 0, 22, 124, 1, 0, 0, 0, 24, + 128, 1, 0, 0, 0, 26, 132, 1, 0, 0, 0, 28, 30, 3, 2, 1, 0, 29, 28, 1, 0, + 0, 0, 30, 31, 1, 0, 0, 0, 31, 29, 1, 0, 0, 0, 31, 32, 1, 0, 0, 0, 32, 34, + 1, 0, 0, 0, 33, 35, 3, 4, 2, 0, 34, 33, 1, 0, 0, 0, 34, 35, 1, 0, 0, 0, + 35, 39, 1, 0, 0, 0, 36, 38, 3, 6, 3, 0, 37, 36, 1, 0, 0, 0, 38, 41, 1, + 0, 0, 0, 39, 37, 1, 0, 0, 0, 39, 40, 1, 0, 0, 0, 40, 45, 1, 0, 0, 0, 41, + 39, 1, 0, 0, 0, 42, 44, 3, 12, 6, 0, 43, 42, 1, 0, 0, 0, 44, 47, 1, 0, + 0, 0, 45, 43, 1, 0, 0, 0, 45, 46, 1, 0, 0, 0, 46, 48, 1, 0, 0, 0, 47, 45, + 1, 0, 0, 0, 48, 49, 5, 0, 0, 1, 49, 1, 1, 0, 0, 0, 50, 51, 5, 5, 0, 0, + 51, 54, 5, 19, 0, 0, 52, 53, 5, 6, 0, 0, 53, 55, 3, 24, 12, 0, 54, 52, + 1, 0, 0, 0, 54, 55, 1, 0, 0, 0, 55, 3, 1, 0, 0, 0, 56, 57, 5, 8, 0, 0, + 57, 58, 5, 19, 0, 0, 58, 5, 1, 0, 0, 0, 59, 60, 5, 9, 0, 0, 60, 66, 5, + 19, 0, 0, 61, 63, 5, 6, 0, 0, 62, 64, 3, 8, 4, 0, 63, 62, 1, 0, 0, 0, 63, + 64, 1, 0, 0, 0, 64, 65, 1, 0, 0, 0, 65, 67, 3, 24, 12, 0, 66, 61, 1, 0, + 0, 0, 66, 67, 1, 0, 0, 0, 67, 68, 1, 0, 0, 0, 68, 69, 5, 10, 0, 0, 69, + 72, 3, 26, 13, 0, 70, 71, 5, 7, 0, 0, 71, 73, 3, 24, 12, 0, 72, 70, 1, + 0, 0, 0, 72, 73, 1, 0, 0, 0, 73, 7, 1, 0, 0, 0, 74, 75, 7, 0, 0, 0, 75, + 9, 1, 0, 0, 0, 76, 77, 6, 5, -1, 0, 77, 78, 5, 1, 0, 0, 78, 79, 5, 15, + 0, 0, 79, 80, 3, 10, 5, 0, 80, 81, 5, 16, 0, 0, 81, 88, 1, 0, 0, 0, 82, + 83, 5, 15, 0, 0, 83, 84, 3, 10, 5, 0, 84, 85, 5, 16, 0, 0, 85, 88, 1, 0, + 0, 0, 86, 88, 3, 14, 7, 0, 87, 76, 1, 0, 0, 0, 87, 82, 1, 0, 0, 0, 87, + 86, 1, 0, 0, 0, 88, 97, 1, 0, 0, 0, 89, 90, 10, 4, 0, 0, 90, 91, 5, 2, + 0, 0, 91, 96, 3, 10, 5, 5, 92, 93, 10, 3, 0, 0, 93, 94, 5, 3, 0, 0, 94, + 96, 3, 10, 5, 4, 95, 89, 1, 0, 0, 0, 95, 92, 1, 0, 0, 0, 96, 99, 1, 0, + 0, 0, 97, 95, 1, 0, 0, 0, 97, 98, 1, 0, 0, 0, 98, 11, 1, 0, 0, 0, 99, 97, + 1, 0, 0, 0, 100, 101, 5, 11, 0, 0, 101, 102, 3, 10, 5, 0, 102, 103, 5, + 7, 0, 0, 103, 104, 3, 24, 12, 0, 104, 13, 1, 0, 0, 0, 105, 106, 5, 17, + 0, 0, 106, 112, 3, 24, 12, 0, 107, 108, 3, 16, 8, 0, 108, 109, 5, 4, 0, + 0, 109, 110, 3, 18, 9, 0, 110, 112, 1, 0, 0, 0, 111, 105, 1, 0, 0, 0, 111, + 107, 1, 0, 0, 0, 112, 15, 1, 0, 0, 0, 113, 116, 3, 24, 12, 0, 114, 116, + 5, 21, 0, 0, 115, 113, 1, 0, 0, 0, 115, 114, 1, 0, 0, 0, 116, 17, 1, 0, + 0, 0, 117, 121, 3, 24, 12, 0, 118, 121, 3, 20, 10, 0, 119, 121, 5, 21, + 0, 0, 120, 117, 1, 0, 0, 0, 120, 118, 1, 0, 0, 0, 120, 119, 1, 0, 0, 0, + 121, 19, 1, 0, 0, 0, 122, 123, 7, 1, 0, 0, 123, 21, 1, 0, 0, 0, 124, 125, + 7, 2, 0, 0, 125, 23, 1, 0, 0, 0, 126, 129, 3, 22, 11, 0, 127, 129, 5, 18, + 0, 0, 128, 126, 1, 0, 0, 0, 128, 127, 1, 0, 0, 0, 129, 25, 1, 0, 0, 0, + 130, 133, 3, 24, 12, 0, 131, 133, 5, 12, 0, 0, 132, 130, 1, 0, 0, 0, 132, + 131, 1, 0, 0, 0, 133, 27, 1, 0, 0, 0, 16, 31, 34, 39, 45, 54, 63, 66, 72, + 87, 95, 97, 111, 115, 120, 128, 132, } deserializer := antlr.NewATNDeserializer(nil) staticData.atn = deserializer.Deserialize(staticData.serializedATN) @@ -141,27 +143,28 @@ func NewQuery(input antlr.TokenStream) *Query { // Query tokens. const ( QueryEOF = antlr.TokenEOF - QueryAND_OP = 1 - QueryOR_OP = 2 - QuerySIMPLE_OP = 3 - QueryREP = 4 - QueryIN = 5 - QueryAS = 6 - QueryCBF = 7 - QuerySELECT = 8 - QueryFROM = 9 - QueryFILTER = 10 - QueryWILDCARD = 11 - QueryCLAUSE_SAME = 12 - QueryCLAUSE_DISTINCT = 13 - QueryL_PAREN = 14 - QueryR_PAREN = 15 - QueryAT = 16 - QueryIDENT = 17 - QueryNUMBER1 = 18 - QueryZERO = 19 - QuerySTRING = 20 - QueryWS = 21 + QueryNOT_OP = 1 + QueryAND_OP = 2 + QueryOR_OP = 3 + QuerySIMPLE_OP = 4 + QueryREP = 5 + QueryIN = 6 + QueryAS = 7 + QueryCBF = 8 + QuerySELECT = 9 + QueryFROM = 10 + QueryFILTER = 11 + QueryWILDCARD = 12 + QueryCLAUSE_SAME = 13 + QueryCLAUSE_DISTINCT = 14 + QueryL_PAREN = 15 + QueryR_PAREN = 16 + QueryAT = 17 + QueryIDENT = 18 + QueryNUMBER1 = 19 + QueryZERO = 20 + QuerySTRING = 21 + QueryWS = 22 ) // Query rules. @@ -1209,6 +1212,7 @@ type IFilterExprContext interface { // Getter signatures L_PAREN() antlr.TerminalNode R_PAREN() antlr.TerminalNode + NOT_OP() antlr.TerminalNode AllFilterExpr() []IFilterExprContext FilterExpr(i int) IFilterExprContext Expr() IExprContext @@ -1223,8 +1227,8 @@ type FilterExprContext struct { *antlr.BaseParserRuleContext parser antlr.Parser F1 IFilterExprContext - Inner IFilterExprContext Op antlr.Token + Inner IFilterExprContext F2 IFilterExprContext } @@ -1274,6 +1278,10 @@ func (s *FilterExprContext) R_PAREN() antlr.TerminalNode { return s.GetToken(QueryR_PAREN, 0) } +func (s *FilterExprContext) NOT_OP() antlr.TerminalNode { + return s.GetToken(QueryNOT_OP, 0) +} + func (s *FilterExprContext) AllFilterExpr() []IFilterExprContext { children := s.GetChildren() len := 0 @@ -1392,30 +1400,54 @@ func (p *Query) filterExpr(_p int) (localctx IFilterExprContext) { var _alt int p.EnterOuterAlt(localctx, 1) - p.SetState(82) + p.SetState(87) p.GetErrorHandler().Sync(p) switch p.GetTokenStream().LA(1) { - case QueryL_PAREN: + case QueryNOT_OP: { p.SetState(77) - p.Match(QueryL_PAREN) + + var _m = p.Match(QueryNOT_OP) + + localctx.(*FilterExprContext).Op = _m } { p.SetState(78) + p.Match(QueryL_PAREN) + } + { + p.SetState(79) + + var _x = p.filterExpr(0) + + localctx.(*FilterExprContext).F1 = _x + } + { + p.SetState(80) + p.Match(QueryR_PAREN) + } + + case QueryL_PAREN: + { + p.SetState(82) + p.Match(QueryL_PAREN) + } + { + p.SetState(83) var _x = p.filterExpr(0) localctx.(*FilterExprContext).Inner = _x } { - p.SetState(79) + p.SetState(84) p.Match(QueryR_PAREN) } case QueryREP, QueryIN, QueryAS, QuerySELECT, QueryFROM, QueryFILTER, QueryAT, QueryIDENT, QuerySTRING: { - p.SetState(81) + p.SetState(86) p.Expr() } @@ -1423,7 +1455,7 @@ func (p *Query) filterExpr(_p int) (localctx IFilterExprContext) { panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) } p.GetParserRuleContext().SetStop(p.GetTokenStream().LT(-1)) - p.SetState(92) + p.SetState(97) p.GetErrorHandler().Sync(p) _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 10, p.GetParserRuleContext()) @@ -1433,27 +1465,27 @@ func (p *Query) filterExpr(_p int) (localctx IFilterExprContext) { p.TriggerExitRuleEvent() } _prevctx = localctx - p.SetState(90) + p.SetState(95) p.GetErrorHandler().Sync(p) switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 9, p.GetParserRuleContext()) { case 1: localctx = NewFilterExprContext(p, _parentctx, _parentState) localctx.(*FilterExprContext).F1 = _prevctx p.PushNewRecursionContext(localctx, _startState, QueryRULE_filterExpr) - p.SetState(84) + p.SetState(89) if !(p.Precpred(p.GetParserRuleContext(), 4)) { panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 4)", "")) } { - p.SetState(85) + p.SetState(90) var _m = p.Match(QueryAND_OP) localctx.(*FilterExprContext).Op = _m } { - p.SetState(86) + p.SetState(91) var _x = p.filterExpr(5) @@ -1464,20 +1496,20 @@ func (p *Query) filterExpr(_p int) (localctx IFilterExprContext) { localctx = NewFilterExprContext(p, _parentctx, _parentState) localctx.(*FilterExprContext).F1 = _prevctx p.PushNewRecursionContext(localctx, _startState, QueryRULE_filterExpr) - p.SetState(87) + p.SetState(92) if !(p.Precpred(p.GetParserRuleContext(), 3)) { panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 3)", "")) } { - p.SetState(88) + p.SetState(93) var _m = p.Match(QueryOR_OP) localctx.(*FilterExprContext).Op = _m } { - p.SetState(89) + p.SetState(94) var _x = p.filterExpr(4) @@ -1487,7 +1519,7 @@ func (p *Query) filterExpr(_p int) (localctx IFilterExprContext) { } } - p.SetState(94) + p.SetState(99) p.GetErrorHandler().Sync(p) _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 10, p.GetParserRuleContext()) } @@ -1644,22 +1676,22 @@ func (p *Query) FilterStmt() (localctx IFilterStmtContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(95) + p.SetState(100) p.Match(QueryFILTER) } { - p.SetState(96) + p.SetState(101) var _x = p.filterExpr(0) localctx.(*FilterStmtContext).Expr = _x } { - p.SetState(97) + p.SetState(102) p.Match(QueryAS) } { - p.SetState(98) + p.SetState(103) var _x = p.Ident() @@ -1844,18 +1876,18 @@ func (p *Query) Expr() (localctx IExprContext) { } }() - p.SetState(106) + p.SetState(111) p.GetErrorHandler().Sync(p) switch p.GetTokenStream().LA(1) { case QueryAT: p.EnterOuterAlt(localctx, 1) { - p.SetState(100) + p.SetState(105) p.Match(QueryAT) } { - p.SetState(101) + p.SetState(106) var _x = p.Ident() @@ -1865,18 +1897,18 @@ func (p *Query) Expr() (localctx IExprContext) { case QueryREP, QueryIN, QueryAS, QuerySELECT, QueryFROM, QueryFILTER, QueryIDENT, QuerySTRING: p.EnterOuterAlt(localctx, 2) { - p.SetState(102) + p.SetState(107) var _x = p.FilterKey() localctx.(*ExprContext).Key = _x } { - p.SetState(103) + p.SetState(108) p.Match(QuerySIMPLE_OP) } { - p.SetState(104) + p.SetState(109) var _x = p.FilterValue() @@ -1993,21 +2025,21 @@ func (p *Query) FilterKey() (localctx IFilterKeyContext) { } }() - p.SetState(110) + p.SetState(115) p.GetErrorHandler().Sync(p) switch p.GetTokenStream().LA(1) { case QueryREP, QueryIN, QueryAS, QuerySELECT, QueryFROM, QueryFILTER, QueryIDENT: p.EnterOuterAlt(localctx, 1) { - p.SetState(108) + p.SetState(113) p.Ident() } case QuerySTRING: p.EnterOuterAlt(localctx, 2) { - p.SetState(109) + p.SetState(114) p.Match(QuerySTRING) } @@ -2138,28 +2170,28 @@ func (p *Query) FilterValue() (localctx IFilterValueContext) { } }() - p.SetState(115) + p.SetState(120) p.GetErrorHandler().Sync(p) switch p.GetTokenStream().LA(1) { case QueryREP, QueryIN, QueryAS, QuerySELECT, QueryFROM, QueryFILTER, QueryIDENT: p.EnterOuterAlt(localctx, 1) { - p.SetState(112) + p.SetState(117) p.Ident() } case QueryNUMBER1, QueryZERO: p.EnterOuterAlt(localctx, 2) { - p.SetState(113) + p.SetState(118) p.Number() } case QuerySTRING: p.EnterOuterAlt(localctx, 3) { - p.SetState(114) + p.SetState(119) p.Match(QuerySTRING) } @@ -2264,7 +2296,7 @@ func (p *Query) Number() (localctx INumberContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(117) + p.SetState(122) _la = p.GetTokenStream().LA(1) if !(_la == QueryNUMBER1 || _la == QueryZERO) { @@ -2392,10 +2424,10 @@ func (p *Query) Keyword() (localctx IKeywordContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(119) + p.SetState(124) _la = p.GetTokenStream().LA(1) - if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&1904) != 0) { + if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&3808) != 0) { p.GetErrorHandler().RecoverInline(p) } else { p.GetErrorHandler().ReportMatch(p) @@ -2509,21 +2541,21 @@ func (p *Query) Ident() (localctx IIdentContext) { } }() - p.SetState(123) + p.SetState(128) p.GetErrorHandler().Sync(p) switch p.GetTokenStream().LA(1) { case QueryREP, QueryIN, QueryAS, QuerySELECT, QueryFROM, QueryFILTER: p.EnterOuterAlt(localctx, 1) { - p.SetState(121) + p.SetState(126) p.Keyword() } case QueryIDENT: p.EnterOuterAlt(localctx, 2) { - p.SetState(122) + p.SetState(127) p.Match(QueryIDENT) } @@ -2637,21 +2669,21 @@ func (p *Query) IdentWC() (localctx IIdentWCContext) { } }() - p.SetState(127) + p.SetState(132) p.GetErrorHandler().Sync(p) switch p.GetTokenStream().LA(1) { case QueryREP, QueryIN, QueryAS, QuerySELECT, QueryFROM, QueryFILTER, QueryIDENT: p.EnterOuterAlt(localctx, 1) { - p.SetState(125) + p.SetState(130) p.Ident() } case QueryWILDCARD: p.EnterOuterAlt(localctx, 2) { - p.SetState(126) + p.SetState(131) p.Match(QueryWILDCARD) } diff --git a/netmap/policy.go b/netmap/policy.go index b2dd766..5a29a1d 100644 --- a/netmap/policy.go +++ b/netmap/policy.go @@ -464,18 +464,33 @@ func writeFilterStringTo(w io.StringWriter, f netmap.Filter) error { } inner := f.GetFilters() - for i := range inner { - if i != 0 { - _, err = w.WriteString(" " + op.String() + " ") + + if op == netmap.NOT { + _, err = w.WriteString(op.String() + " (") + if err != nil { + return err + } + err = writeFilterStringTo(w, inner[0]) + if err != nil { + return err + } + _, err = w.WriteString(")") + if err != nil { + return err + } + } else { + for i := range inner { + if i != 0 { + _, err = w.WriteString(" " + op.String() + " ") + if err != nil { + return err + } + } + err = writeFilterStringTo(w, inner[i]) if err != nil { return err } } - - err = writeFilterStringTo(w, inner[i]) - if err != nil { - return err - } } if s = f.GetName(); s != "" && !unspecified { @@ -671,6 +686,12 @@ func (p *policyVisitor) VisitFilterExpr(ctx *parser.FilterExprContext) any { op := operationFromString(ctx.GetOp().GetText()) f.SetOp(op) + if op == netmap.NOT { + f1 := *ctx.GetF1().Accept(p).(*netmap.Filter) + f.SetFilters([]netmap.Filter{f1}) + return f + } + f1 := *ctx.GetF1().Accept(p).(*netmap.Filter) f2 := *ctx.GetF2().Accept(p).(*netmap.Filter) diff --git a/netmap/policy_test.go b/netmap/policy_test.go index b184cb2..f0a7bc5 100644 --- a/netmap/policy_test.go +++ b/netmap/policy_test.go @@ -23,6 +23,10 @@ FILTER @FromRU AND Rating GT 7 AS Good`, `REP 7 IN SPB SELECT 1 IN City FROM SPBSSD AS SPB FILTER City EQ SPB AND SSD EQ true OR City EQ SPB AND Rating GE 5 AS SPBSSD`, + + `REP 7 IN SPB +SELECT 1 IN City FROM SPBSSD AS SPB +FILTER NOT (NOT (City EQ SPB) AND SSD EQ true OR City EQ SPB AND Rating GE 5) AS SPBSSD`, } var p PlacementPolicy diff --git a/netmap/selector_test.go b/netmap/selector_test.go index aa415be..3147051 100644 --- a/netmap/selector_test.go +++ b/netmap/selector_test.go @@ -194,25 +194,26 @@ func TestPlacementPolicy_DeterministicOrder(t *testing.T) { } } -func TestPlacementPolicy_ProcessSelectors(t *testing.T) { - p := newPlacementPolicy(2, nil, +func TestPlacementPolicy_ProcessSelectorsExceptNodes(t *testing.T) { + p := newPlacementPolicy(1, nil, []Selector{ - newSelector("SameRU", "City", 2, "FromRU", (*Selector).SelectSame), - newSelector("DistinctRU", "City", 2, "FromRU", (*Selector).SelectDistinct), - newSelector("Good", "Country", 2, "Good", (*Selector).SelectDistinct), - newSelector("Main", "Country", 3, "*", (*Selector).SelectDistinct), + newSelector("ExceptRU", "City", 2, "ExceptRU", (*Selector).SelectSame), }, []Filter{ - newFilter("FromRU", "Country", "Russia", netmap.EQ), - newFilter("Good", "Rating", "4", netmap.GE), + newFilter("ExceptRU", "", "", netmap.NOT, + newFilter("", "", "", netmap.AND, + newFilter("", "City", "Lyon", netmap.EQ), + newFilter("", "Rating", "10", netmap.LE), + ), + ), }) nodes := []NodeInfo{ - nodeInfoFromAttributes("Country", "Russia", "Rating", "1", "City", "SPB"), + nodeInfoFromAttributes("Country", "Germany", "Rating", "1", "City", "Berlin"), nodeInfoFromAttributes("Country", "Germany", "Rating", "5", "City", "Berlin"), nodeInfoFromAttributes("Country", "Russia", "Rating", "6", "City", "Moscow"), nodeInfoFromAttributes("Country", "France", "Rating", "4", "City", "Paris"), nodeInfoFromAttributes("Country", "France", "Rating", "1", "City", "Lyon"), - nodeInfoFromAttributes("Country", "Russia", "Rating", "5", "City", "SPB"), + nodeInfoFromAttributes("Country", "France", "Rating", "5", "City", "Lyon"), nodeInfoFromAttributes("Country", "Russia", "Rating", "7", "City", "Moscow"), nodeInfoFromAttributes("Country", "Germany", "Rating", "3", "City", "Darmstadt"), nodeInfoFromAttributes("Country", "Germany", "Rating", "7", "City", "Frankfurt"),