cubicweb/server/test/unittest_querier.py
author Laurent Wouters <lwouters@cenotelie.fr>
Fri, 20 Mar 2020 14:34:07 +0100
changeset 12931 6eae252361e5
parent 12567 26744ad37953
permissions -rw-r--r--
[rql] Store selected variables for RQL select queries in ResultSet (#17218476) By storing the name of the selected variables for RQL select queries in the ResultSet (within the "variables" attribute), the information can be passed down to specific protocols, e.g. rqlio that may wish to pass is down further to clients. In turn, clients can then choose to present the results of RQL select queries as symbolic bindings using the names used in the query's projection, instead of ordinal arrays.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     1
# -*- coding: iso-8859-1 -*-
12237
2dd0dcb2e5f9 [test] Drop no more used "maxeid" based deletion in BaseQuerierTC and derived tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12055
diff changeset
     2
# copyright 2003 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4848
diff changeset
     3
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4848
diff changeset
     4
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4848
diff changeset
     5
# This file is part of CubicWeb.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4848
diff changeset
     6
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4848
diff changeset
     7
# CubicWeb is free software: you can redistribute it and/or modify it under the
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4848
diff changeset
     8
# terms of the GNU Lesser General Public License as published by the Free
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4848
diff changeset
     9
# Software Foundation, either version 2.1 of the License, or (at your option)
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4848
diff changeset
    10
# any later version.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4848
diff changeset
    11
#
5424
8ecbcbff9777 replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5421
diff changeset
    12
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4848
diff changeset
    13
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4848
diff changeset
    14
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4848
diff changeset
    15
# details.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4848
diff changeset
    16
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4848
diff changeset
    17
# You should have received a copy of the GNU Lesser General Public License along
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4848
diff changeset
    18
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
6196
12fdccedab5a cleanups
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6194
diff changeset
    19
"""unit tests for modules cubicweb.server.querier and cubicweb.server.ssplanner
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    20
"""
8343
6bd8db130476 Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents: 8342
diff changeset
    21
12242
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
    22
from contextlib import contextmanager
7166
dde161937d3e [time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7148
diff changeset
    23
from datetime import date, datetime, timedelta, tzinfo
11769
f5b815f67ce2 [test] Remove some usages of lgc.testlib
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11768
diff changeset
    24
import unittest
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    25
11034
75d752e6daf7 [server] improve TZDatetime support
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11032
diff changeset
    26
import pytz
75d752e6daf7 [server] improve TZDatetime support
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11032
diff changeset
    27
11035
0fb100e8385b pep8 bits
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11034
diff changeset
    28
from rql import BadRQLQuery
11767
432f87a63057 flake8 and all
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11681
diff changeset
    29
from rql.utils import register_function, FunctionDescr
1251
af40e615dc89 introduce a 'cw_' prefix on entity table and column names so we don't conflict with sql or DBMS specific keywords
sylvain.thenault@logilab.fr
parents: 439
diff changeset
    30
11768
b8b71dd09a2c [test] Avoid pytest discovery warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11767
diff changeset
    31
from cubicweb import QueryError, Unauthorized, Binary, devtools
11767
432f87a63057 flake8 and all
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11681
diff changeset
    32
from cubicweb.server.sqlutils import SQL_CONNECT_HOOKS, SQL_PREFIX
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    33
from cubicweb.server.utils import crypt_password
8542
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
    34
from cubicweb.server.querier import manual_build_descr, _make_description
8342
7a5271182ef0 [rql annotation] fix has_text_query detection (if coming from sub-query and if has_text on a column aliases. Closes #2275322
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8317
diff changeset
    35
from cubicweb.devtools.testlib import CubicWebTC
1016
26387b836099 use datetime instead of mx.DateTime
sylvain.thenault@logilab.fr
parents: 439
diff changeset
    36
from cubicweb.devtools.repotest import tuplify, BaseQuerierTC
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    37
11035
0fb100e8385b pep8 bits
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11034
diff changeset
    38
7166
dde161937d3e [time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7148
diff changeset
    39
class FixedOffset(tzinfo):
dde161937d3e [time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7148
diff changeset
    40
    def __init__(self, hours=0):
dde161937d3e [time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7148
diff changeset
    41
        self.hours = hours
11767
432f87a63057 flake8 and all
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11681
diff changeset
    42
7166
dde161937d3e [time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7148
diff changeset
    43
    def utcoffset(self, dt):
dde161937d3e [time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7148
diff changeset
    44
        return timedelta(hours=self.hours)
11767
432f87a63057 flake8 and all
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11681
diff changeset
    45
7166
dde161937d3e [time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7148
diff changeset
    46
    def dst(self, dt):
dde161937d3e [time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7148
diff changeset
    47
        return timedelta(0)
dde161937d3e [time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7148
diff changeset
    48
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    49
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    50
# register priority/severity sorting registered procedure
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    51
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    52
class group_sort_value(FunctionDescr):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    53
    supported_backends = ('sqlite',)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    54
    rtype = 'Int'
11767
432f87a63057 flake8 and all
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11681
diff changeset
    55
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    56
try:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    57
    register_function(group_sort_value)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    58
except AssertionError:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    59
    pass
11767
432f87a63057 flake8 and all
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11681
diff changeset
    60
432f87a63057 flake8 and all
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11681
diff changeset
    61
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    62
def init_sqlite_connexion(cnx):
11767
432f87a63057 flake8 and all
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11681
diff changeset
    63
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    64
    def group_sort_value(text):
11767
432f87a63057 flake8 and all
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11681
diff changeset
    65
        return {"managers": "3", "users": "2", "guests": "1", "owners": "0"}[text]
432f87a63057 flake8 and all
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11681
diff changeset
    66
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    67
    cnx.create_function("GROUP_SORT_VALUE", 1, group_sort_value)
11767
432f87a63057 flake8 and all
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11681
diff changeset
    68
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    69
SQL_CONNECT_HOOKS['sqlite'].append(init_sqlite_connexion)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    70
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    71
8347
d317a2880059 [test] use setUpClass rather than setUpModule to avoid inter-dependency pb with CubicWebTC sub-classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8343
diff changeset
    72
def setUpClass(cls, *args):
6631
26c303c3f1aa [test] make test independant from the working directory
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6427
diff changeset
    73
    global repo, cnx
11768
b8b71dd09a2c [test] Avoid pytest discovery warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11767
diff changeset
    74
    config = devtools.TestServerConfiguration('data', __file__)
b8b71dd09a2c [test] Avoid pytest discovery warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11767
diff changeset
    75
    handler = devtools.get_test_db_handler(config)
7078
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7043
diff changeset
    76
    handler.build_db_cache()
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7043
diff changeset
    77
    repo, cnx = handler.get_repo_and_cnx()
8347
d317a2880059 [test] use setUpClass rather than setUpModule to avoid inter-dependency pb with CubicWebTC sub-classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8343
diff changeset
    78
    cls.repo = repo
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    79
8347
d317a2880059 [test] use setUpClass rather than setUpModule to avoid inter-dependency pb with CubicWebTC sub-classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8343
diff changeset
    80
def tearDownClass(cls, *args):
4766
162b2b127b15 [test] get a chance to get proper garbage collection when running pytest on whole cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4758
diff changeset
    81
    global repo, cnx
162b2b127b15 [test] get a chance to get proper garbage collection when running pytest on whole cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4758
diff changeset
    82
    repo.shutdown()
162b2b127b15 [test] get a chance to get proper garbage collection when running pytest on whole cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4758
diff changeset
    83
    del repo, cnx
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    84
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    85
8542
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
    86
class Variable:
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
    87
    def __init__(self, name):
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
    88
        self.name = name
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
    89
        self.children = []
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
    90
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
    91
    def get_type(self, solution, args=None):
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
    92
        return solution[self.name]
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
    93
    def as_string(self):
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
    94
        return self.name
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
    95
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
    96
class Function:
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
    97
    def __init__(self, name, varname):
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
    98
        self.name = name
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
    99
        self.children = [Variable(varname)]
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
   100
    def get_type(self, solution, args=None):
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
   101
        return 'Int'
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
   102
11769
f5b815f67ce2 [test] Remove some usages of lgc.testlib
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11768
diff changeset
   103
class MakeDescriptionTC(unittest.TestCase):
8542
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
   104
    def test_known_values(self):
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
   105
        solution = {'A': 'Int', 'B': 'CWUser'}
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
   106
        self.assertEqual(_make_description((Function('max', 'A'), Variable('B')), {}, solution),
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
   107
                          ['Int','CWUser'])
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
   108
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
   109
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   110
class UtilsTC(BaseQuerierTC):
8347
d317a2880059 [test] use setUpClass rather than setUpModule to avoid inter-dependency pb with CubicWebTC sub-classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8343
diff changeset
   111
    setUpClass = classmethod(setUpClass)
d317a2880059 [test] use setUpClass rather than setUpModule to avoid inter-dependency pb with CubicWebTC sub-classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8343
diff changeset
   112
    tearDownClass = classmethod(tearDownClass)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   113
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   114
    def test_preprocess_1(self):
12055
6672f51d8268 [test] Rename BaseQuerierTC._access to BaseQuerierTC.admin_access
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12041
diff changeset
   115
        with self.admin_access.cnx() as cnx:
9833
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   116
            reid = cnx.execute('Any X WHERE X is CWRType, X name "owned_by"')[0][0]
9850
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   117
            rqlst = self._prepare(cnx, 'Any COUNT(RDEF) WHERE RDEF relation_type X, X eid %(x)s',
9833
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   118
                                  {'x': reid})
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   119
            self.assertEqual([{'RDEF': 'CWAttribute'}, {'RDEF': 'CWRelation'}],
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   120
                             rqlst.solutions)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   121
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   122
    def test_preprocess_2(self):
12055
6672f51d8268 [test] Rename BaseQuerierTC._access to BaseQuerierTC.admin_access
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12041
diff changeset
   123
        with self.admin_access.cnx() as cnx:
9850
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   124
            teid = cnx.execute("INSERT Tag X: X name 'tag'")[0][0]
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   125
            #geid = self.execute("CWGroup G WHERE G name 'users'")[0][0]
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   126
            #self.execute("SET X tags Y WHERE X eid %(t)s, Y eid %(g)s",
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   127
            #             {'g': geid, 't': teid}, 'g')
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   128
            rqlst = self._prepare(cnx, 'Any X WHERE E eid %(x)s, E tags X', {'x': teid})
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   129
            # the query may be optimized, should keep only one solution
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   130
            # (any one, etype will be discarded)
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   131
            self.assertEqual(1, len(rqlst.solutions))
9833
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   132
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   133
    def assertRQLEqual(self, expected, got):
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   134
        from rql import parse
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12539
diff changeset
   135
        self.assertMultiLineEqual(str(parse(expected)),
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12539
diff changeset
   136
                                  str(parse(got)))
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   137
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   138
    def test_preprocess_security(self):
12039
7514626e1dc5 [session+test] Stop storing / accessing session when it's not necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11774
diff changeset
   139
        with self.user_groups_session('users') as cnx:
9850
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   140
            plan = self._prepare_plan(cnx, 'Any ETN,COUNT(X) GROUPBY ETN '
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   141
                                      'WHERE X is ET, ET name ETN')
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   142
            union = plan.rqlst
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   143
            plan.preprocess(union)
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   144
            self.assertEqual(len(union.children), 1)
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   145
            self.assertEqual(len(union.children[0].with_), 1)
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   146
            subq = union.children[0].with_[0].query
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   147
            self.assertEqual(len(subq.children), 4)
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   148
            self.assertEqual([t.as_string() for t in union.children[0].selection],
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   149
                              ['ETN','COUNT(X)'])
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   150
            self.assertEqual([t.as_string() for t in union.children[0].groupby],
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   151
                              ['ETN'])
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   152
            partrqls = sorted(((rqlst.as_string(), rqlst.solutions) for rqlst in subq.children))
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   153
            rql, solutions = partrqls[0]
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   154
            self.assertRQLEqual(rql,
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   155
                                'Any ETN,X WHERE X is ET, ET name ETN, (EXISTS(X owned_by %(B)s))'
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   156
                                ' OR ((((EXISTS(D concerne C?, C owned_by %(B)s, '
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   157
                                '               X identity D, C is Division, D is Affaire))'
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   158
                                ' OR (EXISTS(H concerne G?, G owned_by %(B)s, G is SubDivision, '
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   159
                                '            X identity H, H is Affaire)))'
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   160
                                ' OR (EXISTS(I concerne F?, F owned_by %(B)s, F is Societe, '
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   161
                                '            X identity I, I is Affaire)))'
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   162
                                ' OR (EXISTS(J concerne E?, E owned_by %(B)s, E is Note, '
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   163
                                '            X identity J, J is Affaire)))'
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   164
                                ', ET is CWEType, X is Affaire')
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   165
            self.assertEqual(solutions, [{'C': 'Division',
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   166
                                           'D': 'Affaire',
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   167
                                           'E': 'Note',
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   168
                                           'F': 'Societe',
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   169
                                           'G': 'SubDivision',
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   170
                                           'H': 'Affaire',
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   171
                                           'I': 'Affaire',
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   172
                                           'J': 'Affaire',
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   173
                                           'X': 'Affaire',
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   174
                                           'ET': 'CWEType', 'ETN': 'String'}])
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   175
            rql, solutions = partrqls[1]
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   176
            self.assertRQLEqual(rql,  'Any ETN,X WHERE X is ET, ET name ETN, ET is CWEType, '
12539
10159a3d1d72 Drop deprecated CWCache entity type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12248
diff changeset
   177
                                'X is IN(BaseTransition, Bookmark, CWAttribute, CWComputedRType, '
9956
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents: 9850
diff changeset
   178
                                '        CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, '
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents: 9850
diff changeset
   179
                                '        CWRType, CWRelation, CWSource, CWUniqueTogetherConstraint, CWUser, Card, '
9990
c84ad981fc4a merge 3.19.4 in 3.20 branch
Julien Cristau <julien.cristau@logilab.fr>
parents: 9956 9984
diff changeset
   180
                                '        Comment, Division, Email, EmailPart, EmailThread, ExternalUri, File, Folder, '
c84ad981fc4a merge 3.19.4 in 3.20 branch
Julien Cristau <julien.cristau@logilab.fr>
parents: 9956 9984
diff changeset
   181
                                '        Frozable, Note, Old, Personne, RQLExpression, Societe, State, SubDivision, '
9850
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   182
                                '        SubWorkflowExitPoint, Tag, TrInfo, Transition, Workflow, WorkflowTransition)')
10822
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   183
            self.assertCountEqual(solutions,
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   184
                                  [{'X': 'BaseTransition', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   185
                                   {'X': 'Bookmark', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   186
                                   {'X': 'Card', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   187
                                   {'X': 'Comment', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   188
                                   {'X': 'Division', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   189
                                   {'X': 'CWComputedRType', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   190
                                   {'X': 'CWConstraint', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   191
                                   {'X': 'CWConstraintType', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   192
                                   {'X': 'CWEType', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   193
                                   {'X': 'CWAttribute', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   194
                                   {'X': 'CWGroup', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   195
                                   {'X': 'CWRelation', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   196
                                   {'X': 'CWPermission', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   197
                                   {'X': 'CWProperty', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   198
                                   {'X': 'CWRType', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   199
                                   {'X': 'CWSource', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   200
                                   {'X': 'CWUniqueTogetherConstraint', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   201
                                   {'X': 'CWUser', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   202
                                   {'X': 'Email', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   203
                                   {'X': 'EmailPart', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   204
                                   {'X': 'EmailThread', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   205
                                   {'X': 'ExternalUri', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   206
                                   {'X': 'File', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   207
                                   {'X': 'Folder', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   208
                                   {'X': 'Frozable', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   209
                                   {'X': 'Note', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   210
                                   {'X': 'Old', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   211
                                   {'X': 'Personne', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   212
                                   {'X': 'RQLExpression', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   213
                                   {'X': 'Societe', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   214
                                   {'X': 'State', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   215
                                   {'X': 'SubDivision', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   216
                                   {'X': 'SubWorkflowExitPoint', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   217
                                   {'X': 'Tag', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   218
                                   {'X': 'Transition', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   219
                                   {'X': 'TrInfo', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   220
                                   {'X': 'Workflow', 'ETN': 'String', 'ET': 'CWEType'},
9337c72ad92c [server/test] sorting vs dict vs python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 10765
diff changeset
   221
                                   {'X': 'WorkflowTransition', 'ETN': 'String', 'ET': 'CWEType'}])
9850
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   222
            rql, solutions = partrqls[2]
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   223
            self.assertEqual(rql,
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   224
                             'Any ETN,X WHERE X is ET, ET name ETN, EXISTS(%(D)s use_email X), '
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   225
                             'ET is CWEType, X is EmailAddress')
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   226
            self.assertEqual(solutions, [{'X': 'EmailAddress', 'ET': 'CWEType', 'ETN': 'String'}])
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   227
            rql, solutions = partrqls[3]
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   228
            self.assertEqual(rql,
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   229
                              'Any ETN,X WHERE X is ET, ET name ETN, EXISTS(X owned_by %(C)s), '
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   230
                              'ET is CWEType, X is Basket')
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   231
            self.assertEqual(solutions, [{'X': 'Basket', 'ET': 'CWEType', 'ETN': 'String'}])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   232
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   233
    def test_preprocess_security_aggregat(self):
12039
7514626e1dc5 [session+test] Stop storing / accessing session when it's not necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11774
diff changeset
   234
        with self.user_groups_session('users') as cnx:
9850
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   235
            plan = self._prepare_plan(cnx, 'Any MAX(X)')
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   236
            union = plan.rqlst
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   237
            plan.preprocess(union)
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   238
            self.assertEqual(len(union.children), 1)
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   239
            self.assertEqual(len(union.children[0].with_), 1)
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   240
            subq = union.children[0].with_[0].query
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   241
            self.assertEqual(len(subq.children), 4)
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   242
            self.assertEqual([t.as_string() for t in union.children[0].selection],
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   243
                              ['MAX(X)'])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   244
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   245
    def test_preprocess_nonregr(self):
12055
6672f51d8268 [test] Rename BaseQuerierTC._access to BaseQuerierTC.admin_access
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12041
diff changeset
   246
        with self.admin_access.cnx() as cnx:
9850
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   247
            rqlst = self._prepare(cnx, 'Any S ORDERBY SI WHERE NOT S ecrit_par O, S para SI')
5ef9dd383ae2 [tests/rqlannotation,querier] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9833
diff changeset
   248
            self.assertEqual(len(rqlst.solutions), 1)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   249
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   250
    def test_build_description(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   251
        # should return an empty result set
12055
6672f51d8268 [test] Rename BaseQuerierTC._access to BaseQuerierTC.admin_access
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12041
diff changeset
   252
        rset = self.qexecute('Any X WHERE X eid %(x)s', {'x': self.admin_access._user.eid})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   253
        self.assertEqual(rset.description[0][0], 'CWUser')
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   254
        rset = self.qexecute('Any 1')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   255
        self.assertEqual(rset.description[0][0], 'Int')
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   256
        rset = self.qexecute('Any TRUE')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   257
        self.assertEqual(rset.description[0][0], 'Boolean')
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   258
        rset = self.qexecute('Any "hop"')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   259
        self.assertEqual(rset.description[0][0], 'String')
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   260
        rset = self.qexecute('Any TODAY')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   261
        self.assertEqual(rset.description[0][0], 'Date')
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   262
        rset = self.qexecute('Any NOW')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   263
        self.assertEqual(rset.description[0][0], 'Datetime')
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   264
        rset = self.qexecute('Any %(x)s', {'x': 1})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   265
        self.assertEqual(rset.description[0][0], 'Int')
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   266
        rset = self.qexecute('Any %(x)s', {'x': True})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   267
        self.assertEqual(rset.description[0][0], 'Boolean')
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   268
        rset = self.qexecute('Any %(x)s', {'x': 1.0})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   269
        self.assertEqual(rset.description[0][0], 'Float')
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   270
        rset = self.qexecute('Any %(x)s', {'x': datetime.now()})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   271
        self.assertEqual(rset.description[0][0], 'Datetime')
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   272
        rset = self.qexecute('Any %(x)s', {'x': 'str'})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   273
        self.assertEqual(rset.description[0][0], 'String')
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   274
        rset = self.qexecute('Any %(x)s', {'x': u'str'})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   275
        self.assertEqual(rset.description[0][0], 'String')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   276
8542
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
   277
    def test_build_descr1(self):
12055
6672f51d8268 [test] Rename BaseQuerierTC._access to BaseQuerierTC.admin_access
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12041
diff changeset
   278
        with self.admin_access.cnx() as cnx:
9833
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   279
            rset = cnx.execute('(Any U,L WHERE U login L) UNION '
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   280
                               '(Any G,N WHERE G name N, G is CWGroup)')
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   281
            orig_length = len(rset)
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   282
            rset.rows[0][0] = 9999999
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   283
            description = manual_build_descr(cnx, rset.syntax_tree(), None, rset.rows)
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   284
            self.assertEqual(len(description), orig_length - 1)
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   285
            self.assertEqual(len(rset.rows), orig_length - 1)
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   286
            self.assertNotEqual(rset.rows[0][0], 9999999)
8542
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
   287
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
   288
    def test_build_descr2(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   289
        rset = self.qexecute('Any X,Y WITH X,Y BEING ((Any G,NULL WHERE G is CWGroup) UNION '
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   290
                             '(Any U,G WHERE U in_group G))')
8542
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
   291
        for x, y in rset.description:
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
   292
            if y is not None:
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
   293
                self.assertEqual(y, 'CWGroup')
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
   294
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
   295
    def test_build_descr3(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   296
        rset = self.qexecute('(Any G,NULL WHERE G is CWGroup) UNION '
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   297
                             '(Any U,G WHERE U in_group G)')
8542
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
   298
        for x, y in rset.description:
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
   299
            if y is not None:
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
   300
                self.assertEqual(y, 'CWGroup')
7e264ce34cd4 [session / querier] reorganize code to building result set descriptions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8349
diff changeset
   301
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   302
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   303
class QuerierTC(BaseQuerierTC):
8347
d317a2880059 [test] use setUpClass rather than setUpModule to avoid inter-dependency pb with CubicWebTC sub-classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8343
diff changeset
   304
    setUpClass = classmethod(setUpClass)
d317a2880059 [test] use setUpClass rather than setUpModule to avoid inter-dependency pb with CubicWebTC sub-classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8343
diff changeset
   305
    tearDownClass = classmethod(tearDownClass)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   306
12237
2dd0dcb2e5f9 [test] Drop no more used "maxeid" based deletion in BaseQuerierTC and derived tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12055
diff changeset
   307
    def setUp(self):
2dd0dcb2e5f9 [test] Drop no more used "maxeid" based deletion in BaseQuerierTC and derived tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12055
diff changeset
   308
        super(QuerierTC, self).setUp()
2dd0dcb2e5f9 [test] Drop no more used "maxeid" based deletion in BaseQuerierTC and derived tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12055
diff changeset
   309
        with self.admin_access.cnx() as cnx:
2dd0dcb2e5f9 [test] Drop no more used "maxeid" based deletion in BaseQuerierTC and derived tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12055
diff changeset
   310
            self.maxeid = cnx.execute('Any MAX(X)')[0][0]
2dd0dcb2e5f9 [test] Drop no more used "maxeid" based deletion in BaseQuerierTC and derived tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12055
diff changeset
   311
2dd0dcb2e5f9 [test] Drop no more used "maxeid" based deletion in BaseQuerierTC and derived tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12055
diff changeset
   312
    def tearDown(self):
2dd0dcb2e5f9 [test] Drop no more used "maxeid" based deletion in BaseQuerierTC and derived tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12055
diff changeset
   313
        super(QuerierTC, self).tearDown()
2dd0dcb2e5f9 [test] Drop no more used "maxeid" based deletion in BaseQuerierTC and derived tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12055
diff changeset
   314
        with self.admin_access.cnx() as cnx:
2dd0dcb2e5f9 [test] Drop no more used "maxeid" based deletion in BaseQuerierTC and derived tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12055
diff changeset
   315
            cnx.execute('DELETE Any X WHERE X eid > %s' % self.maxeid)
2dd0dcb2e5f9 [test] Drop no more used "maxeid" based deletion in BaseQuerierTC and derived tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12055
diff changeset
   316
            cnx.commit()
2dd0dcb2e5f9 [test] Drop no more used "maxeid" based deletion in BaseQuerierTC and derived tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12055
diff changeset
   317
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   318
    def test_unknown_eid(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   319
        # should return an empty result set
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   320
        self.assertFalse(self.qexecute('Any X WHERE X eid 99999999'))
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   321
3109
e7e1bb06b716 ensure eid given in arguments will be returned correctly typed (though only if they are in the cachekey for now)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   322
    def test_typed_eid(self):
e7e1bb06b716 ensure eid given in arguments will be returned correctly typed (though only if they are in the cachekey for now)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   323
        # should return an empty result set
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   324
        rset = self.qexecute('Any X WHERE X eid %(x)s', {'x': '1'})
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12539
diff changeset
   325
        self.assertIsInstance(rset[0][0], int)
3109
e7e1bb06b716 ensure eid given in arguments will be returned correctly typed (though only if they are in the cachekey for now)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   326
1949
9064102b4deb test Bytes storage/retreival
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1787
diff changeset
   327
    def test_bytes_storage(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   328
        feid = self.qexecute('INSERT File X: X data_name "foo.pdf", '
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   329
                             'X data_format "text/plain", X data %(data)s',
10765
bd2e3c1d1fed [server/test] str vs bytes
Julien Cristau <julien.cristau@logilab.fr>
parents: 10764
diff changeset
   330
                            {'data': Binary(b"xxx")})[0][0]
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   331
        fdata = self.qexecute('Any D WHERE X data D, X eid %(x)s', {'x': feid})[0][0]
1949
9064102b4deb test Bytes storage/retreival
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1787
diff changeset
   332
        self.assertIsInstance(fdata, Binary)
10765
bd2e3c1d1fed [server/test] str vs bytes
Julien Cristau <julien.cristau@logilab.fr>
parents: 10764
diff changeset
   333
        self.assertEqual(fdata.getvalue(), b'xxx')
1949
9064102b4deb test Bytes storage/retreival
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1787
diff changeset
   334
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   335
    # selection queries tests #################################################
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   336
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   337
    def test_select_1(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   338
        rset = self.qexecute('Any X ORDERBY X WHERE X is CWGroup')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   339
        result, descr = rset.rows, rset.description
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   340
        self.assertEqual(tuplify(result), [(2,), (3,), (4,), (5,)])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   341
        self.assertEqual(descr, [('CWGroup',), ('CWGroup',), ('CWGroup',), ('CWGroup',)])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   342
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   343
    def test_select_2(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   344
        rset = self.qexecute('Any X ORDERBY N WHERE X is CWGroup, X name N')
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   345
        self.assertEqual(tuplify(rset.rows), [(2,), (3,), (4,), (5,)])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   346
        self.assertEqual(rset.description, [('CWGroup',), ('CWGroup',), ('CWGroup',), ('CWGroup',)])
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   347
        rset = self.qexecute('Any X ORDERBY N DESC WHERE X is CWGroup, X name N')
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   348
        self.assertEqual(tuplify(rset.rows), [(5,), (4,), (3,), (2,)])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   349
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   350
    def test_select_3(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   351
        rset = self.qexecute('Any N GROUPBY N WHERE X is CWGroup, X name N')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   352
        result, descr = rset.rows, rset.description
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   353
        result.sort()
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   354
        self.assertEqual(tuplify(result), [('guests',), ('managers',), ('owners',), ('users',)])
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   355
        self.assertEqual(descr, [('String',), ('String',), ('String',), ('String',)])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   356
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   357
    def test_select_is(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   358
        rset = self.qexecute('Any X, TN ORDERBY TN LIMIT 10 WHERE X is T, T name TN')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   359
        result, descr = rset.rows, rset.description
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   360
        self.assertEqual(result[0][1], descr[0][0])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   361
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   362
    def test_select_is_aggr(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   363
        rset = self.qexecute('Any TN, COUNT(X) GROUPBY TN ORDERBY 2 DESC WHERE X is T, T name TN')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   364
        result, descr = rset.rows, rset.description
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   365
        self.assertEqual(descr[0][0], 'String')
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   366
        self.assertEqual(descr[0][1], 'Int')
10403
fe614ec1688c [server/test] fix broken test
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9990
diff changeset
   367
        self.assertEqual(result[0][0], 'RQLExpression') # XXX may change as schema evolve
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   368
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   369
    def test_select_groupby_orderby(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   370
        rset = self.qexecute('Any N GROUPBY N ORDERBY N WHERE X is CWGroup, X name N')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   371
        self.assertEqual(tuplify(rset.rows), [('guests',), ('managers',), ('owners',), ('users',)])
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   372
        self.assertEqual(rset.description, [('String',), ('String',), ('String',), ('String',)])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   373
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   374
    def test_select_complex_groupby(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   375
        rset = self.qexecute('Any N GROUPBY N WHERE X name N')
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   376
        rset = self.qexecute('Any N,MAX(D) GROUPBY N LIMIT 5 WHERE X name N, X creation_date D')
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   377
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   378
    def test_select_inlined_groupby(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   379
        seid = self.qexecute('State X WHERE X name "deactivated"')[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   380
        rset = self.qexecute('Any U,L,S GROUPBY U,L,S WHERE X in_state S, U login L, S eid %s' % seid)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   381
7392
230f2511ad28 [querier test] test groupby function call / column number
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7257
diff changeset
   382
    def test_select_groupby_funccall(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   383
        rset = self.qexecute('Any YEAR(CD), COUNT(X) GROUPBY YEAR(CD) '
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   384
                             'WHERE X is CWUser, X creation_date CD')
7392
230f2511ad28 [querier test] test groupby function call / column number
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7257
diff changeset
   385
        self.assertListEqual(rset.rows, [[date.today().year, 2]])
230f2511ad28 [querier test] test groupby function call / column number
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7257
diff changeset
   386
230f2511ad28 [querier test] test groupby function call / column number
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7257
diff changeset
   387
    def test_select_groupby_colnumber(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   388
        rset = self.qexecute('Any YEAR(CD), COUNT(X) GROUPBY 1 '
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   389
                             'WHERE X is CWUser, X creation_date CD')
7392
230f2511ad28 [querier test] test groupby function call / column number
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7257
diff changeset
   390
        self.assertListEqual(rset.rows, [[date.today().year, 2]])
230f2511ad28 [querier test] test groupby function call / column number
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7257
diff changeset
   391
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   392
    def test_select_complex_orderby(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   393
        rset1 = self.qexecute('Any N ORDERBY N WHERE X name N')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   394
        self.assertEqual(sorted(rset1.rows), rset1.rows)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   395
        rset = self.qexecute('Any N ORDERBY N LIMIT 5 OFFSET 1 WHERE X name N')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   396
        self.assertEqual(rset.rows[0][0], rset1.rows[1][0])
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   397
        self.assertEqual(len(rset), 5)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   398
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   399
    def test_select_5(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   400
        rset = self.qexecute('Any X, TMP ORDERBY TMP WHERE X name TMP, X is CWGroup')
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   401
        self.assertEqual(tuplify(rset.rows),
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   402
                         [(2, 'guests',),
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   403
                          (3, 'managers',),
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   404
                          (4, 'owners',),
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   405
                          (5, 'users',)])
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   406
        self.assertEqual(rset.description,
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   407
                         [('CWGroup', 'String',),
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   408
                          ('CWGroup', 'String',),
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   409
                          ('CWGroup', 'String',),
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   410
                          ('CWGroup', 'String',)])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   411
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   412
    def test_select_6(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   413
        self.qexecute("INSERT Personne X: X nom 'bidule'")[0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   414
        rset = self.qexecute('Any Y where X name TMP, Y nom in (TMP, "bidule")')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   415
        #self.assertEqual(rset.description, [('Personne',), ('Personne',)])
9312
88d40fbcc071 [test] use assertIn / assertIsInstance
Julien Cristau <julien.cristau@logilab.fr>
parents: 9281
diff changeset
   416
        self.assertIn(('Personne',), rset.description)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   417
        rset = self.qexecute('DISTINCT Any Y where X name TMP, Y nom in (TMP, "bidule")')
9312
88d40fbcc071 [test] use assertIn / assertIsInstance
Julien Cristau <julien.cristau@logilab.fr>
parents: 9281
diff changeset
   418
        self.assertIn(('Personne',), rset.description)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   419
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   420
    def test_select_not_attr(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   421
        peid = self.qexecute("INSERT Personne X: X nom 'bidule'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   422
        seid = self.qexecute("INSERT Societe X: X nom 'chouette'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   423
        rset = self.qexecute('Personne X WHERE NOT X nom "bidule"')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   424
        self.assertEqual(len(rset.rows), 0, rset.rows)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   425
        rset = self.qexecute('Personne X WHERE NOT X nom "bid"')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   426
        self.assertEqual(len(rset.rows), 1, rset.rows)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   427
        self.qexecute("SET P travaille S WHERE P nom 'bidule', S nom 'chouette'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   428
        rset = self.qexecute('Personne X WHERE NOT X travaille S')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   429
        self.assertEqual(len(rset.rows), 0, rset.rows)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   430
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   431
    def test_select_is_in(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   432
        self.qexecute("INSERT Personne X: X nom 'bidule'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   433
        self.qexecute("INSERT Societe X: X nom 'chouette'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   434
        self.assertEqual(len(self.qexecute("Any X WHERE X is IN (Personne, Societe)")),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   435
                          2)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   436
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   437
    def test_select_not_rel(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   438
        self.qexecute("INSERT Personne X: X nom 'bidule'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   439
        self.qexecute("INSERT Societe X: X nom 'chouette'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   440
        self.qexecute("INSERT Personne X: X nom 'autre'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   441
        self.qexecute("SET P travaille S WHERE P nom 'bidule', S nom 'chouette'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   442
        rset = self.qexecute('Personne X WHERE NOT X travaille S')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   443
        self.assertEqual(len(rset.rows), 1, rset.rows)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   444
        rset = self.qexecute('Personne X WHERE NOT X travaille S, S nom "chouette"')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   445
        self.assertEqual(len(rset.rows), 1, rset.rows)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   446
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   447
    def test_select_nonregr_inlined(self):
9832
17abdb7af3e6 [test/querier] use the new connection api (part 2/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9831
diff changeset
   448
        self.qexecute("INSERT Note X: X para 'bidule'")
17abdb7af3e6 [test/querier] use the new connection api (part 2/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9831
diff changeset
   449
        self.qexecute("INSERT Personne X: X nom 'chouette'")
17abdb7af3e6 [test/querier] use the new connection api (part 2/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9831
diff changeset
   450
        self.qexecute("INSERT Personne X: X nom 'autre'")
17abdb7af3e6 [test/querier] use the new connection api (part 2/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9831
diff changeset
   451
        self.qexecute("SET X ecrit_par P WHERE X para 'bidule', P nom 'chouette'")
17abdb7af3e6 [test/querier] use the new connection api (part 2/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9831
diff changeset
   452
        rset = self.qexecute('Any U,T ORDERBY T DESC WHERE U is CWUser, '
17abdb7af3e6 [test/querier] use the new connection api (part 2/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9831
diff changeset
   453
                             'N ecrit_par U, N type T')#, {'x': self.ueid})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   454
        self.assertEqual(len(rset.rows), 0)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   455
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   456
    def test_select_nonregr_edition_not(self):
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   457
        groupeids = set((2, 3, 4))
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   458
        groupreadperms = set(r[0] for r in self.qexecute('Any Y WHERE X name "CWGroup", '
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   459
                                                         'Y eid IN(2, 3, 4), X read_permission Y'))
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   460
        rset = self.qexecute('DISTINCT Any Y WHERE X is CWEType, X name "CWGroup", '
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   461
                             'Y eid IN(2, 3, 4), NOT X read_permission Y')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   462
        self.assertEqual(sorted(r[0] for r in rset.rows), sorted(groupeids - groupreadperms))
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   463
        rset = self.qexecute('DISTINCT Any Y WHERE X name "CWGroup", '
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   464
                             'Y eid IN(2, 3, 4), NOT X read_permission Y')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   465
        self.assertEqual(sorted(r[0] for r in rset.rows), sorted(groupeids - groupreadperms))
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   466
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   467
    def test_select_outer_join(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   468
        peid1 = self.qexecute("INSERT Personne X: X nom 'bidule'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   469
        peid2 = self.qexecute("INSERT Personne X: X nom 'autre'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   470
        seid1 = self.qexecute("INSERT Societe X: X nom 'chouette'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   471
        seid2 = self.qexecute("INSERT Societe X: X nom 'chouetos'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   472
        rset = self.qexecute('Any X,S ORDERBY X WHERE X travaille S?')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   473
        self.assertEqual(rset.rows, [[peid1, None], [peid2, None]])
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   474
        self.qexecute("SET P travaille S WHERE P nom 'bidule', S nom 'chouette'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   475
        rset = self.qexecute('Any X,S ORDERBY X WHERE X travaille S?')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   476
        self.assertEqual(rset.rows, [[peid1, seid1], [peid2, None]])
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   477
        rset = self.qexecute('Any S,X ORDERBY S WHERE X? travaille S')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   478
        self.assertEqual(rset.rows, [[seid1, peid1], [seid2, None]])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   479
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   480
    def test_select_outer_join_optimized(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   481
        peid1 = self.qexecute("INSERT Personne X: X nom 'bidule'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   482
        rset = self.qexecute('Any X WHERE X eid %(x)s, P? connait X', {'x':peid1})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   483
        self.assertEqual(rset.rows, [[peid1]])
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   484
        rset = self.qexecute('Any X WHERE X eid %(x)s, X require_permission P?',
5174
78438ad513ca #759035: Automate addition of eid cachekey in RQL analysis
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4848
diff changeset
   485
                            {'x':peid1})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   486
        self.assertEqual(rset.rows, [[peid1]])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   487
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   488
    def test_select_left_outer_join(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   489
        rset = self.qexecute('DISTINCT Any G WHERE U? in_group G')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   490
        self.assertEqual(len(rset), 4)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   491
        rset = self.qexecute('DISTINCT Any G WHERE U? in_group G, U eid %(x)s',
12055
6672f51d8268 [test] Rename BaseQuerierTC._access to BaseQuerierTC.admin_access
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12041
diff changeset
   492
                            {'x': self.admin_access._user.eid})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   493
        self.assertEqual(len(rset), 4)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   494
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   495
    def test_select_ambigous_outer_join(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   496
        teid = self.qexecute("INSERT Tag X: X name 'tag'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   497
        self.qexecute("INSERT Tag X: X name 'tagbis'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   498
        geid = self.qexecute("CWGroup G WHERE G name 'users'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   499
        self.qexecute("SET X tags Y WHERE X eid %(t)s, Y eid %(g)s",
5174
78438ad513ca #759035: Automate addition of eid cachekey in RQL analysis
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4848
diff changeset
   500
                     {'g': geid, 't': teid})
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   501
        rset = self.qexecute("Any GN,TN ORDERBY GN WHERE T? tags G, T name TN, G name GN")
9312
88d40fbcc071 [test] use assertIn / assertIsInstance
Julien Cristau <julien.cristau@logilab.fr>
parents: 9281
diff changeset
   502
        self.assertIn(['users', 'tag'], rset.rows)
88d40fbcc071 [test] use assertIn / assertIsInstance
Julien Cristau <julien.cristau@logilab.fr>
parents: 9281
diff changeset
   503
        self.assertIn(['activated', None], rset.rows)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   504
        rset = self.qexecute("Any GN,TN ORDERBY GN WHERE T tags G?, T name TN, G name GN")
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   505
        self.assertEqual(rset.rows, [[None, 'tagbis'], ['users', 'tag']])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   506
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   507
    def test_select_not_inline_rel(self):
9832
17abdb7af3e6 [test/querier] use the new connection api (part 2/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9831
diff changeset
   508
        self.qexecute("INSERT Personne X: X nom 'bidule'")
17abdb7af3e6 [test/querier] use the new connection api (part 2/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9831
diff changeset
   509
        self.qexecute("INSERT Note X: X type 'a'")
17abdb7af3e6 [test/querier] use the new connection api (part 2/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9831
diff changeset
   510
        self.qexecute("INSERT Note X: X type 'b'")
17abdb7af3e6 [test/querier] use the new connection api (part 2/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9831
diff changeset
   511
        self.qexecute("SET X ecrit_par Y WHERE X type 'a', Y nom 'bidule'")
17abdb7af3e6 [test/querier] use the new connection api (part 2/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9831
diff changeset
   512
        rset = self.qexecute('Note X WHERE NOT X ecrit_par P')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   513
        self.assertEqual(len(rset.rows), 1, rset.rows)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   514
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   515
    def test_select_not_unlinked_multiple_solutions(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   516
        self.qexecute("INSERT Personne X: X nom 'bidule'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   517
        self.qexecute("INSERT Note X: X type 'a'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   518
        self.qexecute("INSERT Note X: X type 'b'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   519
        self.qexecute("SET Y evaluee X WHERE X type 'a', Y nom 'bidule'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   520
        rset = self.qexecute('Note X WHERE NOT Y evaluee X')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   521
        self.assertEqual(len(rset.rows), 1, rset.rows)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   522
4831
c5aec27c1bf7 [repo] use logilab.db instead of lgc.adbh/lgc.db/lgc.sqlgen/indexer, test new date extranction functions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4795
diff changeset
   523
    def test_select_date_extraction(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   524
        self.qexecute("INSERT Personne X: X nom 'foo', X datenaiss %(d)s",
4831
c5aec27c1bf7 [repo] use logilab.db instead of lgc.adbh/lgc.db/lgc.sqlgen/indexer, test new date extranction functions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4795
diff changeset
   525
                     {'d': datetime(2001, 2,3, 12,13)})
c5aec27c1bf7 [repo] use logilab.db instead of lgc.adbh/lgc.db/lgc.sqlgen/indexer, test new date extranction functions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4795
diff changeset
   526
        test_data = [('YEAR', 2001), ('MONTH', 2), ('DAY', 3),
7904
f41bb38dda7c [rql, sql] support for weekday function introduced in lgdp 1.7 (closes #1979717)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7713
diff changeset
   527
                     ('HOUR', 12), ('MINUTE', 13), ('WEEKDAY', 6)]
4831
c5aec27c1bf7 [repo] use logilab.db instead of lgc.adbh/lgc.db/lgc.sqlgen/indexer, test new date extranction functions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4795
diff changeset
   528
        for funcname, result in test_data:
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   529
            rset = self.qexecute('Any %s(D) WHERE X is Personne, X datenaiss D'
4831
c5aec27c1bf7 [repo] use logilab.db instead of lgc.adbh/lgc.db/lgc.sqlgen/indexer, test new date extranction functions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4795
diff changeset
   530
                                % funcname)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   531
            self.assertEqual(len(rset.rows), 1)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   532
            self.assertEqual(rset.rows[0][0], result)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   533
            self.assertEqual(rset.description, [('Int',)])
4831
c5aec27c1bf7 [repo] use logilab.db instead of lgc.adbh/lgc.db/lgc.sqlgen/indexer, test new date extranction functions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4795
diff changeset
   534
7257
beea955b45e2 [rql] basic support for regexp-based pattern matching
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7211
diff changeset
   535
    def test_regexp_based_pattern_matching(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   536
        peid1 = self.qexecute("INSERT Personne X: X nom 'bidule'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   537
        peid2 = self.qexecute("INSERT Personne X: X nom 'cidule'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   538
        rset = self.qexecute('Any X WHERE X is Personne, X nom REGEXP "^b"')
7257
beea955b45e2 [rql] basic support for regexp-based pattern matching
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7211
diff changeset
   539
        self.assertEqual(len(rset.rows), 1, rset.rows)
beea955b45e2 [rql] basic support for regexp-based pattern matching
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7211
diff changeset
   540
        self.assertEqual(rset.rows[0][0], peid1)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   541
        rset = self.qexecute('Any X WHERE X is Personne, X nom REGEXP "idu"')
7257
beea955b45e2 [rql] basic support for regexp-based pattern matching
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7211
diff changeset
   542
        self.assertEqual(len(rset.rows), 2, rset.rows)
beea955b45e2 [rql] basic support for regexp-based pattern matching
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7211
diff changeset
   543
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   544
    def test_select_aggregat_count(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   545
        rset = self.qexecute('Any COUNT(X)')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   546
        self.assertEqual(len(rset.rows), 1)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   547
        self.assertEqual(len(rset.rows[0]), 1)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   548
        self.assertEqual(rset.description, [('Int',)])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   549
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   550
    def test_select_aggregat_sum(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   551
        rset = self.qexecute('Any SUM(O) WHERE X ordernum O')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   552
        self.assertEqual(len(rset.rows), 1)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   553
        self.assertEqual(len(rset.rows[0]), 1)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   554
        self.assertEqual(rset.description, [('Int',)])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   555
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   556
    def test_select_aggregat_min(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   557
        rset = self.qexecute('Any MIN(X) WHERE X is Personne')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   558
        self.assertEqual(len(rset.rows), 1)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   559
        self.assertEqual(len(rset.rows[0]), 1)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   560
        self.assertEqual(rset.description, [('Personne',)])
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   561
        rset = self.qexecute('Any MIN(O) WHERE X ordernum O')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   562
        self.assertEqual(len(rset.rows), 1)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   563
        self.assertEqual(len(rset.rows[0]), 1)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   564
        self.assertEqual(rset.description, [('Int',)])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   565
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   566
    def test_select_aggregat_max(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   567
        rset = self.qexecute('Any MAX(X) WHERE X is Personne')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   568
        self.assertEqual(len(rset.rows), 1)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   569
        self.assertEqual(len(rset.rows[0]), 1)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   570
        self.assertEqual(rset.description, [('Personne',)])
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   571
        rset = self.qexecute('Any MAX(O) WHERE X ordernum O')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   572
        self.assertEqual(len(rset.rows), 1)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   573
        self.assertEqual(len(rset.rows[0]), 1)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   574
        self.assertEqual(rset.description, [('Int',)])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   575
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   576
    def test_select_custom_aggregat_concat_string(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   577
        rset = self.qexecute('Any GROUP_CONCAT(N) WHERE X is CWGroup, X name N')
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7713
diff changeset
   578
        self.assertTrue(rset)
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7713
diff changeset
   579
        self.assertEqual(sorted(rset[0][0].split(', ')), ['guests', 'managers',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   580
                                                             'owners', 'users'])
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   581
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   582
    def test_select_custom_regproc_limit_size(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   583
        rset = self.qexecute('Any TEXT_LIMIT_SIZE(N, 3) WHERE X is CWGroup, X name N, X name "managers"')
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7713
diff changeset
   584
        self.assertTrue(rset)
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7713
diff changeset
   585
        self.assertEqual(rset[0][0], 'man...')
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   586
        self.qexecute("INSERT Basket X: X name 'bidule', X description '<b>hop hop</b>', X description_format 'text/html'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   587
        rset = self.qexecute('Any LIMIT_SIZE(D, DF, 3) WHERE X is Basket, X description D, X description_format DF')
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7713
diff changeset
   588
        self.assertTrue(rset)
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7713
diff changeset
   589
        self.assertEqual(rset[0][0], 'hop...')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   590
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   591
    def test_select_regproc_orderby(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   592
        rset = self.qexecute('DISTINCT Any X,N ORDERBY GROUP_SORT_VALUE(N) WHERE X is CWGroup, X name N, X name "managers"')
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7713
diff changeset
   593
        self.assertEqual(len(rset), 1)
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7713
diff changeset
   594
        self.assertEqual(rset[0][1], 'managers')
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   595
        rset = self.qexecute('Any X,N ORDERBY GROUP_SORT_VALUE(N) WHERE X is CWGroup, X name N, NOT U in_group X, U login "admin"')
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7713
diff changeset
   596
        self.assertEqual(len(rset), 3)
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7713
diff changeset
   597
        self.assertEqual(rset[0][1], 'owners')
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   598
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   599
    def test_select_aggregat_sort(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   600
        rset = self.qexecute('Any G, COUNT(U) GROUPBY G ORDERBY 2 WHERE U in_group G')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   601
        self.assertEqual(len(rset.rows), 2)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   602
        self.assertEqual(len(rset.rows[0]), 2)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   603
        self.assertEqual(rset.description[0], ('CWGroup', 'Int',))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   604
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   605
    def test_select_aggregat_having(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   606
        rset = self.qexecute('Any N,COUNT(RDEF) GROUPBY N ORDERBY 2,N '
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   607
                            'WHERE RT name N, RDEF relation_type RT '
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   608
                            'HAVING COUNT(RDEF) > 10')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   609
        self.assertListEqual(rset.rows,
9956
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents: 9850
diff changeset
   610
                              [[u'description_format', 13],
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents: 9850
diff changeset
   611
                               [u'description', 14],
12539
10159a3d1d72 Drop deprecated CWCache entity type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12248
diff changeset
   612
                               [u'name', 18],
10159a3d1d72 Drop deprecated CWCache entity type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12248
diff changeset
   613
                               [u'created_by', 44],
10159a3d1d72 Drop deprecated CWCache entity type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12248
diff changeset
   614
                               [u'creation_date', 44],
10159a3d1d72 Drop deprecated CWCache entity type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12248
diff changeset
   615
                               [u'cw_source', 44],
10159a3d1d72 Drop deprecated CWCache entity type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12248
diff changeset
   616
                               [u'cwuri', 44],
10159a3d1d72 Drop deprecated CWCache entity type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12248
diff changeset
   617
                               [u'in_basket', 44],
10159a3d1d72 Drop deprecated CWCache entity type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12248
diff changeset
   618
                               [u'is', 44],
10159a3d1d72 Drop deprecated CWCache entity type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12248
diff changeset
   619
                               [u'is_instance_of', 44],
10159a3d1d72 Drop deprecated CWCache entity type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12248
diff changeset
   620
                               [u'modification_date', 44],
10159a3d1d72 Drop deprecated CWCache entity type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12248
diff changeset
   621
                               [u'owned_by', 44]])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   622
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   623
    def test_select_aggregat_having_dumb(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   624
        # dumb but should not raise an error
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   625
        rset = self.qexecute('Any U,COUNT(X) GROUPBY U '
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   626
                            'WHERE U eid %(x)s, X owned_by U '
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   627
                            'HAVING COUNT(X) > 10', {'x': self.ueid})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   628
        self.assertEqual(len(rset.rows), 1)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   629
        self.assertEqual(rset.rows[0][0], self.ueid)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   630
5782
8ff48d1a319f [rql2sql] when using HAVING to by-pass rql limitation (not to filter on result of an aggregat function), we should emit SQL that doesn't use HAVING to avoid potential backend error because variables are not grouped. Closes #1061603.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5701
diff changeset
   631
    def test_select_having_non_aggregat_1(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   632
        rset = self.qexecute('Any L WHERE X login L, X creation_date CD '
5782
8ff48d1a319f [rql2sql] when using HAVING to by-pass rql limitation (not to filter on result of an aggregat function), we should emit SQL that doesn't use HAVING to avoid potential backend error because variables are not grouped. Closes #1061603.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5701
diff changeset
   633
                            'HAVING YEAR(CD) = %s' % date.today().year)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   634
        self.assertListEqual(rset.rows,
5782
8ff48d1a319f [rql2sql] when using HAVING to by-pass rql limitation (not to filter on result of an aggregat function), we should emit SQL that doesn't use HAVING to avoid potential backend error because variables are not grouped. Closes #1061603.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5701
diff changeset
   635
                              [[u'admin'],
8ff48d1a319f [rql2sql] when using HAVING to by-pass rql limitation (not to filter on result of an aggregat function), we should emit SQL that doesn't use HAVING to avoid potential backend error because variables are not grouped. Closes #1061603.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5701
diff changeset
   636
                               [u'anon']])
8ff48d1a319f [rql2sql] when using HAVING to by-pass rql limitation (not to filter on result of an aggregat function), we should emit SQL that doesn't use HAVING to avoid potential backend error because variables are not grouped. Closes #1061603.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5701
diff changeset
   637
8ff48d1a319f [rql2sql] when using HAVING to by-pass rql limitation (not to filter on result of an aggregat function), we should emit SQL that doesn't use HAVING to avoid potential backend error because variables are not grouped. Closes #1061603.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5701
diff changeset
   638
    def test_select_having_non_aggregat_2(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   639
        rset = self.qexecute('Any L GROUPBY L WHERE X login L, X in_group G, '
5782
8ff48d1a319f [rql2sql] when using HAVING to by-pass rql limitation (not to filter on result of an aggregat function), we should emit SQL that doesn't use HAVING to avoid potential backend error because variables are not grouped. Closes #1061603.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5701
diff changeset
   640
                            'X creation_date CD HAVING YEAR(CD) = %s OR COUNT(G) > 1'
8ff48d1a319f [rql2sql] when using HAVING to by-pass rql limitation (not to filter on result of an aggregat function), we should emit SQL that doesn't use HAVING to avoid potential backend error because variables are not grouped. Closes #1061603.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5701
diff changeset
   641
                            % date.today().year)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   642
        self.assertListEqual(rset.rows,
5782
8ff48d1a319f [rql2sql] when using HAVING to by-pass rql limitation (not to filter on result of an aggregat function), we should emit SQL that doesn't use HAVING to avoid potential backend error because variables are not grouped. Closes #1061603.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5701
diff changeset
   643
                              [[u'admin'],
8ff48d1a319f [rql2sql] when using HAVING to by-pass rql limitation (not to filter on result of an aggregat function), we should emit SQL that doesn't use HAVING to avoid potential backend error because variables are not grouped. Closes #1061603.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5701
diff changeset
   644
                               [u'anon']])
8ff48d1a319f [rql2sql] when using HAVING to by-pass rql limitation (not to filter on result of an aggregat function), we should emit SQL that doesn't use HAVING to avoid potential backend error because variables are not grouped. Closes #1061603.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5701
diff changeset
   645
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   646
    def test_select_complex_sort(self):
1950
ab7a41b2cd26 reactivate skipped tests due to sqlite bug which is now fixed (sqlite 3.6.13)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1949
diff changeset
   647
        """need sqlite including http://www.sqlite.org/cvstrac/tktview?tn=3773 fix"""
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   648
        rset = self.qexecute('Any X ORDERBY X,D LIMIT 5 WHERE X creation_date D')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   649
        result = rset.rows
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   650
        result.sort()
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   651
        self.assertEqual(tuplify(result), [(1,), (2,), (3,), (4,), (5,)])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   652
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   653
    def test_select_upper(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   654
        rset = self.qexecute('Any X, UPPER(L) ORDERBY L WHERE X is CWUser, X login L')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   655
        self.assertEqual(len(rset.rows), 2)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   656
        self.assertEqual(rset.rows[0][1], 'ADMIN')
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   657
        self.assertEqual(rset.description[0], ('CWUser', 'String',))
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   658
        self.assertEqual(rset.rows[1][1], 'ANON')
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   659
        self.assertEqual(rset.description[1], ('CWUser', 'String',))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   660
        eid = rset.rows[0][0]
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   661
        rset = self.qexecute('Any UPPER(L) WHERE X eid %s, X login L'%eid)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   662
        self.assertEqual(rset.rows[0][0], 'ADMIN')
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   663
        self.assertEqual(rset.description, [('String',)])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   664
6081
ede33e6400ab [forms] test abs() rql function
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6050
diff changeset
   665
    def test_select_float_abs(self):
ede33e6400ab [forms] test abs() rql function
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6050
diff changeset
   666
        # test positive number
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   667
        eid = self.qexecute('INSERT Affaire A: A invoiced %(i)s', {'i': 1.2})[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   668
        rset = self.qexecute('Any ABS(I) WHERE X eid %(x)s, X invoiced I', {'x': eid})
6366
1806148d6ce8 backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6225 6360
diff changeset
   669
        self.assertEqual(rset.rows[0][0], 1.2)
6081
ede33e6400ab [forms] test abs() rql function
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6050
diff changeset
   670
        # test negative number
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   671
        eid = self.qexecute('INSERT Affaire A: A invoiced %(i)s', {'i': -1.2})[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   672
        rset = self.qexecute('Any ABS(I) WHERE X eid %(x)s, X invoiced I', {'x': eid})
6366
1806148d6ce8 backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6225 6360
diff changeset
   673
        self.assertEqual(rset.rows[0][0], 1.2)
6081
ede33e6400ab [forms] test abs() rql function
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6050
diff changeset
   674
ede33e6400ab [forms] test abs() rql function
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6050
diff changeset
   675
    def test_select_int_abs(self):
ede33e6400ab [forms] test abs() rql function
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6050
diff changeset
   676
        # test positive number
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   677
        eid = self.qexecute('INSERT Affaire A: A duration %(d)s', {'d': 12})[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   678
        rset = self.qexecute('Any ABS(D) WHERE X eid %(x)s, X duration D', {'x': eid})
6366
1806148d6ce8 backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6225 6360
diff changeset
   679
        self.assertEqual(rset.rows[0][0], 12)
6081
ede33e6400ab [forms] test abs() rql function
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6050
diff changeset
   680
        # test negative number
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   681
        eid = self.qexecute('INSERT Affaire A: A duration %(d)s', {'d': -12})[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   682
        rset = self.qexecute('Any ABS(D) WHERE X eid %(x)s, X duration D', {'x': eid})
6366
1806148d6ce8 backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6225 6360
diff changeset
   683
        self.assertEqual(rset.rows[0][0], 12)
1806148d6ce8 backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6225 6360
diff changeset
   684
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   685
##     def test_select_simplified(self):
12055
6672f51d8268 [test] Rename BaseQuerierTC._access to BaseQuerierTC.admin_access
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12041
diff changeset
   686
##         ueid = self.admin_access._user.eid
9833
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   687
##         rset = self.qexecute('Any L WHERE %s login L'%ueid)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   688
##         self.assertEqual(rset.rows[0][0], 'admin')
9833
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   689
##         rset = self.qexecute('Any L WHERE %(x)s login L', {'x':ueid})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   690
##         self.assertEqual(rset.rows[0][0], 'admin')
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   691
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   692
    def test_select_searchable_text_1(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   693
        rset = self.qexecute(u"INSERT Personne X: X nom 'bid�le'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   694
        rset = self.qexecute(u"INSERT Societe X: X nom 'bid�le'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   695
        rset = self.qexecute("INSERT Societe X: X nom 'chouette'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   696
        rset = self.qexecute('Any X where X has_text %(text)s', {'text': u'bid�le'})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   697
        self.assertEqual(len(rset.rows), 2, rset.rows)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   698
        rset = self.qexecute(u'Any N where N has_text "bid�le"')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   699
        self.assertEqual(len(rset.rows), 2, rset.rows)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   700
        biduleeids = [r[0] for r in rset.rows]
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   701
        rset = self.qexecute(u'Any N where NOT N has_text "bid�le"')
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7713
diff changeset
   702
        self.assertFalse([r[0] for r in rset.rows if r[0] in biduleeids])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   703
        # duh?
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   704
        rset = self.qexecute('Any X WHERE X has_text %(text)s', {'text': u'�a'})
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   705
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   706
    def test_select_searchable_text_2(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   707
        rset = self.qexecute("INSERT Personne X: X nom 'bidule'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   708
        rset = self.qexecute("INSERT Personne X: X nom 'chouette'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   709
        rset = self.qexecute("INSERT Societe X: X nom 'bidule'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   710
        rset = self.qexecute('Personne N where N has_text "bidule"')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   711
        self.assertEqual(len(rset.rows), 1, rset.rows)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   712
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   713
    def test_select_searchable_text_3(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   714
        rset = self.qexecute("INSERT Personne X: X nom 'bidule', X sexe 'M'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   715
        rset = self.qexecute("INSERT Personne X: X nom 'bidule', X sexe 'F'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   716
        rset = self.qexecute("INSERT Societe X: X nom 'bidule'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   717
        rset = self.qexecute('Any X where X has_text "bidule" and X sexe "M"')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   718
        self.assertEqual(len(rset.rows), 1, rset.rows)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   719
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   720
    def test_select_multiple_searchable_text(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   721
        self.qexecute(u"INSERT Personne X: X nom 'bid�le'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   722
        self.qexecute("INSERT Societe X: X nom 'chouette', S travaille X")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   723
        self.qexecute(u"INSERT Personne X: X nom 'bid�le'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   724
        rset = self.qexecute('Personne X WHERE X has_text %(text)s, X travaille S, S has_text %(text2)s',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   725
                            {'text': u'bid�le',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   726
                             'text2': u'chouette',}
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   727
                            )
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   728
        self.assertEqual(len(rset.rows), 1, rset.rows)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   729
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   730
    def test_select_no_descr(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   731
        rset = self.qexecute('Any X WHERE X is CWGroup', build_descr=0)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   732
        rset.rows.sort()
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   733
        self.assertEqual(tuplify(rset.rows), [(2,), (3,), (4,), (5,)])
9331
c6f54ed6b60a [rset] Fix regression with rset copying (closes #3344410)
Julien Cristau <julien.cristau@logilab.fr>
parents: 9312
diff changeset
   734
        self.assertEqual(rset.description, ())
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   735
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   736
    def test_select_limit_offset(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   737
        rset = self.qexecute('CWGroup X ORDERBY N LIMIT 2 WHERE X name N')
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   738
        self.assertEqual(tuplify(rset.rows), [(2,), (3,)])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   739
        self.assertEqual(rset.description, [('CWGroup',), ('CWGroup',)])
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   740
        rset = self.qexecute('CWGroup X ORDERBY N LIMIT 2 OFFSET 2 WHERE X name N')
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   741
        self.assertEqual(tuplify(rset.rows), [(4,), (5,)])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   742
4467
0e73d299730a fix long-waiting symetric typo: should be spelled symmetric. Add auto database migration on schema deserialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4204
diff changeset
   743
    def test_select_symmetric(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   744
        self.qexecute("INSERT Personne X: X nom 'machin'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   745
        self.qexecute("INSERT Personne X: X nom 'bidule'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   746
        self.qexecute("INSERT Personne X: X nom 'chouette'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   747
        self.qexecute("INSERT Personne X: X nom 'trucmuche'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   748
        self.qexecute("SET X connait Y WHERE X nom 'chouette', Y nom 'bidule'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   749
        self.qexecute("SET X connait Y WHERE X nom 'machin', Y nom 'chouette'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   750
        rset = self.qexecute('Any P WHERE P connait P2')
9518
54ead5f372bb [rql2sql] remove special behaviour of symmetric relation vs DISTINCT
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9375
diff changeset
   751
        self.assertEqual(len(rset.rows), 4, rset.rows)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   752
        rset = self.qexecute('Any P WHERE NOT P connait P2')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   753
        self.assertEqual(len(rset.rows), 1, rset.rows) # trucmuche
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   754
        rset = self.qexecute('Any P WHERE P connait P2, P2 nom "bidule"')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   755
        self.assertEqual(len(rset.rows), 1, rset.rows)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   756
        rset = self.qexecute('Any P WHERE P2 connait P, P2 nom "bidule"')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   757
        self.assertEqual(len(rset.rows), 1, rset.rows)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   758
        rset = self.qexecute('Any P WHERE P connait P2, P2 nom "chouette"')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   759
        self.assertEqual(len(rset.rows), 2, rset.rows)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   760
        rset = self.qexecute('Any P WHERE P2 connait P, P2 nom "chouette"')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   761
        self.assertEqual(len(rset.rows), 2, rset.rows)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   762
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   763
    def test_select_inline(self):
9833
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   764
        self.qexecute("INSERT Personne X: X nom 'bidule'")
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   765
        self.qexecute("INSERT Note X: X type 'a'")
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   766
        self.qexecute("SET X ecrit_par Y WHERE X type 'a', Y nom 'bidule'")
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   767
        rset = self.qexecute('Any N where N ecrit_par X, X nom "bidule"')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   768
        self.assertEqual(len(rset.rows), 1, rset.rows)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   769
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   770
    def test_select_creation_date(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   771
        self.qexecute("INSERT Personne X: X nom 'bidule'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   772
        rset = self.qexecute('Any D WHERE X nom "bidule", X creation_date D')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   773
        self.assertEqual(len(rset.rows), 1)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   774
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   775
    def test_select_or_relation(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   776
        self.qexecute("INSERT Personne X: X nom 'bidule'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   777
        self.qexecute("INSERT Personne X: X nom 'chouette'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   778
        self.qexecute("INSERT Societe X: X nom 'logilab'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   779
        self.qexecute("INSERT Societe X: X nom 'caesium'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   780
        self.qexecute("SET P travaille S WHERE P nom 'bidule', S nom 'logilab'")
9833
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   781
        rset = self.qexecute('DISTINCT Any P WHERE P travaille S1 OR P travaille S2, '
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   782
                             'S1 nom "logilab", S2 nom "caesium"')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   783
        self.assertEqual(len(rset.rows), 1)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   784
        self.qexecute("SET P travaille S WHERE P nom 'chouette', S nom 'caesium'")
9833
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   785
        rset = self.qexecute('DISTINCT Any P WHERE P travaille S1 OR P travaille S2, '
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   786
                             'S1 nom "logilab", S2 nom "caesium"')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   787
        self.assertEqual(len(rset.rows), 2)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   788
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   789
    def test_select_or_sym_relation(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   790
        self.qexecute("INSERT Personne X: X nom 'bidule'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   791
        self.qexecute("INSERT Personne X: X nom 'chouette'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   792
        self.qexecute("INSERT Personne X: X nom 'truc'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   793
        self.qexecute("SET P connait S WHERE P nom 'bidule', S nom 'chouette'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   794
        rset = self.qexecute('DISTINCT Any P WHERE S connait P, S nom "chouette"')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   795
        self.assertEqual(len(rset.rows), 1, rset.rows)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   796
        rset = self.qexecute('DISTINCT Any P WHERE P connait S or S connait P, S nom "chouette"')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   797
        self.assertEqual(len(rset.rows), 1, rset.rows)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   798
        self.qexecute("SET P connait S WHERE P nom 'chouette', S nom 'truc'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   799
        rset = self.qexecute('DISTINCT Any P WHERE S connait P, S nom "chouette"')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   800
        self.assertEqual(len(rset.rows), 2, rset.rows)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   801
        rset = self.qexecute('DISTINCT Any P WHERE P connait S OR S connait P, S nom "chouette"')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   802
        self.assertEqual(len(rset.rows), 2, rset.rows)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   803
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   804
    def test_select_follow_relation(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   805
        self.qexecute("INSERT Affaire X: X sujet 'cool'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   806
        self.qexecute("INSERT Societe X: X nom 'chouette'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   807
        self.qexecute("SET A concerne S WHERE A is Affaire, S is Societe")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   808
        self.qexecute("INSERT Note X: X para 'truc'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   809
        self.qexecute("SET S evaluee N WHERE S is Societe, N is Note")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   810
        self.qexecute("INSERT Societe X: X nom 'bidule'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   811
        self.qexecute("INSERT Note X: X para 'troc'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   812
        self.qexecute("SET S evaluee N WHERE S nom 'bidule', N para 'troc'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   813
        rset = self.qexecute('DISTINCT Any A,N WHERE A concerne S, S evaluee N')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   814
        self.assertEqual(len(rset.rows), 1, rset.rows)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   815
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   816
    def test_select_ordered_distinct_1(self):
6194
2a1f8cabbe6a [querier test] remove some actually bad tests that were passing thanks to a sqlite bug
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6189
diff changeset
   817
        self.assertRaises(BadRQLQuery,
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   818
                          self.qexecute, 'DISTINCT Any S ORDERBY R WHERE A is Affaire, A sujet S, A ref R')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   819
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   820
    def test_select_ordered_distinct_2(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   821
        self.qexecute("INSERT Affaire X: X sujet 'minor'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   822
        self.qexecute("INSERT Affaire X: X sujet 'zou'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   823
        self.qexecute("INSERT Affaire X: X sujet 'abcd'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   824
        rset = self.qexecute('DISTINCT Any S ORDERBY S WHERE A is Affaire, A sujet S')
6196
12fdccedab5a cleanups
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6194
diff changeset
   825
        self.assertEqual(rset.rows, [['abcd'], ['minor'], ['zou']])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   826
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   827
    def test_select_ordered_distinct_3(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   828
        rset = self.qexecute('DISTINCT Any N ORDERBY GROUP_SORT_VALUE(N) WHERE X is CWGroup, X name N')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   829
        self.assertEqual(rset.rows, [['owners'], ['guests'], ['users'], ['managers']])
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   830
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   831
    def test_select_or_value(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   832
        rset = self.qexecute('Any U WHERE U in_group G, G name "owners" OR G name "users"')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   833
        self.assertEqual(len(rset.rows), 0)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   834
        rset = self.qexecute('Any U WHERE U in_group G, G name "guests" OR G name "managers"')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   835
        self.assertEqual(len(rset.rows), 2)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   836
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   837
    def test_select_explicit_eid(self):
9833
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   838
        rset = self.qexecute('Any X,E WHERE X owned_by U, X eid E, U eid %(u)s',
12055
6672f51d8268 [test] Rename BaseQuerierTC._access to BaseQuerierTC.admin_access
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12041
diff changeset
   839
                             {'u': self.admin_access._user.eid})
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7713
diff changeset
   840
        self.assertTrue(rset)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   841
        self.assertEqual(rset.description[0][1], 'Int')
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   842
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   843
#     def test_select_rewritten_optional(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   844
#         eid = self.qexecute("INSERT Affaire X: X sujet 'cool'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   845
#         rset = self.qexecute('Any X WHERE X eid %(x)s, EXISTS(X owned_by U) OR EXISTS(X concerne S?, S owned_by U)',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   846
#                             {'x': eid}, 'x')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   847
#         self.assertEqual(rset.rows, [[eid]])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   848
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   849
    def test_today_bug(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   850
        self.qexecute("INSERT Tag X: X name 'bidule', X creation_date NOW")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   851
        self.qexecute("INSERT Tag Y: Y name 'toto'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   852
        rset = self.qexecute("Any D WHERE X name in ('bidule', 'toto') , X creation_date D")
9312
88d40fbcc071 [test] use assertIn / assertIsInstance
Julien Cristau <julien.cristau@logilab.fr>
parents: 9281
diff changeset
   853
        self.assertIsInstance(rset.rows[0][0], datetime)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   854
        rset = self.qexecute('Tag X WHERE X creation_date TODAY')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   855
        self.assertEqual(len(rset.rows), 2)
11032
38afb7e23c6c [server] fix SQLite patch to ensure TZDatetime are properly typed
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10822
diff changeset
   856
38afb7e23c6c [server] fix SQLite patch to ensure TZDatetime are properly typed
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10822
diff changeset
   857
    def test_sqlite_patch(self):
38afb7e23c6c [server] fix SQLite patch to ensure TZDatetime are properly typed
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10822
diff changeset
   858
        """this test monkey patch done by sqlutils._install_sqlite_querier_patch"""
38afb7e23c6c [server] fix SQLite patch to ensure TZDatetime are properly typed
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10822
diff changeset
   859
        self.qexecute("INSERT Personne X: X nom 'bidule', X datenaiss NOW, X tzdatenaiss NOW")
38afb7e23c6c [server] fix SQLite patch to ensure TZDatetime are properly typed
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10822
diff changeset
   860
        rset = self.qexecute('Any MAX(D) WHERE X is Personne, X datenaiss D')
38afb7e23c6c [server] fix SQLite patch to ensure TZDatetime are properly typed
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10822
diff changeset
   861
        self.assertIsInstance(rset[0][0], datetime)
38afb7e23c6c [server] fix SQLite patch to ensure TZDatetime are properly typed
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10822
diff changeset
   862
        rset = self.qexecute('Any MAX(D) WHERE X is Personne, X tzdatenaiss D')
9312
88d40fbcc071 [test] use assertIn / assertIsInstance
Julien Cristau <julien.cristau@logilab.fr>
parents: 9281
diff changeset
   863
        self.assertIsInstance(rset[0][0], datetime)
11034
75d752e6daf7 [server] improve TZDatetime support
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11032
diff changeset
   864
        self.assertEqual(rset[0][0].tzinfo, pytz.utc)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   865
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   866
    def test_today(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   867
        self.qexecute("INSERT Tag X: X name 'bidule', X creation_date TODAY")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   868
        self.qexecute("INSERT Tag Y: Y name 'toto'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   869
        rset = self.qexecute('Tag X WHERE X creation_date TODAY')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   870
        self.assertEqual(len(rset.rows), 2)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   871
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   872
    def test_select_boolean(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   873
        rset = self.qexecute('Any N WHERE X is CWEType, X name N, X final %(val)s',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   874
                            {'val': True})
7484
45a350d6b22f [repo test] fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   875
        self.assertEqual(sorted(r[0] for r in rset.rows), ['BigInt', 'Boolean', 'Bytes',
7148
753b9b48b41e more TZDatetime/TZTime test fixes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7088
diff changeset
   876
                                                           'Date', 'Datetime',
753b9b48b41e more TZDatetime/TZTime test fixes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7088
diff changeset
   877
                                                           'Decimal', 'Float',
753b9b48b41e more TZDatetime/TZTime test fixes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7088
diff changeset
   878
                                                           'Int', 'Interval',
753b9b48b41e more TZDatetime/TZTime test fixes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7088
diff changeset
   879
                                                           'Password', 'String',
753b9b48b41e more TZDatetime/TZTime test fixes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7088
diff changeset
   880
                                                           'TZDatetime', 'TZTime',
753b9b48b41e more TZDatetime/TZTime test fixes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7088
diff changeset
   881
                                                           'Time'])
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   882
        rset = self.qexecute('Any N WHERE X is CWEType, X name N, X final TRUE')
7484
45a350d6b22f [repo test] fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   883
        self.assertEqual(sorted(r[0] for r in rset.rows), ['BigInt', 'Boolean', 'Bytes',
7148
753b9b48b41e more TZDatetime/TZTime test fixes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7088
diff changeset
   884
                                                           'Date', 'Datetime',
753b9b48b41e more TZDatetime/TZTime test fixes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7088
diff changeset
   885
                                                           'Decimal', 'Float',
753b9b48b41e more TZDatetime/TZTime test fixes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7088
diff changeset
   886
                                                           'Int', 'Interval',
753b9b48b41e more TZDatetime/TZTime test fixes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7088
diff changeset
   887
                                                           'Password', 'String',
753b9b48b41e more TZDatetime/TZTime test fixes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7088
diff changeset
   888
                                                           'TZDatetime', 'TZTime',
753b9b48b41e more TZDatetime/TZTime test fixes
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7088
diff changeset
   889
                                                           'Time'])
12055
6672f51d8268 [test] Rename BaseQuerierTC._access to BaseQuerierTC.admin_access
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12041
diff changeset
   890
        with self.admin_access.cnx() as cnx:
9833
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   891
            cnx.create_entity('Personne', nom=u'louis', test=True)
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   892
            self.assertEqual(len(cnx.execute('Any X WHERE X test %(val)s', {'val': True})), 1)
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   893
            self.assertEqual(len(cnx.execute('Any X WHERE X test TRUE')), 1)
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   894
            self.assertEqual(len(cnx.execute('Any X WHERE X test %(val)s', {'val': False})), 0)
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   895
            self.assertEqual(len(cnx.execute('Any X WHERE X test FALSE')), 0)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   896
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   897
    def test_select_constant(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   898
        rset = self.qexecute('Any X, "toto" ORDERBY X WHERE X is CWGroup')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   899
        self.assertEqual(rset.rows,
10764
aa3a7bd5f651 [server/test] list() around map and zip
Julien Cristau <julien.cristau@logilab.fr>
parents: 10763
diff changeset
   900
                         [list(x) for x in zip((2,3,4,5), ('toto','toto','toto','toto',))])
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12539
diff changeset
   901
        self.assertIsInstance(rset[0][1], str)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   902
        self.assertEqual(rset.description,
10764
aa3a7bd5f651 [server/test] list() around map and zip
Julien Cristau <julien.cristau@logilab.fr>
parents: 10763
diff changeset
   903
                         list(zip(('CWGroup', 'CWGroup', 'CWGroup', 'CWGroup'),
aa3a7bd5f651 [server/test] list() around map and zip
Julien Cristau <julien.cristau@logilab.fr>
parents: 10763
diff changeset
   904
                                  ('String', 'String', 'String', 'String',))))
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   905
        rset = self.qexecute('Any X, %(value)s ORDERBY X WHERE X is CWGroup', {'value': 'toto'})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   906
        self.assertEqual(rset.rows,
10764
aa3a7bd5f651 [server/test] list() around map and zip
Julien Cristau <julien.cristau@logilab.fr>
parents: 10763
diff changeset
   907
                         list(map(list, zip((2,3,4,5), ('toto','toto','toto','toto',)))))
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12539
diff changeset
   908
        self.assertIsInstance(rset[0][1], str)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   909
        self.assertEqual(rset.description,
10764
aa3a7bd5f651 [server/test] list() around map and zip
Julien Cristau <julien.cristau@logilab.fr>
parents: 10763
diff changeset
   910
                         list(zip(('CWGroup', 'CWGroup', 'CWGroup', 'CWGroup'),
aa3a7bd5f651 [server/test] list() around map and zip
Julien Cristau <julien.cristau@logilab.fr>
parents: 10763
diff changeset
   911
                                  ('String', 'String', 'String', 'String',))))
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   912
        rset = self.qexecute('Any X,GN WHERE X is CWUser, G is CWGroup, X login "syt", '
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   913
                             'X in_group G, G name GN')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   914
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   915
    def test_select_union(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   916
        rset = self.qexecute('Any X,N ORDERBY N WITH X,N BEING '
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   917
                            '((Any X,N WHERE X name N, X transition_of WF, WF workflow_of E, E name %(name)s)'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   918
                            ' UNION '
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2608
diff changeset
   919
                            '(Any X,N WHERE X name N, X state_of WF, WF workflow_of E, E name %(name)s))',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1263
diff changeset
   920
                            {'name': 'CWUser'})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   921
        self.assertEqual([x[1] for x in rset.rows],
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   922
                          ['activate', 'activated', 'deactivate', 'deactivated'])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   923
        self.assertEqual(rset.description,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   924
                          [('Transition', 'String'), ('State', 'String'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   925
                           ('Transition', 'String'), ('State', 'String')])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   926
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   927
    def test_select_union_aggregat(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   928
        # meaningless, the goal in to have group by done on different attribute
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   929
        # for each sub-query
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   930
        self.qexecute('(Any N,COUNT(X) GROUPBY N WHERE X name N, X is State)'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   931
                     ' UNION '
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   932
                     '(Any N,COUNT(X) GROUPBY N ORDERBY 2 WHERE X login N)')
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   933
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   934
    def test_select_union_aggregat_independant_group(self):
12055
6672f51d8268 [test] Rename BaseQuerierTC._access to BaseQuerierTC.admin_access
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12041
diff changeset
   935
        with self.admin_access.cnx() as cnx:
9833
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   936
            cnx.execute('INSERT State X: X name "hop"')
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   937
            cnx.execute('INSERT State X: X name "hop"')
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   938
            cnx.execute('INSERT Transition X: X name "hop"')
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   939
            cnx.execute('INSERT Transition X: X name "hop"')
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   940
            rset = cnx.execute('Any N,NX ORDERBY 2 WITH N,NX BEING '
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   941
                               '((Any N,COUNT(X) GROUPBY N WHERE X name N, '
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   942
                               '  X is State HAVING COUNT(X)>1)'
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   943
                               ' UNION '
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   944
                               '(Any N,COUNT(X) GROUPBY N WHERE X name N, '
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   945
                               ' X is Transition HAVING COUNT(X)>1))')
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
   946
            self.assertEqual(rset.rows, [[u'hop', 2], [u'hop', 2]])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   947
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   948
    def test_select_union_selection_with_diff_variables(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   949
        rset = self.qexecute('(Any N WHERE X name N, X is State)'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   950
                            ' UNION '
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   951
                            '(Any NN WHERE XX name NN, XX is Transition)')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   952
        self.assertEqual(sorted(r[0] for r in rset.rows),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   953
                          ['abort', 'activate', 'activated', 'ben non',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   954
                           'deactivate', 'deactivated', 'done', 'en cours',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   955
                           'end', 'finie', 'markasdone', 'pitetre', 'redoit',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   956
                           'start', 'todo'])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   957
5701
41119f034735 [querier] fix rset description bug with some union queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5657
diff changeset
   958
    def test_select_union_description_diff_var(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   959
        eid1 = self.qexecute('CWGroup X WHERE X name "managers"')[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   960
        eid2 = self.qexecute('CWUser X WHERE X login "admin"')[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   961
        rset = self.qexecute('(Any X WHERE X eid %(x)s)'
5701
41119f034735 [querier] fix rset description bug with some union queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5657
diff changeset
   962
                            ' UNION '
41119f034735 [querier] fix rset description bug with some union queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5657
diff changeset
   963
                            '(Any Y WHERE Y eid %(y)s)',
41119f034735 [querier] fix rset description bug with some union queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5657
diff changeset
   964
                            {'x': eid1, 'y': eid2})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   965
        self.assertEqual(rset.description[:], [('CWGroup',), ('CWUser',)])
5701
41119f034735 [querier] fix rset description bug with some union queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5657
diff changeset
   966
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   967
    def test_exists(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   968
        geid = self.qexecute("INSERT CWGroup X: X name 'lulufanclub'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   969
        self.qexecute("SET U in_group G WHERE G name 'lulufanclub'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   970
        peid = self.qexecute("INSERT Personne X: X prenom 'lulu', X nom 'petit'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   971
        rset = self.qexecute("Any X WHERE X prenom 'lulu',"
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   972
                            "EXISTS (U in_group G, G name 'lulufanclub' OR G name 'managers');")
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   973
        self.assertEqual(rset.rows, [[peid]])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   974
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   975
    def test_identity(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   976
        eid = self.qexecute('Any X WHERE X identity Y, Y eid 1')[0][0]
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   977
        self.assertEqual(eid, 1)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   978
        eid = self.qexecute('Any X WHERE Y identity X, Y eid 1')[0][0]
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   979
        self.assertEqual(eid, 1)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   980
        login = self.qexecute('Any L WHERE X login "admin", X identity Y, Y login L')[0][0]
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   981
        self.assertEqual(login, 'admin')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   982
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   983
    def test_select_date_mathexp(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   984
        rset = self.qexecute('Any X, TODAY - CD WHERE X is CWUser, X creation_date CD')
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7713
diff changeset
   985
        self.assertTrue(rset)
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7713
diff changeset
   986
        self.assertEqual(rset.description[0][1], 'Interval')
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   987
        eid, = self.qexecute("INSERT Personne X: X nom 'bidule'")[0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   988
        rset = self.qexecute('Any X, NOW - CD WHERE X is Personne, X creation_date CD')
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7713
diff changeset
   989
        self.assertEqual(rset.description[0][1], 'Interval')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   990
6050
20af96a6fffc [rql2sql] add test for rql bug #37423, which triggered a cw bug fixed by this changeset (infinite loop with some queries...)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5811
diff changeset
   991
    def test_select_subquery_aggregat_1(self):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   992
        # percent users by groups
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   993
        self.qexecute('SET X in_group G WHERE G name "users"')
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
   994
        rset = self.qexecute('Any GN, COUNT(X)*100/T GROUPBY GN ORDERBY 2,1'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   995
                            ' WHERE G name GN, X in_group G'
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1263
diff changeset
   996
                            ' WITH T BEING (Any COUNT(U) WHERE U is CWUser)')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   997
        self.assertEqual(rset.rows, [[u'guests', 50], [u'managers', 50], [u'users', 100]])
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   998
        self.assertEqual(rset.description, [('String', 'Int'), ('String', 'Int'), ('String', 'Int')])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   999
6050
20af96a6fffc [rql2sql] add test for rql bug #37423, which triggered a cw bug fixed by this changeset (infinite loop with some queries...)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5811
diff changeset
  1000
    def test_select_subquery_aggregat_2(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1001
        expected = self.qexecute('Any X, 0, COUNT(T) GROUPBY X '
6050
20af96a6fffc [rql2sql] add test for rql bug #37423, which triggered a cw bug fixed by this changeset (infinite loop with some queries...)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5811
diff changeset
  1002
                                'WHERE X is Workflow, T transition_of X').rows
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1003
        rset = self.qexecute('''
6050
20af96a6fffc [rql2sql] add test for rql bug #37423, which triggered a cw bug fixed by this changeset (infinite loop with some queries...)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5811
diff changeset
  1004
Any P1,B,E WHERE P1 identity P2 WITH
20af96a6fffc [rql2sql] add test for rql bug #37423, which triggered a cw bug fixed by this changeset (infinite loop with some queries...)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5811
diff changeset
  1005
  P1,B BEING (Any P,COUNT(T) GROUPBY P WHERE P is Workflow, T is Transition,
20af96a6fffc [rql2sql] add test for rql bug #37423, which triggered a cw bug fixed by this changeset (infinite loop with some queries...)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5811
diff changeset
  1006
              T? transition_of P, T type "auto"),
20af96a6fffc [rql2sql] add test for rql bug #37423, which triggered a cw bug fixed by this changeset (infinite loop with some queries...)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5811
diff changeset
  1007
  P2,E BEING (Any P,COUNT(T) GROUPBY P WHERE P is Workflow, T is Transition,
20af96a6fffc [rql2sql] add test for rql bug #37423, which triggered a cw bug fixed by this changeset (infinite loop with some queries...)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5811
diff changeset
  1008
              T? transition_of P, T type "normal")''')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1009
        self.assertEqual(sorted(rset.rows), sorted(expected))
6050
20af96a6fffc [rql2sql] add test for rql bug #37423, which triggered a cw bug fixed by this changeset (infinite loop with some queries...)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5811
diff changeset
  1010
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1011
    def test_select_subquery_const(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1012
        rset = self.qexecute('Any X WITH X BEING ((Any NULL) UNION (Any "toto"))')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1013
        self.assertEqual(rset.rows, [[None], ['toto']])
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1014
        self.assertEqual(rset.description, [(None,), ('String',)])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1015
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1016
    # insertion queries tests #################################################
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1017
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1018
    def test_insert_is(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1019
        eid, = self.qexecute("INSERT Personne X: X nom 'bidule'")[0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1020
        etype, = self.qexecute("Any TN WHERE X is T, X eid %s, T name TN" % eid)[0]
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1021
        self.assertEqual(etype, 'Personne')
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1022
        self.qexecute("INSERT Personne X: X nom 'managers'")
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1023
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1024
    def test_insert_1(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1025
        rset = self.qexecute("INSERT Personne X: X nom 'bidule'")
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1026
        self.assertEqual(len(rset.rows), 1)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1027
        self.assertEqual(rset.description, [('Personne',)])
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1028
        rset = self.qexecute('Personne X WHERE X nom "bidule"')
10600
180aa08cad48 [tests] Replace use of deprecated TestCase.assert_
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10591
diff changeset
  1029
        self.assertTrue(rset.rows)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1030
        self.assertEqual(rset.description, [('Personne',)])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1031
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1032
    def test_insert_1_multiple(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1033
        self.qexecute("INSERT Personne X: X nom 'bidule'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1034
        self.qexecute("INSERT Personne X: X nom 'chouette'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1035
        rset = self.qexecute("INSERT Societe Y: Y nom N, P travaille Y WHERE P nom N")
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1036
        self.assertEqual(len(rset.rows), 2)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1037
        self.assertEqual(rset.description, [('Societe',), ('Societe',)])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1038
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1039
    def test_insert_2(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1040
        rset = self.qexecute("INSERT Personne X, Personne Y: X nom 'bidule', Y nom 'tutu'")
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1041
        self.assertEqual(rset.description, [('Personne', 'Personne')])
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1042
        rset = self.qexecute('Personne X WHERE X nom "bidule" or X nom "tutu"')
10600
180aa08cad48 [tests] Replace use of deprecated TestCase.assert_
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10591
diff changeset
  1043
        self.assertTrue(rset.rows)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1044
        self.assertEqual(rset.description, [('Personne',), ('Personne',)])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1045
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1046
    def test_insert_3(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1047
        self.qexecute("INSERT Personne X: X nom Y WHERE U login 'admin', U login Y")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1048
        rset = self.qexecute('Personne X WHERE X nom "admin"')
10600
180aa08cad48 [tests] Replace use of deprecated TestCase.assert_
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10591
diff changeset
  1049
        self.assertTrue(rset.rows)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1050
        self.assertEqual(rset.description, [('Personne',)])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1051
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1052
    def test_insert_4(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1053
        self.qexecute("INSERT Societe Y: Y nom 'toto'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1054
        self.qexecute("INSERT Personne X: X nom 'bidule', X travaille Y WHERE Y nom 'toto'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1055
        rset = self.qexecute('Any X, Y WHERE X nom "bidule", Y nom "toto", X travaille Y')
10600
180aa08cad48 [tests] Replace use of deprecated TestCase.assert_
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10591
diff changeset
  1056
        self.assertTrue(rset.rows)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1057
        self.assertEqual(rset.description, [('Personne', 'Societe',)])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1058
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1059
    def test_insert_4bis(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1060
        peid = self.qexecute("INSERT Personne X: X nom 'bidule'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1061
        seid = self.qexecute("INSERT Societe Y: Y nom 'toto', X travaille Y WHERE X eid %(x)s",
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1062
                             {'x': str(peid)})[0][0]
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1063
        self.assertEqual(len(self.qexecute('Any X, Y WHERE X travaille Y')), 1)
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1064
        self.qexecute("INSERT Personne X: X nom 'chouette', X travaille Y WHERE Y eid %(x)s",
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1065
                      {'x': str(seid)})
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1066
        self.assertEqual(len(self.qexecute('Any X, Y WHERE X travaille Y')), 2)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1067
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1068
    def test_insert_4ter(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1069
        peid = self.qexecute("INSERT Personne X: X nom 'bidule'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1070
        seid = self.qexecute("INSERT Societe Y: Y nom 'toto', X travaille Y WHERE X eid %(x)s",
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12539
diff changeset
  1071
                             {'x': str(peid)})[0][0]
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1072
        self.assertEqual(len(self.qexecute('Any X, Y WHERE X travaille Y')), 1)
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1073
        self.qexecute("INSERT Personne X: X nom 'chouette', X travaille Y WHERE Y eid %(x)s",
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12539
diff changeset
  1074
                      {'x': str(seid)})
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1075
        self.assertEqual(len(self.qexecute('Any X, Y WHERE X travaille Y')), 2)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1076
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1077
    def test_insert_5(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1078
        self.qexecute("INSERT Personne X: X nom 'bidule'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1079
        self.qexecute("INSERT Societe Y: Y nom 'toto', X travaille Y WHERE X nom 'bidule'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1080
        rset = self.qexecute('Any X, Y WHERE X nom "bidule", Y nom "toto", X travaille Y')
10600
180aa08cad48 [tests] Replace use of deprecated TestCase.assert_
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10591
diff changeset
  1081
        self.assertTrue(rset.rows)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1082
        self.assertEqual(rset.description, [('Personne', 'Societe',)])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1083
4765
c33d12865641 more tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4758
diff changeset
  1084
    def test_insert_5bis(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1085
        peid = self.qexecute("INSERT Personne X: X nom 'bidule'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1086
        self.qexecute("INSERT Societe Y: Y nom 'toto', X travaille Y WHERE X eid %(x)s",
5174
78438ad513ca #759035: Automate addition of eid cachekey in RQL analysis
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4848
diff changeset
  1087
                     {'x': peid})
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1088
        rset = self.qexecute('Any X, Y WHERE X nom "bidule", Y nom "toto", X travaille Y')
10600
180aa08cad48 [tests] Replace use of deprecated TestCase.assert_
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10591
diff changeset
  1089
        self.assertTrue(rset.rows)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1090
        self.assertEqual(rset.description, [('Personne', 'Societe',)])
4765
c33d12865641 more tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4758
diff changeset
  1091
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1092
    def test_insert_6(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1093
        self.qexecute("INSERT Personne X, Societe Y: X nom 'bidule', Y nom 'toto', X travaille Y")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1094
        rset = self.qexecute('Any X, Y WHERE X nom "bidule", Y nom "toto", X travaille Y')
10600
180aa08cad48 [tests] Replace use of deprecated TestCase.assert_
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10591
diff changeset
  1095
        self.assertTrue(rset.rows)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1096
        self.assertEqual(rset.description, [('Personne', 'Societe',)])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1097
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1098
    def test_insert_7(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1099
        self.qexecute("INSERT Personne X, Societe Y: X nom N, Y nom 'toto', "
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1100
                      "X travaille Y WHERE U login 'admin', U login N")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1101
        rset = self.qexecute('Any X, Y WHERE X nom "admin", Y nom "toto", X travaille Y')
10600
180aa08cad48 [tests] Replace use of deprecated TestCase.assert_
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10591
diff changeset
  1102
        self.assertTrue(rset.rows)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1103
        self.assertEqual(rset.description, [('Personne', 'Societe',)])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1104
5657
8f56691f01de [querier] test and fix potential bug in insertion query with multiple relations inside, caused by a name conflict. Also fix another bug non reproduced by using a set instead of a list (list may leads to compare entity instances which isn't allowed).
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5426
diff changeset
  1105
    def test_insert_7_2(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1106
        self.qexecute("INSERT Personne X, Societe Y: X nom N, Y nom 'toto', "
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1107
                      "X travaille Y WHERE U login N")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1108
        rset = self.qexecute('Any X, Y WHERE Y nom "toto", X travaille Y')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1109
        self.assertEqual(len(rset), 2)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1110
        self.assertEqual(rset.description, [('Personne', 'Societe',),
5657
8f56691f01de [querier] test and fix potential bug in insertion query with multiple relations inside, caused by a name conflict. Also fix another bug non reproduced by using a set instead of a list (list may leads to compare entity instances which isn't allowed).
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5426
diff changeset
  1111
                                             ('Personne', 'Societe',)])
8f56691f01de [querier] test and fix potential bug in insertion query with multiple relations inside, caused by a name conflict. Also fix another bug non reproduced by using a set instead of a list (list may leads to compare entity instances which isn't allowed).
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5426
diff changeset
  1112
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1113
    def test_insert_8(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1114
        self.qexecute("INSERT Societe Y, Personne X: Y nom N, X nom 'toto', X travaille Y "
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1115
                      "WHERE U login 'admin', U login N")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1116
        rset = self.qexecute('Any X, Y WHERE X nom "toto", Y nom "admin", X travaille Y')
10600
180aa08cad48 [tests] Replace use of deprecated TestCase.assert_
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10591
diff changeset
  1117
        self.assertTrue(rset.rows)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1118
        self.assertEqual(rset.description, [('Personne', 'Societe',)])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1119
5657
8f56691f01de [querier] test and fix potential bug in insertion query with multiple relations inside, caused by a name conflict. Also fix another bug non reproduced by using a set instead of a list (list may leads to compare entity instances which isn't allowed).
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5426
diff changeset
  1120
    def test_insert_9(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1121
        self.qexecute("INSERT Societe X: X nom  'Lo'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1122
        self.qexecute("INSERT Societe X: X nom  'Gi'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1123
        self.qexecute("INSERT SubDivision X: X nom  'Lab'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1124
        rset = self.qexecute("INSERT Personne X: X nom N, X travaille Y, X travaille_subdivision Z "
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1125
                             "WHERE Y is Societe, Z is SubDivision, Y nom N")
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1126
        self.assertEqual(len(rset), 2)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1127
        self.assertEqual(rset.description, [('Personne',), ('Personne',)])
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1128
        # self.assertSetEqual(set(x.nom for x in rset.entities()),
5657
8f56691f01de [querier] test and fix potential bug in insertion query with multiple relations inside, caused by a name conflict. Also fix another bug non reproduced by using a set instead of a list (list may leads to compare entity instances which isn't allowed).
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5426
diff changeset
  1129
        #                      ['Lo', 'Gi'])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1130
        # self.assertSetEqual(set(y.nom for x in rset.entities() for y in x.travaille),
5657
8f56691f01de [querier] test and fix potential bug in insertion query with multiple relations inside, caused by a name conflict. Also fix another bug non reproduced by using a set instead of a list (list may leads to compare entity instances which isn't allowed).
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5426
diff changeset
  1131
        #                      ['Lo', 'Gi'])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1132
        # self.assertEqual([y.nom for x in rset.entities() for y in x.travaille_subdivision],
5657
8f56691f01de [querier] test and fix potential bug in insertion query with multiple relations inside, caused by a name conflict. Also fix another bug non reproduced by using a set instead of a list (list may leads to compare entity instances which isn't allowed).
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5426
diff changeset
  1133
        #                      ['Lab', 'Lab'])
8f56691f01de [querier] test and fix potential bug in insertion query with multiple relations inside, caused by a name conflict. Also fix another bug non reproduced by using a set instead of a list (list may leads to compare entity instances which isn't allowed).
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5426
diff changeset
  1134
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1135
    def test_insert_query_error(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1136
        self.assertRaises(Exception,
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1137
                          self.qexecute,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1138
                          "INSERT Personne X: X nom 'toto', X is Personne")
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1139
        self.assertRaises(Exception,
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1140
                          self.qexecute,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1141
                          "INSERT Personne X: X nom 'toto', X is_instance_of Personne")
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1142
        self.assertRaises(QueryError,
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1143
                          self.qexecute,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1144
                          "INSERT Personne X: X nom 'toto', X has_text 'tutu'")
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1145
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1146
        self.assertRaises(QueryError,
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1147
                          self.qexecute,
12041
69f69ce8241a [user] Drop ugly hack on CWUser entity class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12039
diff changeset
  1148
                          "INSERT CWUser X: X login 'toto', X eid %s" % cnx.user.eid)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1149
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1150
    def test_insertion_description_with_where(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1151
        rset = self.qexecute('INSERT CWUser E, EmailAddress EM: E login "X", E upassword "X", '
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1152
                            'E primary_email EM, EM address "X", E in_group G '
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1153
                            'WHERE G name "managers"')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1154
        self.assertEqual(list(rset.description[0]), ['CWUser', 'EmailAddress'])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1155
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1156
    # deletion queries tests ##################################################
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1157
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1158
    def test_delete_1(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1159
        self.qexecute("INSERT Personne Y: Y nom 'toto'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1160
        rset = self.qexecute('Personne X WHERE X nom "toto"')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1161
        self.assertEqual(len(rset.rows), 1)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1162
        drset = self.qexecute("DELETE Personne Y WHERE Y nom 'toto'")
3648
665c37544060 on entity deletion query, return eids of deleted entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3589
diff changeset
  1163
        self.assertEqual(drset.rows, rset.rows)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1164
        rset = self.qexecute('Personne X WHERE X nom "toto"')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1165
        self.assertEqual(len(rset.rows), 0)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1166
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1167
    def test_delete_2(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1168
        rset = self.qexecute("INSERT Personne X, Personne Y, Societe Z : "
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1169
                             "X nom 'syt', Y nom 'adim', Z nom 'Logilab', X travaille Z, Y travaille Z")
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1170
        self.assertEqual(len(rset), 1)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1171
        self.assertEqual(len(rset[0]), 3)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1172
        self.assertEqual(rset.description[0], ('Personne', 'Personne', 'Societe'))
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1173
        self.assertEqual(self.qexecute('Any N WHERE X nom N, X eid %s'% rset[0][0])[0][0], 'syt')
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1174
        rset = self.qexecute('Personne X WHERE X travaille Y, Y nom "Logilab"')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1175
        self.assertEqual(len(rset.rows), 2, rset.rows)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1176
        self.qexecute("DELETE X travaille Y WHERE X is Personne, Y nom 'Logilabo'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1177
        rset = self.qexecute('Personne X WHERE X travaille Y, Y nom "Logilab"')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1178
        self.assertEqual(len(rset.rows), 2, rset.rows)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1179
        self.qexecute("DELETE X travaille Y WHERE X is Personne, Y nom 'Logilab'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1180
        rset = self.qexecute('Personne X WHERE X travaille Y, Y nom "Logilab"')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1181
        self.assertEqual(len(rset.rows), 0, rset.rows)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1182
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1183
    def test_delete_3(self):
12039
7514626e1dc5 [session+test] Stop storing / accessing session when it's not necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11774
diff changeset
  1184
        with self.user_groups_session('users') as cnx:
10365
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1185
            peid, = self.o.execute(cnx, "INSERT Personne P: P nom 'toto'")[0]
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1186
            seid, = self.o.execute(cnx, "INSERT Societe S: S nom 'logilab'")[0]
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1187
            self.o.execute(cnx, "SET P travaille S")
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1188
            cnx.commit()
9833
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1189
        rset = self.qexecute('Personne P WHERE P travaille S')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1190
        self.assertEqual(len(rset.rows), 1)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1191
        self.qexecute("DELETE X travaille Y WHERE X eid %s, Y eid %s" % (peid, seid))
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1192
        rset = self.qexecute('Personne P WHERE P travaille S')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1193
        self.assertEqual(len(rset.rows), 0)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1194
4467
0e73d299730a fix long-waiting symetric typo: should be spelled symmetric. Add auto database migration on schema deserialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4204
diff changeset
  1195
    def test_delete_symmetric(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1196
        teid1 = self.qexecute("INSERT Folder T: T name 'toto'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1197
        teid2 = self.qexecute("INSERT Folder T: T name 'tutu'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1198
        self.qexecute('SET X see_also Y WHERE X eid %s, Y eid %s' % (teid1, teid2))
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1199
        rset = self.qexecute('Any X,Y WHERE X see_also Y')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1200
        self.assertEqual(len(rset) , 2, rset.rows)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1201
        self.qexecute('DELETE X see_also Y WHERE X eid %s, Y eid %s' % (teid1, teid2))
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1202
        rset = self.qexecute('Any X,Y WHERE X see_also Y')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1203
        self.assertEqual(len(rset) , 0)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1204
        self.qexecute('SET X see_also Y WHERE X eid %s, Y eid %s' % (teid1, teid2))
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1205
        rset = self.qexecute('Any X,Y WHERE X see_also Y')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1206
        self.assertEqual(len(rset) , 2)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1207
        self.qexecute('DELETE X see_also Y WHERE X eid %s, Y eid %s' % (teid2, teid1))
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1208
        rset = self.qexecute('Any X,Y WHERE X see_also Y')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1209
        self.assertEqual(len(rset) , 0)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1210
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1211
    def test_nonregr_delete_cache(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1212
        """test that relations are properly cleaned when an entity is deleted
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1213
        (using cachekey on sql generation returned always the same query for an eid,
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1214
        whatever the relation)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1215
        """
9833
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1216
        aeid, = self.qexecute('INSERT EmailAddress X: X address "toto@logilab.fr", X alias "hop"')[0]
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1217
        # XXX would be nice if the rql below was enough...
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1218
        #'INSERT Email X: X messageid "<1234>", X subject "test", X sender Y, X recipients Y'
9833
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1219
        eeid, = self.qexecute('INSERT Email X: X messageid "<1234>", X subject "test", '
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1220
                              'X sender Y, X recipients Y WHERE Y is EmailAddress')[0]
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1221
        self.qexecute("DELETE Email X")
12055
6672f51d8268 [test] Rename BaseQuerierTC._access to BaseQuerierTC.admin_access
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12041
diff changeset
  1222
        with self.admin_access.cnx() as cnx:
10365
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1223
            sqlc = cnx.cnxset.cu
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1224
            sqlc.execute('SELECT * FROM recipients_relation')
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1225
            self.assertEqual(len(sqlc.fetchall()), 0)
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1226
            sqlc.execute('SELECT * FROM owned_by_relation WHERE eid_from=%s'%eeid)
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1227
            self.assertEqual(len(sqlc.fetchall()), 0)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1228
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1229
    def test_nonregr_delete_cache2(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1230
        eid = self.qexecute("INSERT Folder T: T name 'toto'")[0][0]
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1231
        # fill the cache
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1232
        self.qexecute("Any X WHERE X eid %(x)s", {'x': eid})
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1233
        self.qexecute("Any X WHERE X eid %s" % eid)
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1234
        self.qexecute("Folder X WHERE X eid %(x)s", {'x': eid})
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1235
        self.qexecute("Folder X WHERE X eid %s" % eid)
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1236
        self.qexecute("DELETE Folder T WHERE T eid %s" % eid)
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1237
        rset = self.qexecute("Any X WHERE X eid %(x)s", {'x': eid})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1238
        self.assertEqual(rset.rows, [])
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1239
        rset = self.qexecute("Any X WHERE X eid %s" % eid)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1240
        self.assertEqual(rset.rows, [])
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1241
        rset = self.qexecute("Folder X WHERE X eid %(x)s", {'x': eid})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1242
        self.assertEqual(rset.rows, [])
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1243
        rset = self.qexecute("Folder X WHERE X eid %s" %eid)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1244
        self.assertEqual(rset.rows, [])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1245
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1246
    # update queries tests ####################################################
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1247
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1248
    def test_update_1(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1249
        peid = self.qexecute("INSERT Personne Y: Y nom 'toto'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1250
        rset = self.qexecute('Personne X WHERE X nom "toto"')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1251
        self.assertEqual(len(rset.rows), 1)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1252
        rset = self.qexecute("SET X nom 'tutu', X prenom 'original' WHERE X is Personne, X nom 'toto'")
2921
8e2544e78a5e test and fix rset returned by SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
  1253
        self.assertEqual(tuplify(rset.rows), [(peid, 'tutu', 'original')])
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1254
        rset = self.qexecute('Any Y, Z WHERE X is Personne, X nom Y, X prenom Z')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1255
        self.assertEqual(tuplify(rset.rows), [('tutu', 'original')])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1256
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1257
    def test_update_2(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1258
        peid, seid = self.qexecute("INSERT Personne X, Societe Y: X nom 'bidule', Y nom 'toto'")[0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1259
        rset = self.qexecute("SET X travaille Y WHERE X nom 'bidule', Y nom 'toto'")
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1260
        self.assertEqual(tuplify(rset.rows), [(peid, seid)])
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1261
        rset = self.qexecute('Any X, Y WHERE X travaille Y')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1262
        self.assertEqual(len(rset.rows), 1)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1263
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1264
    def test_update_2bis(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1265
        rset = self.qexecute("INSERT Personne X, Societe Y: X nom 'bidule', Y nom 'toto'")
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1266
        eid1, eid2 = rset[0][0], rset[0][1]
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1267
        self.qexecute("SET X travaille Y WHERE X eid %(x)s, Y eid %(y)s",
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1268
                      {'x': str(eid1), 'y': str(eid2)})
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1269
        rset = self.qexecute('Any X, Y WHERE X travaille Y')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1270
        self.assertEqual(len(rset.rows), 1)
4795
f1c8bc628b45 [repo] fix bug introduced by 4757:ec9c20c6b9f7, testing for select.selection is not enough to avoid the substep query, we should check there is no interesting restriction (test added)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4787
diff changeset
  1271
        # test add of an existant relation but with NOT X rel Y protection
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1272
        self.assertFalse(self.qexecute("SET X travaille Y WHERE X eid %(x)s, Y eid %(y)s,"
4795
f1c8bc628b45 [repo] fix bug introduced by 4757:ec9c20c6b9f7, testing for select.selection is not enough to avoid the substep query, we should check there is no interesting restriction (test added)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4787
diff changeset
  1273
                                 "NOT X travaille Y",
f1c8bc628b45 [repo] fix bug introduced by 4757:ec9c20c6b9f7, testing for select.selection is not enough to avoid the substep query, we should check there is no interesting restriction (test added)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4787
diff changeset
  1274
                                 {'x': str(eid1), 'y': str(eid2)}))
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1275
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1276
    def test_update_2ter(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1277
        rset = self.qexecute("INSERT Personne X, Societe Y: X nom 'bidule', Y nom 'toto'")
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1278
        eid1, eid2 = rset[0][0], rset[0][1]
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1279
        self.qexecute("SET X travaille Y WHERE X eid %(x)s, Y eid %(y)s",
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12539
diff changeset
  1280
                      {'x': str(eid1), 'y': str(eid2)})
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1281
        rset = self.qexecute('Any X, Y WHERE X travaille Y')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1282
        self.assertEqual(len(rset.rows), 1)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1283
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1284
    def test_update_multiple1(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1285
        peid1 = self.qexecute("INSERT Personne Y: Y nom 'tutu'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1286
        peid2 = self.qexecute("INSERT Personne Y: Y nom 'toto'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1287
        self.qexecute("SET X nom 'tutu', Y nom 'toto' WHERE X nom 'toto', Y nom 'tutu'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1288
        self.assertEqual(self.qexecute('Any X WHERE X nom "toto"').rows, [[peid1]])
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1289
        self.assertEqual(self.qexecute('Any X WHERE X nom "tutu"').rows, [[peid2]])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1290
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1291
    def test_update_multiple2(self):
12055
6672f51d8268 [test] Rename BaseQuerierTC._access to BaseQuerierTC.admin_access
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12041
diff changeset
  1292
        with self.admin_access.cnx() as cnx:
9833
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1293
            ueid = cnx.execute("INSERT CWUser X: X login 'bob', X upassword 'toto'")[0][0]
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1294
            peid1 = cnx.execute("INSERT Personne Y: Y nom 'turlu'")[0][0]
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1295
            peid2 = cnx.execute("INSERT Personne Y: Y nom 'tutu'")[0][0]
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1296
            cnx.execute('SET P1 owned_by U, P2 owned_by U '
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1297
                        'WHERE P1 eid %s, P2 eid %s, U eid %s' % (peid1, peid2, ueid))
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1298
            self.assertTrue(cnx.execute('Any X WHERE X eid %s, X owned_by U, U eid %s'
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1299
                                          % (peid1, ueid)))
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1300
            self.assertTrue(cnx.execute('Any X WHERE X eid %s, X owned_by U, U eid %s'
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1301
                                          % (peid2, ueid)))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1302
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1303
    def test_update_math_expr(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1304
        orders = [r[0] for r in self.qexecute('Any O ORDERBY O WHERE ST name "Personne", '
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1305
                                              'X from_entity ST, X ordernum O')]
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1306
        for i,v in enumerate(orders):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1307
            if v != orders[0]:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1308
                splitidx = i
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1309
                break
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1310
        self.qexecute('SET X ordernum Y+1 WHERE X from_entity SE, SE name "Personne", '
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1311
                      'X ordernum Y, X ordernum >= %(order)s',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1312
                     {'order': orders[splitidx]})
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1313
        orders2 = [r[0] for r in self.qexecute('Any O ORDERBY O WHERE ST name "Personne", '
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1314
                                               'X from_entity ST, X ordernum O')]
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1315
        orders = orders[:splitidx] + [o+1 for o in orders[splitidx:]]
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1316
        self.assertEqual(orders2, orders)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1317
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1318
    def test_update_string_concat(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1319
        beid = self.qexecute("INSERT Bookmark Y: Y title 'toto', Y path '/view'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1320
        self.qexecute('SET X title XN + %(suffix)s WHERE X is Bookmark, X title XN',
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1321
                      {'suffix': u'-moved'})
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1322
        newname = self.qexecute('Any XN WHERE X eid %(x)s, X title XN', {'x': beid})[0][0]
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1323
        self.assertEqual(newname, 'toto-moved')
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1324
9206
bf642b50135b [rql / querier] fix bad interpretation of some RQL SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8866
diff changeset
  1325
    def test_update_not_exists(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1326
        rset = self.qexecute("INSERT Personne X, Societe Y: X nom 'bidule', Y nom 'toto'")
9206
bf642b50135b [rql / querier] fix bad interpretation of some RQL SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8866
diff changeset
  1327
        eid1, eid2 = rset[0][0], rset[0][1]
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1328
        rset = self.qexecute("SET X travaille Y WHERE X eid %(x)s, Y eid %(y)s, "
9206
bf642b50135b [rql / querier] fix bad interpretation of some RQL SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8866
diff changeset
  1329
                            "NOT EXISTS(Z ecrit_par X)",
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12539
diff changeset
  1330
                            {'x': str(eid1), 'y': str(eid2)})
9206
bf642b50135b [rql / querier] fix bad interpretation of some RQL SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8866
diff changeset
  1331
        self.assertEqual(tuplify(rset.rows), [(eid1, eid2)])
bf642b50135b [rql / querier] fix bad interpretation of some RQL SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8866
diff changeset
  1332
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1333
    def test_update_query_error(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1334
        self.qexecute("INSERT Personne Y: Y nom 'toto'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1335
        self.assertRaises(Exception, self.qexecute, "SET X nom 'toto', X is Personne")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1336
        self.assertRaises(QueryError, self.qexecute, "SET X nom 'toto', X has_text 'tutu' "
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1337
                          "WHERE X is Personne")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1338
        self.assertRaises(QueryError,
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1339
                          self.qexecute,
12041
69f69ce8241a [user] Drop ugly hack on CWUser entity class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12039
diff changeset
  1340
                          "SET X login 'tutu', X eid %s" % cnx.user.eid)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1341
9206
bf642b50135b [rql / querier] fix bad interpretation of some RQL SET query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8866
diff changeset
  1342
8018
f01c80513274 [rql] closes #2054468: support for HAVING in SET/DELETE queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8002
diff changeset
  1343
    # HAVING on write queries test #############################################
f01c80513274 [rql] closes #2054468: support for HAVING in SET/DELETE queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8002
diff changeset
  1344
f01c80513274 [rql] closes #2054468: support for HAVING in SET/DELETE queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8002
diff changeset
  1345
    def test_update_having(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1346
        peid1 = self.qexecute("INSERT Personne Y: Y nom 'hop', Y tel 1")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1347
        peid2 = self.qexecute("INSERT Personne Y: Y nom 'hop', Y tel 2")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1348
        rset = self.qexecute("SET X tel 3 WHERE X tel TEL HAVING TEL&1=1")
8018
f01c80513274 [rql] closes #2054468: support for HAVING in SET/DELETE queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8002
diff changeset
  1349
        self.assertEqual(tuplify(rset.rows), [(peid1, 3)])
f01c80513274 [rql] closes #2054468: support for HAVING in SET/DELETE queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8002
diff changeset
  1350
f01c80513274 [rql] closes #2054468: support for HAVING in SET/DELETE queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8002
diff changeset
  1351
    def test_insert_having(self):
8019
eb83c52ffa0c [test] unittest2 api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8018
diff changeset
  1352
        self.skipTest('unsupported yet')
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1353
        self.qexecute("INSERT Personne Y: Y nom 'hop', Y tel 1")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1354
        self.assertFalse(self.qexecute("INSERT Personne Y: Y nom 'hop', Y tel 2 "
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1355
                                       "WHERE X tel XT HAVING XT&2=2"))
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1356
        self.assertTrue(self.qexecute("INSERT Personne Y: Y nom 'hop', Y tel 2 "
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1357
                                      "WHERE X tel XT HAVING XT&1=1"))
8018
f01c80513274 [rql] closes #2054468: support for HAVING in SET/DELETE queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8002
diff changeset
  1358
f01c80513274 [rql] closes #2054468: support for HAVING in SET/DELETE queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8002
diff changeset
  1359
    def test_delete_having(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1360
        self.qexecute("INSERT Personne Y: Y nom 'hop', Y tel 1")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1361
        self.assertFalse(self.qexecute("DELETE Personne Y WHERE X tel XT HAVING XT&2=2"))
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1362
        self.assertTrue(self.qexecute("DELETE Personne Y WHERE X tel XT HAVING XT&1=1"))
8018
f01c80513274 [rql] closes #2054468: support for HAVING in SET/DELETE queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8002
diff changeset
  1363
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1364
    # upassword encryption tests #################################################
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1365
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1366
    def test_insert_upassword(self):
9833
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1367
        rset = self.qexecute("INSERT CWUser X: X login 'bob', X upassword 'toto', "
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1368
                             "X in_group G WHERE G name 'users'")
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1369
        self.assertEqual(len(rset.rows), 1)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1370
        self.assertEqual(rset.description, [('CWUser',)])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1371
        self.assertRaises(Unauthorized,
9833
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1372
                          self.qexecute, "Any P WHERE X is CWUser, X login 'bob', X upassword P")
12055
6672f51d8268 [test] Rename BaseQuerierTC._access to BaseQuerierTC.admin_access
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12041
diff changeset
  1373
        with self.admin_access.cnx() as cnx:
10365
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1374
            cursor = cnx.cnxset.cu
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1375
            cursor.execute("SELECT %supassword from %sCWUser WHERE %slogin='bob'"
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1376
                           % (SQL_PREFIX, SQL_PREFIX, SQL_PREFIX))
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12539
diff changeset
  1377
            passwd = bytes(cursor.fetchone()[0])
10365
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1378
            self.assertEqual(passwd, crypt_password('toto', passwd))
9833
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1379
        rset = self.qexecute("Any X WHERE X is CWUser, X login 'bob', X upassword %(pwd)s",
4199
c9526b1ffb1d must now properly use Binary for password (see 4180:42247d70105b). XXX Though this is somewhat backend related (eg store password using a binary type), this should be either well document or handled properly in the db helper.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3587
diff changeset
  1380
                            {'pwd': Binary(passwd)})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1381
        self.assertEqual(len(rset.rows), 1)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1382
        self.assertEqual(rset.description, [('CWUser',)])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1383
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1384
    def test_update_upassword(self):
12055
6672f51d8268 [test] Rename BaseQuerierTC._access to BaseQuerierTC.admin_access
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12041
diff changeset
  1385
        with self.admin_access.cnx() as cnx:
10365
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1386
            rset = cnx.execute("INSERT CWUser X: X login 'bob', X upassword %(pwd)s",
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1387
                               {'pwd': 'toto'})
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1388
            self.assertEqual(rset.description[0][0], 'CWUser')
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1389
            rset = cnx.execute("SET X upassword %(pwd)s WHERE X is CWUser, X login 'bob'",
10765
bd2e3c1d1fed [server/test] str vs bytes
Julien Cristau <julien.cristau@logilab.fr>
parents: 10764
diff changeset
  1390
                               {'pwd': b'tutu'})
10365
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1391
            cursor = cnx.cnxset.cu
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1392
            cursor.execute("SELECT %supassword from %sCWUser WHERE %slogin='bob'"
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1393
                           % (SQL_PREFIX, SQL_PREFIX, SQL_PREFIX))
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12539
diff changeset
  1394
            passwd = bytes(cursor.fetchone()[0])
10365
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1395
            self.assertEqual(passwd, crypt_password('tutu', passwd))
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1396
            rset = cnx.execute("Any X WHERE X is CWUser, X login 'bob', X upassword %(pwd)s",
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1397
                               {'pwd': Binary(passwd)})
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1398
            self.assertEqual(len(rset.rows), 1)
21461f80f348 [connection] remove ensure_cnx_set context manager uses
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10354
diff changeset
  1399
            self.assertEqual(rset.description, [('CWUser',)])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1400
12228
8fa3131583ec [querier] Allow usage of computed relation into WHERE clause of write queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12055
diff changeset
  1401
    # computed relation tests ##################################################
8fa3131583ec [querier] Allow usage of computed relation into WHERE clause of write queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12055
diff changeset
  1402
8fa3131583ec [querier] Allow usage of computed relation into WHERE clause of write queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12055
diff changeset
  1403
    def test_computed_relation_write_queries(self):
8fa3131583ec [querier] Allow usage of computed relation into WHERE clause of write queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12055
diff changeset
  1404
        """Ensure we can use computed relation in WHERE clause of write queries"""
8fa3131583ec [querier] Allow usage of computed relation into WHERE clause of write queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12055
diff changeset
  1405
        with self.admin_access.cnx() as cnx:
8fa3131583ec [querier] Allow usage of computed relation into WHERE clause of write queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12055
diff changeset
  1406
            cnx.execute('INSERT Personne P: P nom "user", P login_user U WHERE NOT U user_login P')
8fa3131583ec [querier] Allow usage of computed relation into WHERE clause of write queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12055
diff changeset
  1407
            cnx.execute('DELETE P login_user U WHERE U user_login P')
8fa3131583ec [querier] Allow usage of computed relation into WHERE clause of write queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12055
diff changeset
  1408
            cnx.execute('DELETE Personne P WHERE U user_login P')
8fa3131583ec [querier] Allow usage of computed relation into WHERE clause of write queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12055
diff changeset
  1409
            cnx.execute('SET U login "people" WHERE U user_login P')
8fa3131583ec [querier] Allow usage of computed relation into WHERE clause of write queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12055
diff changeset
  1410
7166
dde161937d3e [time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7148
diff changeset
  1411
    # ZT datetime tests ########################################################
dde161937d3e [time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7148
diff changeset
  1412
dde161937d3e [time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7148
diff changeset
  1413
    def test_tz_datetime(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1414
        self.qexecute("INSERT Personne X: X nom 'bob', X tzdatenaiss %(date)s",
7166
dde161937d3e [time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7148
diff changeset
  1415
                     {'date': datetime(1977, 6, 7, 2, 0, tzinfo=FixedOffset(1))})
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1416
        datenaiss = self.qexecute("Any XD WHERE X nom 'bob', X tzdatenaiss XD")[0][0]
11034
75d752e6daf7 [server] improve TZDatetime support
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11032
diff changeset
  1417
        self.assertIsNotNone(datenaiss.tzinfo)
7166
dde161937d3e [time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7148
diff changeset
  1418
        self.assertEqual(datenaiss.utctimetuple()[:5], (1977, 6, 7, 1, 0))
dde161937d3e [time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7148
diff changeset
  1419
10643
cfded6d0da11 fix bad-caching of datetime with tz info at sql generation time
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10508
diff changeset
  1420
    def test_tz_datetime_cache_nonregr(self):
cfded6d0da11 fix bad-caching of datetime with tz info at sql generation time
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10508
diff changeset
  1421
        datenaiss = datetime(1977, 6, 7, 2, 0, tzinfo=FixedOffset(1))
cfded6d0da11 fix bad-caching of datetime with tz info at sql generation time
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10508
diff changeset
  1422
        self.qexecute("INSERT Personne X: X nom 'bob', X tzdatenaiss %(date)s",
cfded6d0da11 fix bad-caching of datetime with tz info at sql generation time
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10508
diff changeset
  1423
                     {'date': datenaiss})
cfded6d0da11 fix bad-caching of datetime with tz info at sql generation time
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10508
diff changeset
  1424
        self.assertTrue(self.qexecute("Any X WHERE X tzdatenaiss %(d)s", {'d': datenaiss}))
cfded6d0da11 fix bad-caching of datetime with tz info at sql generation time
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10508
diff changeset
  1425
        self.assertFalse(self.qexecute("Any X WHERE X tzdatenaiss %(d)s", {'d': datenaiss - timedelta(1)}))
cfded6d0da11 fix bad-caching of datetime with tz info at sql generation time
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10508
diff changeset
  1426
7166
dde161937d3e [time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7148
diff changeset
  1427
    # non regression tests #####################################################
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1428
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1429
    def test_nonregr_1(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1430
        teid = self.qexecute("INSERT Tag X: X name 'tag'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1431
        self.qexecute("SET X tags Y WHERE X name 'tag', Y is State, Y name 'activated'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1432
        rset = self.qexecute('Any X WHERE T tags X')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1433
        self.assertEqual(len(rset.rows), 1, rset.rows)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1434
        rset = self.qexecute('Any T WHERE T tags X, X is State')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1435
        self.assertEqual(rset.rows, [[teid]])
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1436
        rset = self.qexecute('Any T WHERE T tags X')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1437
        self.assertEqual(rset.rows, [[teid]])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1438
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1439
    def test_nonregr_2(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1440
        teid = self.qexecute("INSERT Tag X: X name 'tag'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1441
        geid = self.qexecute("CWGroup G WHERE G name 'users'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1442
        self.qexecute("SET X tags Y WHERE X eid %(t)s, Y eid %(g)s",
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1443
                       {'g': geid, 't': teid})
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1444
        rset = self.qexecute('Any X WHERE E eid %(x)s, E tags X',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1445
                              {'x': teid})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1446
        self.assertEqual(rset.rows, [[geid]])
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1447
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1448
    def test_nonregr_3(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1449
        """bad sql generated on the second query (destination_state is not
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1450
        detected as an inlined relation)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1451
        """
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1452
        rset = self.qexecute('Any S,ES,T WHERE S state_of WF, WF workflow_of ET, ET name "CWUser",'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1453
                             'ES allowed_transition T, T destination_state S')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1454
        self.assertEqual(len(rset.rows), 2)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1455
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1456
    def test_nonregr_4(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1457
        # fix variables'type, else we get (nb of entity types with a 'name' attribute)**3
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1458
        # union queries and that make for instance a 266Ko sql query which is refused
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1459
        # by the server (or client lib)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1460
        rset = self.qexecute('Any ER,SE,OE WHERE SE name "Comment", ER name "comments", OE name "Comment",'
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1263
diff changeset
  1461
                            'ER is CWRType, SE is CWEType, OE is CWEType')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1462
        self.assertEqual(len(rset), 1)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1463
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1464
    def test_nonregr_5(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1465
        # jpl #15505: equivalent queries returning different result sets
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1466
        teid1 = self.qexecute("INSERT Folder X: X name 'hop'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1467
        teid2 = self.qexecute("INSERT Folder X: X name 'hip'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1468
        neid = self.qexecute("INSERT Note X: X todo_by U, X filed_under T "
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1469
                             "WHERE U login 'admin', T name 'hop'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1470
        weid = self.qexecute("INSERT Affaire X: X concerne N, X filed_under T "
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1471
                             "WHERE N is Note, T name 'hip'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1472
        rset1 = self.qexecute('Any N,U WHERE N filed_under T, T eid %s,'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1473
                             'N todo_by U, W concerne N,'
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1474
                             'W is Affaire, W filed_under A, A eid %s' % (teid1, teid2))
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1475
        rset2 = self.qexecute('Any N,U WHERE N filed_under T, T eid %s,'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1476
                             'N todo_by U, W concerne N,'
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1477
                             'W filed_under A, A eid %s' % (teid1, teid2))
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1478
        rset3 = self.qexecute('Any N,U WHERE N todo_by U, T eid %s,'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1479
                             'N filed_under T, W concerne N,'
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1480
                             'W is Affaire, W filed_under A, A eid %s' % (teid1, teid2))
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1481
        rset4 = self.qexecute('Any N,U WHERE N todo_by U, T eid %s,'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1482
                             'N filed_under T, W concerne N,'
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1483
                             'W filed_under A, A eid %s' % (teid1, teid2))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1484
        self.assertEqual(rset1.rows, rset2.rows)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1485
        self.assertEqual(rset1.rows, rset3.rows)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1486
        self.assertEqual(rset1.rows, rset4.rows)
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1487
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1488
    def test_nonregr_6(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1489
        self.qexecute('Any N,COUNT(S) GROUPBY N ORDERBY COUNT(N) WHERE S name N, S is State')
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1490
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1491
    def test_sqlite_encoding(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1492
        """XXX this test was trying to show a bug on use of lower which only
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1493
        occurs with non ascii string and misconfigured locale
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1494
        """
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1495
        self.qexecute("INSERT Tag X: X name %(name)s,"
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1496
                       "X modification_date %(modification_date)s,"
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1497
                       "X creation_date %(creation_date)s",
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1498
                       {'name': u'�name0',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1499
                        'modification_date': '2003/03/12 11:00',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1500
                        'creation_date': '2000/07/03 11:00'})
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1501
        rset = self.qexecute('Any lower(N) ORDERBY LOWER(N) WHERE X is Tag, X name N,'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1502
                            'X owned_by U, U eid %(x)s',
12055
6672f51d8268 [test] Rename BaseQuerierTC._access to BaseQuerierTC.admin_access
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12041
diff changeset
  1503
                            {'x':self.admin_access._user.eid})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1504
        self.assertEqual(rset.rows, [[u'\xe9name0']])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1505
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1506
    def test_nonregr_description(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1507
        """check that a correct description is built in case where infered
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1508
        solutions may be "fusionned" into one by the querier while all solutions
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1509
        are needed to build the result's description
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1510
        """
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1511
        self.qexecute("INSERT Personne X: X nom 'bidule'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1512
        self.qexecute("INSERT Societe Y: Y nom 'toto'")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1513
        beid = self.qexecute("INSERT Basket B: B name 'mybasket'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1514
        self.qexecute("SET X in_basket B WHERE X is Personne")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1515
        self.qexecute("SET X in_basket B WHERE X is Societe")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1516
        rset = self.qexecute('Any X WHERE X in_basket B, B eid %s' % beid)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1517
        self.assertEqual(len(rset), 2)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1518
        self.assertEqual(rset.description, [('Personne',), ('Societe',)])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1519
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1520
    def test_nonregr_cache_1(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1521
        peid = self.qexecute("INSERT Personne X: X nom 'bidule'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1522
        beid = self.qexecute("INSERT Basket X: X name 'tag'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1523
        self.qexecute("SET X in_basket Y WHERE X is Personne, Y eid %(y)s",
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1524
                       {'y': beid})
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1525
        rset = self.qexecute("Any X WHERE X in_basket B, B eid %(x)s",
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1526
                       {'x': beid})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1527
        self.assertEqual(rset.rows, [[peid]])
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1528
        rset = self.qexecute("Any X WHERE X in_basket B, B eid %(x)s",
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1529
                       {'x': beid})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1530
        self.assertEqual(rset.rows, [[peid]])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1531
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1532
    def test_nonregr_has_text_cache(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1533
        eid1 = self.qexecute("INSERT Personne X: X nom 'bidule'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1534
        eid2 = self.qexecute("INSERT Personne X: X nom 'tag'")[0][0]
10508
2a578b9e7ad8 [server/test] avoid lgdb warnings from str to unicode conversion
Julien Cristau <julien.cristau@logilab.fr>
parents: 10411
diff changeset
  1535
        rset = self.qexecute("Any X WHERE X has_text %(text)s", {'text': u'bidule'})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1536
        self.assertEqual(rset.rows, [[eid1]])
10508
2a578b9e7ad8 [server/test] avoid lgdb warnings from str to unicode conversion
Julien Cristau <julien.cristau@logilab.fr>
parents: 10411
diff changeset
  1537
        rset = self.qexecute("Any X WHERE X has_text %(text)s", {'text': u'tag'})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1538
        self.assertEqual(rset.rows, [[eid2]])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1539
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1540
    def test_nonregr_sortterm_management(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1541
        """Error: Variable has no attribute 'sql' in rql2sql.py (visit_variable)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1542
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1543
        cause: old variable ref inserted into a fresh rqlst copy
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1544
        (in RQLSpliter._complex_select_plan)
1950
ab7a41b2cd26 reactivate skipped tests due to sqlite bug which is now fixed (sqlite 3.6.13)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1949
diff changeset
  1545
ab7a41b2cd26 reactivate skipped tests due to sqlite bug which is now fixed (sqlite 3.6.13)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1949
diff changeset
  1546
        need sqlite including http://www.sqlite.org/cvstrac/tktview?tn=3773 fix
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1547
        """
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1548
        self.qexecute('Any X ORDERBY D DESC WHERE X creation_date D')
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1549
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1550
    def test_nonregr_extra_joins(self):
12055
6672f51d8268 [test] Rename BaseQuerierTC._access to BaseQuerierTC.admin_access
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12041
diff changeset
  1551
        ueid = self.admin_access._user.eid
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1552
        teid1 = self.qexecute("INSERT Folder X: X name 'folder1'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1553
        teid2 = self.qexecute("INSERT Folder X: X name 'folder2'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1554
        neid1 = self.qexecute("INSERT Note X: X para 'note1'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1555
        neid2 = self.qexecute("INSERT Note X: X para 'note2'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1556
        self.qexecute("SET X filed_under Y WHERE X eid %s, Y eid %s"
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1557
                       % (neid1, teid1))
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1558
        self.qexecute("SET X filed_under Y WHERE X eid %s, Y eid %s"
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1559
                       % (neid2, teid2))
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1560
        self.qexecute("SET X todo_by Y WHERE X is Note, Y eid %s" % ueid)
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1561
        rset = self.qexecute('Any N WHERE N todo_by U, N is Note, U eid %s, N filed_under T, T eid %s'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1562
                             % (ueid, teid1))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1563
        self.assertEqual(len(rset), 1)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1564
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1565
    def test_nonregr_XXX(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1566
        teid = self.qexecute('Transition S WHERE S name "deactivate"')[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1567
        rset = self.qexecute('Any O WHERE O is State, '
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1568
                             'S eid %(x)s, S transition_of ET, O state_of ET', {'x': teid})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1569
        self.assertEqual(len(rset), 2)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1570
        rset = self.qexecute('Any O WHERE O is State, NOT S destination_state O, '
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1571
                             'S eid %(x)s, S transition_of ET, O state_of ET', {'x': teid})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1572
        self.assertEqual(len(rset), 1)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1573
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1574
    def test_nonregr_set_datetime(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1575
        # huum, psycopg specific
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1576
        self.qexecute('SET X creation_date %(date)s WHERE X eid 1', {'date': date.today()})
1787
71c143c0ada3 fix test
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1577
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1578
    def test_nonregr_u_owned_by_u(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1579
        ueid = self.qexecute("INSERT CWUser X: X login 'bob', X upassword 'toto', X in_group G "
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1580
                             "WHERE G name 'users'")[0][0]
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1581
        rset = self.qexecute("CWUser U")
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1582
        self.assertEqual(len(rset), 3) # bob + admin + anon
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1583
        rset = self.qexecute("Any U WHERE NOT U owned_by U")
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1584
        # even admin created at repo initialization time should belong to itself
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1585
        self.assertEqual(len(rset), 0)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1586
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1587
    def test_nonreg_update_index(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1588
        # this is the kind of queries generated by "cubicweb-ctl db-check -ry"
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1589
        self.qexecute("SET X description D WHERE X is State, X description D")
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1590
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1591
    def test_nonregr_is(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1592
        uteid = self.qexecute('Any ET WHERE ET name "CWUser"')[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1593
        self.qexecute('Any X, ET WHERE X is ET, ET eid %s' % uteid)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1594
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1595
    def test_nonregr_orderby(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1596
        seid = self.qexecute('Any X WHERE X name "activated"')[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1597
        self.qexecute('Any X,S, MAX(T) GROUPBY X,S ORDERBY S '
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1598
                      'WHERE X is CWUser, T tags X, S eid IN(%s), X in_state S' % seid)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1599
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1600
    def test_nonregr_solution_cache(self):
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1601
        self.skipTest('XXX should be fixed or documented') # (doesn't occur if cache key is provided.)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1602
        rset = self.qexecute('Any X WHERE X is CWUser, X eid %(x)s', {'x':self.ueid})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1603
        self.assertEqual(len(rset), 1)
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1604
        rset = self.qexecute('Any X WHERE X is CWUser, X eid %(x)s', {'x':12345})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  1605
        self.assertEqual(len(rset), 0)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1606
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1607
    def test_nonregr_final_norestr(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1608
        self.assertRaises(BadRQLQuery, self.qexecute, 'Date X')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1609
7394
d11d88bd08e8 [rql2sql] fix generated sql for eid comparison. closes #1638695
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7211
diff changeset
  1610
    def test_nonregr_eid_cmp(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1611
        peid1 = self.qexecute("INSERT Personne X: X nom 'bidule'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1612
        peid2 = self.qexecute("INSERT Personne X: X nom 'bidule'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1613
        rset = self.qexecute('Any X,Y WHERE X is Personne, Y is Personne, '
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1614
                             'X nom XD, Y nom XD, X eid Z, Y eid > Z')
7394
d11d88bd08e8 [rql2sql] fix generated sql for eid comparison. closes #1638695
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7211
diff changeset
  1615
        self.assertEqual(rset.rows, [[peid1, peid2]])
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1616
        rset = self.qexecute('Any X,Y WHERE X nom XD, Y nom XD, X eid Z, Y eid > Z')
7394
d11d88bd08e8 [rql2sql] fix generated sql for eid comparison. closes #1638695
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7211
diff changeset
  1617
        self.assertEqual(rset.rows, [[peid1, peid2]])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1618
7523
f6856231cc51 [rql annotation] fix bad invariant variable w/ has_text relation: this is only true when has_text will be used as principal (though we don't know that yet)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7394
diff changeset
  1619
    def test_nonregr_has_text_ambiguity_1(self):
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1620
        peid = self.qexecute("INSERT CWUser X: X login 'bidule', X upassword 'bidule', "
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1621
                             "X in_group G WHERE G name 'users'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1622
        aeid = self.qexecute("INSERT Affaire X: X ref 'bidule'")[0][0]
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1623
        rset = self.qexecute('Any X WHERE X is CWUser, X has_text "bidule"')
7523
f6856231cc51 [rql annotation] fix bad invariant variable w/ has_text relation: this is only true when has_text will be used as principal (though we don't know that yet)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7394
diff changeset
  1624
        self.assertEqual(rset.rows, [[peid]])
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1625
        rset = self.qexecute('Any X WHERE X is CWUser, X has_text "bidule", '
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1626
                             'X in_state S, S name SN')
7523
f6856231cc51 [rql annotation] fix bad invariant variable w/ has_text relation: this is only true when has_text will be used as principal (though we don't know that yet)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7394
diff changeset
  1627
        self.assertEqual(rset.rows, [[peid]])
f6856231cc51 [rql annotation] fix bad invariant variable w/ has_text relation: this is only true when has_text will be used as principal (though we don't know that yet)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7394
diff changeset
  1628
8127
96d343a5e01b [rql2sql] None for attributes in kwargs generate IS NULL, so should be considered in sql cache key. Closes #2116693
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8111
diff changeset
  1629
    def test_nonregr_sql_cache(self):
96d343a5e01b [rql2sql] None for attributes in kwargs generate IS NULL, so should be considered in sql cache key. Closes #2116693
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8111
diff changeset
  1630
        # different SQL generated when 'name' is None or not (IS NULL).
9831
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1631
        self.assertFalse(self.qexecute('Any X WHERE X is CWEType, X name %(name)s',
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1632
                                       {'name': None}))
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1633
        self.assertTrue(self.qexecute('Any X WHERE X is CWEType, X name %(name)s',
db4aeba5d336 [test/querier] use the new connection api (part 1/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
  1634
                                      {'name': 'CWEType'}))
8127
96d343a5e01b [rql2sql] None for attributes in kwargs generate IS NULL, so should be considered in sql cache key. Closes #2116693
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8111
diff changeset
  1635
12931
6eae252361e5 [rql] Store selected variables for RQL select queries in ResultSet (#17218476)
Laurent Wouters <lwouters@cenotelie.fr>
parents: 12567
diff changeset
  1636
    def test_variables_in_rset_for_select(self):
6eae252361e5 [rql] Store selected variables for RQL select queries in ResultSet (#17218476)
Laurent Wouters <lwouters@cenotelie.fr>
parents: 12567
diff changeset
  1637
        rset = self.qexecute('Any X WHERE X is CWUser, X eid %(x)s', {'x': self.ueid})
6eae252361e5 [rql] Store selected variables for RQL select queries in ResultSet (#17218476)
Laurent Wouters <lwouters@cenotelie.fr>
parents: 12567
diff changeset
  1638
        self.assertEqual(rset.variables, ['X'])
6eae252361e5 [rql] Store selected variables for RQL select queries in ResultSet (#17218476)
Laurent Wouters <lwouters@cenotelie.fr>
parents: 12567
diff changeset
  1639
6eae252361e5 [rql] Store selected variables for RQL select queries in ResultSet (#17218476)
Laurent Wouters <lwouters@cenotelie.fr>
parents: 12567
diff changeset
  1640
    def test_only_selected_variables_in_rset(self):
6eae252361e5 [rql] Store selected variables for RQL select queries in ResultSet (#17218476)
Laurent Wouters <lwouters@cenotelie.fr>
parents: 12567
diff changeset
  1641
        rset = self.qexecute('Any X,Y WHERE X is Personne, Y is Personne, '
6eae252361e5 [rql] Store selected variables for RQL select queries in ResultSet (#17218476)
Laurent Wouters <lwouters@cenotelie.fr>
parents: 12567
diff changeset
  1642
                             'X nom XD, Y nom XD, X eid Z, Y eid > Z')
6eae252361e5 [rql] Store selected variables for RQL select queries in ResultSet (#17218476)
Laurent Wouters <lwouters@cenotelie.fr>
parents: 12567
diff changeset
  1643
        # Z is not selected
6eae252361e5 [rql] Store selected variables for RQL select queries in ResultSet (#17218476)
Laurent Wouters <lwouters@cenotelie.fr>
parents: 12567
diff changeset
  1644
        self.assertEqual(rset.variables, ['X', 'Y'])
6eae252361e5 [rql] Store selected variables for RQL select queries in ResultSet (#17218476)
Laurent Wouters <lwouters@cenotelie.fr>
parents: 12567
diff changeset
  1645
6eae252361e5 [rql] Store selected variables for RQL select queries in ResultSet (#17218476)
Laurent Wouters <lwouters@cenotelie.fr>
parents: 12567
diff changeset
  1646
    def test_no_variables_in_rset(self):
6eae252361e5 [rql] Store selected variables for RQL select queries in ResultSet (#17218476)
Laurent Wouters <lwouters@cenotelie.fr>
parents: 12567
diff changeset
  1647
        rset = self.qexecute('Any COUNT(X) WHERE X is CWUser')
6eae252361e5 [rql] Store selected variables for RQL select queries in ResultSet (#17218476)
Laurent Wouters <lwouters@cenotelie.fr>
parents: 12567
diff changeset
  1648
        self.assertEqual(rset.variables, ['COUNT(X)'])
6eae252361e5 [rql] Store selected variables for RQL select queries in ResultSet (#17218476)
Laurent Wouters <lwouters@cenotelie.fr>
parents: 12567
diff changeset
  1649
6eae252361e5 [rql] Store selected variables for RQL select queries in ResultSet (#17218476)
Laurent Wouters <lwouters@cenotelie.fr>
parents: 12567
diff changeset
  1650
    def test_mixed_projection_in_rset(self):
6eae252361e5 [rql] Store selected variables for RQL select queries in ResultSet (#17218476)
Laurent Wouters <lwouters@cenotelie.fr>
parents: 12567
diff changeset
  1651
        rset = self.qexecute('Any X,COUNT(X) WHERE X is CWUser')
6eae252361e5 [rql] Store selected variables for RQL select queries in ResultSet (#17218476)
Laurent Wouters <lwouters@cenotelie.fr>
parents: 12567
diff changeset
  1652
        self.assertEqual(rset.variables, ['X', 'COUNT(X)'])
6eae252361e5 [rql] Store selected variables for RQL select queries in ResultSet (#17218476)
Laurent Wouters <lwouters@cenotelie.fr>
parents: 12567
diff changeset
  1653
8348
1a88d201675c [test] update create_user call
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8347
diff changeset
  1654
8342
7a5271182ef0 [rql annotation] fix has_text_query detection (if coming from sub-query and if has_text on a column aliases. Closes #2275322
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8317
diff changeset
  1655
class NonRegressionTC(CubicWebTC):
8348
1a88d201675c [test] update create_user call
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8347
diff changeset
  1656
8342
7a5271182ef0 [rql annotation] fix has_text_query detection (if coming from sub-query and if has_text on a column aliases. Closes #2275322
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8317
diff changeset
  1657
    def test_has_text_security_cache_bug(self):
9833
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1658
        with self.admin_access.repo_cnx() as cnx:
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1659
            self.create_user(cnx, 'user', ('users',))
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1660
            aff1 = cnx.create_entity('Societe', nom=u'aff1')
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1661
            aff2 = cnx.create_entity('Societe', nom=u'aff2')
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1662
            cnx.commit()
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1663
        with self.new_access('user').repo_cnx() as cnx:
10508
2a578b9e7ad8 [server/test] avoid lgdb warnings from str to unicode conversion
Julien Cristau <julien.cristau@logilab.fr>
parents: 10411
diff changeset
  1664
            res = cnx.execute('Any X WHERE X has_text %(text)s', {'text': u'aff1'})
8342
7a5271182ef0 [rql annotation] fix has_text_query detection (if coming from sub-query and if has_text on a column aliases. Closes #2275322
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8317
diff changeset
  1665
            self.assertEqual(res.rows, [[aff1.eid]])
10508
2a578b9e7ad8 [server/test] avoid lgdb warnings from str to unicode conversion
Julien Cristau <julien.cristau@logilab.fr>
parents: 10411
diff changeset
  1666
            res = cnx.execute('Any X WHERE X has_text %(text)s', {'text': u'aff2'})
8342
7a5271182ef0 [rql annotation] fix has_text_query detection (if coming from sub-query and if has_text on a column aliases. Closes #2275322
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8317
diff changeset
  1667
            self.assertEqual(res.rows, [[aff2.eid]])
8348
1a88d201675c [test] update create_user call
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8347
diff changeset
  1668
8853
f61755c05c89 [querier] fix eid relations handling in SET queries (closes #2797052)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8348
diff changeset
  1669
    def test_set_relations_eid(self):
9833
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1670
        with self.admin_access.repo_cnx() as cnx:
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1671
            # create 3 email addresses
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1672
            a1 = cnx.create_entity('EmailAddress', address=u'a1')
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1673
            a2 = cnx.create_entity('EmailAddress', address=u'a2')
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1674
            a3 = cnx.create_entity('EmailAddress', address=u'a3')
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1675
            # SET relations using '>=' operator on eids
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1676
            cnx.execute('SET U use_email A WHERE U login "admin", A eid >= %s' % a2.eid)
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1677
            self.assertEqual(
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1678
                [[a2.eid], [a3.eid]],
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1679
                cnx.execute('Any A ORDERBY A WHERE U use_email A, U login "admin"').rows)
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1680
            # DELETE
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1681
            cnx.execute('DELETE U use_email A WHERE U login "admin", A eid > %s' % a2.eid)
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1682
            self.assertEqual(
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1683
                [[a2.eid]],
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1684
                cnx.execute('Any A ORDERBY A WHERE U use_email A, U login "admin"').rows)
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1685
            cnx.execute('DELETE U use_email A WHERE U login "admin"')
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1686
            # SET relations using '<' operator on eids
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1687
            cnx.execute('SET U use_email A WHERE U login "admin", A eid < %s' % a2.eid)
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1688
            self.assertEqual(
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1689
                [[a1.eid]],
1485aab7ece6 [tests/querier] use the new connection api (part 3/3)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9832
diff changeset
  1690
                cnx.execute('Any A ORDERBY A WHERE U use_email A, U login "admin"').rows)
8853
f61755c05c89 [querier] fix eid relations handling in SET queries (closes #2797052)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8348
diff changeset
  1691
12242
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1692
    def test_computed_relation_in_write_queries(self):
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1693
        """Computed relations are not allowed in main part of write queries."""
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1694
        @contextmanager
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1695
        def check(cnx):
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1696
            with self.assertRaises(QueryError) as cm:
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1697
                yield
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1698
            self.assertIn("'user_login' is a computed relation",
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1699
                          str(cm.exception))
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1700
            cnx.rollback()
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1701
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1702
        with self.admin_access.cnx() as cnx:
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1703
            person = cnx.create_entity('Personne', nom=u'p')
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1704
            cnx.commit()
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1705
            # create
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1706
            with check(cnx):
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1707
                cnx.execute('INSERT CWUser X: X login "user", X user_login P'
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1708
                            ' WHERE P is Personne, P nom "p"')
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1709
            # update
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1710
            bob = self.create_user(cnx, u'bob')
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1711
            with check(cnx):
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1712
                cnx.execute('SET U user_login P WHERE U login "bob", P nom "p"')
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1713
            # delete
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1714
            person.cw_set(login_user=bob)
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1715
            cnx.commit()
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1716
            with check(cnx):
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1717
                cnx.execute('DELETE U user_login P WHERE U login "bob"')
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1718
68ca7fe0ca29 [ssplanner] Prevent execution of write queries involving computed relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12237
diff changeset
  1719
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1720
if __name__ == '__main__':
11769
f5b815f67ce2 [test] Remove some usages of lgc.testlib
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11768
diff changeset
  1721
    unittest.main()