Esempio n. 1
0
 def nested(tx):
     i0 = 0
     n0 = 6
     res0 = run(tx, i0, n0)
     for r0 in range(i0, n0+1):
         rec = res0.next()
         self.assertEqual(rec, types.Record(values=[types.CypherInt(r0)]))
         lasts[0] = rec.values[0].value
         i1 = 7
         n1 = 11
         res1 = run(tx, i1, n1)
         for r1 in range(i1, n1+1):
             rec = res1.next()
             self.assertEqual(rec, types.Record(values=[types.CypherInt(r1)]))
             lasts[1] = rec.values[0].value
             i2 = 999
             n2 = 1001
             res2 = run(tx, i2, n2)
             for r2 in range(i2, n2+1):
                 rec = res2.next()
                 self.assertEqual(rec, types.Record(values=[types.CypherInt(r2)]))
                 lasts[2] = rec.values[0].value
             self.assertEqual(res2.next(), types.NullRecord())
         self.assertEqual(res1.next(), types.NullRecord())
     self.assertEqual(res0.next(), types.NullRecord())
     return "done"
Esempio n. 2
0
 def test_iteration_nested(self):
     if get_driver_name() in ['dotnet']:
         self.skipTest("Nested results not working in 4.2 and earlier. FIX AND ENABLE in 4.3")
     if get_driver_name() not in ['go', 'dotnet']:
         self.skipTest("Fetchsize not implemented in backend")
     # Verifies that it is possible to nest results with small fetch sizes.
     # Auto-commit results does not (as of 4.x) support multiple results on
     # the same connection but that isn't visible when testing at this level.
     self._session = self._driver.session("r", fetchSize=2)
     def run(i, n):
         return self._session.run("UNWIND RANGE ($i, $n) AS x RETURN x", {"i": types.CypherInt(i), "n": types.CypherInt(n)})
     i0 = 0
     n0 = 6
     res0 = run(i0, n0)
     for r0 in range(i0, n0+1):
         rec = res0.next()
         self.assertEqual(rec, types.Record(values=[types.CypherInt(r0)]))
         i1 = 7
         n1 = 11
         res1 = run(i1, n1)
         for r1 in range(i1, n1+1):
             rec = res1.next()
             self.assertEqual(rec, types.Record(values=[types.CypherInt(r1)]))
             i2 = 999
             n2 = 1001
             res2 = run(i2, n2)
             for r2 in range(i2, n2+1):
                 rec = res2.next()
                 self.assertEqual(rec, types.Record(values=[types.CypherInt(r2)]))
             self.assertEqual(res2.next(), types.NullRecord())
         self.assertEqual(res1.next(), types.NullRecord())
     self.assertEqual(res0.next(), types.NullRecord())
Esempio n. 3
0
    def testShouldEchoNestedLst(self):
        test_lists = [
            types.CypherList([
                types.CypherInt(1),
                types.CypherInt(2),
                types.CypherInt(3),
                types.CypherInt(4)
            ]),
            types.CypherList([
                types.CypherString("a"),
                types.CypherString("b"),
                types.CypherString("c"),
                types.CypherString("˚C")
            ]),
            types.CypherList([types.CypherBool(True),
                              types.CypherBool(False)]),
            types.CypherList([
                types.CypherFloat(1.1),
                types.CypherFloat(2.2),
                types.CypherFloat(3.3),
                types.CypherFloat(4.4)
            ]),
            types.CypherList([types.CypherNull(None),
                              types.CypherNull(None)]),
            types.CypherList([
                types.CypherNull(None),
                types.CypherBool(True),
                types.CypherString("Hello world"),
                types.CypherInt(-1234567890),
                types.CypherFloat(1.7976931348623157E+308)
            ])
        ]

        self.createDriverAndSession()
        self.verifyCanEcho(test_lists, types.CypherList)
Esempio n. 4
0
    def test_recover_from_fail_on_streaming(self):
        self._session = self._driver.session("r")
        result = self._session.run("UNWIND [1, 0, 2] AS x RETURN 10 / x")
        self.assertEqual(result.next(), types.Record(values=[types.CypherInt(10)]))
        with self.assertRaises(types.DriverError) as e:
            result.next()
        # TODO: Further inspection of the type of error? Should be a database error

        # This one should function properly
        result = self._session.run("RETURN 1 as n")
        self.assertEqual(result.next(), types.Record(values=[types.CypherInt(1)]))
Esempio n. 5
0
 def test_iteration_larger_than_fetch_size(self):
     if get_driver_name() not in ['go', 'dotnet']:
         self.skipTest("Fetchsize not implemented in backend")
     # Verifies that correct number of records are retrieved and that the parameter
     # is respected. Uses parameter to generate a long list of records.
     # Typical fetch size is 1000, selected value should be a bit larger than fetch size,
     # if driver allows this as a parameter we should set it to a known value.
     n = 1000
     self._session = self._driver.session("r", fetchSize=n)
     n = n + 7
     result = self._session.run("UNWIND RANGE(0, $n) AS x RETURN x", params={"n": types.CypherInt(n)})
     for x in range(0, n):
         exp = types.Record(values=[types.CypherInt(x)])
         rec = result.next()
         self.assertEqual(rec, exp)
Esempio n. 6
0
    def testShouldEchoNestedMap(self):
        if get_driver_name() not in ['dotnet', 'go']:
            self.skipTest("Not implemented in backend")

        test_maps = {
            "a":
            types.CypherMap({
                "a": types.CypherInt(1),
                "b": types.CypherInt(2),
                "c": types.CypherInt(3),
                "d": types.CypherInt(4)
            }),
            "b":
            types.CypherMap({
                "a": types.CypherBool(True),
                "b": types.CypherBool(False)
            }),
            "c":
            types.CypherMap({
                "a": types.CypherFloat(1.1),
                "b": types.CypherFloat(2.2),
                "c": types.CypherFloat(3.3)
            }),
            "d":
            types.CypherMap({
                "a": types.CypherString("a"),
                "b": types.CypherString("b"),
                "c": types.CypherString("c"),
                "temp": types.CypherString("˚C")
            }),
            "e":
            types.CypherMap({"a": types.CypherNull(None)}),
            "f":
            types.CypherMap({
                "a": types.CypherInt(1),
                "b": types.CypherBool(True),
                "c": types.CypherFloat(3.3),
                "d": types.CypherString("Hello World"),
                "e": types.CypherNull(None)
            }),
        }

        self.createDriverAndSession()
        self.verifyCanEcho(types.CypherMap(test_maps))
Esempio n. 7
0
 def test_iteration_smaller_than_fetch_size(self):
     if get_driver_name() not in ['go', 'dotnet']:
         self.skipTest("Fetchsize not implemented in backend")
     # Verifies that correct number of records are retrieved
     # Retrieve one extra record after last one the make sure driver can handle that.
     self._session = self._driver.session("r", fetchSize=1000)
     result = self._session.run("UNWIND [1, 2, 3, 4, 5] AS x RETURN x")
     expects = [
         types.Record(values=[types.CypherInt(1)]),
         types.Record(values=[types.CypherInt(2)]),
         types.Record(values=[types.CypherInt(3)]),
         types.Record(values=[types.CypherInt(4)]),
         types.Record(values=[types.CypherInt(5)]),
         types.NullRecord(),
         types.NullRecord()
     ]
     for exp in expects:
         rec = result.next()
         self.assertEqual(rec, exp)
Esempio n. 8
0
 def test_combined(self):
     if self._driverName not in ["go", "dotnet"]:
         self.skipTest("Session parameters not implemented in backend")
     self._server.start(script=script_combined)
     self._run("r",
               params={"p": types.CypherInt(1)},
               bookmarks=["b0"],
               txMeta={"k": "v"},
               timeout=11)
     self._driver.close()
     self._server.done()
Esempio n. 9
0
 def test_iteration_larger_than_fetch_size(self):
     # Verifies that correct number of records are retrieved and that the parameter
     # is respected. Uses parameter to generate a long list of records.
     # Typical fetch size is 1000, selected value should be a bit larger than fetch size,
     # if driver allows this as a parameter we should set it to a known value.
     n = 1007
     result = self._session.run("UNWIND RANGE(0, $n) AS x RETURN x",
                                params={"n": types.CypherInt(n)})
     for x in range(0, n):
         exp = types.Record(values=[x])
         rec = result.next()
         self.assertEqual(rec, exp)
Esempio n. 10
0
    def testShouldEchoBack(self):
        if get_driver_name() in ['java']:
            self.skipTest("Not implemented in backend")

        vals = [
            types.CypherBool(True),
            types.CypherBool(False),
            types.CypherNull(),
            types.CypherInt(1),
            types.CypherInt(-7),
            types.CypherInt(-129),
            types.CypherInt(129),
            types.CypherInt(2147483647),
            types.CypherInt(-2147483647),
            #types.CypherFloat(9223372036854775807),       # TODO: Investigate
            #types.CypherFloat(-9223372036854775807),
            #types.CypherFloat(1.7976931348623157E+308),
            #types.CypherFloat(2.2250738585072014e-308),
            #types.CypherFloat(4.9E-324),
            #types.CypherFloat(0.0),  # Js can not determine if it should be 0 or 0.0
            types.CypherFloat(1.1),
            types.CypherString("1"),
            types.CypherString("-17∂ßå®"),
            types.CypherString("String"),
            types.CypherString(""),
        ]

        self.createDriverAndSession()
        for val in vals:
            self.verifyCanEcho(val)
Esempio n. 11
0
    def testShouldEchoNestedLists(self):
        if get_driver_name() in ['java']:
            self.skipTest("Not implemented in backend")

        test_lists = [
            types.CypherList([
                types.CypherInt(1),
                types.CypherInt(2),
                types.CypherInt(3),
                types.CypherInt(4)
            ]),
            types.CypherList([
                types.CypherString("a"),
                types.CypherString("b"),
                types.CypherString("c"),
                types.CypherString("˚C")
            ]),
            types.CypherList([types.CypherBool(True),
                              types.CypherBool(False)]),
            types.CypherList([
                types.CypherFloat(1.1),
                types.CypherFloat(2.2),
                types.CypherFloat(3.3),
                types.CypherFloat(4.4)
            ]),
            types.CypherList([types.CypherNull(None),
                              types.CypherNull(None)]),
            types.CypherList([
                types.CypherNull(None),
                types.CypherBool(True),
                types.CypherString("Hello world"),
                types.CypherInt(-1234567890),
                types.CypherFloat(123.456)
            ])
        ]

        self.createDriverAndSession()
        self.verifyCanEcho(types.CypherList(test_lists))
Esempio n. 12
0
    def test_graph_node(self):
        result = self._session.run(
            "CREATE (n:TestLabel {num: 1, txt: 'abc'}) RETURN n")
        record = result.next()
        self.assertNotIsInstance(record, types.NullRecord)

        node = record.values[0]
        self.assertIsInstance(node, types.CypherNode)
        self.assertEqual(node.labels, ['TestLabel'])
        self.assertEqual(
            node.props,
            types.CypherMap({
                "num": types.CypherInt(1),
                "txt": types.CypherString('abc')
            }))
Esempio n. 13
0
    def test_recover_from_invalid_query(self):
        # Verifies that an error is returned on an invalid query and that the session
        # can function with a valid query afterwards.
        self._session = self._driver.session("r")
        with self.assertRaises(types.DriverError) as e:
            # DEVIATION
            # Go   - error trigger upon run
            # Java - error trigger upon iteration
            result = self._session.run("INVALID QUERY")
            result.next()
            # TODO: Further inspection of the type of error? Should be a client error

        # This one should function properly
        result = self._session.run("RETURN 1 as n")
        self.assertEqual(result.next(), types.Record(values=[types.CypherInt(1)]))
Esempio n. 14
0
    def test_primitives(self):
        result = self._session.run("RETURN NULL, 1, 'string', [1, 'a']")
        record = result.next()
        self.assertNotIsInstance(record, types.NullRecord)

        values = record.values
        self.assertIsInstance(values[0], types.CypherNull)
        self.assertIsInstance(values[1], types.CypherInt)
        self.assertIsInstance(values[2], types.CypherString)
        self.assertIsInstance(values[3], types.CypherList)
        self.assertEqual(values[1], 1)
        self.assertEqual(values[2], 'string')
        self.assertEqual(
            values[3].value,
            [types.CypherInt(1), types.CypherString('a')])
Esempio n. 15
0
    def testShouldEchoNode(self):
        self.createDriverAndSession()

        result = self._session.run(
            "CREATE (n:TestLabel {num: 1, txt: 'abc'}) RETURN n")
        record = result.next()
        self.assertNotIsInstance(record, types.NullRecord)

        node = record.values[0]
        self.assertIsInstance(node, types.CypherNode)
        self.assertEqual(node.labels,
                         types.CypherList([types.CypherString('TestLabel')]))
        self.assertEqual(
            node.props,
            types.CypherMap({
                "num": types.CypherInt(1),
                "txt": types.CypherString('abc')
            }))
Esempio n. 16
0
    def testShouldEchoVeryLongList(self):
        if get_driver_name() in ['java']:
            self.skipTest("Not implemented in backend")

        vals = [
            types.CypherNull(),
            types.CypherInt(1),
            types.CypherFloat(1.1),
            types.CypherString("hello"),
            types.CypherBool(True),
        ]

        self.createDriverAndSession()

        for val in vals:
            long_list = []
            for i in range(1000):
                long_list.append(val)
            self.verifyCanEcho(types.CypherList(long_list))
Esempio n. 17
0
    def testShouldEchoVeryLongMap(self):
        if get_driver_name() not in ['dotnet', 'go']:
            self.skipTest("Not implemented in backend")

        test_list = [
            types.CypherNull(None),
            types.CypherInt(1),
            types.CypherFloat(1.1),
            types.CypherString("Hello World"),
            types.CypherBool(True)
        ]

        self.createDriverAndSession()

        long_map = {}
        for cypherType in test_list:
            long_map.clear()
            for i in range(1000):
                long_map[str(i)] = cypherType
            self.verifyCanEcho(types.CypherMap(long_map))
Esempio n. 18
0
 def verifyConnectivity(self, auth_token):
     self.createDriverAndSession(auth_token)
     result = self._session.run("RETURN 2 as Number")
     self.assertEqual(result.next(),
                      types.Record(values=[types.CypherInt(2)]))
Esempio n. 19
0
 def run(i, n):
     return self._session.run("UNWIND RANGE ($i, $n) AS x RETURN x", {"i": types.CypherInt(i), "n": types.CypherInt(n)})
Esempio n. 20
0
 def run(tx, i, n):
     return tx.run("UNWIND RANGE ($i, $n) AS x RETURN x", {"i": types.CypherInt(i), "n": types.CypherInt(n)})