コード例 #1
0
        public void Shoud_generate_query_Numeric_Functions()
        {
            var query = "FOR item IN UserModelCollection LIMIT 1 LET Age = item.Age LET Floor = FLOOR(item.Age) LET Ceil = CEIL(item.Age) LET Round = ROUND(item.Age) LET Abs = ABS(item.Age) LET Sqrt = SQRT(item.Age) LET Rand = RAND() RETURN { 'Age': Age, 'Floor': Floor, 'Ceil': Ceil, 'Round': Round, 'Abs': Abs, 'Sqrt': Sqrt, 'Rand': Rand }";

            ArangoQueryOperation expression = new ArangoQueryOperation()
                                              .Aql(_ => _
                                                   .FOR("item")
                                                   .IN("UserModelCollection", _.LIMIT(1))
                                                   .LET("Age").Var("item.Age")
                                                   .LET("Floor").FLOOR(_.Var("item.Age"))
                                                   .LET("Ceil").CEIL(_.Var("item.Age"))
                                                   .LET("Round").ROUND(_.Var("item.Age"))
                                                   .LET("Abs").ABS(_.Var("item.Age"))
                                                   .LET("Sqrt").SQRT(_.Var("item.Age"))
                                                   .LET("Rand").RAND()
                                                   .RETURN.Object(_
                                                                  .Field("Age").Var("Age")
                                                                  .Field("Floor").Var("Floor")
                                                                  .Field("Ceil").Var("Ceil")
                                                                  .Field("Round").Var("Round")
                                                                  .Field("Abs").Var("Abs")
                                                                  .Field("Sqrt").Var("Sqrt")
                                                                  .Field("Rand").Var("Rand")
                                                                  ));

            Assert.AreEqual(query, expression.ToString(false));
            assertQuerySyntax(query);
        }
コード例 #2
0
        public void Shoud_generate_query_Date_Functions()
        {
            var query = "FOR item IN Dinners LIMIT 1 LET EventDate = item.EventDate LET Timestamp = DATE_TIMESTAMP(item.EventDate)  LET TimestampBuild = DATE_TIMESTAMP(2014,10,20,10,20,0,0)  LET ISO = DATE_ISO8601(item.EventDate)  LET ISOBuild = DATE_ISO8601(2014,10,20,10,20,0,0)  RETURN { 'EventDate': EventDate, 'Timestamp': Timestamp, 'TimestampBuild': TimestampBuild, 'ISO': ISO, 'ISOBuild': ISOBuild }";

            ArangoQueryOperation expression = new ArangoQueryOperation()
                                              .Aql(_ => _
                                                   .FOR("item")
                                                   .IN("Dinners", _.LIMIT(1))
                                                   .LET("EventDate").Var("item.EventDate")
                                                   .LET("Timestamp").DATE_TIMESTAMP(new [] { _.Var("item.EventDate") })
                                                   .LET("TimestampBuild").DATE_TIMESTAMP(new[] { _.Val(2014), _.Val(10), _.Val(20), _.Val(10), _.Val(20), _.Val(0), _.Val(0) })
                                                   .LET("ISO").DATE_ISO8601(new[] { _.Var("item.EventDate") })
                                                   .LET("ISOBuild").DATE_ISO8601(new[] { _.Val(2014), _.Val(10), _.Val(20), _.Val(10), _.Val(20), _.Val(0), _.Val(0) })
                                                   .RETURN.Object(_
                                                                  .Field("EventDate").Var("EventDate")
                                                                  .Field("Timestamp").Var("Timestamp")
                                                                  .Field("TimestampBuild").Var("TimestampBuild")
                                                                  .Field("ISO").Var("ISO")
                                                                  .Field("ISOBuild").Var("ISOBuild")
                                                                  ));

            Assert.AreEqual(query, expression.ToString(false));
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: leowin/ArangoDB-NET
        public static void Main(string[] args)
        {
            /*ArangoClient.AddConnection(
             *  "localhost",
             *  8529,
             *  false,
             *  "test",
             *  "test"
             * );
             *
             * var db = new ArangoDatabase("test");
             *
             * var aql = db.Query.ToString();
             *
             * System.Console.WriteLine(aql);*/

            ArangoQueryOperation expression = new ArangoQueryOperation()
                                              .Aql(_ => _
                                                   .LET("concat1").CONCAT(_.Val("xxx"), _.Val(5), _.Var("foo"), _.TO_STRING(_.Var("bar")))
                                                   .LET("val1").Val("string")
                                                   .LET("val2").Val(123)
                                                   .LET("lower").LOWER(_.Val("ABC"))
                                                   .LET("upper").UPPER(_.Var("foo"))
                                                   .LET("list1").List(1, 2, 3)
                                                   .LET("list2").List(new List <object> {
                4, 5, 6
            })
                                                   .LET("list3").List(_
                                                                      .LET("val11").Val("sss")
                                                                      .Aql("LET val12 = 'whoa'")
                                                                      .RETURN.Val("abcd")
                                                                      )
                                                   .LET("len1").LENGTH(_.Var("var1"))
                                                   .LET("len2").LENGTH(_.List(1, 2, 3))
                                                   .LET("len3").LENGTH(_
                                                                       .List(_
                                                                             .RETURN.Var("foo")
                                                                             )
                                                                       )
                                                   .LET("contains1").CONTAINS(_.Val("abc"), _.Var("foo"))
                                                   .LET("contains2").CONTAINS(_.Val("abc"), _.Var("foo"), true)
                                                   .LET("obj").Object(_
                                                                      .Field("x").Val("y")
                                                                      )
                                                   .LET("boolVar").TO_BOOL(_.Var("b"))
                                                   .LET("boolVal").TO_BOOL(_.Val(0))
                                                   .LET("listVar").TO_LIST(_.Var("b"))
                                                   .LET("listVal").TO_LIST(_.Val("a"))
                                                   .LET("numberVar").TO_NUMBER(_.Var("b"))
                                                   .LET("numberVal").TO_NUMBER(_.Val("3"))
                                                   .LET("stringVar").TO_STRING(_.Var("b"))
                                                   .LET("stringVal").TO_NUMBER(_.Val(4))
                                                   .LET("docVar").DOCUMENT("foo.bar")
                                                   .LET("docId").DOCUMENT("aaa/123")
                                                   .LET("docIds").DOCUMENT("aaa/123", "aaa/345")
                                                   .LET("xxx").List(_
                                                                    .FOR("foo").EDGES("colx", "colc/123", ArangoEdgeDirection.Out, _
                                                                                      .FOR("foo").EDGES("colx", "xyz", ArangoEdgeDirection.Any, _
                                                                                                        .RETURN.List(new List <object> {
                "one", "two", "three"
            }))))
                                                   .LET("firstList").FIRST(_.List(new List <object> {
                1, 2, 3
            }))
                                                   .LET("firstListContext").FIRST(_.List(_
                                                                                         .FOR("foo").IN("bar", _
                                                                                                        .LET("xxx").Val("abcd")
                                                                                                        .RETURN.Var("xxx"))
                                                                                         ))
                                                   .FOR("foo1").IN("col1", _
                                                                   .LET("val11").Val("string")
                                                                   .LET("val12").Val(123)
                                                                   .LET("list11").List(new List <object> {
                1, 2, 3
            })
                                                                   .LET("list12").List(_
                                                                                       .LET("val21").Val("sss")
                                                                                       .LET("val22").Val(345)
                                                                                       .RETURN.Object(_
                                                                                                      .Field("foo").Var("var")
                                                                                                      .Field("bar").Val("val")
                                                                                                      .Field("baz").List(new List <object> {
                1, 2, 3
            })
                                                                                                      .Field("boo").List(_
                                                                                                                         .FOR("x").IN("coly", _
                                                                                                                                      .FOR("y").IN("whoa", _
                                                                                                                                                   .RETURN.Var("var")))
                                                                                                                         )
                                                                                                      .Field("obj").Object(_
                                                                                                                           .Field("foo").Val("bar")
                                                                                                                           )
                                                                                                      .Field("xxx").Val("yyy")
                                                                                                      )
                                                                                       )
                                                                   .FILTER(
                                                                       _.Var("val11"), ArangoOperator.Greater, _.Val(123)
                                                                       ).AND(
                                                                       _.Var("val12"), ArangoOperator.Equal, _.Val("foo")
                                                                       ).OR(
                                                                       _.Val(44), ArangoOperator.In, _.Var("val13")
                                                                       ).AND(
                                                                       _.NOT(_.Var("foo"), ArangoOperator.In, _.Var("bar"))
                                                                       )
                                                                   .FILTER(
                                                                       _.CONTAINS(_.Var("foo"), _.Val("abc"))
                                                                       )
                                                                   .AND(
                                                                       _.CONTAINS(_.Var("bar"), _.Val(123))
                                                                       )
                                                                   .OR(
                                                                       _.CONTAINS(_.Var("baz"), _.Val("def"))
                                                                       ).AND(
                                                                       _.NOT(_.CONTAINS(_.Var("baz"), _.Val("def")))
                                                                       )
                                                                   .COLLECT("city = u.city")
                                                                   .COLLECT("first = u.firstName, age = u.age").INTO("g")
                                                                   .SORT(_.Var("var1")).Direction(ArangoSortDirection.ASC)
                                                                   .SORT(_.Var("var1"), _.TO_NUMBER(_.Var("var2"))).Direction(ArangoSortDirection.DESC)
                                                                   .LIMIT(5)
                                                                   .LIMIT(0, 5)
                                                                   .LIMIT("@count")
                                                                   .LIMIT("@offset", "@count")
                                                                   .RETURN.Var("list12"))
                                                   );

            var pretty = expression.ToString();

            System.Console.WriteLine(pretty);
            System.Console.WriteLine(pretty.Length);

            var dirty = expression.ToString(false);

            System.Console.WriteLine("\n" + dirty);
            System.Console.WriteLine(dirty.Length);

            System.Console.ReadLine();
        }
コード例 #4
0
        public void Should_generate_query()
        {
            var prettyPrintQuery =
                "LET concat1 = CONCAT('xxx', 5, foo, TO_STRING(bar))\n" +
                "LET val1 = 'string'\n" +
                "LET val2 = 123\n" +
                "LET lower = LOWER('ABC')\n" +
                "LET upper = UPPER(foo)\n" +
                "LET list1 = [1, 2, 3]\n" +
                "LET list2 = [4, 5, 6]\n" +
                "LET list3 = (\n" +
                "    LET val11 = 'sss'\n" +
                "    LET val12 = 'whoa'\n" +
                "    RETURN 'abcd'\n" +
                ")\n" +
                "LET len1 = LENGTH(var1)\n" +
                "LET len2 = LENGTH([1, 2, 3])\n" +
                "LET len3 = LENGTH((\n" +
                "    RETURN foo\n" +
                "))\n" +
                "LET contains1 = CONTAINS('abc', foo)\n" +
                "LET contains2 = CONTAINS('abc', foo, true)\n" +
                "LET obj = {\n" +
                "    'x': 'y'\n" +
                "}\n" +
                "LET boolVar = TO_BOOL(b)\n" +
                "LET boolVal = TO_BOOL(0)\n" +
                "LET listVar = TO_LIST(b)\n" +
                "LET listVal = TO_LIST('a')\n" +
                "LET numberVar = TO_NUMBER(b)\n" +
                "LET numberVal = TO_NUMBER('3')\n" +
                "LET stringVar = TO_STRING(b)\n" +
                "LET stringVal = TO_NUMBER(4)\n" +
                "LET docVar = DOCUMENT(foo.bar)\n" +
                "LET docId = DOCUMENT('aaa/123')\n" +
                "LET docIds = DOCUMENT(['aaa/123', 'aaa/345'])\n" +
                "LET xxx = (\n" +
                "    FOR foo IN EDGES(colx, 'colc/123', 'outbound')\n" +
                "        FOR foo IN EDGES(colx, xyz, 'any')\n" +
                "            RETURN ['one', 'two', 'three']\n" +
                ")\n" +
                "LET firstList = FIRST([1, 2, 3])\n" +
                "LET firstListContext = FIRST((\n" +
                "    FOR foo IN bar\n" +
                "        LET xxx = 'abcd'\n" +
                "        RETURN xxx\n" +
                "))\n" +
                "FOR foo1 IN col1\n" +
                "    LET val11 = 'string'\n" +
                "    LET val12 = 123\n" +
                "    LET list11 = [1, 2, 3]\n" +
                "    LET list12 = (\n" +
                "        LET val21 = 'sss'\n" +
                "        LET val22 = 345\n" +
                "        RETURN {\n" +
                "            'foo': var,\n" +
                "            'bar': 'val',\n" +
                "            'baz': [1, 2, 3],\n" +
                "            'boo': (\n" +
                "                FOR x IN coly\n" +
                "                    FOR y IN whoa\n" +
                "                        RETURN var\n" +
                "            ),\n" +
                "            'obj': {\n" +
                "                'foo': 'bar'\n" +
                "            },\n" +
                "            'xxx': 'yyy'\n" +
                "        }\n" +
                "    )\n" +
                "    FILTER (val11 > 123) && (val12 == 'foo') || (44 IN val13) && !(foo IN bar)\n" +
                "    FILTER CONTAINS(foo, 'abc') && CONTAINS(bar, 123) || CONTAINS(baz, 'def') && !CONTAINS(baz, 'def')\n" +
                "    COLLECT city = u.city\n" +
                "    COLLECT first = u.firstName, age = u.age INTO g\n" +
                "    SORT var1 ASC\n" +
                "    SORT var1, TO_NUMBER(var2) DESC\n" +
                "    LIMIT 5\n" +
                "    LIMIT 0, 5\n" +
                "    LIMIT @count\n" +
                "    LIMIT @offset, @count\n" +
                "    RETURN list12";

            var shrotQuery = "LET concat1 = CONCAT('xxx', 5, foo, TO_STRING(bar)) LET val1 = 'string' LET val2 = 123 LET lower = LOWER('ABC') LET upper = UPPER(foo) LET list1 = [1, 2, 3] LET list2 = [4, 5, 6] LET list3 = ( LET val11 = 'sss' LET val12 = 'whoa' RETURN 'abcd' ) LET len1 = LENGTH(var1) LET len2 = LENGTH([1, 2, 3]) LET len3 = LENGTH(( RETURN foo )) LET contains1 = CONTAINS('abc', foo) LET contains2 = CONTAINS('abc', foo, true) LET obj = { 'x': 'y' } LET boolVar = TO_BOOL(b) LET boolVal = TO_BOOL(0) LET listVar = TO_LIST(b) LET listVal = TO_LIST('a') LET numberVar = TO_NUMBER(b) LET numberVal = TO_NUMBER('3') LET stringVar = TO_STRING(b) LET stringVal = TO_NUMBER(4) LET docVar = DOCUMENT(foo.bar) LET docId = DOCUMENT('aaa/123') LET docIds = DOCUMENT(['aaa/123', 'aaa/345']) LET xxx = ( FOR foo IN EDGES(colx, 'colc/123', 'outbound') FOR foo IN EDGES(colx, xyz, 'any') RETURN ['one', 'two', 'three'] ) LET firstList = FIRST([1, 2, 3]) LET firstListContext = FIRST(( FOR foo IN bar LET xxx = 'abcd' RETURN xxx )) FOR foo1 IN col1 LET val11 = 'string' LET val12 = 123 LET list11 = [1, 2, 3] LET list12 = ( LET val21 = 'sss' LET val22 = 345 RETURN { 'foo': var, 'bar': 'val', 'baz': [1, 2, 3], 'boo': ( FOR x IN coly FOR y IN whoa RETURN var ), 'obj': { 'foo': 'bar' }, 'xxx': 'yyy' } ) FILTER (val11 > 123) && (val12 == 'foo') || (44 IN val13) && !(foo IN bar) FILTER CONTAINS(foo, 'abc') && CONTAINS(bar, 123) || CONTAINS(baz, 'def') && !CONTAINS(baz, 'def') COLLECT city = u.city COLLECT first = u.firstName, age = u.age INTO g SORT var1 ASC SORT var1, TO_NUMBER(var2) DESC LIMIT 5 LIMIT 0, 5 LIMIT @count LIMIT @offset, @count RETURN list12";

            ArangoQueryOperation expression = new ArangoQueryOperation()
                                              .Aql(_ => _
                                                   .LET("concat1").CONCAT(_.Val("xxx"), _.Val(5), _.Var("foo"), _.TO_STRING(_.Var("bar")))
                                                   .LET("val1").Val("string")
                                                   .LET("val2").Val(123)
                                                   .LET("lower").LOWER(_.Val("ABC"))
                                                   .LET("upper").UPPER(_.Var("foo"))
                                                   .LET("list1").List(1, 2, 3)
                                                   .LET("list2").List(new List <object> {
                4, 5, 6
            })
                                                   .LET("list3").List(_
                                                                      .LET("val11").Val("sss")
                                                                      .Aql("LET val12 = 'whoa'")
                                                                      .RETURN.Val("abcd")
                                                                      )
                                                   .LET("len1").LENGTH(_.Var("var1"))
                                                   .LET("len2").LENGTH(_.List(1, 2, 3))
                                                   .LET("len3").LENGTH(_
                                                                       .List(_
                                                                             .RETURN.Var("foo")
                                                                             )
                                                                       )
                                                   .LET("contains1").CONTAINS(_.Val("abc"), _.Var("foo"))
                                                   .LET("contains2").CONTAINS(_.Val("abc"), _.Var("foo"), true)
                                                   .LET("obj").Object(_
                                                                      .Field("x").Val("y")
                                                                      )
                                                   .LET("boolVar").TO_BOOL(_.Var("b"))
                                                   .LET("boolVal").TO_BOOL(_.Val(0))
                                                   .LET("listVar").TO_LIST(_.Var("b"))
                                                   .LET("listVal").TO_LIST(_.Val("a"))
                                                   .LET("numberVar").TO_NUMBER(_.Var("b"))
                                                   .LET("numberVal").TO_NUMBER(_.Val("3"))
                                                   .LET("stringVar").TO_STRING(_.Var("b"))
                                                   .LET("stringVal").TO_NUMBER(_.Val(4))
                                                   .LET("docVar").DOCUMENT("foo.bar")
                                                   .LET("docId").DOCUMENT("aaa/123")
                                                   .LET("docIds").DOCUMENT("aaa/123", "aaa/345")
                                                   .LET("xxx").List(_
                                                                    .FOR("foo").EDGES("colx", "colc/123", ArangoEdgeDirection.Out, _
                                                                                      .FOR("foo").EDGES("colx", "xyz", ArangoEdgeDirection.Any, _
                                                                                                        .RETURN.List(new List <object> {
                "one", "two", "three"
            }))))
                                                   .LET("firstList").FIRST(_.List(new List <object> {
                1, 2, 3
            }))
                                                   .LET("firstListContext").FIRST(_.List(_
                                                                                         .FOR("foo").IN("bar", _
                                                                                                        .LET("xxx").Val("abcd")
                                                                                                        .RETURN.Var("xxx"))
                                                                                         ))
                                                   .FOR("foo1").IN("col1", _
                                                                   .LET("val11").Val("string")
                                                                   .LET("val12").Val(123)
                                                                   .LET("list11").List(new List <object> {
                1, 2, 3
            })
                                                                   .LET("list12").List(_
                                                                                       .LET("val21").Val("sss")
                                                                                       .LET("val22").Val(345)
                                                                                       .RETURN.Object(_
                                                                                                      .Field("foo").Var("var")
                                                                                                      .Field("bar").Val("val")
                                                                                                      .Field("baz").List(new List <object> {
                1, 2, 3
            })
                                                                                                      .Field("boo").List(_
                                                                                                                         .FOR("x").IN("coly", _
                                                                                                                                      .FOR("y").IN("whoa", _
                                                                                                                                                   .RETURN.Var("var")))
                                                                                                                         )
                                                                                                      .Field("obj").Object(_
                                                                                                                           .Field("foo").Val("bar")
                                                                                                                           )
                                                                                                      .Field("xxx").Val("yyy")
                                                                                                      )
                                                                                       )
                                                                   .FILTER(
                                                                       _.Var("val11"), ArangoOperator.Greater, _.Val(123)
                                                                       ).AND(
                                                                       _.Var("val12"), ArangoOperator.Equal, _.Val("foo")
                                                                       ).OR(
                                                                       _.Val(44), ArangoOperator.In, _.Var("val13")
                                                                       ).AND(
                                                                       _.NOT(_.Var("foo"), ArangoOperator.In, _.Var("bar"))
                                                                       )
                                                                   .FILTER(
                                                                       _.CONTAINS(_.Var("foo"), _.Val("abc"))
                                                                       )
                                                                   .AND(
                                                                       _.CONTAINS(_.Var("bar"), _.Val(123))
                                                                       )
                                                                   .OR(
                                                                       _.CONTAINS(_.Var("baz"), _.Val("def"))
                                                                       ).AND(
                                                                       _.NOT(_.CONTAINS(_.Var("baz"), _.Val("def")))
                                                                       )
                                                                   .COLLECT("city = u.city")
                                                                   .COLLECT("first = u.firstName, age = u.age").INTO("g")
                                                                   .SORT(_.Var("var1")).Direction(ArangoSortDirection.ASC)
                                                                   .SORT(_.Var("var1"), _.TO_NUMBER(_.Var("var2"))).Direction(ArangoSortDirection.DESC)
                                                                   .LIMIT(5)
                                                                   .LIMIT(0, 5)
                                                                   .LIMIT("@count")
                                                                   .LIMIT("@offset", "@count")
                                                                   .RETURN.Var("list12"))
                                                   );

            Assert.AreEqual(prettyPrintQuery, expression.ToString());
            Assert.AreEqual(shrotQuery, expression.ToString(false));
        }
コード例 #5
0
ファイル: AqlTests.cs プロジェクト: jsteemann/ArangoDB-NET
        public void Should_generate_query()
        {
            var prettyPrintQuery =
                "LET concat1 = CONCAT('xxx', 5, foo, TO_STRING(bar))\n" +
                "LET val1 = 'string'\n" +
                "LET val2 = 123\n" +
                "LET lower = LOWER('ABC')\n" +
                "LET upper = UPPER(foo)\n" +
                "LET list1 = [1, 2, 3]\n" +
                "LET list2 = [4, 5, 6]\n" +
                "LET list3 = (\n" +
                "    LET val11 = 'sss'\n" +
                "    LET val12 = 'whoa'\n" +
                "    RETURN 'abcd'\n" +
                ")\n" +
                "LET len1 = LENGTH(var1)\n" +
                "LET len2 = LENGTH([1, 2, 3])\n" +
                "LET len3 = LENGTH((\n" +
                "    RETURN foo\n" +
                "))\n" +
                "LET contains1 = CONTAINS('abc', foo)\n" +
                "LET contains2 = CONTAINS('abc', foo, true)\n" +
                "LET obj = {\n" +
                "    'x': 'y'\n" +
                "}\n" +
                "LET boolVar = TO_BOOL(b)\n" +
                "LET boolVal = TO_BOOL(0)\n" +
                "LET listVar = TO_LIST(b)\n" +
                "LET listVal = TO_LIST('a')\n" +
                "LET numberVar = TO_NUMBER(b)\n" +
                "LET numberVal = TO_NUMBER('3')\n" +
                "LET stringVar = TO_STRING(b)\n" +
                "LET stringVal = TO_NUMBER(4)\n" +
                "LET docVar = DOCUMENT(foo.bar)\n" +
                "LET docId = DOCUMENT('aaa/123')\n" +
                "LET docIds = DOCUMENT(['aaa/123', 'aaa/345'])\n" +
                "LET xxx = (\n" +
                "    FOR foo IN EDGES(colx, 'colc/123', 'outbound')\n" +
                "        FOR foo IN EDGES(colx, xyz, 'any')\n" +
                "            RETURN ['one', 'two', 'three']\n" +
                ")\n" +
                "LET firstList = FIRST([1, 2, 3])\n" +
                "LET firstListContext = FIRST((\n" +
                "    FOR foo IN bar\n" +
                "        LET xxx = 'abcd'\n" +
                "        RETURN xxx\n" +
                "))\n" +
                "FOR foo1 IN col1\n" +
                "    LET val11 = 'string'\n" +
                "    LET val12 = 123\n" +
                "    LET list11 = [1, 2, 3]\n" +
                "    LET list12 = (\n" +
                "        LET val21 = 'sss'\n" +
                "        LET val22 = 345\n" +
                "        RETURN {\n" +
                "            'foo': var,\n" +
                "            'bar': 'val',\n" +
                "            'baz': [1, 2, 3],\n" +
                "            'boo': (\n" +
                "                FOR x IN coly\n" +
                "                    FOR y IN whoa\n" +
                "                        RETURN var\n" +
                "            ),\n" +
                "            'obj': {\n" +
                "                'foo': 'bar'\n" +
                "            },\n" +
                "            'xxx': 'yyy'\n" +
                "        }\n" +
                "    )\n" +
                "    FILTER (val11 > 123) && (val12 == 'foo') || (44 IN val13) && !(foo IN bar)\n" +
                "    FILTER CONTAINS(foo, 'abc') && CONTAINS(bar, 123) || CONTAINS(baz, 'def') && !CONTAINS(baz, 'def')\n" +
                "    COLLECT city = u.city\n" +
                "    COLLECT first = u.firstName, age = u.age INTO g\n" +
                "    SORT var1 ASC\n" +
                "    SORT var1, TO_NUMBER(var2) DESC\n" +
                "    LIMIT 5\n" +
                "    LIMIT 0, 5\n" +
                "    LIMIT @count\n" +
                "    LIMIT @offset, @count\n" +
                "    RETURN list12";

            var shrotQuery = "LET concat1 = CONCAT('xxx', 5, foo, TO_STRING(bar)) LET val1 = 'string' LET val2 = 123 LET lower = LOWER('ABC') LET upper = UPPER(foo) LET list1 = [1, 2, 3] LET list2 = [4, 5, 6] LET list3 = ( LET val11 = 'sss' LET val12 = 'whoa' RETURN 'abcd' ) LET len1 = LENGTH(var1) LET len2 = LENGTH([1, 2, 3]) LET len3 = LENGTH(( RETURN foo )) LET contains1 = CONTAINS('abc', foo) LET contains2 = CONTAINS('abc', foo, true) LET obj = { 'x': 'y' } LET boolVar = TO_BOOL(b) LET boolVal = TO_BOOL(0) LET listVar = TO_LIST(b) LET listVal = TO_LIST('a') LET numberVar = TO_NUMBER(b) LET numberVal = TO_NUMBER('3') LET stringVar = TO_STRING(b) LET stringVal = TO_NUMBER(4) LET docVar = DOCUMENT(foo.bar) LET docId = DOCUMENT('aaa/123') LET docIds = DOCUMENT(['aaa/123', 'aaa/345']) LET xxx = ( FOR foo IN EDGES(colx, 'colc/123', 'outbound') FOR foo IN EDGES(colx, xyz, 'any') RETURN ['one', 'two', 'three'] ) LET firstList = FIRST([1, 2, 3]) LET firstListContext = FIRST(( FOR foo IN bar LET xxx = 'abcd' RETURN xxx )) FOR foo1 IN col1 LET val11 = 'string' LET val12 = 123 LET list11 = [1, 2, 3] LET list12 = ( LET val21 = 'sss' LET val22 = 345 RETURN { 'foo': var, 'bar': 'val', 'baz': [1, 2, 3], 'boo': ( FOR x IN coly FOR y IN whoa RETURN var ), 'obj': { 'foo': 'bar' }, 'xxx': 'yyy' } ) FILTER (val11 > 123) && (val12 == 'foo') || (44 IN val13) && !(foo IN bar) FILTER CONTAINS(foo, 'abc') && CONTAINS(bar, 123) || CONTAINS(baz, 'def') && !CONTAINS(baz, 'def') COLLECT city = u.city COLLECT first = u.firstName, age = u.age INTO g SORT var1 ASC SORT var1, TO_NUMBER(var2) DESC LIMIT 5 LIMIT 0, 5 LIMIT @count LIMIT @offset, @count RETURN list12";

            ArangoQueryOperation expression = new ArangoQueryOperation()
                .Aql(_ => _
                    .LET("concat1").CONCAT(_.Val("xxx"), _.Val(5), _.Var("foo"), _.TO_STRING(_.Var("bar")))
                    .LET("val1").Val("string")
                    .LET("val2").Val(123)
                    .LET("lower").LOWER(_.Val("ABC"))
                    .LET("upper").UPPER(_.Var("foo"))
                    .LET("list1").List(1, 2, 3)
                    .LET("list2").List(new List<object> { 4, 5, 6})
                    .LET("list3").List(_
                        .LET("val11").Val("sss")
                        .Aql("LET val12 = 'whoa'")
                        .RETURN.Val("abcd")
                    )
                    .LET("len1").LENGTH(_.Var("var1"))
                    .LET("len2").LENGTH(_.List(1, 2, 3))
                    .LET("len3").LENGTH(_
                        .List(_
                            .RETURN.Var("foo")
                        )
                    )
                    .LET("contains1").CONTAINS(_.Val("abc"), _.Var("foo"))
                    .LET("contains2").CONTAINS(_.Val("abc"), _.Var("foo"), true)
                    .LET("obj").Object(_
                        .Field("x").Val("y")
                    )
                    .LET("boolVar").TO_BOOL(_.Var("b"))
                    .LET("boolVal").TO_BOOL(_.Val(0))
                    .LET("listVar").TO_LIST(_.Var("b"))
                    .LET("listVal").TO_LIST(_.Val("a"))
                    .LET("numberVar").TO_NUMBER(_.Var("b"))
                    .LET("numberVal").TO_NUMBER(_.Val("3"))
                    .LET("stringVar").TO_STRING(_.Var("b"))
                    .LET("stringVal").TO_NUMBER(_.Val(4))
                    .LET("docVar").DOCUMENT("foo.bar")
                    .LET("docId").DOCUMENT("aaa/123")
                    .LET("docIds").DOCUMENT("aaa/123", "aaa/345")
                    .LET("xxx").List(_
                        .FOR("foo").EDGES("colx", "colc/123", ArangoEdgeDirection.Out, _
                            .FOR("foo").EDGES("colx", "xyz", ArangoEdgeDirection.Any, _
                                .RETURN.List(new List<object> {"one", "two", "three" }))))
                    .LET("firstList").FIRST(_.List(new List<object> { 1, 2, 3}))
                    .LET("firstListContext").FIRST(_.List(_
                        .FOR("foo").IN("bar", _
                            .LET("xxx").Val("abcd")
                            .RETURN.Var("xxx"))
                    ))
                    .FOR("foo1").IN("col1", _
                        .LET("val11").Val("string")
                        .LET("val12").Val(123)
                        .LET("list11").List(new List<object> { 1, 2, 3})
                        .LET("list12").List(_
                            .LET("val21").Val("sss")
                            .LET("val22").Val(345)
                            .RETURN.Object(_
                                .Field("foo").Var("var")
                                .Field("bar").Val("val")
                                .Field("baz").List(new List<object> { 1, 2, 3})
                                .Field("boo").List(_
                                    .FOR("x").IN("coly", _
                                        .FOR("y").IN("whoa", _
                                            .RETURN.Var("var")))
                                )
                                .Field("obj").Object(_
                                    .Field("foo").Val("bar")
                                )
                                .Field("xxx").Val("yyy")
                            )
                        )
                        .FILTER(
                            _.Var("val11"), ArangoOperator.Greater, _.Val(123)
                        ).AND(
                            _.Var("val12"), ArangoOperator.Equal, _.Val("foo")
                        ).OR(
                            _.Val(44), ArangoOperator.In, _.Var("val13")
                        ).AND(
                            _.NOT(_.Var("foo"), ArangoOperator.In, _.Var("bar"))
                        )
                        .FILTER(
                            _.CONTAINS(_.Var("foo"), _.Val("abc"))
                        )
                        .AND(
                            _.CONTAINS(_.Var("bar"), _.Val(123))
                        )
                        .OR(
                            _.CONTAINS(_.Var("baz"), _.Val("def"))
                        ).AND(
                            _.NOT(_.CONTAINS(_.Var("baz"), _.Val("def")))
                        )
                        .COLLECT("city = u.city")
                        .COLLECT("first = u.firstName, age = u.age").INTO("g")
                        .SORT(_.Var("var1")).Direction(ArangoSortDirection.ASC)
                        .SORT(_.Var("var1"), _.TO_NUMBER(_.Var("var2"))).Direction(ArangoSortDirection.DESC)
                        .LIMIT(5)
                        .LIMIT(0, 5)
                        .LIMIT("@count")
                        .LIMIT("@offset", "@count")
                        .RETURN.Var("list12"))
                );

            Assert.AreEqual(prettyPrintQuery, expression.ToString());
            Assert.AreEqual(shrotQuery, expression.ToString(false));
        }
コード例 #6
0
ファイル: Program.cs プロジェクト: jjchiw/ArangoDB-NET
        public static void Main(string[] args)
        {
            /*ArangoClient.AddConnection(
                "localhost",
                8529,
                false,
                "test",
                "test"
            );

            var db = new ArangoDatabase("test");

            var aql = db.Query.ToString();

            System.Console.WriteLine(aql);*/

            ArangoQueryOperation expression = new ArangoQueryOperation()
                .Aql(_ => _
                    .LET("concat1").CONCAT(_.Val("xxx"), _.Val(5), _.Var("foo"), _.TO_STRING(_.Var("bar")))
                    .LET("val1").Val("string")
                    .LET("val2").Val(123)
                    .LET("lower").LOWER(_.Val("ABC"))
                    .LET("upper").UPPER(_.Var("foo"))
                    .LET("list1").List(1, 2, 3)
                    .LET("list2").List(new List<object> { 4, 5, 6})
                    .LET("list3").List(_
                        .LET("val11").Val("sss")
                        .Aql("LET val12 = 'whoa'")
                        .RETURN.Val("abcd")
                    )
                    .LET("len1").LENGTH(_.Var("var1"))
                    .LET("len2").LENGTH(_.List(1, 2, 3))
                    .LET("len3").LENGTH(_
                        .List(_
                            .RETURN.Var("foo")
                        )
                    )
                    .LET("contains1").CONTAINS(_.Val("abc"), _.Var("foo"))
                    .LET("contains2").CONTAINS(_.Val("abc"), _.Var("foo"), true)
                    .LET("obj").Object(_
                        .Field("x").Val("y")
                    )
                    .LET("boolVar").TO_BOOL(_.Var("b"))
                    .LET("boolVal").TO_BOOL(_.Val(0))
                    .LET("listVar").TO_LIST(_.Var("b"))
                    .LET("listVal").TO_LIST(_.Val("a"))
                    .LET("numberVar").TO_NUMBER(_.Var("b"))
                    .LET("numberVal").TO_NUMBER(_.Val("3"))
                    .LET("stringVar").TO_STRING(_.Var("b"))
                    .LET("stringVal").TO_NUMBER(_.Val(4))
                    .LET("docVar").DOCUMENT("foo.bar")
                    .LET("docId").DOCUMENT("aaa/123")
                    .LET("docIds").DOCUMENT("aaa/123", "aaa/345")
                    .LET("xxx").List(_
                        .FOR("foo").EDGES("colx", "colc/123", ArangoEdgeDirection.Out, _
                            .FOR("foo").EDGES("colx", "xyz", ArangoEdgeDirection.Any, _
                                .RETURN.List(new List<object> {"one", "two", "three" }))))
                    .LET("firstList").FIRST(_.List(new List<object> { 1, 2, 3}))
                    .LET("firstListContext").FIRST(_.List(_
                        .FOR("foo").IN("bar", _
                            .LET("xxx").Val("abcd")
                            .RETURN.Var("xxx"))
                    ))
                    .FOR("foo1").IN("col1", _
                        .LET("val11").Val("string")
                        .LET("val12").Val(123)
                        .LET("list11").List(new List<object> { 1, 2, 3})
                        .LET("list12").List(_
                            .LET("val21").Val("sss")
                            .LET("val22").Val(345)
                            .RETURN.Object(_
                                .Field("foo").Var("var")
                                .Field("bar").Val("val")
                                .Field("baz").List(new List<object> { 1, 2, 3})
                                .Field("boo").List(_
                                    .FOR("x").IN("coly", _
                                        .FOR("y").IN("whoa", _
                                            .RETURN.Var("var")))
                                )
                                .Field("obj").Object(_
                                    .Field("foo").Val("bar")
                                )
                                .Field("xxx").Val("yyy")
                            )
                        )
                        .FILTER(
                            _.Var("val11"), ArangoOperator.Greater, _.Val(123)
                        ).AND(
                            _.Var("val12"), ArangoOperator.Equal, _.Val("foo")
                        ).OR(
                            _.Val(44), ArangoOperator.In, _.Var("val13")
                        ).AND(
                            _.NOT(_.Var("foo"), ArangoOperator.In, _.Var("bar"))
                        )
                        .FILTER(
                            _.CONTAINS(_.Var("foo"), _.Val("abc"))
                        )
                        .AND(
                            _.CONTAINS(_.Var("bar"), _.Val(123))
                        )
                        .OR(
                            _.CONTAINS(_.Var("baz"), _.Val("def"))
                        ).AND(
                            _.NOT(_.CONTAINS(_.Var("baz"), _.Val("def")))
                        )
                        .COLLECT("city = u.city")
                        .COLLECT("first = u.firstName, age = u.age").INTO("g")
                        .SORT(_.Var("var1")).Direction(ArangoSortDirection.ASC)
                        .SORT(_.Var("var1"), _.TO_NUMBER(_.Var("var2"))).Direction(ArangoSortDirection.DESC)
                        .LIMIT(5)
                        .LIMIT(0, 5)
                        .LIMIT("@count")
                        .LIMIT("@offset", "@count")
                        .RETURN.Var("list12"))
                );

            var pretty = expression.ToString();
            System.Console.WriteLine(pretty);
            System.Console.WriteLine(pretty.Length);

            var dirty = expression.ToString(false);
            System.Console.WriteLine("\n" + dirty);
            System.Console.WriteLine(dirty.Length);

            System.Console.ReadLine();
        }