Пример #1
0
    def test_sync_basic_datatypes_01(self):
        for _ in range(10):
            self.assertEqual(self.con.query_one('select ()'), ())

            self.assertEqual(self.con.query('select (1,)'),
                             edgedb.Set([(1, )]))

            self.assertEqual(self.con.query_one('select <array<int64>>[]'), [])

            self.assertEqual(self.con.query('select ["a", "b"]'),
                             edgedb.Set([["a", "b"]]))

            self.assertEqual(
                self.con.query('''
                    SELECT {(a := 1 + 1 + 40, world := ("hello", 32)),
                            (a:=1, world := ("yo", 10))};
                '''),
                edgedb.Set([
                    edgedb.NamedTuple(a=42, world=("hello", 32)),
                    edgedb.NamedTuple(a=1, world=("yo", 10)),
                ]))

            with self.assertRaisesRegex(
                    edgedb.InterfaceError,
                    r'query cannot be executed with query_one\('):
                self.con.query_one('SELECT {1, 2}')

            with self.assertRaisesRegex(edgedb.NoDataError,
                                        r'\bquery_one_json\('):
                self.con.query_one_json('SELECT <int64>{}')
Пример #2
0
    async def test_async_basic_datatypes_01(self):
        for _ in range(10):
            self.assertEqual(await self.con.query_one('select ()'), ())

            self.assertEqual(await self.con.query('select (1,)'),
                             edgedb.Set([(1, )]))

            async with self.con.transaction(isolation='repeatable_read'):
                self.assertEqual(
                    await self.con.query_one('select <array<int64>>[]'), [])

            self.assertEqual(await self.con.query('select ["a", "b"]'),
                             edgedb.Set([["a", "b"]]))

            self.assertEqual(
                await self.con.query('''
                    SELECT {(a := 1 + 1 + 40, world := ("hello", 32)),
                            (a:=1, world := ("yo", 10))};
                '''),
                edgedb.Set([
                    edgedb.NamedTuple(a=42, world=("hello", 32)),
                    edgedb.NamedTuple(a=1, world=("yo", 10)),
                ]))

            with self.assertRaisesRegex(
                    edgedb.InterfaceError,
                    r'query_one\(\) as it returns a multiset'):
                await self.con.query_one('SELECT {1, 2}')

            with self.assertRaisesRegex(edgedb.NoDataError, r'\bquery_one\('):
                await self.con.query_one('SELECT <int64>{}')
Пример #3
0
    async def test_async_basic_datatypes_01(self):
        for _ in range(10):
            self.assertEqual(await self.client.query_single('select ()'), ())

            self.assertEqual(await self.client.query('select (1,)'),
                             edgedb.Set([(1, )]))

            self.assertEqual(await self.client.query('select ["a", "b"]'),
                             edgedb.Set([["a", "b"]]))

            self.assertEqual(
                await self.client.query('''
                    SELECT {(a := 1 + 1 + 40, world := ("hello", 32)),
                            (a:=1, world := ("yo", 10))};
                '''),
                edgedb.Set([
                    edgedb.NamedTuple(a=42, world=("hello", 32)),
                    edgedb.NamedTuple(a=1, world=("yo", 10)),
                ]))

            with self.assertRaisesRegex(
                    edgedb.InterfaceError,
                    r'query_single\(\) as it returns a multiset'):
                await self.client.query_single('SELECT {1, 2}')

            with self.assertRaisesRegex(
                    edgedb.InterfaceError,
                    r'query_required_single\(\) as it returns a multiset'):
                await self.client.query_required_single('SELECT {1, 2}')

            with self.assertRaisesRegex(edgedb.NoDataError,
                                        r'\bquery_required_single\('):
                await self.client.query_required_single('SELECT <int64>{}')
Пример #4
0
    def test_sync_basic_datatypes_02(self):
        self.assertEqual(
            self.con.query(r'''select [b"\x00a", b"b", b'', b'\na']'''),
            edgedb.Set([[b"\x00a", b"b", b'', b'\na']]))

        self.assertEqual(self.con.query(r'select <bytes>$0', b'he\x00llo'),
                         edgedb.Set([b'he\x00llo']))
Пример #5
0
    def test_set_2(self):
        s = edgedb.Set((1, 2, 3000, 'a'))

        self.assertEqual(repr(s), "Set{1, 2, 3000, 'a'}")

        self.assertEqual(hash(s),
                         hash(edgedb.Set((1, 2, sum([1000, 2000]), 'a'))))

        self.assertNotEqual(hash(s), hash((1, 2, 3000, 'a')))
Пример #6
0
    def test_set_7(self):
        self.assertEqual(
            edgedb.Set([1, 2, 3]),
            [1, 2, 3])

        self.assertNotEqual(
            edgedb.Set([1, 2, 3]),
            [3, 2, 1])

        self.assertNotEqual(
            edgedb.Set([1, 2, 3]),
            1)
Пример #7
0
    def test_set_1(self):
        s = edgedb.Set(())
        self.assertEqual(repr(s), 'Set{}')

        s = edgedb.Set((1, 2, [], 'a'))

        self.assertEqual(s[1], 2)
        self.assertEqual(s[2], [])
        self.assertEqual(len(s), 4)
        with self.assertRaises(IndexError):
            s[10]

        with self.assertRaises(TypeError):
            s[0] = 1
Пример #8
0
    async def test_async_basic_datatypes_04(self):
        val = await self.con.query_one(
            '''
                SELECT schema::ObjectType {
                    foo := {
                        [(a := 1, b := 2), (a := 3, b := 4)],
                        [(a := 5, b := 6)],
                        <array <tuple<a: int64, b: int64>>>[],
                    }
                } LIMIT 1
            '''
        )

        self.assertEqual(
            val.foo,
            edgedb.Set([
                edgedb.Array([
                    edgedb.NamedTuple(a=1, b=2),
                    edgedb.NamedTuple(a=3, b=4),
                ]),
                edgedb.Array([
                    edgedb.NamedTuple(a=5, b=6),
                ]),
                edgedb.Array([]),
            ]),
        )
Пример #9
0
    def test_object_links_2(self):
        User = private.create_object_factory(
            id='property',
            friends='link',
            enemies='link',
        )

        u1 = User(1, edgedb.Set([]), edgedb.Set([]))
        u2 = User(2, edgedb.Set([]), edgedb.Set([]))
        u3 = User(3, edgedb.Set([]), edgedb.Set([]))
        u4 = User(4, edgedb.Set([u1, u2]), edgedb.Set([u1, u2]))
        u5 = User(5, edgedb.Set([u1, u3]), edgedb.Set([u1, u2]))

        self.assertNotEqual(u4['friends'], u4['enemies'])
        self.assertNotEqual(u4['enemies'], u5['enemies'])

        self.assertEqual(set(dir(u1)), {'id', 'friends', 'enemies'})
Пример #10
0
    def test_set_6(self):
        f = private.create_object_factory(id={'property', 'implicit'},
                                          lb='link-property',
                                          c='property')

        o1 = f(1, 'aa', edgedb.Set([1, 2, 3]))
        o2 = f(1, 'ab', edgedb.Set([1, 2, 4]))
        o3 = f(3, 'ac', edgedb.Set([5, 5, 5, 5]))

        self.assertEqual(edgedb.Set([o1, o2, o3]), edgedb.Set([o2, o3, o1]))

        self.assertEqual(edgedb.Set([o1, o3]), edgedb.Set([o2, o3]))

        self.assertNotEqual(edgedb.Set([o1, o1]), edgedb.Set([o2, o3]))
Пример #11
0
 def test_sync_exec_error_recover_03(self):
     query = 'select 10 // <int64>$0;'
     for i in [1, 2, 0, 3, 1, 0, 1]:
         if i:
             self.assertEqual(self.con.query(query, i),
                              edgedb.Set([10 // i]))
         else:
             with self.assertRaises(edgedb.DivisionByZeroError):
                 self.con.query(query, i)
Пример #12
0
    def test_sync_exec_error_recover_01(self):
        for _ in range(2):
            with self.assertRaises(edgedb.DivisionByZeroError):
                self.con.query('select 1 / 0;')

            with self.assertRaises(edgedb.DivisionByZeroError):
                self.con.query('select 1 / 0;')

            for _ in range(10):
                self.assertEqual(self.con.query('select 1;'), edgedb.Set(
                    (1, )))
Пример #13
0
 async def test_json_elements(self):
     result, _ = await self.client.connection.raw_query(
         abstract.QueryContext(
             query=abstract.QueryWithArgs('SELECT {"aaa", "bbb"}', (), {}),
             cache=self.client._get_query_cache(),
             query_options=abstract.QueryOptions(
                 io_format=protocol.IoFormat.JSON_ELEMENTS,
                 expect_one=False,
                 required_one=False,
             ),
             retry_options=None,
         ))
     self.assertEqual(result, edgedb.Set(['"aaa"', '"bbb"']))
Пример #14
0
    def test_object_links_1(self):
        O2 = private.create_object_factory(
            id='property',
            lb='link-property',
            c='property'
        )

        O1 = private.create_object_factory(
            id='property',
            o2s='link'
        )

        o2_1 = O2(1, 'linkprop o2 1', 3)
        o2_2 = O2(4, 'linkprop o2 2', 6)
        o1 = O1(2, edgedb.Set((o2_1, o2_2)))

        linkset = o1['o2s']
        self.assertEqual(len(linkset), 2)
        self.assertEqual(linkset, o1['o2s'])
        self.assertEqual(hash(linkset), hash(o1['o2s']))
        self.assertEqual(
            repr(linkset),
            "LinkSet(name='o2s', source_id=2, target_ids={1, 4})")

        link1 = linkset[0]
        self.assertIs(link1.source, o1)
        self.assertIs(link1.target, o2_1)
        self.assertEqual(
            repr(link1),
            "Link(name='o2s', source_id=2, target_id=1)")
        self.assertEqual(set(dir(link1)), {'target', 'source', 'lb'})

        link2 = linkset[1]
        self.assertIs(link2.source, o1)
        self.assertIs(link2.target, o2_2)

        self.assertNotEqual(link1, link2)

        self.assertEqual(list(linkset), [link1, link2])
        self.assertEqual([l for l in linkset], [link1, link2])

        self.assertNotEqual(link1, link2)

        self.assertEqual(link1.lb, 'linkprop o2 1')
        self.assertEqual(link2.lb, 'linkprop o2 2')

        with self.assertRaises(AttributeError):
            link2.aaaa
Пример #15
0
    def test_sync_parse_error_recover_01(self):
        for _ in range(2):
            with self.assertRaises(edgedb.EdgeQLSyntaxError):
                self.con.query('select syntax error')

            with self.assertRaises(edgedb.EdgeQLSyntaxError):
                self.con.query('select syntax error')

            with self.assertRaisesRegex(edgedb.EdgeQLSyntaxError,
                                        'Unexpected end of line'):
                self.con.query('select (')

            with self.assertRaisesRegex(edgedb.EdgeQLSyntaxError,
                                        'Unexpected end of line'):
                self.con.query_json('select (')

            for _ in range(10):
                self.assertEqual(self.con.query('select 1;'), edgedb.Set(
                    (1, )))

            self.assertFalse(self.con.is_closed())
Пример #16
0
    def test_object_links_3(self):
        User = private.create_object_factory(
            id='property',
            friend='link',
        )

        u1 = User(1, None)
        u2 = User(2, u1)
        u3 = User(3, edgedb.Set([]))

        self.assertEqual(set(dir(u2['friend'])), {'source', 'target'})

        self.assertIs(u2['friend'].target, u1)

        self.assertIsNone(u1['friend'])

        self.assertEqual(len(u3['friend']), 0)
        self.assertEqual(repr(u3['friend']),
                         "LinkSet(name='friend', source_id=3, target_ids={})")

        self.assertEqual(repr(u2['friend']),
                         "Link(name='friend', source_id=2, target_id=1)")
Пример #17
0
    def test_set_3(self):
        s = edgedb.Set(())

        self.assertEqual(len(s), 0)
        self.assertEqual(hash(s), hash(edgedb.Set(())))
        self.assertNotEqual(hash(s), hash(()))
Пример #18
0
 async def test_async_args_01(self):
     self.assertEqual(
         await self.con.fetchall(
             'select (<array<str>>$foo)[0] ++ (<array<str>>$bar)[0];',
             foo=['aaa'], bar=['bbb']),
         edgedb.Set(('aaabbb',)))
Пример #19
0
 async def test_async_args_02(self):
     self.assertEqual(
         await self.con.fetchall(
             'select (<array<str>>$0)[0] ++ (<array<str>>$1)[0];',
             ['aaa'], ['bbb']),
         edgedb.Set(('aaabbb',)))
Пример #20
0
 async def test_json_elements(self):
     self.assertEqual(
         await self.con._fetchall_json_elements('SELECT {"aaa", "bbb"}'),
         edgedb.Set(['"aaa"', '"bbb"']))
Пример #21
0
 def test_set_4(self):
     s = edgedb.Set(([], ))
     s[0].append(s)
     self.assertEqual(repr(s), "Set{[Set{...}]}")
Пример #22
0
    def test_set_5(self):
        self.assertEqual(edgedb.Set([1, 2, 3]), edgedb.Set([3, 2, 1]))

        self.assertEqual(edgedb.Set([]), edgedb.Set([]))

        self.assertEqual(edgedb.Set([1]), edgedb.Set([1]))

        self.assertNotEqual(edgedb.Set([1]), edgedb.Set([]))

        self.assertNotEqual(edgedb.Set([1]), edgedb.Set([2]))

        self.assertNotEqual(edgedb.Set([1, 2]), edgedb.Set([2, 2]))

        self.assertNotEqual(edgedb.Set([1, 1, 2]), edgedb.Set([2, 2, 1]))
Пример #23
0
 def test_sync_args_01(self):
     self.assertEqual(
         self.con.query(
             'select (<array<str>>$foo)[0] ++ (<array<str>>$bar)[0];',
             foo=['aaa'],
             bar=['bbb']), edgedb.Set(('aaabbb', )))
Пример #24
0
 def test_set_8(self):
     s = edgedb.Set([1, 2, 3])
     si = iter(s)
     self.assertEqual(list(si), [1, 2, 3])
Пример #25
0
 def test_sync_args_02(self):
     self.assertEqual(
         self.con.query(
             'select (<array<str>>$0)[0] ++ (<array<str>>$1)[0];', ['aaa'],
             ['bbb']), edgedb.Set(('aaabbb', )))