server/test/unittest_msplanner.py
author Alexandre Fayolle <alexandre.fayolle@logilab.fr>
Tue, 22 Mar 2011 15:11:38 +0100
branchstable
changeset 7108 bcdf22734059
parent 6957 ffda12be2e9f
child 7188 b2c45b7396fb
permissions -rw-r--r--
Abstract the support for ORDER BY and LIMIT/OFFSET SQL generation all DB engines do not support the same syntax for these features, MS SQLServer being the bad boy we try to support in CW. * Use two new methods of dbhelper to add LIMIT/OFFSET clauses and ORDER BY clauses * added unit tests for sqlserver backend * changed unittest_rql2sql to lauch the backend tests even if the driver module is not installed on the machine, so that we can run the sqlserver tests on linux (and the mysql tests too) * adapt msstep.py to the new interface closes #1154756
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6943
406a41c25e13 [sources] reorganize abstract source code, drop no more used cleanup_entities_info and _cleanup_system_relations methods
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6796
diff changeset
     1
# copyright 2003-2011 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: 5420
diff changeset
     2
# 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: 5420
diff changeset
     3
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5420
diff changeset
     4
# 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: 5420
diff changeset
     5
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5420
diff changeset
     6
# 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: 5420
diff changeset
     7
# 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: 5420
diff changeset
     8
# 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: 5420
diff changeset
     9
# 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: 5420
diff changeset
    10
#
5424
8ecbcbff9777 replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5421
diff changeset
    11
# 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: 5420
diff changeset
    12
# 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: 5420
diff changeset
    13
# 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: 5420
diff changeset
    14
# details.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5420
diff changeset
    15
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5420
diff changeset
    16
# 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: 5420
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
6796
e70ca9abfc51 [unittest2] update to unittest2 assertRaises api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6794
diff changeset
    18
"""unit tests for module cubicweb.server.msplanner"""
e70ca9abfc51 [unittest2] update to unittest2 assertRaises api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6794
diff changeset
    19
e70ca9abfc51 [unittest2] update to unittest2 assertRaises api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6794
diff changeset
    20
from __future__ import with_statement
6129
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
    21
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
    22
from logilab.common.decorators import clear_cache
6759
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
    23
from yams.buildobjs import RelationDefinition
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
    24
from rql import BadRQLQuery
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
    25
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    26
from cubicweb.devtools import init_test_database
2076
65cbe891edac cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2075
diff changeset
    27
from cubicweb.devtools.repotest import BasePlannerTC, test_plan
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    28
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    29
class _SetGenerator(object):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    30
    """singleton to easily create set using "s[0]" or "s[0,1,2]" for instance
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    31
    """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    32
    def __getitem__(self, key):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    33
        try:
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    34
            it = iter(key)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    35
        except TypeError:
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    36
            it = (key,)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    37
        return set(it)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    38
s = _SetGenerator()
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    39
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    40
from cubicweb.schema import ERQLExpression
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    41
from cubicweb.server.sources import AbstractSource
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    42
from cubicweb.server.msplanner import MSPlanner, PartPlanInformation
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    43
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    44
class FakeUserROSource(AbstractSource):
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
    45
    support_entities = {'CWUser': False}
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    46
    support_relations = {}
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    47
    def syntax_tree_search(self, *args, **kwargs):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    48
        return []
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    49
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    50
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    51
class FakeCardSource(AbstractSource):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    52
    support_entities = {'Card': True, 'Note': True, 'State': True}
393
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
    53
    support_relations = {'in_state': True, 'multisource_rel': True, 'multisource_inlined_rel': True,
6129
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
    54
                         'multisource_crossed_rel': True,}
3633
2d81178bea5f [multi-source] add test case for an encountered bug, fixed by adding state_of to dont_cross_relations. Added a note to remind me that something should be done to be smarter in handling this
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3587
diff changeset
    55
    dont_cross_relations = set(('fiche', 'state_of'))
393
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
    56
    cross_relations = set(('multisource_crossed_rel',))
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    57
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    58
    def syntax_tree_search(self, *args, **kwargs):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    59
        return []
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    60
6957
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
    61
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
    62
class FakeDataFeedSource(FakeCardSource):
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
    63
    copy_based_source = True
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
    64
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
    65
X_ALL_SOLS = sorted([{'X': 'Affaire'}, {'X': 'BaseTransition'}, {'X': 'Basket'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
    66
                     {'X': 'Bookmark'}, {'X': 'CWAttribute'}, {'X': 'CWCache'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
    67
                     {'X': 'CWConstraint'}, {'X': 'CWConstraintType'}, {'X': 'CWEType'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
    68
                     {'X': 'CWGroup'}, {'X': 'CWPermission'}, {'X': 'CWProperty'},
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
    69
                     {'X': 'CWRType'}, {'X': 'CWRelation'},
6944
0cf10429ad39 [sources] rewrite the way pyrorql mapping are stored in the database so it can be reused for other sources (eg datafeed+cwxml)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6943
diff changeset
    70
                     {'X': 'CWSource'}, {'X': 'CWSourceHostConfig'}, {'X': 'CWSourceSchemaConfig'},
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
    71
                     {'X': 'CWUser'}, {'X': 'CWUniqueTogetherConstraint'},
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    72
                     {'X': 'Card'}, {'X': 'Comment'}, {'X': 'Division'},
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
    73
                     {'X': 'Email'}, {'X': 'EmailAddress'}, {'X': 'EmailPart'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
    74
                     {'X': 'EmailThread'}, {'X': 'ExternalUri'}, {'X': 'File'},
5575
8a531340c3ef no more Image type w/ cw 3.9
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
    75
                     {'X': 'Folder'}, {'X': 'Note'},
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
    76
                     {'X': 'Personne'}, {'X': 'RQLExpression'}, {'X': 'Societe'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
    77
                     {'X': 'State'}, {'X': 'SubDivision'}, {'X': 'SubWorkflowExitPoint'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
    78
                     {'X': 'Tag'}, {'X': 'TrInfo'}, {'X': 'Transition'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
    79
                     {'X': 'Workflow'}, {'X': 'WorkflowTransition'}])
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    80
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    81
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    82
# keep cnx so it's not garbage collected and the associated session is closed
6781
5062d86d6ffe [unittest2] use unittest2 module fixture api
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6759
diff changeset
    83
def setUpModule(*args):
6631
26c303c3f1aa [test] make test independant from the working directory
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6427
diff changeset
    84
    global repo, cnx
26c303c3f1aa [test] make test independant from the working directory
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6427
diff changeset
    85
    repo, cnx = init_test_database(apphome=BaseMSPlannerTC.datadir)
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    86
6781
5062d86d6ffe [unittest2] use unittest2 module fixture api
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6759
diff changeset
    87
def tearDownModule(*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: 4764
diff changeset
    88
    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: 4764
diff changeset
    89
    del 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: 4764
diff changeset
    90
162b2b127b15 [test] get a chance to get proper garbage collection when running pytest on whole cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4764
diff changeset
    91
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    92
class BaseMSPlannerTC(BasePlannerTC):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    93
    """test planner related feature on a 3-sources repository:
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    94
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    95
    * system source supporting everything
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
    96
    * ldap source supporting CWUser
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    97
    * rql source supporting Card
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    98
    """
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    99
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   100
    def setUp(self):
6631
26c303c3f1aa [test] make test independant from the working directory
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6427
diff changeset
   101
        self.__class__.repo = repo
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   102
        #_QuerierTC.setUp(self)
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   103
        self.setup()
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   104
        # hijack Affaire security
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3890
diff changeset
   105
        affreadperms = list(self.schema['Affaire'].permissions['read'])
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   106
        self.prevrqlexpr_affaire = affreadperms[-1]
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   107
        # add access to type attribute so S can't be invariant
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   108
        affreadperms[-1] = ERQLExpression('X concerne S?, S owned_by U, S type "X"')
4685
8a2d3a7f62d1 use set_action_permissions is clearer and avoid @cached issue across tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4674
diff changeset
   109
        self.schema['Affaire'].set_action_permissions('read', affreadperms)
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   110
        # hijack CWUser security
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3890
diff changeset
   111
        userreadperms = list(self.schema['CWUser'].permissions['read'])
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   112
        self.prevrqlexpr_user = userreadperms[-1]
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   113
        userreadperms[-1] = ERQLExpression('X owned_by U')
4685
8a2d3a7f62d1 use set_action_permissions is clearer and avoid @cached issue across tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4674
diff changeset
   114
        self.schema['CWUser'].set_action_permissions('read', userreadperms)
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   115
        self.add_source(FakeUserROSource, 'ldap')
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   116
        self.add_source(FakeCardSource, 'cards')
6957
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
   117
        self.add_source(FakeDataFeedSource, 'datafeed')
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   118
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   119
    def tearDown(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   120
        # restore hijacked security
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   121
        self.restore_orig_affaire_security()
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3890
diff changeset
   122
        self.restore_orig_cwuser_security()
4775
3a37f0ce7527 [test] call super class teardown after perms restoration
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4766
diff changeset
   123
        super(BaseMSPlannerTC, self).tearDown()
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   124
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   125
    def restore_orig_affaire_security(self):
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3890
diff changeset
   126
        affreadperms = list(self.schema['Affaire'].permissions['read'])
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   127
        affreadperms[-1] = self.prevrqlexpr_affaire
4685
8a2d3a7f62d1 use set_action_permissions is clearer and avoid @cached issue across tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4674
diff changeset
   128
        self.schema['Affaire'].set_action_permissions('read', affreadperms)
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   129
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3890
diff changeset
   130
    def restore_orig_cwuser_security(self):
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3890
diff changeset
   131
        if hasattr(self, '_orig_cwuser_security_restored'):
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3890
diff changeset
   132
            return
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3890
diff changeset
   133
        self._orig_cwuser_security_restored = True
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3890
diff changeset
   134
        userreadperms = list(self.schema['CWUser'].permissions['read'])
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   135
        userreadperms[-1] = self.prevrqlexpr_user
4685
8a2d3a7f62d1 use set_action_permissions is clearer and avoid @cached issue across tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4674
diff changeset
   136
        self.schema['CWUser'].set_action_permissions('read', userreadperms)
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   137
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   138
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   139
class PartPlanInformationTC(BaseMSPlannerTC):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   140
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   141
    def _test(self, rql, *args):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   142
        if len(args) == 3:
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   143
            kwargs, sourcesterms, needsplit = args
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   144
        else:
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   145
            sourcesterms, needsplit = args
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   146
            kwargs = None
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   147
        plan = self._prepare_plan(rql, kwargs)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   148
        union = plan.rqlst
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   149
        plan.preprocess(union)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   150
        ppi = PartPlanInformation(plan, union.children[0])
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   151
        for sourcevars in ppi._sourcesterms.itervalues():
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   152
            for var in sourcevars.keys():
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   153
                solindices = sourcevars.pop(var)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   154
                sourcevars[var._ms_table_key()] = solindices
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   155
        self.assertEqual(ppi._sourcesterms, sourcesterms)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
   156
        self.assertEqual(ppi.needsplit, needsplit)
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   157
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   158
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   159
    def test_simple_system_only(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   160
        """retrieve entities only supported by the system source"""
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   161
        self._test('CWGroup X',
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   162
                   {self.system: {'X': s[0]}}, False)
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   163
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   164
    def test_simple_system_ldap(self):
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   165
        """retrieve CWUser X from both sources and return concatenation of results
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   166
        """
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   167
        self._test('CWUser X',
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   168
                   {self.system: {'X': s[0]}, self.ldap: {'X': s[0]}}, False)
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   169
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   170
    def test_simple_system_rql(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   171
        """retrieve Card X from both sources and return concatenation of results
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   172
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   173
        self._test('Any X, XT WHERE X is Card, X title XT',
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   174
                   {self.system: {'X': s[0]}, self.cards: {'X': s[0]}}, False)
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   175
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   176
    def test_simple_eid_specified(self):
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   177
        """retrieve CWUser X from system source (eid is specified, can locate the entity)
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   178
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   179
        ueid = self.session.user.eid
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   180
        self._test('Any X,L WHERE X eid %(x)s, X login L', {'x': ueid},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   181
                   {self.system: {'X': s[0]}}, False)
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   182
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   183
    def test_simple_eid_invariant(self):
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   184
        """retrieve CWUser X from system source (eid is specified, can locate the entity)
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   185
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   186
        ueid = self.session.user.eid
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   187
        self._test('Any X WHERE X eid %(x)s', {'x': ueid},
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   188
                   {self.system: {'x': s[0]}}, False)
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   189
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   190
    def test_simple_invariant(self):
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   191
        """retrieve CWUser X from system source only (X is invariant and in_group not supported by ldap source)
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   192
        """
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   193
        self._test('Any X WHERE X is CWUser, X in_group G, G name "users"',
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   194
                   {self.system: {'X': s[0], 'G': s[0], 'in_group': s[0]}}, False)
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   195
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   196
    def test_security_has_text(self):
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   197
        """retrieve CWUser X from system source only (has_text not supported by ldap source)
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   198
        """
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   199
        # specify CWUser instead of any since the way this test is written we aren't well dealing
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   200
        # with ambigous query (eg only considering the first solution)
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   201
        self._test('CWUser X WHERE X has_text "bla"',
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   202
                   {self.system: {'X': s[0]}}, False)
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   203
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   204
    def test_complex_base(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   205
        """
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   206
        1. retrieve Any X, L WHERE X is CWUser, X login L from system and ldap sources, store
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   207
           concatenation of results into a temporary table
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   208
        2. return the result of Any X, L WHERE X is TMP, X login L, X in_group G,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   209
           G name 'users' on the system source
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   210
        """
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   211
        self._test('Any X,L WHERE X is CWUser, X in_group G, X login L, G name "users"',
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   212
                   {self.system: {'X': s[0], 'G': s[0], 'in_group': s[0]},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   213
                    self.ldap : {'X': s[0]}}, True)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   214
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   215
    def test_complex_invariant_ordered(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   216
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   217
        1. retrieve Any X,AA WHERE X modification_date AA from system and ldap sources, store
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   218
           concatenation of results into a temporary table
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   219
        2. return the result of Any X,AA ORDERBY AA WHERE %s owned_by X, X modification_date AA
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   220
           on the system source
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   221
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   222
        ueid = self.session.user.eid
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   223
        self._test('Any X,AA ORDERBY AA WHERE E eid %(x)s, E owned_by X, X modification_date AA', {'x': ueid},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   224
                   {self.system: {'x': s[0], 'X': s[0], 'owned_by': s[0]},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   225
                    self.ldap : {'X': s[0]}}, True)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   226
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   227
    def test_complex_invariant(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   228
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   229
        1. retrieve Any X,L,AA WHERE X login L, X modification_date AA from system and ldap sources, store
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   230
           concatenation of results into a temporary table
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   231
        2. return the result of Any X,L,AA WHERE %s owned_by X, X login L, X modification_date AA
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   232
           on the system source
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   233
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   234
        ueid = self.session.user.eid
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   235
        self._test('Any X,L,AA WHERE E eid %(x)s, E owned_by X, X login L, X modification_date AA', {'x': ueid},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   236
                   {self.system: {'x': s[0], 'X': s[0], 'owned_by': s[0]},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   237
                    self.ldap : {'X': s[0]}}, True)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   238
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   239
    def test_complex_ambigous(self):
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   240
        """retrieve CWUser X from system and ldap sources, Person X from system source only
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   241
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   242
        self._test('Any X,F WHERE X firstname F',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   243
                   {self.system: {'X': s[0, 1]},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   244
                    self.ldap: {'X': s[0]}}, True)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   245
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   246
    def test_complex_multiple(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   247
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   248
        1. retrieve Any X,A,Y,B WHERE X login A, Y login B from system and ldap sources, store
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   249
           cartesian product of results into a temporary table
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   250
        2. return the result of Any X,Y WHERE X login 'syt', Y login 'adim'
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   251
           on the system source
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   252
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   253
        ueid = self.session.user.eid
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   254
        self._test('Any X,Y WHERE X login "syt", Y login "adim"', {'x': ueid},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   255
                   {self.system: {'Y': s[0], 'X': s[0]},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   256
                    self.ldap: {'Y': s[0], 'X': s[0]}}, True)
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   257
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   258
    def test_complex_aggregat(self):
3689
deb13e88e037 follow yams 0.25 api changes to improve performance
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3633
diff changeset
   259
        solindexes = set(range(len([e for e in self.schema.entities() if not e.final])))
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   260
        self._test('Any MAX(X)',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   261
                   {self.system: {'X': solindexes}}, False)
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   262
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   263
    def test_complex_optional(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   264
        ueid = self.session.user.eid
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   265
        self._test('Any U WHERE WF wf_info_for X, X eid %(x)s, WF owned_by U?, WF from_state FS', {'x': ueid},
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   266
                   {self.system: {'WF': s[0], 'FS': s[0], 'U': s[0],
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   267
                                  'from_state': s[0], 'owned_by': s[0], 'wf_info_for': s[0],
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   268
                                  'x': s[0]}},
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   269
                   False)
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   270
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   271
    def test_exists4(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   272
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   273
        State S could come from both rql source and system source,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   274
        but since X cannot come from the rql source, the solution
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   275
        {self.cards : 'S'} must be removed
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   276
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   277
        self._test('Any G,L WHERE X in_group G, X login L, G name "managers", '
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   278
                   'EXISTS(X copain T, T login L, T login in ("comme", "cochon")) OR '
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   279
                   'EXISTS(X in_state S, S name "pascontent", NOT X copain T2, T2 login "billy")',
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   280
                   {self.system: {'X': s[0], 'S': s[0], 'T2': s[0], 'T': s[0], 'G': s[0], 'copain': s[0], 'in_group': s[0]},
1230
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   281
                    self.ldap: {'X': s[0], 'T2': s[0], 'T': s[0]}},
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   282
                   True)
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   283
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   284
    def test_relation_need_split(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   285
        self._test('Any X, S WHERE X in_state S',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   286
                   {self.system: {'X': s[0, 1, 2], 'S': s[0, 1, 2]},
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   287
                    self.cards: {'X': s[2], 'S': s[2]}},
1230
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   288
                   True)
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   289
1230
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   290
    def test_not_relation_need_split(self):
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   291
        self._test('Any SN WHERE NOT X in_state S, S name SN',
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   292
                   {self.cards: {'X': s[2], 'S': s[0, 1, 2]},
1230
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   293
                    self.system: {'X': s[0, 1, 2], 'S': s[0, 1, 2]}},
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   294
                   True)
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   295
1230
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   296
    def test_not_relation_no_split_external(self):
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   297
        repo._type_source_cache[999999] = ('Note', 'cards', 999999)
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   298
        # similar to the above test but with an eid coming from the external source.
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   299
        # the same plan may be used, since we won't find any record in the system source
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   300
        # linking 9999999 to a state
1230
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   301
        self._test('Any SN WHERE NOT X in_state S, X eid %(x)s, S name SN',
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   302
                   {'x': 999999},
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   303
                   {self.cards: {'x': s[0], 'S': s[0]},
1230
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   304
                    self.system: {'x': s[0], 'S': s[0]}},
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   305
                   False)
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   306
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   307
    def test_relation_restriction_ambigous_need_split(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   308
        self._test('Any X,T WHERE X in_state S, S name "pending", T tags X',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   309
                   {self.system: {'X': s[0, 1, 2], 'S': s[0, 1, 2], 'T': s[0, 1, 2], 'tags': s[0, 1, 2]},
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   310
                    self.cards: {'X': s[2], 'S': s[2]}},
1230
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   311
                   True)
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   312
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   313
    def test_simplified_var(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   314
        repo._type_source_cache[999999] = ('Note', 'cards', 999999)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   315
        self._test('Any U WHERE U in_group G, (G name IN ("managers", "logilab") OR (X require_permission P?, P name "bla", P require_group G)), X eid %(x)s, U eid %(u)s',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   316
                   {'x': 999999, 'u': self.session.user.eid},
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   317
                   {self.system: {'P': s[0], 'G': s[0], 'X': s[0],
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   318
                                  'require_permission': s[0], 'in_group': s[0], 'P': s[0], 'require_group': s[0],
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   319
                                  'u': s[0]}},
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   320
                   False)
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   321
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   322
    def test_delete_relation1(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   323
        ueid = self.session.user.eid
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   324
        self._test('Any X, Y WHERE X created_by Y, X eid %(x)s, NOT Y eid %(y)s',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   325
                   {'x': ueid, 'y': ueid},
1230
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   326
                   {self.system: {'Y': s[0], 'created_by': s[0], 'x': s[0]}},
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   327
                   False)
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   328
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   329
    def test_crossed_relation_eid_1_needattr(self):
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   330
        repo._type_source_cache[999999] = ('Note', 'system', 999999)
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   331
        ueid = self.session.user.eid
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   332
        self._test('Any Y,T WHERE X eid %(x)s, X multisource_crossed_rel Y, Y type T',
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   333
                   {'x': 999999,},
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   334
                   {self.cards: {'Y': s[0]}, self.system: {'Y': s[0], 'x': s[0]}},
1230
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   335
                   True)
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   336
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   337
    def test_crossed_relation_eid_1_invariant(self):
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   338
        repo._type_source_cache[999999] = ('Note', 'system', 999999)
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   339
        self._test('Any Y WHERE X eid %(x)s, X multisource_crossed_rel Y',
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   340
                   {'x': 999999},
1230
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   341
                   {self.system: {'Y': s[0], 'x': s[0]}},
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   342
                   False)
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   343
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   344
    def test_crossed_relation_eid_2_invariant(self):
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   345
        repo._type_source_cache[999999] = ('Note', 'cards', 999999)
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   346
        self._test('Any Y WHERE X eid %(x)s, X multisource_crossed_rel Y',
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   347
                   {'x': 999999,},
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   348
                   {self.cards: {'Y': s[0], 'multisource_crossed_rel': s[0], 'x': s[0]},
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   349
                    self.system: {'Y': s[0], 'multisource_crossed_rel': s[0], 'x': s[0]}},
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   350
                   False)
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   351
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   352
    def test_version_crossed_depends_on_1(self):
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   353
        repo._type_source_cache[999999] = ('Note', 'cards', 999999)
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   354
        self._test('Any X,AD,AE WHERE E eid %(x)s, E multisource_crossed_rel X, X in_state AD, AD name AE',
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   355
                   {'x': 999999},
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   356
                   {self.cards: {'X': s[0], 'AD': s[0], 'multisource_crossed_rel': s[0], 'x': s[0]},
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   357
                    self.system: {'X': s[0], 'AD': s[0], 'multisource_crossed_rel': s[0], 'x': s[0]}},
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   358
                   True)
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   359
1230
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   360
    def test_version_crossed_depends_on_2(self):
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   361
        repo._type_source_cache[999999] = ('Note', 'system', 999999)
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   362
        self._test('Any X,AD,AE WHERE E eid %(x)s, E multisource_crossed_rel X, X in_state AD, AD name AE',
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   363
                   {'x': 999999},
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   364
                   {self.cards: {'X': s[0], 'AD': s[0]},
1230
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   365
                    self.system: {'X': s[0], 'AD': s[0], 'x': s[0]}},
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   366
                    True)
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   367
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   368
    def test_simplified_var_3(self):
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   369
        repo._type_source_cache[999999] = ('Note', 'cards', 999999)
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   370
        repo._type_source_cache[999998] = ('State', 'cards', 999998)
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   371
        self._test('Any S,T WHERE S eid %(s)s, N eid %(n)s, N type T, N is Note, S is State',
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
   372
                   {'n': 999999, 's': 999998},
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   373
                   {self.cards: {'s': s[0], 'N': s[0]}}, False)
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   374
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   375
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   376
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   377
class MSPlannerTC(BaseMSPlannerTC):
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   378
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   379
    def setUp(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   380
        BaseMSPlannerTC.setUp(self)
3240
8604a15995d1 refactor so that rql rewriter may be used outside the server. Enhance it to be usable for RRQLExpression as well
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3239
diff changeset
   381
        self.planner = MSPlanner(self.o.schema, self.repo.vreg.rqlhelper)
6129
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
   382
        for cached in ('rel_type_sources', 'can_cross_relation', 'is_multi_sources_relation'):
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
   383
            clear_cache(self.repo, cached)
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   384
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   385
    _test = test_plan
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   386
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   387
    def test_simple_system_only(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   388
        """retrieve entities only supported by the system source
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   389
        """
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   390
        self._test('CWGroup X',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   391
                   [('OneFetchStep', [('Any X WHERE X is CWGroup', [{'X': 'CWGroup'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   392
                     None, None, [self.system], {}, [])])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   393
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   394
    def test_simple_system_only_limit(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   395
        """retrieve entities only supported by the system source
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   396
        """
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   397
        self._test('CWGroup X LIMIT 10',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   398
                   [('OneFetchStep', [('Any X LIMIT 10 WHERE X is CWGroup', [{'X': 'CWGroup'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   399
                     10, None, [self.system], {}, [])])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   400
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   401
    def test_simple_system_only_limit_offset(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   402
        """retrieve entities only supported by the system source
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   403
        """
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   404
        self._test('CWGroup X LIMIT 10 OFFSET 10',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   405
                   [('OneFetchStep', [('Any X LIMIT 10 OFFSET 10 WHERE X is CWGroup', [{'X': 'CWGroup'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   406
                     10, 10, [self.system], {}, [])])
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   407
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   408
    def test_simple_system_ldap(self):
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   409
        """retrieve CWUser X from both sources and return concatenation of results
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   410
        """
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   411
        self._test('CWUser X',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   412
                   [('OneFetchStep', [('Any X WHERE X is CWUser', [{'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   413
                     None, None, [self.ldap, self.system], {}, [])])
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   414
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   415
    def test_simple_system_ldap_limit(self):
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   416
        """retrieve CWUser X from both sources and return concatenation of results
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   417
        """
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   418
        self._test('CWUser X LIMIT 10',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   419
                   [('OneFetchStep', [('Any X LIMIT 10 WHERE X is CWUser', [{'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   420
                     10, None, [self.ldap, self.system], {}, [])])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   421
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   422
    def test_simple_system_ldap_limit_offset(self):
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   423
        """retrieve CWUser X from both sources and return concatenation of results
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   424
        """
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   425
        self._test('CWUser X LIMIT 10 OFFSET 10',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   426
                   [('OneFetchStep', [('Any X LIMIT 10 OFFSET 10 WHERE X is CWUser', [{'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   427
                     10, 10, [self.ldap, self.system], {}, [])])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   428
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   429
    def test_simple_system_ldap_ordered_limit_offset(self):
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   430
        """retrieve CWUser X from both sources and return concatenation of results
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   431
        """
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   432
        self._test('CWUser X ORDERBY X LIMIT 10 OFFSET 10',
7108
bcdf22734059 Abstract the support for ORDER BY and LIMIT/OFFSET SQL generation
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6957
diff changeset
   433
                   [('AggrStep', 'SELECT table0.C0 FROM table0\nORDER BY table0.C0\nLIMIT 10\nOFFSET 10', None, [
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   434
                       ('FetchStep', [('Any X WHERE X is CWUser', [{'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   435
                        [self.ldap, self.system], {}, {'X': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   436
                       ]),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   437
                   ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   438
    def test_simple_system_ldap_aggregat(self):
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   439
        """retrieve CWUser X from both sources and return concatenation of results
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   440
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   441
        # COUNT(X) is kept in sub-step and transformed into SUM(X) in the AggrStep
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   442
        self._test('Any COUNT(X) WHERE X is CWUser',
5768
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
   443
                   [('AggrStep', 'SELECT SUM(table0.C0) FROM table0', None, [
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   444
                       ('FetchStep', [('Any COUNT(X) WHERE X is CWUser', [{'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   445
                        [self.ldap, self.system], {}, {'COUNT(X)': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   446
                       ]),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   447
                   ])
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   448
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   449
    def test_simple_system_rql(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   450
        """retrieve Card X from both sources and return concatenation of results
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   451
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   452
        self._test('Any X, XT WHERE X is Card, X title XT',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   453
                   [('OneFetchStep', [('Any X,XT WHERE X is Card, X title XT', [{'X': 'Card', 'XT': 'String'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   454
                     None, None, [self.cards, self.system], {}, [])])
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   455
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   456
    def test_simple_eid_specified(self):
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   457
        """retrieve CWUser X from system source (eid is specified, can locate the entity)
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   458
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   459
        ueid = self.session.user.eid
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   460
        self._test('Any X,L WHERE X eid %(x)s, X login L',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   461
                   [('OneFetchStep', [('Any X,L WHERE X eid %s, X login L'%ueid, [{'X': 'CWUser', 'L': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   462
                     None, None, [self.system], {}, [])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   463
                   {'x': ueid})
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   464
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   465
    def test_simple_eid_invariant(self):
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   466
        """retrieve CWUser X from system source (eid is specified, can locate the entity)
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   467
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   468
        ueid = self.session.user.eid
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   469
        self._test('Any X WHERE X eid %(x)s',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   470
                   [('OneFetchStep', [('Any %s'%ueid, [{}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   471
                     None, None, [self.system], {}, [])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   472
                   {'x': ueid})
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   473
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   474
    def test_simple_invariant(self):
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   475
        """retrieve CWUser X from system source only (X is invariant and in_group not supported by ldap source)
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   476
        """
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   477
        self._test('Any X WHERE X is CWUser, X in_group G, G name "users"',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   478
                   [('OneFetchStep', [('Any X WHERE X is CWUser, X in_group G, G name "users"',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   479
                                       [{'X': 'CWUser', 'G': 'CWGroup'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   480
                     None, None, [self.system], {}, [])])
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   481
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   482
    def test_complex_base(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   483
        """
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   484
        1. retrieve Any X, L WHERE X is CWUser, X login L from system and ldap sources, store
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   485
           concatenation of results into a temporary table
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   486
        2. return the result of Any X, L WHERE X is TMP, X login LX in_group G,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   487
           G name 'users' on the system source
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   488
        """
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   489
        self._test('Any X,L WHERE X is CWUser, X in_group G, X login L, G name "users"',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   490
                   [('FetchStep', [('Any X,L WHERE X login L, X is CWUser', [{'X': 'CWUser', 'L': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   491
                     [self.ldap, self.system], None,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   492
                     {'X': 'table0.C0', 'X.login': 'table0.C1', 'L': 'table0.C1'}, []),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   493
                    ('OneFetchStep', [('Any X,L WHERE X in_group G, X login L, G name "users", G is CWGroup, X is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   494
                                       [{'X': 'CWUser', 'L': 'String', 'G': 'CWGroup'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   495
                     None, None, [self.system],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   496
                     {'X': 'table0.C0', 'X.login': 'table0.C1', 'L': 'table0.C1'}, [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   497
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   498
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   499
    def test_complex_base_limit_offset(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   500
        """
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   501
        1. retrieve Any X, L WHERE X is CWUser, X login L from system and ldap sources, store
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   502
           concatenation of results into a temporary table
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   503
        2. return the result of Any X, L WHERE X is TMP, X login LX in_group G,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   504
           G name 'users' on the system source
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   505
        """
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   506
        self._test('Any X,L LIMIT 10 OFFSET 10 WHERE X is CWUser, X in_group G, X login L, G name "users"',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   507
                   [('FetchStep', [('Any X,L WHERE X login L, X is CWUser', [{'X': 'CWUser', 'L': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   508
                     [self.ldap, self.system], None,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   509
                     {'X': 'table0.C0', 'X.login': 'table0.C1', 'L': 'table0.C1'}, []),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   510
                    ('OneFetchStep', [('Any X,L LIMIT 10 OFFSET 10 WHERE X in_group G, X login L, G name "users", G is CWGroup, X is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   511
                                       [{'X': 'CWUser', 'L': 'String', 'G': 'CWGroup'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   512
                     10, 10,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   513
                     [self.system], {'X': 'table0.C0', 'X.login': 'table0.C1', 'L': 'table0.C1'}, [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   514
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   515
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   516
    def test_complex_ordered(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   517
        self._test('Any L ORDERBY L WHERE X login L',
7108
bcdf22734059 Abstract the support for ORDER BY and LIMIT/OFFSET SQL generation
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6957
diff changeset
   518
                   [('AggrStep', 'SELECT table0.C0 FROM table0\nORDER BY table0.C0', None,
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   519
                     [('FetchStep', [('Any L WHERE X login L, X is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   520
                                      [{'X': 'CWUser', 'L': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   521
                       [self.ldap, self.system], {}, {'X.login': 'table0.C0', 'L': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   522
                      ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   523
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   524
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   525
    def test_complex_ordered_limit_offset(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   526
        self._test('Any L ORDERBY L LIMIT 10 OFFSET 10 WHERE X login L',
7108
bcdf22734059 Abstract the support for ORDER BY and LIMIT/OFFSET SQL generation
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6957
diff changeset
   527
                   [('AggrStep', 'SELECT table0.C0 FROM table0\nORDER BY table0.C0\nLIMIT 10\nOFFSET 10', None,
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   528
                     [('FetchStep', [('Any L WHERE X login L, X is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   529
                                      [{'X': 'CWUser', 'L': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   530
                       [self.ldap, self.system], {}, {'X.login': 'table0.C0', 'L': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   531
                      ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   532
                    ])
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   533
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   534
    def test_complex_invariant_ordered(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   535
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   536
        1. retrieve Any X,AA WHERE X modification_date AA from system and ldap sources, store
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   537
           concatenation of results into a temporary table
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   538
        2. return the result of Any X,AA ORDERBY AA WHERE %s owned_by X, X modification_date AA
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   539
           on the system source
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   540
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   541
        herrr, this is what is expected by the XXX :(, not the actual result (which is correct anyway)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   542
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   543
        ueid = self.session.user.eid
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   544
        self._test('Any X,AA ORDERBY AA WHERE E eid %(x)s, E owned_by X, X modification_date AA',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   545
                   [('FetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   546
                     [('Any X,AA WHERE X modification_date AA, X is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   547
                       [{'AA': 'Datetime', 'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   548
                     [self.ldap, self.system], None,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   549
                     {'AA': 'table0.C1', 'X': 'table0.C0', 'X.modification_date': 'table0.C1'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   550
                    ('OneFetchStep',
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   551
                     [('Any X,AA ORDERBY AA WHERE %s owned_by X, X modification_date AA, X is CWUser' % ueid,
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   552
                       [{'AA': 'Datetime', 'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   553
                     None, None, [self.system],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   554
                     {'AA': 'table0.C1', 'X': 'table0.C0', 'X.modification_date': 'table0.C1'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   555
                    ],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   556
                   {'x': ueid})
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   557
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   558
    def test_complex_invariant(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   559
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   560
        1. retrieve Any X,L,AA WHERE X login L, X modification_date AA from system and ldap sources, store
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   561
           concatenation of results into a temporary table
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   562
        2. return the result of Any X,L,AA WHERE %s owned_by X, X login L, X modification_date AA
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   563
           on the system source
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   564
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   565
        ueid = self.session.user.eid
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   566
        self._test('Any X,L,AA WHERE E eid %(x)s, E owned_by X, X login L, X modification_date AA',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   567
                   [('FetchStep', [('Any X,L,AA WHERE X login L, X modification_date AA, X is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   568
                                    [{'AA': 'Datetime', 'X': 'CWUser', 'L': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   569
                     [self.ldap, self.system], None,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   570
                     {'AA': 'table0.C2', 'X': 'table0.C0', 'X.login': 'table0.C1', 'X.modification_date': 'table0.C2', 'L': 'table0.C1'}, []),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   571
                    ('OneFetchStep', [('Any X,L,AA WHERE %s owned_by X, X login L, X modification_date AA, X is CWUser'%ueid,
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   572
                                       [{'AA': 'Datetime', 'X': 'CWUser', 'L': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   573
                     None, None, [self.system],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   574
                     {'AA': 'table0.C2', 'X': 'table0.C0', 'X.login': 'table0.C1', 'X.modification_date': 'table0.C2', 'L': 'table0.C1'}, [])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   575
                   {'x': ueid})
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   576
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   577
    def test_complex_ambigous(self):
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   578
        """retrieve CWUser X from system and ldap sources, Person X from system source only
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   579
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   580
        self._test('Any X,F WHERE X firstname F',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   581
                   [('UnionStep', None, None, [
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   582
                       ('OneFetchStep', [('Any X,F WHERE X firstname F, X is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   583
                                          [{'X': 'CWUser', 'F': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   584
                        None, None, [self.ldap, self.system], {}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   585
                       ('OneFetchStep', [('Any X,F WHERE X firstname F, X is Personne',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   586
                                          [{'X': 'Personne', 'F': 'String'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   587
                        None, None, [self.system], {}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   588
                       ]),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   589
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   590
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   591
    def test_complex_ambigous_limit_offset(self):
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   592
        """retrieve CWUser X from system and ldap sources, Person X from system source only
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   593
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   594
        self._test('Any X,F LIMIT 10 OFFSET 10 WHERE X firstname F',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   595
                   [('UnionStep', 10, 10, [
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   596
                       ('OneFetchStep', [('Any X,F WHERE X firstname F, X is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   597
                                          [{'X': 'CWUser', 'F': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   598
                        None, None,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   599
                        [self.ldap, self.system], {}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   600
                       ('OneFetchStep', [('Any X,F WHERE X firstname F, X is Personne',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   601
                                          [{'X': 'Personne', 'F': 'String'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   602
                        None, None, [self.system], {}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   603
                       ]),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   604
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   605
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   606
    def test_complex_ambigous_ordered(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   607
        """
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   608
        1. retrieve CWUser X from system and ldap sources, Person X from system source only, store
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   609
           each result in the same temp table
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   610
        2. return content of the table sorted
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   611
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   612
        self._test('Any X,F ORDERBY F WHERE X firstname F',
7108
bcdf22734059 Abstract the support for ORDER BY and LIMIT/OFFSET SQL generation
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6957
diff changeset
   613
                   [('AggrStep', 'SELECT table0.C0, table0.C1 FROM table0\nORDER BY table0.C1', None,
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   614
                     [('FetchStep', [('Any X,F WHERE X firstname F, X is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   615
                                      [{'X': 'CWUser', 'F': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   616
                       [self.ldap, self.system], {},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   617
                       {'X': 'table0.C0', 'X.firstname': 'table0.C1', 'F': 'table0.C1'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   618
                      ('FetchStep', [('Any X,F WHERE X firstname F, X is Personne',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   619
                                      [{'X': 'Personne', 'F': 'String'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   620
                       [self.system], {},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   621
                       {'X': 'table0.C0', 'X.firstname': 'table0.C1', 'F': 'table0.C1'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   622
                      ]),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   623
                    ])
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   624
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   625
    def test_complex_multiple(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   626
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   627
        1. retrieve Any X,A,Y,B WHERE X login A, Y login B from system and ldap sources, store
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   628
           cartesian product of results into a temporary table
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   629
        2. return the result of Any X,Y WHERE X login 'syt', Y login 'adim'
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   630
           on the system source
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   631
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   632
        ueid = self.session.user.eid
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   633
        self._test('Any X,Y WHERE X login "syt", Y login "adim"',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   634
                   [('FetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   635
                     [('Any X WHERE X login "syt", X is CWUser', [{'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   636
                     [self.ldap, self.system], None,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   637
                     {'X': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   638
                    ('FetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   639
                     [('Any Y WHERE Y login "adim", Y is CWUser', [{'Y': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   640
                     [self.ldap, self.system], None,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   641
                     {'Y': 'table1.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   642
                    ('OneFetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   643
                     [('Any X,Y WHERE X is CWUser, Y is CWUser', [{'X': 'CWUser', 'Y': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   644
                     None, None, [self.system],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   645
                     {'X': 'table0.C0', 'Y': 'table1.C0'}, [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   646
                    ], {'x': ueid})
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   647
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   648
    def test_complex_multiple_limit_offset(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   649
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   650
        1. retrieve Any X,A,Y,B WHERE X login A, Y login B from system and ldap sources, store
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   651
           cartesian product of results into a temporary table
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   652
        2. return the result of Any X,Y WHERE X login 'syt', Y login 'adim'
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   653
           on the system source
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   654
        """
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   655
        self._test('Any X,Y LIMIT 10 OFFSET 10 WHERE X login "syt", Y login "adim"',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   656
                   [('FetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   657
                     [('Any X WHERE X login "syt", X is CWUser', [{'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   658
                     [self.ldap, self.system], None, {'X': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   659
                    ('FetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   660
                     [('Any Y WHERE Y login "adim", Y is CWUser', [{'Y': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   661
                     [self.ldap, self.system], None, {'Y': 'table1.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   662
                    ('OneFetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   663
                     [('Any X,Y LIMIT 10 OFFSET 10 WHERE X is CWUser, Y is CWUser', [{'X': 'CWUser', 'Y': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   664
                     10, 10, [self.system],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   665
                     {'X': 'table0.C0', 'Y': 'table1.C0'}, [])
5420
09b50d7e5321 [ms] fix planning bug with rewritten constants: when removing some source for a const due to relation constraints, we should propagate this change to other constants coming from the same original variable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4915
diff changeset
   666
                    ])
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   667
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   668
    def test_complex_aggregat(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   669
        self._test('Any MAX(X)',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   670
                   [('OneFetchStep',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   671
                     [('Any MAX(X)', X_ALL_SOLS)],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   672
                     None, None, [self.system], {}, [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   673
                    ])
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   674
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   675
    def test_complex_typed_aggregat(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   676
        self._test('Any MAX(X) WHERE X is Card',
5768
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
   677
                   [('AggrStep', 'SELECT MAX(table0.C0) FROM table0',  None,
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   678
                     [('FetchStep',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   679
                       [('Any MAX(X) WHERE X is Card', [{'X': 'Card'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   680
                       [self.cards, self.system], {}, {'MAX(X)': 'table0.C0'}, [])
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   681
                      ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   682
                    ])
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   683
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   684
    def test_complex_greater_eid(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   685
        self._test('Any X WHERE X eid > 12',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   686
                   [('OneFetchStep',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   687
                     [('Any X WHERE X eid > 12', X_ALL_SOLS)],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   688
                     None, None, [self.system], {}, [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   689
                    ])
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   690
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   691
    def test_complex_greater_typed_eid(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   692
        self._test('Any X WHERE X eid > 12, X is Card',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   693
                   [('OneFetchStep',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   694
                     [('Any X WHERE X eid > 12, X is Card', [{'X': 'Card'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   695
                     None, None, [self.system], {}, [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   696
                    ])
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   697
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   698
    def test_complex_optional(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   699
        ueid = self.session.user.eid
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   700
        self._test('Any U WHERE WF wf_info_for X, X eid %(x)s, WF owned_by U?, WF from_state FS',
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   701
                   [('OneFetchStep', [('Any U WHERE WF wf_info_for %s, WF owned_by U?, WF from_state FS' % ueid,
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   702
                                       [{'WF': 'TrInfo', 'FS': 'State', 'U': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   703
                     None, None, [self.system], {}, [])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   704
                   {'x': ueid})
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   705
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   706
    def test_complex_optional(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   707
        ueid = self.session.user.eid
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   708
        self._test('Any U WHERE WF wf_info_for X, X eid %(x)s, WF owned_by U?, WF from_state FS',
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   709
                   [('OneFetchStep', [('Any U WHERE WF wf_info_for %s, WF owned_by U?, WF from_state FS' % ueid,
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   710
                                       [{'WF': 'TrInfo', 'FS': 'State', 'U': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   711
                     None, None, [self.system], {}, [])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   712
                   {'x': ueid})
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   713
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   714
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   715
    def test_3sources_ambigous(self):
3587
5b3725f315fc test fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3240
diff changeset
   716
        self._test('Any X,T WHERE X owned_by U, U login "syt", X title T, X is IN(Bookmark, Card, EmailThread)',
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   717
                   [('FetchStep', [('Any X,T WHERE X title T, X is Card', [{'X': 'Card', 'T': 'String'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   718
                     [self.cards, self.system], None,
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   719
                     {'T': 'table0.C1', 'X': 'table0.C0', 'X.title': 'table0.C1'}, []),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   720
                    ('FetchStep', [('Any U WHERE U login "syt", U is CWUser', [{'U': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   721
                     [self.ldap, self.system], None,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   722
                     {'U': 'table1.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   723
                    ('UnionStep', None, None, [
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   724
                        ('OneFetchStep', [('Any X,T WHERE X owned_by U, X title T, U is CWUser, X is IN(Bookmark, EmailThread)',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   725
                                           [{'T': 'String', 'U': 'CWUser', 'X': 'Bookmark'},
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   726
                                            {'T': 'String', 'U': 'CWUser', 'X': 'EmailThread'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   727
                         None, None, [self.system], {'U': 'table1.C0'}, []),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   728
                        ('OneFetchStep', [('Any X,T WHERE X owned_by U, X title T, U is CWUser, X is Card',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   729
                                           [{'X': 'Card', 'U': 'CWUser', 'T': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   730
                         None, None, [self.system],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   731
                         {'X': 'table0.C0', 'X.title': 'table0.C1', 'T': 'table0.C1', 'U': 'table1.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   732
                        ]),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   733
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   734
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   735
    def test_restricted_max(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   736
        # dumb query to emulate the one generated by svnfile.entities.rql_revision_content
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   737
        self._test('Any V, MAX(VR) WHERE V is Card, V creation_date VR, '
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   738
                   '(V creation_date TODAY OR (V creation_date < TODAY AND NOT EXISTS('
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   739
                   'X is Card, X creation_date < TODAY, X creation_date >= VR)))',
3815
50b87f759b5d test and fix http://www.logilab.org/ticket/499838
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
   740
                   [('FetchStep', [('Any VR WHERE X creation_date < TODAY, X creation_date VR, X is Card',
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   741
                                    [{'X': 'Card', 'VR': 'Datetime'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   742
                     [self.cards, self.system], None,
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   743
                     {'VR': 'table0.C0', 'X.creation_date': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   744
                    ('FetchStep', [('Any V,VR WHERE V creation_date VR, V is Card',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   745
                                    [{'VR': 'Datetime', 'V': 'Card'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   746
                     [self.cards, self.system], None,
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   747
                     {'VR': 'table1.C1', 'V': 'table1.C0', 'V.creation_date': 'table1.C1'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   748
                    ('OneFetchStep', [('Any V,MAX(VR) WHERE V creation_date VR, (V creation_date TODAY) OR (V creation_date < TODAY, NOT EXISTS(X creation_date >= VR, X is Card)), V is Card',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   749
                                       [{'X': 'Card', 'VR': 'Datetime', 'V': 'Card'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   750
                     None, None, [self.system],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   751
                     {'VR': 'table1.C1', 'V': 'table1.C0', 'V.creation_date': 'table1.C1', 'X.creation_date': 'table0.C0'}, [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   752
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   753
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   754
    def test_outer_supported_rel1(self):
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   755
        # both system and rql support all variables, can be
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   756
        self._test('Any X, R WHERE X is Note, X in_state S, X type R, '
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   757
                   'NOT EXISTS(Y is Note, Y in_state S, Y type R, X identity Y)',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   758
                   [('OneFetchStep', [('Any X,R WHERE X is Note, X in_state S, X type R, NOT EXISTS(Y is Note, Y in_state S, Y type R, X identity Y), S is State',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   759
                                       [{'Y': 'Note', 'X': 'Note', 'S': 'State', 'R': 'String'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   760
                     None, None,
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   761
                     [self.cards, self.system], {}, [])
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   762
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   763
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   764
    def test_not_identity(self):
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   765
        ueid = self.session.user.eid
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   766
        self._test('Any X WHERE NOT X identity U, U eid %s' % ueid,
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   767
                   [('OneFetchStep',
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   768
                     [('Any X WHERE NOT X identity %s, X is CWUser' % ueid, [{'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   769
                     None, None,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   770
                     [self.ldap, self.system], {}, [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   771
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   772
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   773
    def test_outer_supported_rel2(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   774
        self._test('Any X, MAX(R) GROUPBY X WHERE X in_state S, X login R, '
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   775
                   'NOT EXISTS(Y is Note, Y in_state S, Y type R)',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   776
                   [('FetchStep', [('Any A,R WHERE Y in_state A, Y type R, A is State, Y is Note',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   777
                                    [{'Y': 'Note', 'A': 'State', 'R': 'String'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   778
                     [self.cards, self.system], None,
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   779
                     {'A': 'table0.C0', 'R': 'table0.C1', 'Y.type': 'table0.C1'}, []),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   780
                    ('FetchStep', [('Any X,R WHERE X login R, X is CWUser', [{'X': 'CWUser', 'R': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   781
                     [self.ldap, self.system], None,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   782
                     {'X': 'table1.C0', 'X.login': 'table1.C1', 'R': 'table1.C1'}, []),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   783
                    ('OneFetchStep', [('Any X,MAX(R) GROUPBY X WHERE X in_state S, X login R, NOT EXISTS(Y type R, S identity A, A is State, Y is Note), S is State, X is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   784
                                       [{'Y': 'Note', 'X': 'CWUser', 'S': 'State', 'R': 'String', 'A': 'State'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   785
                     None, None, [self.system],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   786
                     {'A': 'table0.C0', 'X': 'table1.C0', 'X.login': 'table1.C1', 'R': 'table1.C1', 'Y.type': 'table0.C1'}, [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   787
                    ])
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   788
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   789
    def test_security_has_text(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   790
        # use a guest user
4674
3d509dbb473a [test api] rename _user_session to user_groups_session, fix its arguments and return only the session, not (user, session) to make things clearer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   791
        self.session = self.user_groups_session('guests')
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   792
        ueid = self.session.user.eid
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   793
        self._test('Any X WHERE X has_text "bla"',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   794
                   [('FetchStep', [('Any E WHERE E type "X", E is Note', [{'E': 'Note'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   795
                     [self.cards, self.system], None, {'E': 'table0.C0'}, []),
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   796
                    ('UnionStep', None, None,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   797
                     [('OneFetchStep',
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   798
                       [(u'Any X WHERE X has_text "bla", (EXISTS(X owned_by %(ueid)s)) OR ((((EXISTS(D concerne C?, C owned_by %(ueid)s, C type "X", X identity D, C is Division, D is Affaire)) OR (EXISTS(H concerne G?, G owned_by %(ueid)s, G type "X", X identity H, G is SubDivision, H is Affaire))) OR (EXISTS(I concerne F?, F owned_by %(ueid)s, F type "X", X identity I, F is Societe, I is Affaire))) OR (EXISTS(J concerne E?, E owned_by %(ueid)s, X identity J, E is Note, J is Affaire))), X is Affaire' % {'ueid': ueid},
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   799
                         [{'C': 'Division', 'E': 'Note', 'D': 'Affaire', 'G': 'SubDivision', 'F': 'Societe', 'I': 'Affaire', 'H': 'Affaire', 'J': 'Affaire', 'X': 'Affaire'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   800
                       None, None, [self.system], {'E': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   801
                      ('OneFetchStep',
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   802
                       [('Any X WHERE X has_text "bla", EXISTS(X owned_by %s), X is Basket' % ueid,
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   803
                         [{'X': 'Basket'}]),
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   804
                        ('Any X WHERE X has_text "bla", EXISTS(X owned_by %s), X is CWUser' % ueid,
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   805
                         [{'X': 'CWUser'}]),
5575
8a531340c3ef no more Image type w/ cw 3.9
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   806
                        ('Any X WHERE X has_text "bla", X is IN(Card, Comment, Division, Email, EmailThread, File, Folder, Note, Personne, Societe, SubDivision, Tag)',
4815
4ee224c4c41d update test broken by fulltextindexed change on workflow entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4685
diff changeset
   807
                         [{'X': 'Card'}, {'X': 'Comment'},
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   808
                          {'X': 'Division'}, {'X': 'Email'}, {'X': 'EmailThread'},
5575
8a531340c3ef no more Image type w/ cw 3.9
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   809
                          {'X': 'File'}, {'X': 'Folder'},
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   810
                          {'X': 'Note'}, {'X': 'Personne'}, {'X': 'Societe'},
4815
4ee224c4c41d update test broken by fulltextindexed change on workflow entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4685
diff changeset
   811
                          {'X': 'SubDivision'}, {'X': 'Tag'}]),],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   812
                       None, None, [self.system], {}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   813
                      ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   814
                     ])
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   815
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   816
    def test_security_has_text_limit_offset(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   817
        # use a guest user
4674
3d509dbb473a [test api] rename _user_session to user_groups_session, fix its arguments and return only the session, not (user, session) to make things clearer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   818
        self.session = self.user_groups_session('guests')
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   819
        ueid = self.session.user.eid
6676
39763487ba33 cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6673
diff changeset
   820
        # note: same as the above query but because of the subquery usage, the
39763487ba33 cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6673
diff changeset
   821
        # display differs (not printing solutions for each union)
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   822
        self._test('Any X LIMIT 10 OFFSET 10 WHERE X has_text "bla"',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   823
                   [('FetchStep', [('Any E WHERE E type "X", E is Note', [{'E': 'Note'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   824
                      [self.cards, self.system], None, {'E': 'table1.C0'}, []),
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   825
                     ('UnionFetchStep', [
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   826
                        ('FetchStep', [('Any X WHERE X has_text "bla", (EXISTS(X owned_by %(ueid)s)) OR ((((EXISTS(D concerne C?, C owned_by %(ueid)s, C type "X", X identity D, C is Division, D is Affaire)) OR (EXISTS(H concerne G?, G owned_by %(ueid)s, G type "X", X identity H, G is SubDivision, H is Affaire))) OR (EXISTS(I concerne F?, F owned_by %(ueid)s, F type "X", X identity I, F is Societe, I is Affaire))) OR (EXISTS(J concerne E?, E owned_by %(ueid)s, X identity J, E is Note, J is Affaire))), X is Affaire' % {'ueid': ueid},
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   827
                                            [{'C': 'Division', 'E': 'Note', 'D': 'Affaire', 'G': 'SubDivision', 'F': 'Societe', 'I': 'Affaire', 'H': 'Affaire', 'J': 'Affaire', 'X': 'Affaire'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   828
                          [self.system], {'E': 'table1.C0'}, {'X': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   829
                         ('FetchStep',
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   830
                          [('Any X WHERE X has_text "bla", EXISTS(X owned_by %s), X is Basket' % ueid,
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   831
                            [{'X': 'Basket'}]),
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   832
                           ('Any X WHERE X has_text "bla", EXISTS(X owned_by %s), X is CWUser' % ueid,
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   833
                            [{'X': 'CWUser'}]),
5575
8a531340c3ef no more Image type w/ cw 3.9
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   834
                           ('Any X WHERE X has_text "bla", X is IN(Card, Comment, Division, Email, EmailThread, File, Folder, Note, Personne, Societe, SubDivision, Tag)',
4815
4ee224c4c41d update test broken by fulltextindexed change on workflow entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4685
diff changeset
   835
                            [{'X': 'Card'}, {'X': 'Comment'},
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   836
                             {'X': 'Division'}, {'X': 'Email'}, {'X': 'EmailThread'},
5575
8a531340c3ef no more Image type w/ cw 3.9
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   837
                             {'X': 'File'}, {'X': 'Folder'},
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   838
                             {'X': 'Note'}, {'X': 'Personne'}, {'X': 'Societe'},
4815
4ee224c4c41d update test broken by fulltextindexed change on workflow entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4685
diff changeset
   839
                             {'X': 'SubDivision'}, {'X': 'Tag'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   840
                          [self.system], {}, {'X': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   841
                         ]),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   842
                    ('OneFetchStep',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   843
                     [('Any X LIMIT 10 OFFSET 10',
4815
4ee224c4c41d update test broken by fulltextindexed change on workflow entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4685
diff changeset
   844
                       [{'X': 'Affaire'}, {'X': 'Basket'},
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   845
                        {'X': 'CWUser'}, {'X': 'Card'}, {'X': 'Comment'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   846
                        {'X': 'Division'}, {'X': 'Email'}, {'X': 'EmailThread'},
5575
8a531340c3ef no more Image type w/ cw 3.9
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   847
                        {'X': 'File'}, {'X': 'Folder'},
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   848
                        {'X': 'Note'}, {'X': 'Personne'}, {'X': 'Societe'},
4815
4ee224c4c41d update test broken by fulltextindexed change on workflow entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4685
diff changeset
   849
                        {'X': 'SubDivision'}, {'X': 'Tag'}])],
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   850
                     10, 10, [self.system], {'X': 'table0.C0'}, [])
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   851
                     ])
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   852
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   853
    def test_security_user(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   854
        """a guest user trying to see another user: EXISTS(X owned_by U) is automatically inserted"""
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   855
        # use a guest user
4674
3d509dbb473a [test api] rename _user_session to user_groups_session, fix its arguments and return only the session, not (user, session) to make things clearer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   856
        self.session = self.user_groups_session('guests')
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   857
        ueid = self.session.user.eid
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   858
        self._test('Any X WHERE X login "bla"',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   859
                   [('FetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   860
                     [('Any X WHERE X login "bla", X is CWUser', [{'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   861
                     [self.ldap, self.system], None, {'X': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   862
                    ('OneFetchStep',
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   863
                     [('Any X WHERE EXISTS(X owned_by %s), X is CWUser' % ueid, [{'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   864
                     None, None, [self.system], {'X': 'table0.C0'}, [])])
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   865
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   866
    def test_security_complex_has_text(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   867
        # use a guest user
4674
3d509dbb473a [test api] rename _user_session to user_groups_session, fix its arguments and return only the session, not (user, session) to make things clearer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   868
        self.session = self.user_groups_session('guests')
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   869
        ueid = self.session.user.eid
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   870
        self._test('Any X WHERE X has_text "bla", X firstname "bla"',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   871
                   [('FetchStep', [('Any X WHERE X firstname "bla", X is CWUser', [{'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   872
                     [self.ldap, self.system], None, {'X': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   873
                    ('UnionStep', None, None, [
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   874
                        ('OneFetchStep', [('Any X WHERE X has_text "bla", EXISTS(X owned_by %s), X is CWUser' % ueid, [{'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   875
                         None, None, [self.system], {'X': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   876
                        ('OneFetchStep', [('Any X WHERE X has_text "bla", X firstname "bla", X is Personne', [{'X': 'Personne'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   877
                         None, None, [self.system], {}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   878
                        ]),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   879
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   880
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   881
    def test_security_complex_has_text_limit_offset(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   882
        # use a guest user
4674
3d509dbb473a [test api] rename _user_session to user_groups_session, fix its arguments and return only the session, not (user, session) to make things clearer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   883
        self.session = self.user_groups_session('guests')
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   884
        ueid = self.session.user.eid
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   885
        self._test('Any X LIMIT 10 OFFSET 10 WHERE X has_text "bla", X firstname "bla"',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   886
                   [('FetchStep', [('Any X WHERE X firstname "bla", X is CWUser', [{'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   887
                     [self.ldap, self.system], None, {'X': 'table1.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   888
                    ('UnionFetchStep', [
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   889
                        ('FetchStep', [('Any X WHERE X has_text "bla", EXISTS(X owned_by %s), X is CWUser' % ueid, [{'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   890
                         [self.system], {'X': 'table1.C0'}, {'X': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   891
                        ('FetchStep', [('Any X WHERE X has_text "bla", X firstname "bla", X is Personne', [{'X': 'Personne'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   892
                         [self.system], {}, {'X': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   893
                        ]),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   894
                     ('OneFetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   895
                      [('Any X LIMIT 10 OFFSET 10', [{'X': 'CWUser'}, {'X': 'Personne'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   896
                      10, 10, [self.system], {'X': 'table0.C0'}, [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   897
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   898
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   899
    def test_security_complex_aggregat(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   900
        # use a guest user
4674
3d509dbb473a [test api] rename _user_session to user_groups_session, fix its arguments and return only the session, not (user, session) to make things clearer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   901
        self.session = self.user_groups_session('guests')
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   902
        ueid = self.session.user.eid
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   903
        ALL_SOLS = X_ALL_SOLS[:]
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   904
        ALL_SOLS.remove({'X': 'CWSourceHostConfig'}) # not authorized
6944
0cf10429ad39 [sources] rewrite the way pyrorql mapping are stored in the database so it can be reused for other sources (eg datafeed+cwxml)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6943
diff changeset
   905
        ALL_SOLS.remove({'X': 'CWSourceSchemaConfig'}) # not authorized
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   906
        self._test('Any MAX(X)',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   907
                   [('FetchStep', [('Any E WHERE E type "X", E is Note', [{'E': 'Note'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   908
                     [self.cards, self.system],  None, {'E': 'table1.C0'}, []),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   909
                    ('FetchStep', [('Any X WHERE X is CWUser', [{'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   910
                     [self.ldap, self.system], None, {'X': 'table2.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   911
                    ('UnionFetchStep', [
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   912
                        ('FetchStep', [('Any X WHERE EXISTS(X owned_by %s), X is Basket' % ueid, [{'X': 'Basket'}])],
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   913
                          [self.system], {}, {'X': 'table0.C0'}, []),
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   914
                        ('UnionFetchStep',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   915
                         [('FetchStep', [('Any X WHERE X is IN(Card, Note, State)',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   916
                                          [{'X': 'Card'}, {'X': 'Note'}, {'X': 'State'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   917
                           [self.cards, self.system], {}, {'X': 'table0.C0'}, []),
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   918
                          ('FetchStep',
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   919
                           [('Any X WHERE X is IN(BaseTransition, Bookmark, CWAttribute, CWCache, CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, CWRType, CWRelation, CWSource, CWUniqueTogetherConstraint, Comment, Division, Email, EmailAddress, EmailPart, EmailThread, ExternalUri, File, Folder, Personne, RQLExpression, Societe, SubDivision, SubWorkflowExitPoint, Tag, TrInfo, Transition, Workflow, WorkflowTransition)',
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   920
                             [{'X': 'BaseTransition'}, {'X': 'Bookmark'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   921
                              {'X': 'CWAttribute'}, {'X': 'CWCache'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   922
                              {'X': 'CWConstraint'}, {'X': 'CWConstraintType'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   923
                              {'X': 'CWEType'}, {'X': 'CWGroup'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   924
                              {'X': 'CWPermission'}, {'X': 'CWProperty'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   925
                              {'X': 'CWRType'}, {'X': 'CWRelation'},
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   926
                              {'X': 'CWSource'},
6209
e3e5870807e9 fix tests
syt
parents: 6131
diff changeset
   927
                              {'X': 'CWUniqueTogetherConstraint'},
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   928
                              {'X': 'Comment'}, {'X': 'Division'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   929
                              {'X': 'Email'}, {'X': 'EmailAddress'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   930
                              {'X': 'EmailPart'}, {'X': 'EmailThread'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   931
                              {'X': 'ExternalUri'}, {'X': 'File'},
5575
8a531340c3ef no more Image type w/ cw 3.9
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   932
                              {'X': 'Folder'},
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   933
                              {'X': 'Personne'}, {'X': 'RQLExpression'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   934
                              {'X': 'Societe'}, {'X': 'SubDivision'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   935
                              {'X': 'SubWorkflowExitPoint'}, {'X': 'Tag'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   936
                              {'X': 'TrInfo'}, {'X': 'Transition'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   937
                              {'X': 'Workflow'}, {'X': 'WorkflowTransition'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   938
                           [self.system], {}, {'X': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   939
                          ]),
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   940
                        ('FetchStep', [('Any X WHERE EXISTS(X owned_by %s), X is CWUser' % ueid, [{'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   941
                         [self.system], {'X': 'table2.C0'}, {'X': 'table0.C0'}, []),
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   942
                        ('FetchStep', [('Any X WHERE (EXISTS(X owned_by %(ueid)s)) OR ((((EXISTS(D concerne C?, C owned_by %(ueid)s, C type "X", X identity D, C is Division, D is Affaire)) OR (EXISTS(H concerne G?, G owned_by %(ueid)s, G type "X", X identity H, G is SubDivision, H is Affaire))) OR (EXISTS(I concerne F?, F owned_by %(ueid)s, F type "X", X identity I, F is Societe, I is Affaire))) OR (EXISTS(J concerne E?, E owned_by %(ueid)s, X identity J, E is Note, J is Affaire))), X is Affaire' % {'ueid': ueid},
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   943
                                        [{'C': 'Division', 'E': 'Note', 'D': 'Affaire', 'G': 'SubDivision', 'F': 'Societe', 'I': 'Affaire', 'H': 'Affaire', 'J': 'Affaire', 'X': 'Affaire'}])],
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   944
                         [self.system], {'E': 'table1.C0'}, {'X': 'table0.C0'}, []),
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   945
                        ]),
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   946
                    ('OneFetchStep', [('Any MAX(X)', ALL_SOLS)],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   947
                     None, None, [self.system], {'X': 'table0.C0'}, [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   948
                    ])
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   949
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   950
    def test_security_complex_aggregat2(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   951
        # use a guest user
4674
3d509dbb473a [test api] rename _user_session to user_groups_session, fix its arguments and return only the session, not (user, session) to make things clearer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   952
        self.session = self.user_groups_session('guests')
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   953
        ueid = self.session.user.eid
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   954
        X_ET_ALL_SOLS = []
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   955
        for s in X_ALL_SOLS:
6944
0cf10429ad39 [sources] rewrite the way pyrorql mapping are stored in the database so it can be reused for other sources (eg datafeed+cwxml)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6943
diff changeset
   956
            if s in ({'X': 'CWSourceHostConfig'}, {'X': 'CWSourceSchemaConfig'}):
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   957
                continue # not authorized
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   958
            ets = {'ET': 'CWEType'}
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   959
            ets.update(s)
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   960
            X_ET_ALL_SOLS.append(ets)
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   961
        self._test('Any ET, COUNT(X) GROUPBY ET ORDERBY ET WHERE X is ET',
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   962
                   [('FetchStep', [('Any X WHERE X is IN(Card, Note, State)',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   963
                                    [{'X': 'Card'}, {'X': 'Note'}, {'X': 'State'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   964
                     [self.cards, self.system], None, {'X': 'table1.C0'}, []),
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   965
                    ('FetchStep', [('Any E WHERE E type "X", E is Note', [{'E': 'Note'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   966
                     [self.cards, self.system],  None, {'E': 'table2.C0'}, []),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   967
                    ('FetchStep', [('Any X WHERE X is CWUser', [{'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   968
                     [self.ldap, self.system], None, {'X': 'table3.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   969
                    ('UnionFetchStep',
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   970
                     [('FetchStep', [('Any ET,X WHERE X is ET, EXISTS(X owned_by %s), ET is CWEType, X is Basket' % ueid,
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   971
                                      [{'ET': 'CWEType', 'X': 'Basket'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   972
                       [self.system], {}, {'ET': 'table0.C0', 'X': 'table0.C1'}, []),
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   973
                      ('FetchStep', [('Any ET,X WHERE X is ET, (EXISTS(X owned_by %(ueid)s)) OR ((((EXISTS(D concerne C?, C owned_by %(ueid)s, C type "X", X identity D, C is Division, D is Affaire)) OR (EXISTS(H concerne G?, G owned_by %(ueid)s, G type "X", X identity H, G is SubDivision, H is Affaire))) OR (EXISTS(I concerne F?, F owned_by %(ueid)s, F type "X", X identity I, F is Societe, I is Affaire))) OR (EXISTS(J concerne E?, E owned_by %(ueid)s, X identity J, E is Note, J is Affaire))), ET is CWEType, X is Affaire' % {'ueid': ueid},
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   974
                                      [{'C': 'Division', 'E': 'Note', 'D': 'Affaire',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   975
                                        'G': 'SubDivision', 'F': 'Societe', 'I': 'Affaire',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   976
                                        'H': 'Affaire', 'J': 'Affaire', 'X': 'Affaire',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   977
                                        'ET': 'CWEType'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   978
                       [self.system], {'E': 'table2.C0'}, {'ET': 'table0.C0', 'X': 'table0.C1'},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   979
                       []),
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   980
                      ('FetchStep', [('Any ET,X WHERE X is ET, EXISTS(X owned_by %s), ET is CWEType, X is CWUser' % ueid,
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   981
                                      [{'ET': 'CWEType', 'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   982
                       [self.system], {'X': 'table3.C0'}, {'ET': 'table0.C0', 'X': 'table0.C1'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   983
                      # extra UnionFetchStep could be avoided but has no cost, so don't care
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   984
                      ('UnionFetchStep',
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   985
                       [('FetchStep', [('Any ET,X WHERE X is ET, ET is CWEType, X is IN(BaseTransition, Bookmark, CWAttribute, CWCache, CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, CWRType, CWRelation, CWSource, CWUniqueTogetherConstraint, Comment, Division, Email, EmailAddress, EmailPart, EmailThread, ExternalUri, File, Folder, Personne, RQLExpression, Societe, SubDivision, SubWorkflowExitPoint, Tag, TrInfo, Transition, Workflow, WorkflowTransition)',
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   986
                                        [{'X': 'BaseTransition', 'ET': 'CWEType'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   987
                                         {'X': 'Bookmark', 'ET': 'CWEType'}, {'X': 'CWAttribute', 'ET': 'CWEType'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   988
                                         {'X': 'CWCache', 'ET': 'CWEType'}, {'X': 'CWConstraint', 'ET': 'CWEType'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   989
                                         {'X': 'CWConstraintType', 'ET': 'CWEType'}, {'X': 'CWEType', 'ET': 'CWEType'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   990
                                         {'X': 'CWGroup', 'ET': 'CWEType'}, {'X': 'CWPermission', 'ET': 'CWEType'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   991
                                         {'X': 'CWProperty', 'ET': 'CWEType'}, {'X': 'CWRType', 'ET': 'CWEType'},
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
   992
                                         {'X': 'CWSource', 'ET': 'CWEType'},
6209
e3e5870807e9 fix tests
syt
parents: 6131
diff changeset
   993
                                         {'X': 'CWRelation', 'ET': 'CWEType'},
e3e5870807e9 fix tests
syt
parents: 6131
diff changeset
   994
                                         {'X': 'CWUniqueTogetherConstraint', 'ET': 'CWEType'},
e3e5870807e9 fix tests
syt
parents: 6131
diff changeset
   995
                                         {'X': 'Comment', 'ET': 'CWEType'},
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   996
                                         {'X': 'Division', 'ET': 'CWEType'}, {'X': 'Email', 'ET': 'CWEType'},
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
   997
                                         {'X': 'EmailAddress', 'ET': 'CWEType'}, {'X': 'EmailPart', 'ET': 'CWEType'},
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   998
                                         {'X': 'EmailThread', 'ET': 'CWEType'}, {'X': 'ExternalUri', 'ET': 'CWEType'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   999
                                         {'X': 'File', 'ET': 'CWEType'}, {'X': 'Folder', 'ET': 'CWEType'},
5575
8a531340c3ef no more Image type w/ cw 3.9
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
  1000
                                         {'X': 'Personne', 'ET': 'CWEType'},
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
  1001
                                         {'X': 'RQLExpression', 'ET': 'CWEType'}, {'X': 'Societe', 'ET': 'CWEType'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
  1002
                                         {'X': 'SubDivision', 'ET': 'CWEType'}, {'X': 'SubWorkflowExitPoint', 'ET': 'CWEType'},
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1003
                                         {'X': 'Tag', 'ET': 'CWEType'}, {'X': 'TrInfo', 'ET': 'CWEType'},
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
  1004
                                         {'X': 'Transition', 'ET': 'CWEType'}, {'X': 'Workflow', 'ET': 'CWEType'},
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
  1005
                                         {'X': 'WorkflowTransition', 'ET': 'CWEType'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1006
                         [self.system], {}, {'ET': 'table0.C0', 'X': 'table0.C1'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1007
                        ('FetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1008
                         [('Any ET,X WHERE X is ET, ET is CWEType, X is IN(Card, Note, State)',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1009
                           [{'ET': 'CWEType', 'X': 'Card'},
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1010
                            {'ET': 'CWEType', 'X': 'Note'},
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1011
                            {'ET': 'CWEType', 'X': 'State'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1012
                         [self.system], {'X': 'table1.C0'}, {'ET': 'table0.C0', 'X': 'table0.C1'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1013
                        ]),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1014
                    ]),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1015
                    ('OneFetchStep',
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
  1016
                     [('Any ET,COUNT(X) GROUPBY ET ORDERBY ET', X_ET_ALL_SOLS)],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1017
                     None, None, [self.system], {'ET': 'table0.C0', 'X': 'table0.C1'}, [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1018
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1019
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1020
    def test_security_3sources(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1021
        # use a guest user
4674
3d509dbb473a [test api] rename _user_session to user_groups_session, fix its arguments and return only the session, not (user, session) to make things clearer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
  1022
        self.session = self.user_groups_session('guests')
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1023
        ueid = self.session.user.eid
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1024
        self._test('Any X, XT WHERE X is Card, X owned_by U, X title XT, U login "syt"',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1025
                   [('FetchStep',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1026
                     [('Any X,XT WHERE X title XT, X is Card', [{'X': 'Card', 'XT': 'String'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1027
                     [self.cards, self.system], None, {'X': 'table0.C0', 'X.title': 'table0.C1', 'XT': 'table0.C1'}, []),
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1028
                    ('FetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1029
                     [('Any U WHERE U login "syt", U is CWUser', [{'U': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1030
                     [self.ldap, self.system], None, {'U': 'table1.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1031
                    ('OneFetchStep',
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1032
                     [('Any X,XT WHERE X owned_by U, X title XT, EXISTS(U owned_by %s), U is CWUser, X is Card' % ueid,
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1033
                       [{'X': 'Card', 'U': 'CWUser', 'XT': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1034
                     None, None, [self.system],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1035
                     {'X': 'table0.C0', 'X.title': 'table0.C1', 'XT': 'table0.C1', 'U': 'table1.C0'}, [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1036
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1037
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1038
    def test_security_3sources_identity(self):
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3890
diff changeset
  1039
        self.restore_orig_cwuser_security()
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1040
        # use a guest user
4674
3d509dbb473a [test api] rename _user_session to user_groups_session, fix its arguments and return only the session, not (user, session) to make things clearer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
  1041
        self.session = self.user_groups_session('guests')
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1042
        ueid = self.session.user.eid
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1043
        self._test('Any X, XT WHERE X is Card, X owned_by U, X title XT, U login "syt"',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1044
                   [('FetchStep',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1045
                     [('Any X,XT WHERE X title XT, X is Card', [{'X': 'Card', 'XT': 'String'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1046
                     [self.cards, self.system], None, {'X': 'table0.C0', 'X.title': 'table0.C1', 'XT': 'table0.C1'}, []),
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1047
                    ('OneFetchStep',
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1048
                     [('Any X,XT WHERE X owned_by U, X title XT, U login "syt", EXISTS(U identity %s), U is CWUser, X is Card' % ueid,
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1049
                       [{'U': 'CWUser', 'X': 'Card', 'XT': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1050
                     None, None, [self.system], {'X': 'table0.C0', 'X.title': 'table0.C1', 'XT': 'table0.C1'}, [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1051
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1052
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1053
    def test_security_3sources_identity_optional_var(self):
4191
01638461d4b0 test update. All cw tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3890
diff changeset
  1054
        self.restore_orig_cwuser_security()
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1055
        # use a guest user
4674
3d509dbb473a [test api] rename _user_session to user_groups_session, fix its arguments and return only the session, not (user, session) to make things clearer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
  1056
        self.session = self.user_groups_session('guests')
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1057
        ueid = self.session.user.eid
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1058
        self._test('Any X,XT,U WHERE X is Card, X owned_by U?, X title XT, U login L',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1059
                   [('FetchStep',
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1060
                     [('Any U,L WHERE U login L, EXISTS(U identity %s), U is CWUser' % ueid,
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1061
                       [{'L': 'String', u'U': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1062
                     [self.system], {}, {'L': 'table0.C1', 'U': 'table0.C0', 'U.login': 'table0.C1'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1063
                    ('FetchStep',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1064
                     [('Any X,XT WHERE X title XT, X is Card', [{'X': 'Card', 'XT': 'String'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1065
                     [self.cards, self.system], None, {'X': 'table1.C0', 'X.title': 'table1.C1', 'XT': 'table1.C1'}, []),
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1066
                    ('OneFetchStep',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1067
                     [('Any X,XT,U WHERE X owned_by U?, X title XT, X is Card',
6129
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1068
                       [{'X': 'Card', 'U': 'CWUser', 'XT': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1069
                     None, None, [self.system], {'L': 'table0.C1',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1070
                                                 'U': 'table0.C0',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1071
                                                 'X': 'table1.C0',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1072
                                                 'X.title': 'table1.C1',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1073
                                                 'XT': 'table1.C1'}, [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1074
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1075
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1076
    def test_security_3sources_limit_offset(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1077
        # use a guest user
4674
3d509dbb473a [test api] rename _user_session to user_groups_session, fix its arguments and return only the session, not (user, session) to make things clearer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
  1078
        self.session = self.user_groups_session('guests')
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1079
        ueid = self.session.user.eid
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1080
        self._test('Any X, XT LIMIT 10 OFFSET 10 WHERE X is Card, X owned_by U, X title XT, U login "syt"',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1081
                   [('FetchStep',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1082
                     [('Any X,XT WHERE X title XT, X is Card', [{'X': 'Card', 'XT': 'String'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1083
                     [self.cards, self.system], None, {'X': 'table0.C0', 'X.title': 'table0.C1', 'XT': 'table0.C1'}, []),
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1084
                    ('FetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1085
                     [('Any U WHERE U login "syt", U is CWUser', [{'U': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1086
                     [self.ldap, self.system], None, {'U': 'table1.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1087
                    ('OneFetchStep',
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1088
                     [('Any X,XT LIMIT 10 OFFSET 10 WHERE X owned_by U, X title XT, EXISTS(U owned_by %s), U is CWUser, X is Card' % ueid,
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1089
                       [{'X': 'Card', 'U': 'CWUser', 'XT': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1090
                     10, 10, [self.system],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1091
                     {'X': 'table0.C0', 'X.title': 'table0.C1', 'XT': 'table0.C1', 'U': 'table1.C0'}, [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1092
                    ])
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1093
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1094
    def test_exists_base(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1095
        self._test('Any X,L,S WHERE X in_state S, X login L, EXISTS(X in_group G, G name "bougloup")',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1096
                   [('FetchStep', [('Any X,L WHERE X login L, X is CWUser', [{'X': 'CWUser', 'L': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1097
                     [self.ldap, self.system], None, {'X': 'table0.C0', 'X.login': 'table0.C1', 'L': 'table0.C1'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1098
                    ('OneFetchStep', [("Any X,L,S WHERE X in_state S, X login L, "
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1099
                                      'EXISTS(X in_group G, G name "bougloup", G is CWGroup), S is State, X is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1100
                                       [{'X': 'CWUser', 'L': 'String', 'S': 'State', 'G': 'CWGroup'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1101
                     None, None, [self.system],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1102
                     {'X': 'table0.C0', 'X.login': 'table0.C1', 'L': 'table0.C1'}, [])])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1103
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1104
    def test_exists_complex(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1105
        self._test('Any G WHERE X in_group G, G name "managers", EXISTS(X copain T, T login in ("comme", "cochon"))',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1106
                   [('FetchStep', [('Any T WHERE T login IN("comme", "cochon"), T is CWUser', [{'T': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1107
                     [self.ldap, self.system], None, {'T': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1108
                    ('OneFetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1109
                     [('Any G WHERE X in_group G, G name "managers", EXISTS(X copain T, T is CWUser), G is CWGroup, X is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1110
                       [{'X': 'CWUser', 'T': 'CWUser', 'G': 'CWGroup'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1111
                     None, None, [self.system], {'T': 'table0.C0'}, [])])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1112
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1113
    def test_exists3(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1114
        self._test('Any G,L WHERE X in_group G, X login L, G name "managers", EXISTS(X copain T, T login in ("comme", "cochon"))',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1115
                   [('FetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1116
                     [('Any T WHERE T login IN("comme", "cochon"), T is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1117
                       [{'T': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1118
                     [self.ldap, self.system], None, {'T': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1119
                    ('FetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1120
                     [('Any L,X WHERE X login L, X is CWUser', [{'X': 'CWUser', 'L': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1121
                     [self.ldap, self.system], None,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1122
                     {'X': 'table1.C1', 'X.login': 'table1.C0', 'L': 'table1.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1123
                    ('OneFetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1124
                     [('Any G,L WHERE X in_group G, X login L, G name "managers", EXISTS(X copain T, T is CWUser), G is CWGroup, X is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1125
                       [{'G': 'CWGroup', 'L': 'String', 'T': 'CWUser', 'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1126
                     None, None,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1127
                     [self.system], {'T': 'table0.C0', 'X': 'table1.C1', 'X.login': 'table1.C0', 'L': 'table1.C0'}, [])])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1128
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1129
    def test_exists4(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1130
        self._test('Any G,L WHERE X in_group G, X login L, G name "managers", '
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1131
                   'EXISTS(X copain T, T login L, T login in ("comme", "cochon")) OR '
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1132
                   'EXISTS(X in_state S, S name "pascontent", NOT X copain T2, T2 login "billy")',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1133
                   [('FetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1134
                     [('Any T,L WHERE T login L, T login IN("comme", "cochon"), T is CWUser', [{'T': 'CWUser', 'L': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1135
                     [self.ldap, self.system], None,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1136
                     {'T': 'table0.C0', 'T.login': 'table0.C1', 'L': 'table0.C1'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1137
                    ('FetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1138
                     [('Any T2 WHERE T2 login "billy", T2 is CWUser', [{'T2': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1139
                     [self.ldap, self.system], None, {'T2': 'table1.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1140
                    ('FetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1141
                     [('Any L,X WHERE X login L, X is CWUser', [{'X': 'CWUser', 'L': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1142
                     [self.ldap, self.system], None, {'X': 'table2.C1', 'X.login': 'table2.C0', 'L': 'table2.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1143
                    ('OneFetchStep',
5582
3e133b29a1a4 [rql2sql] follow rql 0.26.1 changes: NOT nodes normalization, allowing simplification of sql generation, and fix #XXX
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
  1144
                     [('Any G,L WHERE X in_group G, X login L, G name "managers", (EXISTS(X copain T, T login L, T is CWUser)) OR (EXISTS(X in_state S, S name "pascontent", NOT EXISTS(X copain T2), S is State)), G is CWGroup, T2 is CWUser, X is CWUser',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1145
                       [{'G': 'CWGroup', 'L': 'String', 'S': 'State', 'T': 'CWUser', 'T2': 'CWUser', 'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1146
                     None, None, [self.system],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1147
                     {'T2': 'table1.C0', 'L': 'table2.C0',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1148
                      'T': 'table0.C0', 'T.login': 'table0.C1', 'X': 'table2.C1', 'X.login': 'table2.C0'}, [])])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1149
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1150
    def test_exists5(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1151
        self._test('Any GN,L WHERE X in_group G, X login L, G name GN, '
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1152
                   'EXISTS(X copain T, T login in ("comme", "cochon")) AND '
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1153
                   'NOT EXISTS(X copain T2, T2 login "billy")',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1154
                   [('FetchStep', [('Any T WHERE T login IN("comme", "cochon"), T is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1155
                                    [{'T': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1156
                     [self.ldap, self.system], None, {'T': 'table0.C0'}, []),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1157
                    ('FetchStep', [('Any T2 WHERE T2 login "billy", T2 is CWUser', [{'T2': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1158
                     [self.ldap, self.system], None, {'T2': 'table1.C0'}, []),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1159
                    ('FetchStep', [('Any L,X WHERE X login L, X is CWUser', [{'X': 'CWUser', 'L': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1160
                     [self.ldap, self.system], None,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1161
                     {'X': 'table2.C1', 'X.login': 'table2.C0', 'L': 'table2.C0'}, []),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1162
                    ('OneFetchStep', [('Any GN,L WHERE X in_group G, X login L, G name GN, EXISTS(X copain T, T is CWUser), NOT EXISTS(X copain T2, T2 is CWUser), G is CWGroup, X is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1163
                       [{'G': 'CWGroup', 'GN': 'String', 'L': 'String', 'T': 'CWUser', 'T2': 'CWUser', 'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1164
                     None, None, [self.system],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1165
                     {'T': 'table0.C0', 'T2': 'table1.C0',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1166
                      'X': 'table2.C1', 'X.login': 'table2.C0', 'L': 'table2.C0'}, [])])
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1167
392
bccd9a788f7a OR EXISTS fix, typos
sylvain.thenault@logilab.fr
parents: 341
diff changeset
  1168
    def test_exists_security_no_invariant(self):
bccd9a788f7a OR EXISTS fix, typos
sylvain.thenault@logilab.fr
parents: 341
diff changeset
  1169
        ueid = self.session.user.eid
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1170
        self._test('Any X,AA,AB,AC,AD ORDERBY AA WHERE X is CWUser, X login AA, X firstname AB, X surname AC, X modification_date AD, A eid %(B)s, \
392
bccd9a788f7a OR EXISTS fix, typos
sylvain.thenault@logilab.fr
parents: 341
diff changeset
  1171
    EXISTS(((X identity A) OR \
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1172
            (EXISTS(X in_group C, C name IN("managers", "staff"), C is CWGroup))) OR \
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1173
            (EXISTS(X in_group D, A in_group D, NOT D name "users", D is CWGroup)))',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1174
               [('FetchStep', [('Any X,AA,AB,AC,AD WHERE X login AA, X firstname AB, X surname AC, X modification_date AD, X is CWUser',
392
bccd9a788f7a OR EXISTS fix, typos
sylvain.thenault@logilab.fr
parents: 341
diff changeset
  1175
                                [{'AA': 'String', 'AB': 'String', 'AC': 'String', 'AD': 'Datetime',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1176
                                  'X': 'CWUser'}])],
392
bccd9a788f7a OR EXISTS fix, typos
sylvain.thenault@logilab.fr
parents: 341
diff changeset
  1177
                 [self.ldap, self.system], None, {'AA': 'table0.C1', 'AB': 'table0.C2',
bccd9a788f7a OR EXISTS fix, typos
sylvain.thenault@logilab.fr
parents: 341
diff changeset
  1178
                                                  'AC': 'table0.C3', 'AD': 'table0.C4',
bccd9a788f7a OR EXISTS fix, typos
sylvain.thenault@logilab.fr
parents: 341
diff changeset
  1179
                                                  'X': 'table0.C0',
bccd9a788f7a OR EXISTS fix, typos
sylvain.thenault@logilab.fr
parents: 341
diff changeset
  1180
                                                  'X.firstname': 'table0.C2',
bccd9a788f7a OR EXISTS fix, typos
sylvain.thenault@logilab.fr
parents: 341
diff changeset
  1181
                                                  'X.login': 'table0.C1',
bccd9a788f7a OR EXISTS fix, typos
sylvain.thenault@logilab.fr
parents: 341
diff changeset
  1182
                                                  'X.modification_date': 'table0.C4',
bccd9a788f7a OR EXISTS fix, typos
sylvain.thenault@logilab.fr
parents: 341
diff changeset
  1183
                                                  'X.surname': 'table0.C3'}, []),
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1184
                ('OneFetchStep', [('Any X,AA,AB,AC,AD ORDERBY AA WHERE X login AA, X firstname AB, X surname AC, X modification_date AD, EXISTS(((X identity %(ueid)s) OR (EXISTS(X in_group C, C name IN("managers", "staff"), C is CWGroup))) OR (EXISTS(X in_group D, %(ueid)s in_group D, NOT D name "users", D is CWGroup))), X is CWUser' % {'ueid': ueid},
392
bccd9a788f7a OR EXISTS fix, typos
sylvain.thenault@logilab.fr
parents: 341
diff changeset
  1185
                                   [{'AA': 'String', 'AB': 'String', 'AC': 'String', 'AD': 'Datetime',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1186
                                     'C': 'CWGroup', 'D': 'CWGroup', 'X': 'CWUser'}])],
392
bccd9a788f7a OR EXISTS fix, typos
sylvain.thenault@logilab.fr
parents: 341
diff changeset
  1187
                 None, None, [self.system],
bccd9a788f7a OR EXISTS fix, typos
sylvain.thenault@logilab.fr
parents: 341
diff changeset
  1188
                 {'AA': 'table0.C1', 'AB': 'table0.C2', 'AC': 'table0.C3', 'AD': 'table0.C4',
bccd9a788f7a OR EXISTS fix, typos
sylvain.thenault@logilab.fr
parents: 341
diff changeset
  1189
                  'X': 'table0.C0',
bccd9a788f7a OR EXISTS fix, typos
sylvain.thenault@logilab.fr
parents: 341
diff changeset
  1190
                  'X.firstname': 'table0.C2', 'X.login': 'table0.C1', 'X.modification_date': 'table0.C4', 'X.surname': 'table0.C3'},
bccd9a788f7a OR EXISTS fix, typos
sylvain.thenault@logilab.fr
parents: 341
diff changeset
  1191
                 [])],
bccd9a788f7a OR EXISTS fix, typos
sylvain.thenault@logilab.fr
parents: 341
diff changeset
  1192
                   {'B': ueid})
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1193
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1194
    def test_relation_need_split(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1195
        self._test('Any X, S WHERE X in_state S',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1196
                   [('UnionStep', None, None, [
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1197
                       ('OneFetchStep', [('Any X,S WHERE X in_state S, S is State, X is IN(Affaire, CWUser)',
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1198
                                          [{'X': 'Affaire', 'S': 'State'}, {'X': 'CWUser', 'S': 'State'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1199
                        None, None, [self.system], {}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1200
                       ('OneFetchStep', [('Any X,S WHERE X in_state S, S is State, X is Note',
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1201
                                          [{'X': 'Note', 'S': 'State'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1202
                        None, None, [self.cards, self.system], {}, []),
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1203
                    ])])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1204
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1205
    def test_relation_selection_need_split(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1206
        self._test('Any X,S,U WHERE X in_state S, X todo_by U',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1207
                   [('FetchStep', [('Any X,S WHERE X in_state S, S is State, X is Note',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1208
                                    [{'X': 'Note', 'S': 'State'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1209
                     [self.cards, self.system], None, {'X': 'table0.C0', 'S': 'table0.C1'}, []),
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1210
                     ('UnionStep', None, None,
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1211
                      [('OneFetchStep', [('Any X,S,U WHERE X in_state S, X todo_by U, S is State, U is CWUser, X is Note',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1212
                                          [{'X': 'Note', 'S': 'State', 'U': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1213
                        None, None, [self.system], {'X': 'table0.C0', 'S': 'table0.C1'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1214
                       ('OneFetchStep', [('Any X,S,U WHERE X in_state S, X todo_by U, S is State, U is Personne, X is Affaire',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1215
                                          [{'X': 'Affaire', 'S': 'State', 'U': 'Personne'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1216
                        None, None, [self.system], {}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1217
                       ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1218
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1219
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1220
    def test_relation_restriction_need_split(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1221
        self._test('Any X,U WHERE X in_state S, S name "pending", X todo_by U',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1222
                   [('FetchStep', [('Any X WHERE X in_state S, S name "pending", S is State, X is Note',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1223
                                    [{'X': 'Note', 'S': 'State'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1224
                     [self.cards, self.system], None, {'X': 'table0.C0'}, []),
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1225
                     ('UnionStep', None, None,
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1226
                      [('OneFetchStep', [('Any X,U WHERE X todo_by U, U is CWUser, X is Note',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1227
                                          [{'X': 'Note', 'U': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1228
                        None, None, [self.system], {'X': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1229
                       ('OneFetchStep', [('Any X,U WHERE X in_state S, S name "pending", X todo_by U, S is State, U is Personne, X is Affaire',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1230
                                          [{'S': 'State', 'U': 'Personne', 'X': 'Affaire'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1231
                        None, None, [self.system], {}, [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1232
                       ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1233
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1234
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1235
    def test_relation_restriction_ambigous_need_split(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1236
        self._test('Any X,T WHERE X in_state S, S name "pending", T tags X',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1237
                   [('FetchStep', [('Any X WHERE X in_state S, S name "pending", S is State, X is Note',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1238
                                    [{'X': 'Note', 'S': 'State'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1239
                     [self.cards, self.system], None, {'X': 'table0.C0'}, []),
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1240
                    ('UnionStep', None, None, [
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1241
                        ('OneFetchStep', [('Any X,T WHERE T tags X, T is Tag, X is Note',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1242
                                           [{'X': 'Note', 'T': 'Tag'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1243
                         None, None,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1244
                         [self.system], {'X': 'table0.C0'}, []),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1245
                        ('OneFetchStep', [('Any X,T WHERE X in_state S, S name "pending", T tags X, S is State, T is Tag, X is IN(Affaire, CWUser)',
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1246
                                           [{'X': 'Affaire', 'S': 'State', 'T': 'Tag'},
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1247
                                            {'X': 'CWUser', 'S': 'State', 'T': 'Tag'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1248
                         None, None,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1249
                         [self.system], {}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1250
                        ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1251
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1252
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1253
    def test_not_relation_no_split_internal(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1254
        ueid = self.session.user.eid
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1255
        # NOT on a relation supported by rql and system source: we want to get
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1256
        # all states (eg from both sources) which are not related to entity with the
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1257
        # given eid. The "NOT X in_state S, X eid %(x)s" expression is necessarily true
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1258
        # in the source where %(x)s is not coming from and will be removed during rql
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1259
        # generation for the external source
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1260
        self._test('Any SN WHERE NOT X in_state S, X eid %(x)s, S name SN',
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1261
                   [('OneFetchStep', [('Any SN WHERE NOT EXISTS(%s in_state S), S name SN, S is State' % ueid,
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1262
                                       [{'S': 'State', 'SN': 'String'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1263
                     None, None, [self.cards, self.system], {}, [])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1264
                   {'x': ueid})
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1265
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1266
    def test_not_relation_no_split_external(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1267
        repo._type_source_cache[999999] = ('Note', 'cards', 999999)
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  1268
        # similar to the above test but with an eid coming from the external source.
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  1269
        # the same plan may be used, since we won't find any record in the system source
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1270
        # linking 9999999 to a state
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1271
        self._test('Any SN WHERE NOT X in_state S, X eid %(x)s, S name SN',
5582
3e133b29a1a4 [rql2sql] follow rql 0.26.1 changes: NOT nodes normalization, allowing simplification of sql generation, and fix #XXX
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
  1272
                   [('OneFetchStep', [('Any SN WHERE NOT EXISTS(999999 in_state S), S name SN, S is State',
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1273
                                       [{'S': 'State', 'SN': 'String'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1274
                     None, None, [self.cards, self.system], {}, [])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1275
                   {'x': 999999})
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1276
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1277
    def test_not_relation_need_split(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1278
        self._test('Any SN WHERE NOT X in_state S, S name SN',
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  1279
                   [('FetchStep', [('Any SN,S WHERE S name SN, S is State',
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  1280
                                    [{'S': 'State', 'SN': 'String'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1281
                     [self.cards, self.system], None, {'S': 'table0.C1', 'S.name': 'table0.C0', 'SN': 'table0.C0'},
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1282
                     []),
341
0a426be2f3a2 fixes for some cases of neged inlined relations, may have to use (new) IntersectStep. XXX: write IntersectFetchStep
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 332
diff changeset
  1283
                    ('IntersectStep', None, None,
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1284
                     [('OneFetchStep',
5582
3e133b29a1a4 [rql2sql] follow rql 0.26.1 changes: NOT nodes normalization, allowing simplification of sql generation, and fix #XXX
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
  1285
                       [('Any SN WHERE NOT EXISTS(X in_state S, X is Note), S name SN, S is State',
1230
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
  1286
                         [{'S': 'State', 'SN': 'String', 'X': 'Note'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1287
                       None, None, [self.cards, self.system], {},
1230
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
  1288
                       []),
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
  1289
                      ('OneFetchStep',
5582
3e133b29a1a4 [rql2sql] follow rql 0.26.1 changes: NOT nodes normalization, allowing simplification of sql generation, and fix #XXX
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
  1290
                       [('Any SN WHERE NOT EXISTS(X in_state S, X is IN(Affaire, CWUser)), S name SN, S is State',
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1291
                         [{'S': 'State', 'SN': 'String', 'X': 'Affaire'},
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1292
                          {'S': 'State', 'SN': 'String', 'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1293
                       None, None, [self.system], {'S': 'table0.C1', 'S.name': 'table0.C0', 'SN': 'table0.C0'},
1230
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
  1294
                       []),]
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1295
                     )])
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1296
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1297
    def test_external_attributes_and_relation(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1298
        repo._type_source_cache[999999] = ('Note', 'cards', 999999)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1299
        self._test('Any A,B,C,D WHERE A eid %(x)s,A creation_date B,A modification_date C, A todo_by D?',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1300
                   [('FetchStep', [('Any A,B,C WHERE A eid 999999, A creation_date B, A modification_date C, A is Note',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1301
                                    [{'A': 'Note', 'C': 'Datetime', 'B': 'Datetime'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1302
                     [self.cards], None,
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1303
                     {'A': 'table0.C0', 'A.creation_date': 'table0.C1', 'A.modification_date': 'table0.C2', 'C': 'table0.C2', 'B': 'table0.C1'}, []),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1304
                    #('FetchStep', [('Any D WHERE D is CWUser', [{'D': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1305
                    # [self.ldap, self.system], None, {'D': 'table1.C0'}, []),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1306
                    ('OneFetchStep', [('Any A,B,C,D WHERE A creation_date B, A modification_date C, A todo_by D?, A is Note, D is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1307
                                       [{'A': 'Note', 'C': 'Datetime', 'B': 'Datetime', 'D': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1308
                     None, None, [self.system],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1309
                     {'A': 'table0.C0', 'A.creation_date': 'table0.C1', 'A.modification_date': 'table0.C2', 'C': 'table0.C2', 'B': 'table0.C1'}, [])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1310
                   {'x': 999999})
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1311
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1312
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1313
    def test_simplified_var(self):
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1314
        ueid = self.session.user.eid
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1315
        repo._type_source_cache[999999] = ('Note', 'cards', 999999)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1316
        self._test('Any U WHERE U in_group G, (G name IN ("managers", "logilab") OR (X require_permission P?, P name "bla", P require_group G)), X eid %(x)s, U eid %(u)s',
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1317
                   [('OneFetchStep', [('Any %s WHERE %s in_group G, (G name IN("managers", "logilab")) OR (X require_permission P?, P name "bla", P require_group G), X eid 999999' % (ueid, ueid),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1318
                                       [{'X': 'Note', 'G': 'CWGroup', 'P': 'CWPermission'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1319
                     None, None, [self.system], {}, [])],
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1320
                   {'x': 999999, 'u': ueid})
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1321
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1322
    def test_has_text(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1323
        self._test('Card X WHERE X has_text "toto"',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1324
                   [('OneFetchStep', [('Any X WHERE X has_text "toto", X is Card',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1325
                                       [{'X': 'Card'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1326
                     None, None, [self.system], {}, [])])
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1327
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1328
    def test_has_text_3(self):
3587
5b3725f315fc test fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3240
diff changeset
  1329
        self._test('Any X WHERE X has_text "toto", X title "zoubidou", X is IN (Card, EmailThread)',
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1330
                   [('FetchStep', [(u'Any X WHERE X title "zoubidou", X is Card',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1331
                                    [{'X': 'Card'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1332
                     [self.cards, self.system], None, {'X': 'table0.C0'}, []),
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1333
                    ('UnionStep', None, None, [
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1334
                        ('OneFetchStep', [(u'Any X WHERE X has_text "toto", X is Card',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1335
                                           [{'X': 'Card'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1336
                         None, None, [self.system], {'X': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1337
                        ('OneFetchStep', [(u'Any X WHERE X has_text "toto", X title "zoubidou", X is EmailThread',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1338
                                           [{'X': 'EmailThread'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1339
                         None, None, [self.system], {}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1340
                        ]),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1341
                    ])
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1342
5768
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1343
    def test_has_text_orderby_rank(self):
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1344
        self._test('Any X ORDERBY FTIRANK(X) WHERE X has_text "bla", X firstname "bla"',
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1345
                   [('FetchStep', [('Any X WHERE X firstname "bla", X is CWUser', [{'X': 'CWUser'}])],
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1346
                     [self.ldap, self.system], None, {'X': 'table0.C0'}, []),
7108
bcdf22734059 Abstract the support for ORDER BY and LIMIT/OFFSET SQL generation
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6957
diff changeset
  1347
                    ('AggrStep', 'SELECT table1.C1 FROM table1\nORDER BY table1.C0', None, [
5768
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1348
                        ('FetchStep', [('Any FTIRANK(X),X WHERE X has_text "bla", X is CWUser',
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1349
                                        [{'X': 'CWUser'}])],
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1350
                         [self.system], {'X': 'table0.C0'}, {'FTIRANK(X)': 'table1.C0', 'X': 'table1.C1'}, []),
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1351
                        ('FetchStep', [('Any FTIRANK(X),X WHERE X has_text "bla", X firstname "bla", X is Personne',
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1352
                                        [{'X': 'Personne'}])],
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1353
                         [self.system], {}, {'FTIRANK(X)': 'table1.C0', 'X': 'table1.C1'}, []),
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1354
                        ]),
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1355
                    ])
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1356
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1357
    def test_security_has_text_orderby_rank(self):
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1358
        # use a guest user
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1359
        self.session = self.user_groups_session('guests')
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1360
        ueid = self.session.user.eid
5768
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1361
        self._test('Any X ORDERBY FTIRANK(X) WHERE X has_text "bla", X firstname "bla"',
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1362
                   [('FetchStep', [('Any X WHERE X firstname "bla", X is CWUser', [{'X': 'CWUser'}])],
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1363
                     [self.ldap, self.system], None, {'X': 'table1.C0'}, []),
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1364
                    ('UnionFetchStep',
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1365
                     [('FetchStep', [('Any X WHERE X firstname "bla", X is Personne', [{'X': 'Personne'}])],
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1366
                       [self.system], {}, {'X': 'table0.C0'}, []),
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1367
                      ('FetchStep', [('Any X WHERE EXISTS(X owned_by %s), X is CWUser' % ueid, [{'X': 'CWUser'}])],
5768
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1368
                       [self.system], {'X': 'table1.C0'}, {'X': 'table0.C0'}, [])]),
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1369
                    ('OneFetchStep', [('Any X ORDERBY FTIRANK(X) WHERE X has_text "bla"',
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1370
                                       [{'X': 'CWUser'}, {'X': 'Personne'}])],
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1371
                     None, None, [self.system], {'X': 'table0.C0'}, []),
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1372
                    ])
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1373
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1374
    def test_has_text_select_rank(self):
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1375
        self._test('Any X, FTIRANK(X) WHERE X has_text "bla", X firstname "bla"',
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1376
                   # XXX unecessary duplicate selection
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1377
                   [('FetchStep', [('Any X,X WHERE X firstname "bla", X is CWUser', [{'X': 'CWUser'}])],
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1378
                     [self.ldap, self.system], None, {'X': 'table0.C1'}, []),
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1379
                    ('UnionStep', None, None, [
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1380
                        ('OneFetchStep', [('Any X,FTIRANK(X) WHERE X has_text "bla", X is CWUser', [{'X': 'CWUser'}])],
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1381
                         None, None, [self.system], {'X': 'table0.C1'}, []),
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1382
                        ('OneFetchStep', [('Any X,FTIRANK(X) WHERE X has_text "bla", X firstname "bla", X is Personne', [{'X': 'Personne'}])],
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1383
                         None, None, [self.system], {}, []),
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1384
                        ]),
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1385
                    ])
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1386
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1387
    def test_security_has_text_select_rank(self):
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1388
        # use a guest user
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1389
        self.session = self.user_groups_session('guests')
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1390
        ueid = self.session.user.eid
5768
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1391
        self._test('Any X, FTIRANK(X) WHERE X has_text "bla", X firstname "bla"',
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1392
                   [('FetchStep', [('Any X,X WHERE X firstname "bla", X is CWUser', [{'X': 'CWUser'}])],
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1393
                     [self.ldap, self.system], None, {'X': 'table0.C1'}, []),
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1394
                    ('UnionStep', None, None, [
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1395
                        ('OneFetchStep', [('Any X,FTIRANK(X) WHERE X has_text "bla", EXISTS(X owned_by %s), X is CWUser' % ueid, [{'X': 'CWUser'}])],
5768
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1396
                         None, None, [self.system], {'X': 'table0.C1'}, []),
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1397
                        ('OneFetchStep', [('Any X,FTIRANK(X) WHERE X has_text "bla", X firstname "bla", X is Personne', [{'X': 'Personne'}])],
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1398
                         None, None, [self.system], {}, []),
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1399
                        ]),
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1400
                    ])
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5590
diff changeset
  1401
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1402
    def test_sort_func(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1403
        self._test('Note X ORDERBY DUMB_SORT(RF) WHERE X type RF',
7108
bcdf22734059 Abstract the support for ORDER BY and LIMIT/OFFSET SQL generation
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6957
diff changeset
  1404
                   [('AggrStep', 'SELECT table0.C0 FROM table0\nORDER BY DUMB_SORT(table0.C1)', None, [
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1405
                       ('FetchStep', [('Any X,RF WHERE X type RF, X is Note',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1406
                                       [{'X': 'Note', 'RF': 'String'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1407
                        [self.cards, self.system], {}, {'X': 'table0.C0', 'X.type': 'table0.C1', 'RF': 'table0.C1'}, []),
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1408
                       ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1409
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1410
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1411
    def test_ambigous_sort_func(self):
3587
5b3725f315fc test fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3240
diff changeset
  1412
        self._test('Any X ORDERBY DUMB_SORT(RF) WHERE X title RF, X is IN (Bookmark, Card, EmailThread)',
7108
bcdf22734059 Abstract the support for ORDER BY and LIMIT/OFFSET SQL generation
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6957
diff changeset
  1413
                   [('AggrStep', 'SELECT table0.C0 FROM table0\nORDER BY DUMB_SORT(table0.C1)', None,
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1414
                     [('FetchStep', [('Any X,RF WHERE X title RF, X is Card',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1415
                                      [{'X': 'Card', 'RF': 'String'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1416
                       [self.cards, self.system], {},
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1417
                       {'X': 'table0.C0', 'X.title': 'table0.C1', 'RF': 'table0.C1'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1418
                      ('FetchStep', [('Any X,RF WHERE X title RF, X is IN(Bookmark, EmailThread)',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1419
                                      [{'RF': 'String', 'X': 'Bookmark'},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1420
                                       {'RF': 'String', 'X': 'EmailThread'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1421
                       [self.system], {},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1422
                       {'X': 'table0.C0', 'X.title': 'table0.C1', 'RF': 'table0.C1'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1423
                      ]),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1424
                   ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1425
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1426
    def test_attr_unification_1(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1427
        self._test('Any X,Y WHERE X is Bookmark, Y is Card, X title T, Y title T',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1428
                   [('FetchStep',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1429
                     [('Any Y,T WHERE Y title T, Y is Card', [{'T': 'String', 'Y': 'Card'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1430
                     [self.cards, self.system], None,
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1431
                     {'T': 'table0.C1', 'Y': 'table0.C0', 'Y.title': 'table0.C1'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1432
                    ('OneFetchStep',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1433
                     [('Any X,Y WHERE X title T, Y title T, X is Bookmark, Y is Card',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1434
                       [{'T': 'String', 'X': 'Bookmark', 'Y': 'Card'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1435
                     None, None, [self.system],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1436
                     {'T': 'table0.C1', 'Y': 'table0.C0', 'Y.title': 'table0.C1'}, [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1437
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1438
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1439
    def test_attr_unification_2(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1440
        self._test('Any X,Y WHERE X is Note, Y is Card, X type T, Y title T',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1441
                   [('FetchStep',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1442
                     [('Any X,T WHERE X type T, X is Note', [{'T': 'String', 'X': 'Note'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1443
                     [self.cards, self.system], None,
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1444
                     {'T': 'table0.C1', 'X': 'table0.C0', 'X.type': 'table0.C1'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1445
                    ('FetchStep',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1446
                     [('Any Y,T WHERE Y title T, Y is Card', [{'T': 'String', 'Y': 'Card'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1447
                     [self.cards, self.system], None,
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1448
                     {'T': 'table1.C1', 'Y': 'table1.C0', 'Y.title': 'table1.C1'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1449
                    ('OneFetchStep',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1450
                     [('Any X,Y WHERE X type T, Y title T, X is Note, Y is Card',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1451
                       [{'T': 'String', 'X': 'Note', 'Y': 'Card'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1452
                     None, None, [self.system],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1453
                     {'T': 'table1.C1',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1454
                      'X': 'table0.C0', 'X.type': 'table0.C1',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1455
                      'Y': 'table1.C0', 'Y.title': 'table1.C1'}, [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1456
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1457
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1458
    def test_attr_unification_neq_1(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1459
        self._test('Any X,Y WHERE X is Bookmark, Y is Card, X creation_date D, Y creation_date > D',
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1460
                   [('FetchStep',
3815
50b87f759b5d test and fix http://www.logilab.org/ticket/499838
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
  1461
                     [('Any Y,D WHERE Y creation_date D, Y is Card',
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1462
                       [{'D': 'Datetime', 'Y': 'Card'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1463
                     [self.cards,self.system], None,
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1464
                     {'D': 'table0.C1', 'Y': 'table0.C0', 'Y.creation_date': 'table0.C1'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1465
                    ('OneFetchStep',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1466
                     [('Any X,Y WHERE X creation_date D, Y creation_date > D, X is Bookmark, Y is Card',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1467
                       [{'D': 'Datetime', 'X': 'Bookmark', 'Y': 'Card'}])], None, None,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1468
                     [self.system],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1469
                     {'D': 'table0.C1', 'Y': 'table0.C0', 'Y.creation_date': 'table0.C1'}, [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1470
                   ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1471
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1472
    def test_subquery_1(self):
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1473
        ueid = self.session.user.eid
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1474
        self._test('DISTINCT Any B,C ORDERBY C WHERE A created_by B, B login C, EXISTS(B owned_by D), D eid %(E)s '
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1475
                   'WITH A,N BEING ((Any X,N WHERE X is Tag, X name N) UNION (Any X,T WHERE X is Bookmark, X title T))',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1476
                   [('FetchStep', [('Any X,N WHERE X is Tag, X name N', [{'N': 'String', 'X': 'Tag'}]),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1477
                                   ('Any X,T WHERE X is Bookmark, X title T',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1478
                                    [{'T': 'String', 'X': 'Bookmark'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1479
                     [self.system], {}, {'N': 'table0.C1', 'X': 'table0.C0', 'X.name': 'table0.C1'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1480
                    ('FetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1481
                     [('Any B,C WHERE B login C, B is CWUser', [{'B': 'CWUser', 'C': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1482
                     [self.ldap, self.system], None, {'B': 'table1.C0', 'B.login': 'table1.C1', 'C': 'table1.C1'}, []),
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1483
                    ('OneFetchStep', [('DISTINCT Any B,C ORDERBY C WHERE A created_by B, B login C, EXISTS(B owned_by %s), B is CWUser, A is IN(Bookmark, Tag)' % ueid,
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1484
                                       [{'A': 'Bookmark', 'B': 'CWUser', 'C': 'String'},
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1485
                                        {'A': 'Tag', 'B': 'CWUser', 'C': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1486
                     None, None, [self.system],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1487
                     {'A': 'table0.C0',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1488
                      'B': 'table1.C0', 'B.login': 'table1.C1',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1489
                      'C': 'table1.C1',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1490
                      'N': 'table0.C1'},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1491
                     [])],
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1492
                   {'E': ueid})
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1493
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1494
    def test_subquery_2(self):
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1495
        ueid = self.session.user.eid
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1496
        self._test('DISTINCT Any B,C ORDERBY C WHERE A created_by B, B login C, EXISTS(B owned_by D), D eid %(E)s '
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1497
                   'WITH A,N BEING ((Any X,N WHERE X is Tag, X name N) UNION (Any X,T WHERE X is Card, X title T))',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1498
                   [('UnionFetchStep',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1499
                     [('FetchStep', [('Any X,N WHERE X is Tag, X name N', [{'N': 'String', 'X': 'Tag'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1500
                       [self.system], {},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1501
                       {'N': 'table0.C1',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1502
                        'T': 'table0.C1',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1503
                        'X': 'table0.C0',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1504
                        'X.name': 'table0.C1',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1505
                        'X.title': 'table0.C1'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1506
                      ('FetchStep', [('Any X,T WHERE X is Card, X title T',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1507
                                      [{'T': 'String', 'X': 'Card'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1508
                       [self.cards, self.system], {},
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1509
                       {'N': 'table0.C1',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1510
                        'T': 'table0.C1',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1511
                        'X': 'table0.C0',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1512
                        'X.name': 'table0.C1',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1513
                        'X.title': 'table0.C1'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1514
                      ]),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1515
                    ('FetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1516
                     [('Any B,C WHERE B login C, B is CWUser', [{'B': 'CWUser', 'C': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1517
                     [self.ldap, self.system], None, {'B': 'table1.C0', 'B.login': 'table1.C1', 'C': 'table1.C1'}, []),
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1518
                    ('OneFetchStep', [('DISTINCT Any B,C ORDERBY C WHERE A created_by B, B login C, EXISTS(B owned_by %s), B is CWUser, A is IN(Card, Tag)' % ueid,
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1519
                                       [{'A': 'Card', 'B': 'CWUser', 'C': 'String'},
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1520
                                        {'A': 'Tag', 'B': 'CWUser', 'C': 'String'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1521
                     None, None, [self.system],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1522
                     {'A': 'table0.C0',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1523
                      'B': 'table1.C0', 'B.login': 'table1.C1',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1524
                      'C': 'table1.C1',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1525
                      'N': 'table0.C1'},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1526
                     [])],
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1527
                   {'E': ueid})
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1528
5420
09b50d7e5321 [ms] fix planning bug with rewritten constants: when removing some source for a const due to relation constraints, we should propagate this change to other constants coming from the same original variable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4915
diff changeset
  1529
    def test_eid_dont_cross_relation_1(self):
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1530
        repo._type_source_cache[999999] = ('Personne', 'system', 999999)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1531
        self._test('Any Y,YT WHERE X eid %(x)s, X fiche Y, Y title YT',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1532
                   [('OneFetchStep', [('Any Y,YT WHERE X eid 999999, X fiche Y, Y title YT',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1533
                                       [{'X': 'Personne', 'Y': 'Card', 'YT': 'String'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1534
                     None, None, [self.system], {}, [])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1535
                   {'x': 999999})
393
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1536
5420
09b50d7e5321 [ms] fix planning bug with rewritten constants: when removing some source for a const due to relation constraints, we should propagate this change to other constants coming from the same original variable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4915
diff changeset
  1537
    def test_eid_dont_cross_relation_2(self):
09b50d7e5321 [ms] fix planning bug with rewritten constants: when removing some source for a const due to relation constraints, we should propagate this change to other constants coming from the same original variable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4915
diff changeset
  1538
        repo._type_source_cache[999999] = ('Note', 'cards', 999999)
09b50d7e5321 [ms] fix planning bug with rewritten constants: when removing some source for a const due to relation constraints, we should propagate this change to other constants coming from the same original variable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4915
diff changeset
  1539
        self.cards.dont_cross_relations.add('concerne')
09b50d7e5321 [ms] fix planning bug with rewritten constants: when removing some source for a const due to relation constraints, we should propagate this change to other constants coming from the same original variable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4915
diff changeset
  1540
        try:
09b50d7e5321 [ms] fix planning bug with rewritten constants: when removing some source for a const due to relation constraints, we should propagate this change to other constants coming from the same original variable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4915
diff changeset
  1541
            self._test('Any Y,S,YT,X WHERE Y concerne X, Y in_state S, X eid 999999, Y ref YT',
09b50d7e5321 [ms] fix planning bug with rewritten constants: when removing some source for a const due to relation constraints, we should propagate this change to other constants coming from the same original variable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4915
diff changeset
  1542
                   [('OneFetchStep', [('Any Y,S,YT,999999 WHERE Y concerne 999999, Y in_state S, Y ref YT',
09b50d7e5321 [ms] fix planning bug with rewritten constants: when removing some source for a const due to relation constraints, we should propagate this change to other constants coming from the same original variable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4915
diff changeset
  1543
                                       [{'Y': 'Affaire', 'YT': 'String', 'S': 'State'}])],
09b50d7e5321 [ms] fix planning bug with rewritten constants: when removing some source for a const due to relation constraints, we should propagate this change to other constants coming from the same original variable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4915
diff changeset
  1544
                     None, None, [self.system], {}, [])],
09b50d7e5321 [ms] fix planning bug with rewritten constants: when removing some source for a const due to relation constraints, we should propagate this change to other constants coming from the same original variable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4915
diff changeset
  1545
                   {'x': 999999})
09b50d7e5321 [ms] fix planning bug with rewritten constants: when removing some source for a const due to relation constraints, we should propagate this change to other constants coming from the same original variable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4915
diff changeset
  1546
        finally:
09b50d7e5321 [ms] fix planning bug with rewritten constants: when removing some source for a const due to relation constraints, we should propagate this change to other constants coming from the same original variable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4915
diff changeset
  1547
            self.cards.dont_cross_relations.remove('concerne')
09b50d7e5321 [ms] fix planning bug with rewritten constants: when removing some source for a const due to relation constraints, we should propagate this change to other constants coming from the same original variable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4915
diff changeset
  1548
393
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1549
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1550
    # external source w/ .cross_relations == ['multisource_crossed_rel'] ######
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1551
393
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1552
    def test_crossed_relation_eid_1_invariant(self):
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1553
        repo._type_source_cache[999999] = ('Note', 'system', 999999)
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1554
        self._test('Any Y WHERE X eid %(x)s, X multisource_crossed_rel Y',
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1555
                   [('OneFetchStep', [('Any Y WHERE 999999 multisource_crossed_rel Y', [{u'Y': 'Note'}])],
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1556
                      None, None, [self.system], {}, [])
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1557
                    ],
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1558
                   {'x': 999999,})
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1559
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1560
    def test_crossed_relation_eid_1_needattr(self):
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1561
        repo._type_source_cache[999999] = ('Note', 'system', 999999)
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1562
        self._test('Any Y,T WHERE X eid %(x)s, X multisource_crossed_rel Y, Y type T',
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1563
                   [('FetchStep', [('Any Y,T WHERE Y type T, Y is Note', [{'T': 'String', 'Y': 'Note'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1564
                     [self.cards, self.system], None,
393
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1565
                     {'T': 'table0.C1', 'Y': 'table0.C0', 'Y.type': 'table0.C1'}, []),
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1566
                    ('OneFetchStep', [('Any Y,T WHERE 999999 multisource_crossed_rel Y, Y type T, Y is Note',
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1567
                                       [{'T': 'String', 'Y': 'Note'}])],
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1568
                     None, None, [self.system],
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1569
                     {'T': 'table0.C1', 'Y': 'table0.C0', 'Y.type': 'table0.C1'}, []),
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1570
                    ],
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1571
                   {'x': 999999,})
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1572
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1573
    def test_crossed_relation_eid_2_invariant(self):
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1574
        repo._type_source_cache[999999] = ('Note', 'cards', 999999)
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1575
        self._test('Any Y WHERE X eid %(x)s, X multisource_crossed_rel Y',
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1576
                   [('OneFetchStep', [('Any Y WHERE 999999 multisource_crossed_rel Y, Y is Note', [{'Y': 'Note'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1577
                      None, None, [self.cards, self.system], {}, [])
393
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1578
                    ],
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1579
                   {'x': 999999,})
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1580
1231
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  1581
    def test_crossed_relation_eid_2_needattr(self):
393
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1582
        repo._type_source_cache[999999] = ('Note', 'cards', 999999)
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1583
        self._test('Any Y,T WHERE X eid %(x)s, X multisource_crossed_rel Y, Y type T',
6131
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  1584
                   [('OneFetchStep', [('Any Y,T WHERE 999999 multisource_crossed_rel Y, Y type T, Y is Note',
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  1585
                                       [{'T': 'String', 'Y': 'Note'}])],
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  1586
                     None, None, [self.cards, self.system], {},
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  1587
                     []),
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  1588
                    ],
393
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1589
                   {'x': 999999,})
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1590
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1591
    def test_crossed_relation_eid_not_1(self):
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1592
        repo._type_source_cache[999999] = ('Note', 'system', 999999)
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1593
        self._test('Any Y WHERE X eid %(x)s, NOT X multisource_crossed_rel Y',
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1594
                   [('FetchStep', [('Any Y WHERE Y is Note', [{'Y': 'Note'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1595
                     [self.cards, self.system], None, {'Y': 'table0.C0'}, []),
5582
3e133b29a1a4 [rql2sql] follow rql 0.26.1 changes: NOT nodes normalization, allowing simplification of sql generation, and fix #XXX
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
  1596
                    ('OneFetchStep', [('Any Y WHERE NOT EXISTS(999999 multisource_crossed_rel Y), Y is Note',
393
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1597
                                       [{'Y': 'Note'}])],
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1598
                     None, None, [self.system],
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1599
                     {'Y': 'table0.C0'},  [])],
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1600
                   {'x': 999999,})
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1601
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1602
#     def test_crossed_relation_eid_not_2(self):
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1603
#         repo._type_source_cache[999999] = ('Note', 'cards', 999999)
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1604
#         self._test('Any Y WHERE X eid %(x)s, NOT X multisource_crossed_rel Y',
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1605
#                    [],
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1606
#                    {'x': 999999,})
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1607
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  1608
    def test_crossed_relation_base_XXXFIXME(self):
393
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1609
        repo._type_source_cache[999999] = ('Note', 'system', 999999)
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1610
        self._test('Any X,Y,T WHERE X multisource_crossed_rel Y, Y type T, X type T',
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1611
                   [('FetchStep', [('Any X,T WHERE X type T, X is Note', [{'T': 'String', 'X': 'Note'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1612
                     [self.cards, self.system], None,
393
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1613
                     {'T': 'table0.C1', 'X': 'table0.C0', 'X.type': 'table0.C1'}, []),
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1614
                    ('FetchStep',  [('Any Y,T WHERE Y type T, Y is Note', [{'T': 'String', 'Y': 'Note'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1615
                     [self.cards, self.system], None,
393
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1616
                     {'T': 'table1.C1', 'Y': 'table1.C0', 'Y.type': 'table1.C1'},  []),
6758
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1617
                    ('FetchStep', [('Any X,Y WHERE X multisource_crossed_rel Y, X is Note, Y is Note',
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1618
                                    [{'X': 'Note', 'Y': 'Note'}])],
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1619
                     [self.cards, self.system], None,
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1620
                     {'X': 'table2.C0', 'Y': 'table2.C1'},
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1621
                     []),
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1622
                    ('OneFetchStep', [('Any X,Y,T WHERE X multisource_crossed_rel Y, Y type T, X type T, '
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1623
                                       'X is Note, Y is Note, Y identity A, X identity B, A is Note, B is Note',
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1624
                                       [{u'A': 'Note', u'B': 'Note', 'T': 'String', 'X': 'Note', 'Y': 'Note'}])],
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1625
                     None, None,
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1626
                     [self.system],
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1627
                     {'A': 'table1.C0',
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1628
                      'B': 'table0.C0',
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1629
                      'T': 'table1.C1',
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1630
                      'X': 'table2.C0',
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1631
                      'X.type': 'table0.C1',
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1632
                      'Y': 'table2.C1',
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1633
                      'Y.type': 'table1.C1'},
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1634
                     []),
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1635
                    ],
393
45a675515427 cross_relations support
sylvain.thenault@logilab.fr
parents: 392
diff changeset
  1636
                    {'x': 999999,})
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1637
6758
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1638
    def test_crossed_relation_noeid_needattr(self):
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1639
        # http://www.cubicweb.org/ticket/1382452
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1640
        self._test('DISTINCT Any DEP WHERE DEP is Note, P type "cubicweb-foo", P multisource_crossed_rel DEP, DEP type LIKE "cubicweb%"',
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1641
                   [('FetchStep', [(u'Any DEP WHERE DEP type LIKE "cubicweb%", DEP is Note',
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1642
                                    [{'DEP': 'Note'}])],
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1643
                     [self.cards, self.system], None,
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1644
                     {'DEP': 'table0.C0'},
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1645
                     []),
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1646
                    ('FetchStep', [(u'Any P WHERE P type "cubicweb-foo", P is Note', [{'P': 'Note'}])],
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1647
                     [self.cards, self.system], None, {'P': 'table1.C0'},
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1648
                     []),
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1649
                    ('FetchStep', [('Any DEP,P WHERE P multisource_crossed_rel DEP, DEP is Note, P is Note',
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1650
                                    [{'DEP': 'Note', 'P': 'Note'}])],
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1651
                     [self.cards, self.system], None, {'DEP': 'table2.C0', 'P': 'table2.C1'},
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1652
                     []),
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1653
                    ('OneFetchStep',
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1654
                     [('DISTINCT Any DEP WHERE P multisource_crossed_rel DEP, DEP is Note, '
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1655
                       'P is Note, DEP identity A, P identity B, A is Note, B is Note',
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1656
                       [{u'A': 'Note', u'B': 'Note', 'DEP': 'Note', 'P': 'Note'}])],
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1657
                     None, None, [self.system],
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1658
                     {'A': 'table0.C0', 'B': 'table1.C0', 'DEP': 'table2.C0', 'P': 'table2.C1'},
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1659
                     [])])
28b11ecf319b [ms] #1382452: incorrect results with multi-sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6676
diff changeset
  1660
6759
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1661
    def test_crossed_relation_noeid_invariant(self):
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1662
        # see comment in http://www.cubicweb.org/ticket/1382452
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1663
        self.schema.add_relation_def(
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1664
            RelationDefinition(subject='Note', name='multisource_crossed_rel', object='Affaire'))
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1665
        self.repo.set_schema(self.schema)
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1666
        try:
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1667
            self._test('DISTINCT Any P,DEP WHERE P type "cubicweb-foo", P multisource_crossed_rel DEP',
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1668
                       [('FetchStep',
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1669
                         [('Any DEP WHERE DEP is Note', [{'DEP': 'Note'}])],
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1670
                         [self.cards, self.system], None, {'DEP': 'table0.C0'}, []),
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1671
                        ('FetchStep',
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1672
                         [(u'Any P WHERE P type "cubicweb-foo", P is Note', [{'P': 'Note'}])],
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1673
                         [self.cards, self.system], None, {'P': 'table1.C0'}, []),
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1674
                        ('UnionStep', None, None,
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1675
                         [('OneFetchStep',
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1676
                           [('DISTINCT Any P,DEP WHERE P multisource_crossed_rel DEP, DEP is Note, P is Note',
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1677
                             [{'DEP': 'Note', 'P': 'Note'}])],
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1678
                           None, None, [self.cards], None, []),
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1679
                          ('OneFetchStep',
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1680
                           [('DISTINCT Any P,DEP WHERE P multisource_crossed_rel DEP, DEP is Note, P is Note',
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1681
                             [{'DEP': 'Note', 'P': 'Note'}])],
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1682
                           None, None, [self.system],
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1683
                           {'DEP': 'table0.C0', 'P': 'table1.C0'},
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1684
                           []),
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1685
                          ('OneFetchStep',
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1686
                           [('DISTINCT Any P,DEP WHERE P multisource_crossed_rel DEP, DEP is Affaire, P is Note',
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1687
                             [{'DEP': 'Affaire', 'P': 'Note'}])],
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1688
                           None, None, [self.system], {'P': 'table1.C0'},
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1689
                           [])])
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1690
                        ])
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1691
        finally:
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1692
            self.schema.del_relation_def('Note', 'multisource_crossed_rel', 'Affaire')
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1693
            self.repo.set_schema(self.schema)
5d016d5bacca [ms] fix ms planner crash on some ambiguous queries, as demonstrated in a comment on http://www.cubicweb.org/ticket/1382452
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6758
diff changeset
  1694
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1695
    # edition queries tests ###################################################
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1696
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1697
    def test_insert_simplified_var_1(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1698
        repo._type_source_cache[999999] = ('Note', 'cards', 999999)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1699
        repo._type_source_cache[999998] = ('State', 'system', None)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1700
        self._test('INSERT Note X: X in_state S, X type T WHERE S eid %(s)s, N eid %(n)s, N type T',
4764
ec9c20c6b9f7 [repo] improve planning of insert/update queries: do not select affected constants so the don't go and back to/from the source.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4685
diff changeset
  1701
                   [('InsertStep',
ec9c20c6b9f7 [repo] improve planning of insert/update queries: do not select affected constants so the don't go and back to/from the source.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4685
diff changeset
  1702
                     [('InsertRelationsStep',
ec9c20c6b9f7 [repo] improve planning of insert/update queries: do not select affected constants so the don't go and back to/from the source.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4685
diff changeset
  1703
                       [('OneFetchStep', [('Any T WHERE N eid 999999, N type T, N is Note',
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1704
                                           [{'N': 'Note', 'T': 'String'}])],
4764
ec9c20c6b9f7 [repo] improve planning of insert/update queries: do not select affected constants so the don't go and back to/from the source.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4685
diff changeset
  1705
                        None, None, [self.cards], {}, [])])
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1706
                      ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1707
                    ],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1708
                   {'n': 999999, 's': 999998})
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1709
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1710
    def test_insert_simplified_var_2(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1711
        repo._type_source_cache[999999] = ('Note', 'cards', 999999)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1712
        repo._type_source_cache[999998] = ('State', 'system', None)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1713
        self._test('INSERT Note X: X in_state S, X type T, X migrated_from N WHERE S eid %(s)s, N eid %(n)s, N type T',
4764
ec9c20c6b9f7 [repo] improve planning of insert/update queries: do not select affected constants so the don't go and back to/from the source.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4685
diff changeset
  1714
                   [('InsertStep',
ec9c20c6b9f7 [repo] improve planning of insert/update queries: do not select affected constants so the don't go and back to/from the source.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4685
diff changeset
  1715
                     [('InsertRelationsStep',
ec9c20c6b9f7 [repo] improve planning of insert/update queries: do not select affected constants so the don't go and back to/from the source.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4685
diff changeset
  1716
                       [('OneFetchStep', [('Any T WHERE N eid 999999, N type T, N is Note',
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1717
                                           [{'N': 'Note', 'T': 'String'}])],
4764
ec9c20c6b9f7 [repo] improve planning of insert/update queries: do not select affected constants so the don't go and back to/from the source.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4685
diff changeset
  1718
                         None, None, [self.cards], {}, [])
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1719
                        ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1720
                      ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1721
                    ],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1722
                   {'n': 999999, 's': 999998})
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1723
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1724
    def test_insert_simplified_var_3(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1725
        repo._type_source_cache[999999] = ('Note', 'cards', 999999)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1726
        repo._type_source_cache[999998] = ('State', 'cards', 999998)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1727
        self._test('INSERT Note X: X in_state S, X type T WHERE S eid %(s)s, N eid %(n)s, N type T',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1728
                   [('InsertStep',
4764
ec9c20c6b9f7 [repo] improve planning of insert/update queries: do not select affected constants so the don't go and back to/from the source.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4685
diff changeset
  1729
                     [('InsertRelationsStep',
ec9c20c6b9f7 [repo] improve planning of insert/update queries: do not select affected constants so the don't go and back to/from the source.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4685
diff changeset
  1730
                       [('OneFetchStep', [('Any T WHERE N eid 999999, N type T, N is Note',
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1731
                                           [{'N': 'Note', 'T': 'String'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  1732
                         None, None, [self.cards], {}, [])]
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1733
                       )]
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1734
                     )],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1735
                   {'n': 999999, 's': 999998})
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1736
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1737
    def test_insert_simplified_var_4(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1738
        repo._type_source_cache[999999] = ('Note', 'cards', 999999)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1739
        repo._type_source_cache[999998] = ('State', 'system', None)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1740
        self._test('INSERT Note X: X in_state S, X type "bla", X migrated_from N WHERE S eid %(s)s, N eid %(n)s',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1741
                   [('InsertStep',
4764
ec9c20c6b9f7 [repo] improve planning of insert/update queries: do not select affected constants so the don't go and back to/from the source.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4685
diff changeset
  1742
                      [('InsertRelationsStep', [])]
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1743
                     )],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1744
                   {'n': 999999, 's': 999998})
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1745
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1746
    def test_insert_simplified_var_5(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1747
        repo._type_source_cache[999999] = ('Note', 'cards', 999999)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1748
        repo._type_source_cache[999998] = ('State', 'system', None)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1749
        self._test('INSERT Note X: X in_state S, X type "bla", X migrated_from N WHERE S eid %(s)s, N eid %(n)s, A concerne N',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1750
                   [('InsertStep',
4817
9c8b39914998 fix bad test fix
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4775
diff changeset
  1751
                     [('InsertRelationsStep',
9c8b39914998 fix bad test fix
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4775
diff changeset
  1752
                       [('OneFetchStep',
9c8b39914998 fix bad test fix
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4775
diff changeset
  1753
                         [('Any A WHERE A concerne 999999, A is Affaire',
9c8b39914998 fix bad test fix
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4775
diff changeset
  1754
                           [{'A': 'Affaire'}])],
9c8b39914998 fix bad test fix
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4775
diff changeset
  1755
                         None, None, [self.system], {}, []),
9c8b39914998 fix bad test fix
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4775
diff changeset
  1756
                        ]),
9c8b39914998 fix bad test fix
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4775
diff changeset
  1757
                      ])
9c8b39914998 fix bad test fix
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4775
diff changeset
  1758
                    ],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1759
                   {'n': 999999, 's': 999998})
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1760
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1761
    def test_delete_relation1(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1762
        ueid = self.session.user.eid
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1763
        self._test('DELETE X created_by Y WHERE X eid %(x)s, NOT Y eid %(y)s',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1764
                   [('DeleteRelationsStep', [
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1765
                       ('OneFetchStep', [('Any %s,Y WHERE %s created_by Y, NOT Y eid %s, Y is CWUser' % (ueid, ueid, ueid),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1766
                                          [{'Y': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1767
                        None, None, [self.system], {}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1768
                       ]),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1769
                    ],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1770
                   {'x': ueid, 'y': ueid})
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1771
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1772
    def test_delete_relation2(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1773
        ueid = self.session.user.eid
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1774
        self._test('DELETE X created_by Y WHERE X eid %(x)s, NOT Y login "syt"',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1775
                   [('FetchStep', [('Any Y WHERE NOT Y login "syt", Y is CWUser', [{'Y': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1776
                     [self.ldap, self.system], None, {'Y': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1777
                    ('DeleteRelationsStep', [
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1778
                        ('OneFetchStep', [('Any %s,Y WHERE %s created_by Y, Y is CWUser'%(ueid,ueid), [{'Y': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1779
                         None, None, [self.system], {'Y': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1780
                        ]),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1781
                    ],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1782
                   {'x': ueid, 'y': ueid})
341
0a426be2f3a2 fixes for some cases of neged inlined relations, may have to use (new) IntersectStep. XXX: write IntersectFetchStep
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 332
diff changeset
  1783
6673
5eb2f1f2c277 [ms planning] test and fix bad plannification of a query used on cascading delete of a deleted (external) entity relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6654
diff changeset
  1784
    def test_delete_relation3(self):
5eb2f1f2c277 [ms planning] test and fix bad plannification of a query used on cascading delete of a deleted (external) entity relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6654
diff changeset
  1785
        repo._type_source_cache[999999] = ('Note', 'cards', 999999)
5eb2f1f2c277 [ms planning] test and fix bad plannification of a query used on cascading delete of a deleted (external) entity relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6654
diff changeset
  1786
        self._test('DELETE Y multisource_inlined_rel X WHERE X eid %(x)s, NOT (Y cw_source S, S name %(source)s)',
5eb2f1f2c277 [ms planning] test and fix bad plannification of a query used on cascading delete of a deleted (external) entity relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6654
diff changeset
  1787
                   [('DeleteRelationsStep',
5eb2f1f2c277 [ms planning] test and fix bad plannification of a query used on cascading delete of a deleted (external) entity relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6654
diff changeset
  1788
                     [('OneFetchStep',
5eb2f1f2c277 [ms planning] test and fix bad plannification of a query used on cascading delete of a deleted (external) entity relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6654
diff changeset
  1789
                       [('Any Y,999999 WHERE Y multisource_inlined_rel 999999, NOT EXISTS(Y cw_source S, S name "cards"), S is CWSource, Y is IN(Card, Note)',
5eb2f1f2c277 [ms planning] test and fix bad plannification of a query used on cascading delete of a deleted (external) entity relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6654
diff changeset
  1790
                         [{'S': 'CWSource', 'Y': 'Card'}, {'S': 'CWSource', 'Y': 'Note'}])],
5eb2f1f2c277 [ms planning] test and fix bad plannification of a query used on cascading delete of a deleted (external) entity relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6654
diff changeset
  1791
                       None, None, [self.system], {},
5eb2f1f2c277 [ms planning] test and fix bad plannification of a query used on cascading delete of a deleted (external) entity relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6654
diff changeset
  1792
                       [])]
5eb2f1f2c277 [ms planning] test and fix bad plannification of a query used on cascading delete of a deleted (external) entity relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6654
diff changeset
  1793
                     )],
5eb2f1f2c277 [ms planning] test and fix bad plannification of a query used on cascading delete of a deleted (external) entity relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6654
diff changeset
  1794
                   {'x': 999999, 'source': 'cards'})
5eb2f1f2c277 [ms planning] test and fix bad plannification of a query used on cascading delete of a deleted (external) entity relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6654
diff changeset
  1795
341
0a426be2f3a2 fixes for some cases of neged inlined relations, may have to use (new) IntersectStep. XXX: write IntersectFetchStep
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 332
diff changeset
  1796
    def test_delete_entity1(self):
0a426be2f3a2 fixes for some cases of neged inlined relations, may have to use (new) IntersectStep. XXX: write IntersectFetchStep
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 332
diff changeset
  1797
        repo._type_source_cache[999999] = ('Note', 'system', 999999)
0a426be2f3a2 fixes for some cases of neged inlined relations, may have to use (new) IntersectStep. XXX: write IntersectFetchStep
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 332
diff changeset
  1798
        self._test('DELETE Note X WHERE X eid %(x)s, NOT Y multisource_rel X',
0a426be2f3a2 fixes for some cases of neged inlined relations, may have to use (new) IntersectStep. XXX: write IntersectFetchStep
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 332
diff changeset
  1799
                   [('DeleteEntitiesStep',
5582
3e133b29a1a4 [rql2sql] follow rql 0.26.1 changes: NOT nodes normalization, allowing simplification of sql generation, and fix #XXX
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
  1800
                     [('OneFetchStep', [('Any 999999 WHERE NOT EXISTS(Y multisource_rel 999999), Y is IN(Card, Note)',
341
0a426be2f3a2 fixes for some cases of neged inlined relations, may have to use (new) IntersectStep. XXX: write IntersectFetchStep
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 332
diff changeset
  1801
                                         [{'Y': 'Card'}, {'Y': 'Note'}])],
0a426be2f3a2 fixes for some cases of neged inlined relations, may have to use (new) IntersectStep. XXX: write IntersectFetchStep
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 332
diff changeset
  1802
                       None, None, [self.system], {}, [])
0a426be2f3a2 fixes for some cases of neged inlined relations, may have to use (new) IntersectStep. XXX: write IntersectFetchStep
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 332
diff changeset
  1803
                      ])
0a426be2f3a2 fixes for some cases of neged inlined relations, may have to use (new) IntersectStep. XXX: write IntersectFetchStep
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 332
diff changeset
  1804
                    ],
0a426be2f3a2 fixes for some cases of neged inlined relations, may have to use (new) IntersectStep. XXX: write IntersectFetchStep
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 332
diff changeset
  1805
                   {'x': 999999})
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1806
341
0a426be2f3a2 fixes for some cases of neged inlined relations, may have to use (new) IntersectStep. XXX: write IntersectFetchStep
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 332
diff changeset
  1807
    def test_delete_entity2(self):
0a426be2f3a2 fixes for some cases of neged inlined relations, may have to use (new) IntersectStep. XXX: write IntersectFetchStep
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 332
diff changeset
  1808
        repo._type_source_cache[999999] = ('Note', 'system', 999999)
0a426be2f3a2 fixes for some cases of neged inlined relations, may have to use (new) IntersectStep. XXX: write IntersectFetchStep
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 332
diff changeset
  1809
        self._test('DELETE Note X WHERE X eid %(x)s, NOT X multisource_inlined_rel Y',
0a426be2f3a2 fixes for some cases of neged inlined relations, may have to use (new) IntersectStep. XXX: write IntersectFetchStep
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 332
diff changeset
  1810
                   [('DeleteEntitiesStep',
0a426be2f3a2 fixes for some cases of neged inlined relations, may have to use (new) IntersectStep. XXX: write IntersectFetchStep
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 332
diff changeset
  1811
                     [('OneFetchStep', [('Any X WHERE X eid 999999, NOT X multisource_inlined_rel Y, X is Note, Y is IN(Affaire, Note)',
0a426be2f3a2 fixes for some cases of neged inlined relations, may have to use (new) IntersectStep. XXX: write IntersectFetchStep
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 332
diff changeset
  1812
                                         [{'X': 'Note', 'Y': 'Affaire'}, {'X': 'Note', 'Y': 'Note'}])],
0a426be2f3a2 fixes for some cases of neged inlined relations, may have to use (new) IntersectStep. XXX: write IntersectFetchStep
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 332
diff changeset
  1813
                       None, None, [self.system], {}, [])
0a426be2f3a2 fixes for some cases of neged inlined relations, may have to use (new) IntersectStep. XXX: write IntersectFetchStep
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 332
diff changeset
  1814
                      ])
0a426be2f3a2 fixes for some cases of neged inlined relations, may have to use (new) IntersectStep. XXX: write IntersectFetchStep
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 332
diff changeset
  1815
                    ],
0a426be2f3a2 fixes for some cases of neged inlined relations, may have to use (new) IntersectStep. XXX: write IntersectFetchStep
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 332
diff changeset
  1816
                   {'x': 999999})
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1817
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1818
    def test_update(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1819
        self._test('SET X copain Y WHERE X login "comme", Y login "cochon"',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1820
                   [('FetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1821
                     [('Any X WHERE X login "comme", X is CWUser', [{'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1822
                     [self.ldap, self.system], None, {'X': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1823
                    ('FetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1824
                     [('Any Y WHERE Y login "cochon", Y is CWUser', [{'Y': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1825
                     [self.ldap, self.system], None, {'Y': 'table1.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1826
                    ('UpdateStep',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1827
                     [('OneFetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1828
                       [('DISTINCT Any X,Y WHERE X is CWUser, Y is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1829
                         [{'X': 'CWUser', 'Y': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1830
                       None, None, [self.system], {'X': 'table0.C0', 'Y': 'table1.C0'}, [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1831
                      ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1832
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1833
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1834
    def test_update2(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1835
        self._test('SET U in_group G WHERE G name ~= "bougloup%", U login "admin"',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1836
                   [('FetchStep', [('Any U WHERE U login "admin", U is CWUser', [{'U': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1837
                     [self.ldap, self.system], None, {'U': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1838
                     ('UpdateStep', [
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1839
                        ('OneFetchStep', [('DISTINCT Any U,G WHERE G name ILIKE "bougloup%", G is CWGroup, U is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1840
                                           [{'U': 'CWUser', 'G': 'CWGroup'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1841
                         None, None, [self.system], {'U': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1842
                        ]),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1843
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1844
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1845
    def test_update3(self):
4674
3d509dbb473a [test api] rename _user_session to user_groups_session, fix its arguments and return only the session, not (user, session) to make things clearer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
  1846
        anoneid = self.user_groups_session('guests').user.eid
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1847
        # since we are adding a in_state relation for an entity in the system
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1848
        # source, states should only be searched in the system source as well
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1849
        self._test('SET X in_state S WHERE X eid %(x)s, S name "deactivated"',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1850
                   [('UpdateStep', [
4764
ec9c20c6b9f7 [repo] improve planning of insert/update queries: do not select affected constants so the don't go and back to/from the source.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4685
diff changeset
  1851
                       ('OneFetchStep', [('DISTINCT Any S WHERE S name "deactivated", S is State',
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1852
                                          [{'S': 'State'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1853
                        None, None, [self.system], {}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1854
                       ]),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1855
                    ],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1856
                   {'x': anoneid})
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1857
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1858
#     def test_update4(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1859
#         # since we are adding a in_state relation with a state from the system
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1860
#         # source, CWUser should only be searched only in the system source as well
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1861
#         rset = self.execute('State X WHERE X name "activated"')
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1862
#         assert len(rset) == 1, rset
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1863
#         activatedeid = rset[0][0]
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1864
#         self._test('SET X in_state S WHERE X is CWUser, S eid %s' % activatedeid,
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1865
#                    [('UpdateStep', [
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1866
#                        ('OneFetchStep', [('DISTINCT Any X,%s WHERE X is CWUser' % activatedeid,
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  1867
#                                           [{'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1868
#                         None, None, [self.system], {}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1869
#                        ]),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  1870
#                     ])
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1871
6129
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1872
    def test_ldap_user_related_to_invariant_and_dont_cross_rel(self):
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1873
        self.repo._type_source_cache[999999] = ('Note', 'cards', 999999)
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1874
        self.cards.dont_cross_relations.add('created_by')
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1875
        try:
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1876
            self._test('Any X,XL WHERE E eid %(x)s, E created_by X, X login XL',
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1877
                   [('FetchStep', [('Any X,XL WHERE X login XL, X is CWUser',
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1878
                                    [{'X': 'CWUser', 'XL': 'String'}])],
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1879
                     [self.ldap, self.system], None,
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1880
                     {'X': 'table0.C0', 'X.login': 'table0.C1', 'XL': 'table0.C1'},
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1881
                     []),
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1882
                    ('OneFetchStep',
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1883
                     [('Any X,XL WHERE 999999 created_by X, X login XL, X is CWUser',
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1884
                       [{'X': 'CWUser', 'XL': 'String'}])],
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1885
                     None, None,
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1886
                     [self.system],
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1887
                     {'X': 'table0.C0', 'X.login': 'table0.C1', 'XL': 'table0.C1'},
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1888
                     [])],
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1889
                       {'x': 999999})
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1890
        finally:
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1891
            self.cards.dont_cross_relations.remove('created_by')
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1892
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1893
    def test_ambigous_cross_relation(self):
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1894
        self.repo._type_source_cache[999999] = ('Note', 'cards', 999999)
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1895
        self.cards.support_relations['see_also'] = True
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1896
        self.cards.cross_relations.add('see_also')
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1897
        try:
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1898
            self._test('Any X,AA ORDERBY AA WHERE E eid %(x)s, E see_also X, X modification_date AA',
6131
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  1899
                       [('AggrStep',
7108
bcdf22734059 Abstract the support for ORDER BY and LIMIT/OFFSET SQL generation
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6957
diff changeset
  1900
                         'SELECT table0.C0, table0.C1 FROM table0\nORDER BY table0.C1',
6129
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1901
                         None,
6131
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  1902
                         [('FetchStep',
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  1903
                           [('Any X,AA WHERE 999999 see_also X, X modification_date AA, X is Note',
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  1904
                             [{'AA': 'Datetime', 'X': 'Note'}])], [self.cards, self.system], {},
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  1905
                           {'AA': 'table0.C1', 'X': 'table0.C0',
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  1906
                            'X.modification_date': 'table0.C1'},
6129
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1907
                           []),
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1908
                          ('FetchStep',
6131
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  1909
                           [('Any X,AA WHERE 999999 see_also X, X modification_date AA, X is Bookmark',
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  1910
                             [{'AA': 'Datetime', 'X': 'Bookmark'}])],
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  1911
                           [self.system], {},
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  1912
                           {'AA': 'table0.C1', 'X': 'table0.C0',
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  1913
                            'X.modification_date': 'table0.C1'},
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  1914
                           [])])],
6129
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1915
                         {'x': 999999})
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1916
        finally:
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1917
            del self.cards.support_relations['see_also']
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1918
            self.cards.cross_relations.remove('see_also')
fea746b60093 [ms] fix two planner bugs: one occuring query such as X created_by U where X in a external source and U may come from an ldap source. The other being that when we've to merge input maps, we were modifying the same tree/solutions while a copy were needed. Also, ensure we add type restrictions, necessary for pyro source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6057
diff changeset
  1919
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1920
    def test_state_of_cross(self):
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1921
        self._test('DELETE State X WHERE NOT X state_of Y',
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1922
                   [('DeleteEntitiesStep',
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1923
                     [('OneFetchStep',
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1924
                       [('Any X WHERE NOT X state_of Y, X is State, Y is Workflow',
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1925
                         [{'X': 'State', 'Y': 'Workflow'}])],
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1926
                       None, None, [self.system], {}, [])])]
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1927
                   )
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1928
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1929
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1930
    def test_source_specified_0_0(self):
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1931
        self._test('Card X WHERE X cw_source S, S eid 1',
6633
7baea108d326 [ms] simplify cw_source handling : don't try evil optmization that may hurt in some cases
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6631
diff changeset
  1932
                   [('OneFetchStep', [('Any X WHERE X cw_source 1, X is Card',
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1933
                                       [{'X': 'Card'}])],
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1934
                     None, None,
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1935
                     [self.system],{}, [])
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1936
                    ])
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1937
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1938
    def test_source_specified_0_1(self):
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1939
        self._test('Any X, S WHERE X is Card, X cw_source S, S eid 1',
6633
7baea108d326 [ms] simplify cw_source handling : don't try evil optmization that may hurt in some cases
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6631
diff changeset
  1940
                   [('OneFetchStep', [('Any X,1 WHERE X is Card, X cw_source 1',
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1941
                                       [{'X': 'Card'}])],
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1942
                     None, None,
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1943
                     [self.system],{}, [])
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1944
                    ])
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1945
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1946
    def test_source_specified_1_0(self):
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1947
        self._test('Card X WHERE X cw_source S, S name "system"',
6633
7baea108d326 [ms] simplify cw_source handling : don't try evil optmization that may hurt in some cases
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6631
diff changeset
  1948
                   [('OneFetchStep', [('Any X WHERE X cw_source S, S name "system", X is Card',
7baea108d326 [ms] simplify cw_source handling : don't try evil optmization that may hurt in some cases
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6631
diff changeset
  1949
                                       [{'X': 'Card', 'S': 'CWSource'}])],
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1950
                     None, None,
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1951
                     [self.system],{}, [])
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1952
                    ])
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1953
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1954
    def test_source_specified_1_1(self):
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1955
        self._test('Any X, SN WHERE X is Card, X cw_source S, S name "system", S name SN',
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1956
                   [('OneFetchStep', [('Any X,SN WHERE X is Card, X cw_source S, S name "system", '
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1957
                                       'S name SN',
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1958
                                       [{'S': 'CWSource', 'SN': 'String', 'X': 'Card'}])],
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1959
                     None, None, [self.system], {}, [])
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1960
                    ])
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1961
6633
7baea108d326 [ms] simplify cw_source handling : don't try evil optmization that may hurt in some cases
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6631
diff changeset
  1962
    def test_source_specified_1_2(self):
6957
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
  1963
        self._test('Card X WHERE X cw_source S, S name "datafeed"',
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
  1964
                   [('OneFetchStep', [('Any X WHERE X cw_source S, S name "datafeed", X is Card',
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
  1965
                                       [{'X': 'Card', 'S': 'CWSource'}])],
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
  1966
                     None, None,
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
  1967
                     [self.system],{}, [])
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
  1968
                    ])
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
  1969
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
  1970
    def test_source_specified_1_3(self):
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
  1971
        self._test('Any X, SN WHERE X is Card, X cw_source S, S name "datafeed", S name SN',
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
  1972
                   [('OneFetchStep', [('Any X,SN WHERE X is Card, X cw_source S, S name "datafeed", '
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
  1973
                                       'S name SN',
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
  1974
                                       [{'S': 'CWSource', 'SN': 'String', 'X': 'Card'}])],
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
  1975
                     None, None, [self.system], {}, [])
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
  1976
                    ])
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
  1977
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
  1978
    def test_source_specified_1_4(self):
6633
7baea108d326 [ms] simplify cw_source handling : don't try evil optmization that may hurt in some cases
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6631
diff changeset
  1979
        sols = []
7baea108d326 [ms] simplify cw_source handling : don't try evil optmization that may hurt in some cases
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6631
diff changeset
  1980
        for sol in X_ALL_SOLS:
7baea108d326 [ms] simplify cw_source handling : don't try evil optmization that may hurt in some cases
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6631
diff changeset
  1981
            sol = sol.copy()
7baea108d326 [ms] simplify cw_source handling : don't try evil optmization that may hurt in some cases
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6631
diff changeset
  1982
            sol['S'] = 'CWSource'
7baea108d326 [ms] simplify cw_source handling : don't try evil optmization that may hurt in some cases
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6631
diff changeset
  1983
            sols.append(sol)
7baea108d326 [ms] simplify cw_source handling : don't try evil optmization that may hurt in some cases
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6631
diff changeset
  1984
        self._test('Any X WHERE X cw_source S, S name "cards"',
7baea108d326 [ms] simplify cw_source handling : don't try evil optmization that may hurt in some cases
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6631
diff changeset
  1985
                   [('OneFetchStep', [('Any X WHERE X cw_source S, S name "cards"',
7baea108d326 [ms] simplify cw_source handling : don't try evil optmization that may hurt in some cases
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6631
diff changeset
  1986
                                       sols)],
7baea108d326 [ms] simplify cw_source handling : don't try evil optmization that may hurt in some cases
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6631
diff changeset
  1987
                     None, None,
7baea108d326 [ms] simplify cw_source handling : don't try evil optmization that may hurt in some cases
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6631
diff changeset
  1988
                     [self.system],{}, [])
7baea108d326 [ms] simplify cw_source handling : don't try evil optmization that may hurt in some cases
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6631
diff changeset
  1989
                    ])
7baea108d326 [ms] simplify cw_source handling : don't try evil optmization that may hurt in some cases
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6631
diff changeset
  1990
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1991
    def test_source_specified_2_0(self):
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1992
        self._test('Card X WHERE X cw_source S, NOT S eid 1',
6649
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  1993
                   [('OneFetchStep', [('Any X WHERE X is Card',
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  1994
                                       [{'X': 'Card'}])],
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1995
                     None, None,
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1996
                     [self.cards],{}, [])
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1997
                    ])
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  1998
        self._test('Card X WHERE NOT X cw_source S, S eid 1',
6649
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  1999
                   [('OneFetchStep', [('Any X WHERE X is Card',
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2000
                                       [{'X': 'Card'}])],
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2001
                     None, None,
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2002
                     [self.cards],{}, [])
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2003
                    ])
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2004
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2005
    def test_source_specified_2_1(self):
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2006
        self._test('Card X WHERE X cw_source S, NOT S name "system"',
6649
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  2007
                   [('OneFetchStep', [('Any X WHERE X is Card',
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  2008
                                       [{'X': 'Card'}])],
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2009
                     None, None,
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2010
                     [self.cards],{}, [])
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2011
                    ])
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2012
        self._test('Card X WHERE NOT X cw_source S, S name "system"',
6649
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  2013
                   [('OneFetchStep', [('Any X WHERE X is Card',
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  2014
                                       [{'X': 'Card'}])],
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2015
                     None, None,
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2016
                     [self.cards],{}, [])
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2017
                    ])
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2018
6649
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  2019
    def test_source_specified_3_1(self):
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  2020
        self._test('Any X,XT WHERE X is Card, X title XT, X cw_source S, S name "cards"',
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  2021
                   [('OneFetchStep',
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  2022
                     [('Any X,XT WHERE X is Card, X title XT',
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  2023
                       [{'X': 'Card', 'XT': 'String'}])],
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  2024
                     None, None, [self.cards], {}, [])
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  2025
                    ])
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  2026
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  2027
    def test_source_specified_3_2(self):
6957
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
  2028
        self._test('Any X,XT WHERE X is Card, X title XT, X cw_source S, S name "datafeed"',
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
  2029
                   [('OneFetchStep',
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
  2030
                     [('Any X,XT WHERE X is Card, X title XT, X cw_source S, S name "datafeed"',
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
  2031
                       [{'X': 'Card', 'XT': 'String', 'S': 'CWSource'}])],
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
  2032
                     None, None, [self.system], {}, [])
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
  2033
                    ])
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
  2034
ffda12be2e9f [repository] #1460066: backport datafeed cube as cubicweb source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6944
diff changeset
  2035
    def test_source_specified_3_3(self):
6649
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  2036
        self.skipTest('oops')
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  2037
        self._test('Any STN WHERE X is Note, X type XT, X in_state ST, ST name STN, X cw_source S, S name "cards"',
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  2038
                   [('OneFetchStep',
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  2039
                     [('Any X,XT WHERE X is Card, X title XT',
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  2040
                       [{'X': 'Card', 'XT': 'String'}])],
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  2041
                     None, None, [self.cards], {}, [])
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  2042
                    ])
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  2043
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2044
    def test_source_conflict_1(self):
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2045
        self.repo._type_source_cache[999999] = ('Note', 'cards', 999999)
6796
e70ca9abfc51 [unittest2] update to unittest2 assertRaises api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6794
diff changeset
  2046
        with self.assertRaises(BadRQLQuery) as cm:
e70ca9abfc51 [unittest2] update to unittest2 assertRaises api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6794
diff changeset
  2047
            self._test('Any X WHERE X cw_source S, S name "system", X eid %(x)s',
e70ca9abfc51 [unittest2] update to unittest2 assertRaises api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6794
diff changeset
  2048
                       [], {'x': 999999})
e70ca9abfc51 [unittest2] update to unittest2 assertRaises api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6794
diff changeset
  2049
        self.assertEqual(str(cm.exception), 'source conflict for term %(x)s')
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2050
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2051
    def test_source_conflict_2(self):
6796
e70ca9abfc51 [unittest2] update to unittest2 assertRaises api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6794
diff changeset
  2052
        with self.assertRaises(BadRQLQuery) as cm:
e70ca9abfc51 [unittest2] update to unittest2 assertRaises api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6794
diff changeset
  2053
            self._test('Card X WHERE X cw_source S, S name "systeme"', [])
e70ca9abfc51 [unittest2] update to unittest2 assertRaises api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6794
diff changeset
  2054
        self.assertEqual(str(cm.exception), 'source conflict for term X')
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2055
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2056
    def test_source_conflict_3(self):
6649
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  2057
        self.skipTest('oops')
6633
7baea108d326 [ms] simplify cw_source handling : don't try evil optmization that may hurt in some cases
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6631
diff changeset
  2058
        self._test('CWSource X WHERE X cw_source S, S name "cards"',
7baea108d326 [ms] simplify cw_source handling : don't try evil optmization that may hurt in some cases
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6631
diff changeset
  2059
                   [('OneFetchStep',
7baea108d326 [ms] simplify cw_source handling : don't try evil optmization that may hurt in some cases
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6631
diff changeset
  2060
                     [(u'Any X WHERE X cw_source S, S name "cards", X is CWSource',
7baea108d326 [ms] simplify cw_source handling : don't try evil optmization that may hurt in some cases
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6631
diff changeset
  2061
                       [{'S': 'CWSource', 'X': 'CWSource'}])],
7baea108d326 [ms] simplify cw_source handling : don't try evil optmization that may hurt in some cases
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6631
diff changeset
  2062
                     None, None,
7baea108d326 [ms] simplify cw_source handling : don't try evil optmization that may hurt in some cases
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6631
diff changeset
  2063
                     [self.system],
7baea108d326 [ms] simplify cw_source handling : don't try evil optmization that may hurt in some cases
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6631
diff changeset
  2064
                     {}, [])])
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2065
6649
29f8e5c35392 [ms planning] fix/enhance cw_source consideration in ms planning
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6633
diff changeset
  2066
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2067
    def test_ambigous_cross_relation_source_specified(self):
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2068
        self.repo._type_source_cache[999999] = ('Note', 'cards', 999999)
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2069
        self.cards.support_relations['see_also'] = True
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2070
        self.cards.cross_relations.add('see_also')
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2071
        try:
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2072
            self._test('Any X,AA ORDERBY AA WHERE E eid %(x)s, E see_also X, X modification_date AA',
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2073
                       [('AggrStep',
7108
bcdf22734059 Abstract the support for ORDER BY and LIMIT/OFFSET SQL generation
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6957
diff changeset
  2074
                         'SELECT table0.C0, table0.C1 FROM table0\nORDER BY table0.C1',
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2075
                         None,
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2076
                         [('FetchStep',
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2077
                           [('Any X,AA WHERE 999999 see_also X, X modification_date AA, X is Note',
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2078
                             [{'AA': 'Datetime', 'X': 'Note'}])], [self.cards, self.system], {},
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2079
                           {'AA': 'table0.C1', 'X': 'table0.C0',
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2080
                            'X.modification_date': 'table0.C1'},
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2081
                           []),
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2082
                          ('FetchStep',
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2083
                           [('Any X,AA WHERE 999999 see_also X, X modification_date AA, X is Bookmark',
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2084
                             [{'AA': 'Datetime', 'X': 'Bookmark'}])],
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2085
                           [self.system], {},
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2086
                           {'AA': 'table0.C1', 'X': 'table0.C0',
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2087
                            'X.modification_date': 'table0.C1'},
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2088
                           [])])],
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2089
                         {'x': 999999})
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2090
        finally:
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2091
            del self.cards.support_relations['see_also']
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2092
            self.cards.cross_relations.remove('see_also')
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2093
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2094
    # non regression tests ####################################################
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  2095
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2096
    def test_nonregr1(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2097
        self._test('Any X, Y WHERE X copain Y, X login "syt", Y login "cochon"',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2098
                   [('FetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2099
                     [('Any X WHERE X login "syt", X is CWUser', [{'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2100
                     [self.ldap, self.system], None, {'X': 'table0.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2101
                    ('FetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2102
                     [('Any Y WHERE Y login "cochon", Y is CWUser', [{'Y': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2103
                     [self.ldap, self.system], None, {'Y': 'table1.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2104
                    ('OneFetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2105
                     [('Any X,Y WHERE X copain Y, X is CWUser, Y is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2106
                       [{'X': 'CWUser', 'Y': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2107
                     None, None, [self.system], {'X': 'table0.C0', 'Y': 'table1.C0'}, [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2108
                    ])
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  2109
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2110
    def test_nonregr2(self):
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
  2111
        iworkflowable = self.session.user.cw_adapt_to('IWorkflowable')
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
  2112
        iworkflowable.fire_transition('deactivate')
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
  2113
        treid = iworkflowable.latest_trinfo().eid
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2114
        self._test('Any X ORDERBY D DESC WHERE E eid %(x)s, E wf_info_for X, X modification_date D',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2115
                   [('FetchStep', [('Any X,D WHERE X modification_date D, X is Note',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2116
                                    [{'X': 'Note', 'D': 'Datetime'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  2117
                     [self.cards, self.system], None, {'X': 'table0.C0', 'X.modification_date': 'table0.C1', 'D': 'table0.C1'}, []),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2118
                    ('FetchStep', [('Any X,D WHERE X modification_date D, X is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2119
                                    [{'X': 'CWUser', 'D': 'Datetime'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2120
                     [self.ldap, self.system], None, {'X': 'table1.C0', 'X.modification_date': 'table1.C1', 'D': 'table1.C1'}, []),
7108
bcdf22734059 Abstract the support for ORDER BY and LIMIT/OFFSET SQL generation
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6957
diff changeset
  2121
                    ('AggrStep', 'SELECT table2.C0 FROM table2\nORDER BY table2.C1 DESC', None, [
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2122
                        ('FetchStep', [('Any X,D WHERE E eid %s, E wf_info_for X, X modification_date D, E is TrInfo, X is Affaire'%treid,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2123
                                        [{'X': 'Affaire', 'E': 'TrInfo', 'D': 'Datetime'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2124
                         [self.system],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2125
                         {},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2126
                         {'X': 'table2.C0', 'X.modification_date': 'table2.C1', 'D': 'table2.C1', 'E.wf_info_for': 'table2.C0'}, []),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2127
                        ('FetchStep', [('Any X,D WHERE E eid %s, E wf_info_for X, X modification_date D, E is TrInfo, X is CWUser'%treid,
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2128
                                        [{'X': 'CWUser', 'E': 'TrInfo', 'D': 'Datetime'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2129
                         [self.system],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2130
                         {'X': 'table1.C0', 'X.modification_date': 'table1.C1', 'D': 'table1.C1'},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2131
                         {'X': 'table2.C0', 'X.modification_date': 'table2.C1', 'D': 'table2.C1', 'E.wf_info_for': 'table2.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2132
                        ('FetchStep', [('Any X,D WHERE E eid %s, E wf_info_for X, X modification_date D, E is TrInfo, X is Note'%treid,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2133
                                        [{'X': 'Note', 'E': 'TrInfo', 'D': 'Datetime'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2134
                         [self.system],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2135
                         {'X': 'table0.C0', 'X.modification_date': 'table0.C1', 'D': 'table0.C1'},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2136
                         {'X': 'table2.C0', 'X.modification_date': 'table2.C1', 'D': 'table2.C1', 'E.wf_info_for': 'table2.C0'}, []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2137
                        ]),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2138
                    ],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2139
                   {'x': treid})
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  2140
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2141
    def test_nonregr3(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2142
        # original jpl query:
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2143
        # Any X, NOW - CD, P WHERE P is Project, U interested_in P, U is CWUser, U login "sthenault", X concerns P, X creation_date CD ORDERBY CD DESC LIMIT 5
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2144
        self._test('Any X, NOW - CD, P ORDERBY CD DESC LIMIT 5 WHERE P bookmarked_by U, U login "admin", P is X, X creation_date CD',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2145
                   [('FetchStep', [('Any U WHERE U login "admin", U is CWUser', [{'U': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2146
                     [self.ldap, self.system], None, {'U': 'table0.C0'}, []),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2147
                    ('OneFetchStep', [('Any X,(NOW - CD),P ORDERBY CD DESC LIMIT 5 WHERE P bookmarked_by U, P is X, X creation_date CD, P is Bookmark, U is CWUser, X is CWEType',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2148
                                       [{'P': 'Bookmark', 'U': 'CWUser', 'X': 'CWEType', 'CD': 'Datetime'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2149
                     5, None,  [self.system], {'U': 'table0.C0'}, [])]
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2150
                   )
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  2151
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2152
    def test_nonregr4(self):
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2153
        ueid = self.session.user.eid
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2154
        self._test('Any U ORDERBY D DESC WHERE WF wf_info_for X, WF creation_date D, WF from_state FS, '
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2155
                   'WF owned_by U?, X eid %(x)s',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2156
                   [#('FetchStep', [('Any U WHERE U is CWUser', [{'U': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2157
                    # [self.ldap, self.system], None, {'U': 'table0.C0'}, []),
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2158
                    ('OneFetchStep', [('Any U ORDERBY D DESC WHERE WF wf_info_for %s, WF creation_date D, WF from_state FS, WF owned_by U?' % ueid,
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2159
                                       [{'WF': 'TrInfo', 'FS': 'State', 'U': 'CWUser', 'D': 'Datetime'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2160
                     None, None,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2161
                     [self.system], {}, [])],
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2162
                   {'x': ueid})
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2163
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2164
    def test_nonregr5(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2165
        # original jpl query:
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  2166
        # DISTINCT Version V WHERE MB done_in MV, MV eid %(x)s,
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2167
        # MB depends_on B, B done_in V, V version_of P, NOT P eid %(p)s'
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2168
        cardeid = self.execute('INSERT Card X: X title "hop"')[0][0]
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2169
        noteeid = self.execute('INSERT Note X')[0][0]
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2170
        self._test('DISTINCT Card V WHERE MB documented_by MV, MV eid %(x)s, '
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2171
                   'MB depends_on B, B documented_by V, V multisource_rel P, NOT P eid %(p)s',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2172
                   [('FetchStep', [('Any V WHERE V multisource_rel P, NOT P eid %s, P is Note, V is Card'%noteeid,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2173
                                    [{'P': 'Note', 'V': 'Card'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  2174
                     [self.cards, self.system], None, {'V': 'table0.C0'}, []),
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2175
                    ('OneFetchStep', [('DISTINCT Any V WHERE MB documented_by %s, MB depends_on B, B documented_by V, B is Affaire, MB is Affaire, V is Card'%cardeid,
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2176
                                       [{'B': 'Affaire', 'MB': 'Affaire', 'V': 'Card'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2177
                     None, None, [self.system], {'V': 'table0.C0'}, [])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2178
                   {'x': cardeid, 'p': noteeid})
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2179
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2180
    def test_nonregr6(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2181
        self._test('Any X WHERE X concerne Y',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2182
                   [('OneFetchStep', [('Any X WHERE X concerne Y',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2183
                                       [{'Y': 'Division', 'X': 'Affaire'},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2184
                                        {'Y': 'Note', 'X': 'Affaire'},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2185
                                        {'Y': 'Societe', 'X': 'Affaire'},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2186
                                        {'Y': 'SubDivision', 'X': 'Affaire'},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2187
                                        {'Y': 'Affaire', 'X': 'Personne'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2188
                     None,  None, [self.system], {}, [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2189
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2190
        self._test('Any X WHERE X concerne Y, Y is Note',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2191
                   [('FetchStep', [('Any Y WHERE Y is Note', [{'Y': 'Note'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  2192
                      [self.cards, self.system], None, {'Y': 'table0.C0'}, []),
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2193
                    ('OneFetchStep', [('Any X WHERE X concerne Y, X is Affaire, Y is Note',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2194
                                       [{'X': 'Affaire', 'Y': 'Note'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2195
                     None, None, [self.system], {'Y': 'table0.C0'}, [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2196
                    ])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2197
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2198
    def test_nonregr7(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2199
        repo._type_source_cache[999999] = ('Note', 'cards', 999999)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2200
        self._test('Any S,SUM(DUR),SUM(I),(SUM(I) - SUM(DUR)),MIN(DI),MAX(DI) GROUPBY S ORDERBY S WHERE A is Affaire, A duration DUR, A invoiced I, A modification_date DI, A in_state S, S name SN, (EXISTS(A concerne WP, W multisource_rel WP)) OR (EXISTS(A concerne W)), W eid %(n)s',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2201
                   [('FetchStep', [('Any WP WHERE 999999 multisource_rel WP, WP is Note', [{'WP': 'Note'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  2202
                     [self.cards], None, {'WP': u'table0.C0'}, []),
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2203
                    ('OneFetchStep', [('Any S,SUM(DUR),SUM(I),(SUM(I) - SUM(DUR)),MIN(DI),MAX(DI) GROUPBY S ORDERBY S WHERE A duration DUR, A invoiced I, A modification_date DI, A in_state S, S name SN, (EXISTS(A concerne WP, WP is Note)) OR (EXISTS(A concerne 999999)), A is Affaire, S is State',
6081
ede33e6400ab [forms] test abs() rql function
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6057
diff changeset
  2204
                                       [{'A': 'Affaire', 'DI': 'Datetime', 'DUR': 'Int', 'I': 'Float', 'S': 'State', 'SN': 'String', 'WP': 'Note'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2205
                     None, None, [self.system], {'WP': u'table0.C0'}, [])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2206
                   {'n': 999999})
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2207
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2208
    def test_nonregr8(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2209
        repo._type_source_cache[999999] = ('Note', 'cards', 999999)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2210
        self._test('Any X,Z WHERE X eid %(x)s, X multisource_rel Y, Z concerne X',
6131
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  2211
                   [('FetchStep', [('Any 999999 WHERE 999999 multisource_rel Y, Y is Note',
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  2212
                                    [{'Y': 'Note'}])],
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  2213
                     [self.cards],
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  2214
                     None, {u'%(x)s': 'table0.C0'},
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  2215
                     []),
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2216
                    ('OneFetchStep', [('Any 999999,Z WHERE Z concerne 999999, Z is Affaire',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2217
                                       [{'Z': 'Affaire'}])],
6131
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  2218
                     None, None, [self.system],
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  2219
                     {u'%(x)s': 'table0.C0'}, []),
087c5a168010 [ms] more planning bug fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6129
diff changeset
  2220
                    ],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2221
                   {'x': 999999})
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  2222
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2223
    def test_nonregr9(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2224
        repo._type_source_cache[999999] = ('Note', 'cards', 999999)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2225
        repo._type_source_cache[999998] = ('Note', 'cards', 999998)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2226
        self._test('SET X migrated_from Y WHERE X eid %(x)s, Y multisource_rel Z, Z eid %(z)s, Y migrated_from Z',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2227
                   [('FetchStep', [('Any Y WHERE Y multisource_rel 999998, Y is Note', [{'Y': 'Note'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  2228
                     [self.cards], None, {'Y': u'table0.C0'}, []),
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2229
                    ('UpdateStep',
4764
ec9c20c6b9f7 [repo] improve planning of insert/update queries: do not select affected constants so the don't go and back to/from the source.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4685
diff changeset
  2230
                     [('OneFetchStep', [('DISTINCT Any Y WHERE Y migrated_from 999998, Y is Note',
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2231
                                         [{'Y': 'Note'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2232
                       None, None, [self.system],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2233
                       {'Y': u'table0.C0'}, [])])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2234
                   {'x': 999999, 'z': 999998})
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2235
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2236
    def test_nonregr10(self):
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  2237
        repo._type_source_cache[999999] = ('CWUser', 'ldap', 999999)
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2238
        self._test('Any X,AA,AB ORDERBY AA WHERE E eid %(x)s, E owned_by X, X login AA, X modification_date AB',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2239
                   [('FetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2240
                     [('Any X,AA,AB WHERE X login AA, X modification_date AB, X is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2241
                       [{'AA': 'String', 'AB': 'Datetime', 'X': 'CWUser'}])],
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2242
                     [self.ldap, self.system], None, {'AA': 'table0.C1', 'AB': 'table0.C2',
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2243
                                                      'X': 'table0.C0', 'X.login': 'table0.C1', 'X.modification_date': 'table0.C2'},
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2244
                     []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2245
                    ('OneFetchStep',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2246
                     [('Any X,AA,AB ORDERBY AA WHERE 999999 owned_by X, X login AA, X modification_date AB, X is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2247
                       [{'AA': 'String', 'AB': 'Datetime', 'X': 'CWUser'}])],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2248
                     None, None, [self.system], {'AA': 'table0.C1', 'AB': 'table0.C2',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2249
                                                 'X': 'table0.C0', 'X.login': 'table0.C1', 'X.modification_date': 'table0.C2'},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2250
                     [])
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2251
                    ],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2252
                   {'x': 999999})
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  2253
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2254
    def test_nonregr11(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2255
        repo._type_source_cache[999999] = ('Bookmark', 'system', 999999)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2256
        self._test('SET X bookmarked_by Y WHERE X eid %(x)s, Y login "hop"',
4764
ec9c20c6b9f7 [repo] improve planning of insert/update queries: do not select affected constants so the don't go and back to/from the source.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4685
diff changeset
  2257
                   [('UpdateStep',
ec9c20c6b9f7 [repo] improve planning of insert/update queries: do not select affected constants so the don't go and back to/from the source.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4685
diff changeset
  2258
                     [('OneFetchStep', [('DISTINCT Any Y WHERE Y login "hop", Y is CWUser', [{'Y': 'CWUser'}])],
ec9c20c6b9f7 [repo] improve planning of insert/update queries: do not select affected constants so the don't go and back to/from the source.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4685
diff changeset
  2259
                       None, None, [self.ldap, self.system], {}, [])]
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2260
                     )],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2261
                   {'x': 999999})
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  2262
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2263
    def test_nonregr12(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2264
        repo._type_source_cache[999999] = ('Note', 'cards', 999999)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2265
        self._test('Any X ORDERBY Z DESC WHERE X modification_date Z, E eid %(x)s, E see_also X',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2266
                   [('FetchStep', [('Any X,Z WHERE X modification_date Z, X is Note',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2267
                                    [{'X': 'Note', 'Z': 'Datetime'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  2268
                     [self.cards, self.system], None, {'X': 'table0.C0', 'X.modification_date': 'table0.C1', 'Z': 'table0.C1'},
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2269
                     []),
7108
bcdf22734059 Abstract the support for ORDER BY and LIMIT/OFFSET SQL generation
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6957
diff changeset
  2270
                    ('AggrStep', 'SELECT table1.C0 FROM table1\nORDER BY table1.C1 DESC', None,
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2271
                     [('FetchStep', [('Any X,Z WHERE X modification_date Z, 999999 see_also X, X is Bookmark',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2272
                                      [{'X': 'Bookmark', 'Z': 'Datetime'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2273
                       [self.system], {},   {'X': 'table1.C0', 'X.modification_date': 'table1.C1',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2274
                                             'Z': 'table1.C1'},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2275
                       []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2276
                      ('FetchStep', [('Any X,Z WHERE X modification_date Z, 999999 see_also X, X is Note',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2277
                                      [{'X': 'Note', 'Z': 'Datetime'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2278
                       [self.system], {'X': 'table0.C0', 'X.modification_date': 'table0.C1',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2279
                                       'Z': 'table0.C1'},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2280
                       {'X': 'table1.C0', 'X.modification_date': 'table1.C1',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2281
                        'Z': 'table1.C1'},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2282
                       [])]
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2283
                      )],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2284
                   {'x': 999999})
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2285
1121
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2286
    def test_nonregr13_1(self):
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2287
        ueid = self.session.user.eid
1122
9f37de24251f fix rql2sq w/ outer join on subquery result
sylvain.thenault@logilab.fr
parents: 1121
diff changeset
  2288
        # identity wrapped into exists:
9f37de24251f fix rql2sq w/ outer join on subquery result
sylvain.thenault@logilab.fr
parents: 1121
diff changeset
  2289
        # should'nt propagate constraint that U is in the same source as ME
1120
1c24cde4bf72 fix ms planning w/ relation constraint propagation
sylvain.thenault@logilab.fr
parents: 393
diff changeset
  2290
        self._test('Any B,U,UL GROUPBY B,U,UL WHERE B created_by U?, B is File '
1c24cde4bf72 fix ms planning w/ relation constraint propagation
sylvain.thenault@logilab.fr
parents: 393
diff changeset
  2291
                   'WITH U,UL BEING (Any U,UL WHERE ME eid %(x)s, (EXISTS(U identity ME) '
1c24cde4bf72 fix ms planning w/ relation constraint propagation
sylvain.thenault@logilab.fr
parents: 393
diff changeset
  2292
                   'OR (EXISTS(U in_group G, G name IN("managers", "staff")))) '
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2293
                   'OR (EXISTS(U in_group H, ME in_group H, NOT H name "users")), U login UL, U is CWUser)',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2294
                   [('FetchStep', [('Any U,UL WHERE U login UL, U is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2295
                                    [{'U': 'CWUser', 'UL': 'String'}])],
1120
1c24cde4bf72 fix ms planning w/ relation constraint propagation
sylvain.thenault@logilab.fr
parents: 393
diff changeset
  2296
                     [self.ldap, self.system], None,
1c24cde4bf72 fix ms planning w/ relation constraint propagation
sylvain.thenault@logilab.fr
parents: 393
diff changeset
  2297
                     {'U': 'table0.C0', 'U.login': 'table0.C1', 'UL': 'table0.C1'},
1c24cde4bf72 fix ms planning w/ relation constraint propagation
sylvain.thenault@logilab.fr
parents: 393
diff changeset
  2298
                     []),
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2299
                    ('FetchStep', [('Any U,UL WHERE ((EXISTS(U identity %s)) OR (EXISTS(U in_group G, G name IN("managers", "staff"), G is CWGroup))) OR (EXISTS(U in_group H, %s in_group H, NOT H name "users", H is CWGroup)), U login UL, U is CWUser' % (ueid, ueid),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2300
                                    [{'G': 'CWGroup', 'H': 'CWGroup', 'U': 'CWUser', 'UL': 'String'}])],
1120
1c24cde4bf72 fix ms planning w/ relation constraint propagation
sylvain.thenault@logilab.fr
parents: 393
diff changeset
  2301
                     [self.system],
1c24cde4bf72 fix ms planning w/ relation constraint propagation
sylvain.thenault@logilab.fr
parents: 393
diff changeset
  2302
                     {'U': 'table0.C0', 'U.login': 'table0.C1', 'UL': 'table0.C1'},
1c24cde4bf72 fix ms planning w/ relation constraint propagation
sylvain.thenault@logilab.fr
parents: 393
diff changeset
  2303
                     {'U': 'table1.C0', 'U.login': 'table1.C1', 'UL': 'table1.C1'},
1c24cde4bf72 fix ms planning w/ relation constraint propagation
sylvain.thenault@logilab.fr
parents: 393
diff changeset
  2304
                     []),
1c24cde4bf72 fix ms planning w/ relation constraint propagation
sylvain.thenault@logilab.fr
parents: 393
diff changeset
  2305
                    ('OneFetchStep', [('Any B,U,UL GROUPBY B,U,UL WHERE B created_by U?, B is File',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2306
                                       [{'B': 'File', 'U': 'CWUser', 'UL': 'String'}])],
1120
1c24cde4bf72 fix ms planning w/ relation constraint propagation
sylvain.thenault@logilab.fr
parents: 393
diff changeset
  2307
                     None, None, [self.system],
1c24cde4bf72 fix ms planning w/ relation constraint propagation
sylvain.thenault@logilab.fr
parents: 393
diff changeset
  2308
                     {'U': 'table1.C0', 'UL': 'table1.C1'},
1c24cde4bf72 fix ms planning w/ relation constraint propagation
sylvain.thenault@logilab.fr
parents: 393
diff changeset
  2309
                     [])],
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2310
                   {'x': ueid})
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  2311
1121
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2312
    def test_nonregr13_2(self):
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2313
        # identity *not* wrapped into exists.
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2314
        #
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2315
        # XXX this test fail since in this case, in "U identity 5" U and 5 are
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2316
        # from the same scope so constraints are applied (telling the U should
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2317
        # come from the same source as user with eid 5).
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2318
        #
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2319
        # IMO this is normal, unless we introduce a special case for the
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2320
        # identity relation. BUT I think it's better to leave it as is and to
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2321
        # explain constraint propagation rules, and so why this should be
1231
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2322
        # wrapped in exists() if used in multi-source
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6209
diff changeset
  2323
        self.skipTest('take a look at me if you wish')
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2324
        ueid = self.session.user.eid
1121
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2325
        self._test('Any B,U,UL GROUPBY B,U,UL WHERE B created_by U?, B is File '
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2326
                   'WITH U,UL BEING (Any U,UL WHERE ME eid %(x)s, (U identity ME '
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2327
                   'OR (EXISTS(U in_group G, G name IN("managers", "staff")))) '
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2328
                   'OR (EXISTS(U in_group H, ME in_group H, NOT H name "users")), U login UL, U is CWUser)',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2329
                   [('FetchStep', [('Any U,UL WHERE U login UL, U is CWUser',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2330
                                    [{'U': 'CWUser', 'UL': 'String'}])],
1121
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2331
                     [self.ldap, self.system], None,
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2332
                     {'U': 'table0.C0', 'U.login': 'table0.C1', 'UL': 'table0.C1'},
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2333
                     []),
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2334
                    ('FetchStep', [('Any U,UL WHERE ((U identity %s) OR (EXISTS(U in_group G, G name IN("managers", "staff"), G is CWGroup))) OR (EXISTS(U in_group H, %s in_group H, NOT H name "users", H is CWGroup)), U login UL, U is CWUser' % (ueid, ueid),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2335
                                    [{'G': 'CWGroup', 'H': 'CWGroup', 'U': 'CWUser', 'UL': 'String'}])],
1121
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2336
                     [self.system],
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2337
                     {'U': 'table0.C0', 'U.login': 'table0.C1', 'UL': 'table0.C1'},
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2338
                     {'U': 'table1.C0', 'U.login': 'table1.C1', 'UL': 'table1.C1'},
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2339
                     []),
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2340
                    ('OneFetchStep', [('Any B,U,UL GROUPBY B,U,UL WHERE B created_by U?, B is File',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1231
diff changeset
  2341
                                       [{'B': 'File', 'U': 'CWUser', 'UL': 'String'}])],
1121
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2342
                     None, None, [self.system],
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2343
                     {'U': 'table1.C0', 'UL': 'table1.C1'},
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2344
                     [])],
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2345
                   {'x': self.session.user.eid})
43fa67acd9d0 one more test, but skipped in it may be a won't fix
sylvain.thenault@logilab.fr
parents: 1120
diff changeset
  2346
2170
6adbc965c51b fix jpl/ticket/34862: msplanner bug with query generated to check if a user from ldap is owned_by himself
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2165
diff changeset
  2347
    def test_nonregr14_1(self):
6adbc965c51b fix jpl/ticket/34862: msplanner bug with query generated to check if a user from ldap is owned_by himself
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2165
diff changeset
  2348
        repo._type_source_cache[999999] = ('CWUser', 'ldap', 999999)
6adbc965c51b fix jpl/ticket/34862: msplanner bug with query generated to check if a user from ldap is owned_by himself
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2165
diff changeset
  2349
        self._test('Any X WHERE X eid %(x)s, X owned_by U, U eid %(u)s',
6adbc965c51b fix jpl/ticket/34862: msplanner bug with query generated to check if a user from ldap is owned_by himself
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2165
diff changeset
  2350
                   [('OneFetchStep', [('Any 999999 WHERE 999999 owned_by 999999', [{}])],
6adbc965c51b fix jpl/ticket/34862: msplanner bug with query generated to check if a user from ldap is owned_by himself
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2165
diff changeset
  2351
                     None, None, [self.system], {}, [])],
6adbc965c51b fix jpl/ticket/34862: msplanner bug with query generated to check if a user from ldap is owned_by himself
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2165
diff changeset
  2352
                   {'x': 999999, 'u': 999999})
6adbc965c51b fix jpl/ticket/34862: msplanner bug with query generated to check if a user from ldap is owned_by himself
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2165
diff changeset
  2353
6adbc965c51b fix jpl/ticket/34862: msplanner bug with query generated to check if a user from ldap is owned_by himself
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2165
diff changeset
  2354
    def test_nonregr14_2(self):
6adbc965c51b fix jpl/ticket/34862: msplanner bug with query generated to check if a user from ldap is owned_by himself
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2165
diff changeset
  2355
        repo._type_source_cache[999999] = ('CWUser', 'ldap', 999999)
6adbc965c51b fix jpl/ticket/34862: msplanner bug with query generated to check if a user from ldap is owned_by himself
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2165
diff changeset
  2356
        repo._type_source_cache[999998] = ('Note', 'system', 999998)
6adbc965c51b fix jpl/ticket/34862: msplanner bug with query generated to check if a user from ldap is owned_by himself
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2165
diff changeset
  2357
        self._test('Any X WHERE X eid %(x)s, X owned_by U, U eid %(u)s',
6adbc965c51b fix jpl/ticket/34862: msplanner bug with query generated to check if a user from ldap is owned_by himself
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2165
diff changeset
  2358
                   [('OneFetchStep', [('Any 999998 WHERE 999998 owned_by 999999', [{}])],
6adbc965c51b fix jpl/ticket/34862: msplanner bug with query generated to check if a user from ldap is owned_by himself
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2165
diff changeset
  2359
                     None, None, [self.system], {}, [])],
6adbc965c51b fix jpl/ticket/34862: msplanner bug with query generated to check if a user from ldap is owned_by himself
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2165
diff changeset
  2360
                   {'x': 999998, 'u': 999999})
6adbc965c51b fix jpl/ticket/34862: msplanner bug with query generated to check if a user from ldap is owned_by himself
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2165
diff changeset
  2361
2180
bf2e81fb52be one more test (see mrambourg error report. We should ensure the previous fix fix his case as well which include security injection of the rql)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2170
diff changeset
  2362
    def test_nonregr14_3(self):
bf2e81fb52be one more test (see mrambourg error report. We should ensure the previous fix fix his case as well which include security injection of the rql)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2170
diff changeset
  2363
        repo._type_source_cache[999999] = ('CWUser', 'system', 999999)
bf2e81fb52be one more test (see mrambourg error report. We should ensure the previous fix fix his case as well which include security injection of the rql)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2170
diff changeset
  2364
        repo._type_source_cache[999998] = ('CWUser', 'ldap', 999998)
bf2e81fb52be one more test (see mrambourg error report. We should ensure the previous fix fix his case as well which include security injection of the rql)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2170
diff changeset
  2365
        self._test('Any X WHERE X eid %(x)s, X owned_by U, U eid %(u)s',
bf2e81fb52be one more test (see mrambourg error report. We should ensure the previous fix fix his case as well which include security injection of the rql)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2170
diff changeset
  2366
                   [('OneFetchStep', [('Any 999998 WHERE 999998 owned_by 999999', [{}])],
bf2e81fb52be one more test (see mrambourg error report. We should ensure the previous fix fix his case as well which include security injection of the rql)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2170
diff changeset
  2367
                     None, None, [self.system], {}, [])],
bf2e81fb52be one more test (see mrambourg error report. We should ensure the previous fix fix his case as well which include security injection of the rql)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2170
diff changeset
  2368
                   {'x': 999998, 'u': 999999})
bf2e81fb52be one more test (see mrambourg error report. We should ensure the previous fix fix his case as well which include security injection of the rql)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2170
diff changeset
  2369
3239
1ceac4cd4fb7 [ms] fix planning w/ query using identity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
  2370
    def test_nonregr_identity_no_source_access_1(self):
2688
afa99d53401c [multi-source] test and fix msplanner regression
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2180
diff changeset
  2371
        repo._type_source_cache[999999] = ('CWUser', 'ldap', 999998)
afa99d53401c [multi-source] test and fix msplanner regression
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2180
diff changeset
  2372
        self._test('Any S WHERE S identity U, S eid %(s)s, U eid %(u)s',
afa99d53401c [multi-source] test and fix msplanner regression
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2180
diff changeset
  2373
                   [('OneFetchStep', [('Any 999999 WHERE 999999 identity 999999', [{}])],
afa99d53401c [multi-source] test and fix msplanner regression
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2180
diff changeset
  2374
                     None, None, [self.system], {}, [])],
afa99d53401c [multi-source] test and fix msplanner regression
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2180
diff changeset
  2375
                   {'s': 999999, 'u': 999999})
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2376
3239
1ceac4cd4fb7 [ms] fix planning w/ query using identity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
  2377
    def test_nonregr_identity_no_source_access_2(self):
1ceac4cd4fb7 [ms] fix planning w/ query using identity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
  2378
        repo._type_source_cache[999999] = ('EmailAddress', 'system', 999999)
1ceac4cd4fb7 [ms] fix planning w/ query using identity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
  2379
        repo._type_source_cache[999998] = ('CWUser', 'ldap', 999998)
1ceac4cd4fb7 [ms] fix planning w/ query using identity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
  2380
        self._test('Any X WHERE O use_email X, ((EXISTS(O identity U)) OR (EXISTS(O in_group G, G name IN("managers", "staff")))) OR (EXISTS(O in_group G2, U in_group G2, NOT G2 name "users")), X eid %(x)s, U eid %(u)s',
1ceac4cd4fb7 [ms] fix planning w/ query using identity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
  2381
                   [('OneFetchStep', [('Any 999999 WHERE O use_email 999999, ((EXISTS(O identity 999998)) OR (EXISTS(O in_group G, G name IN("managers", "staff")))) OR (EXISTS(O in_group G2, 999998 in_group G2, NOT G2 name "users"))',
1ceac4cd4fb7 [ms] fix planning w/ query using identity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
  2382
                                       [{'G': 'CWGroup', 'G2': 'CWGroup', 'O': 'CWUser'}])],
1ceac4cd4fb7 [ms] fix planning w/ query using identity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
  2383
                     None, None, [self.system], {}, [])],
1ceac4cd4fb7 [ms] fix planning w/ query using identity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
  2384
                   {'x': 999999, 'u': 999998})
1ceac4cd4fb7 [ms] fix planning w/ query using identity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
  2385
1ceac4cd4fb7 [ms] fix planning w/ query using identity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
  2386
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2387
class MSPlannerTwoSameExternalSourcesTC(BasePlannerTC):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2388
    """test planner related feature on a 3-sources repository:
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  2389
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2390
    * 2 rql sources supporting Card
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2391
    """
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  2392
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2393
    def setUp(self):
6631
26c303c3f1aa [test] make test independant from the working directory
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6427
diff changeset
  2394
        self.__class__.repo = repo
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  2395
        self.setup()
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  2396
        self.add_source(FakeCardSource, 'cards')
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  2397
        self.add_source(FakeCardSource, 'cards2')
3240
8604a15995d1 refactor so that rql rewriter may be used outside the server. Enhance it to be usable for RRQLExpression as well
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3239
diff changeset
  2398
        self.planner = MSPlanner(self.o.schema, self.repo.vreg.rqlhelper)
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2399
        assert repo.sources_by_uri['cards2'].support_relation('multisource_crossed_rel')
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2400
        assert 'multisource_crossed_rel' in repo.sources_by_uri['cards2'].cross_relations
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2401
        assert repo.sources_by_uri['cards'].support_relation('multisource_crossed_rel')
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2402
        assert 'multisource_crossed_rel' in repo.sources_by_uri['cards'].cross_relations
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2403
    _test = test_plan
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  2404
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2405
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2406
    def test_linked_external_entities(self):
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2407
        repo._type_source_cache[999999] = ('Tag', 'system', 999999)
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2408
        self._test('Any X,XT WHERE X is Card, X title XT, T tags X, T eid %(t)s',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2409
                   [('FetchStep',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2410
                     [('Any X,XT WHERE X title XT, X is Card', [{'X': 'Card', 'XT': 'String'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  2411
                     [self.cards, self.cards2, self.system],
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2412
                     None, {'X': 'table0.C0', 'X.title': 'table0.C1', 'XT': 'table0.C1'},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2413
                     []),
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2414
                    ('OneFetchStep',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2415
                     [('Any X,XT WHERE X title XT, 999999 tags X, X is Card',
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2416
                       [{'X': 'Card', 'XT': 'String'}])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2417
                     None, None, [self.system],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2418
                     {'X': 'table0.C0', 'X.title': 'table0.C1', 'XT': 'table0.C1'},
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2419
                     [])],
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2420
                   {'t': 999999})
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2421
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2422
    def test_version_depends_on(self):
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2423
        self.repo._type_source_cache[999999] = ('Note', 'cards', 999999)
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2424
        self._test('Any X,AD,AE WHERE E eid %(x)s, E migrated_from X, X in_state AD, AD name AE',
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2425
                   [('FetchStep', [('Any X,AD,AE WHERE X in_state AD, AD name AE, AD is State, X is Note',
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2426
                                    [{'AD': 'State', 'AE': 'String', 'X': 'Note'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  2427
                     [self.cards, self.cards2, self.system],
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2428
                     None, {'AD': 'table0.C1', 'AD.name': 'table0.C2',
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2429
                            'AE': 'table0.C2', 'X': 'table0.C0'},
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2430
                     []),
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2431
                    ('OneFetchStep', [('Any X,AD,AE WHERE 999999 migrated_from X, AD name AE, AD is State, X is Note',
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2432
                                       [{'AD': 'State', 'AE': 'String', 'X': 'Note'}])],
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2433
                     None, None, [self.system],
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2434
                     {'AD': 'table0.C1', 'AD.name': 'table0.C2', 'AE': 'table0.C2', 'X': 'table0.C0'},
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2435
                     [])],
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2436
                   {'x': 999999})
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2437
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2438
    def test_version_crossed_depends_on_1(self):
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2439
        self.repo._type_source_cache[999999] = ('Note', 'cards', 999999)
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2440
        self._test('Any X,AD,AE WHERE E eid %(x)s, E multisource_crossed_rel X, X in_state AD, AD name AE',
1231
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2441
                   [('FetchStep', [('Any X,AD,AE WHERE X in_state AD, AD name AE, AD is State, X is Note',
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2442
                                    [{'AD': 'State', 'AE': 'String', 'X': 'Note'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  2443
                     [self.cards, self.cards2, self.system],
1231
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2444
                     None, {'AD': 'table0.C1', 'AD.name': 'table0.C2',
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2445
                            'AE': 'table0.C2', 'X': 'table0.C0'},
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2446
                     []),
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2447
                    ('UnionStep', None, None,
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2448
                     [('OneFetchStep', [('Any X,AD,AE WHERE 999999 multisource_crossed_rel X, AD name AE, AD is State, X is Note',
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2449
                                         [{'AD': 'State', 'AE': 'String', 'X': 'Note'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  2450
                       None, None, [self.cards], None,
1231
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2451
                       []),
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2452
                      ('OneFetchStep', [('Any X,AD,AE WHERE 999999 multisource_crossed_rel X, AD name AE, AD is State, X is Note',
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2453
                                         [{'AD': 'State', 'AE': 'String', 'X': 'Note'}])],
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2454
                       None, None, [self.system],
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2455
                       {'AD': 'table0.C1', 'AD.name': 'table0.C2',
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2456
                        'AE': 'table0.C2', 'X': 'table0.C0'},
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2457
                       [])]
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2458
                     )],
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2459
                   {'x': 999999})
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2460
1230
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
  2461
    def test_version_crossed_depends_on_2(self):
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2462
        self.repo._type_source_cache[999999] = ('Note', 'system', 999999)
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2463
        self._test('Any X,AD,AE WHERE E eid %(x)s, E multisource_crossed_rel X, X in_state AD, AD name AE',
1230
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
  2464
                   [('FetchStep', [('Any X,AD,AE WHERE X in_state AD, AD name AE, AD is State, X is Note',
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
  2465
                                    [{'AD': 'State', 'AE': 'String', 'X': 'Note'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  2466
                     [self.cards, self.cards2, self.system],
1230
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
  2467
                     None, {'AD': 'table0.C1', 'AD.name': 'table0.C2',
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
  2468
                            'AE': 'table0.C2', 'X': 'table0.C0'},
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
  2469
                     []),
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
  2470
                    ('OneFetchStep', [('Any X,AD,AE WHERE 999999 multisource_crossed_rel X, AD name AE, AD is State, X is Note',
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
  2471
                                       [{'AD': 'State', 'AE': 'String', 'X': 'Note'}])],
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
  2472
                     None, None, [self.system],
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
  2473
                     {'AD': 'table0.C1', 'AD.name': 'table0.C2', 'AE': 'table0.C2', 'X': 'table0.C0'},
232e16835fff fix constant handling in sourcesterms + minor cleanup
sylvain.thenault@logilab.fr
parents: 1228
diff changeset
  2474
                     [])],
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2475
                   {'x': 999999})
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2476
1231
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2477
    def test_version_crossed_depends_on_3(self):
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2478
        self._test('Any X,AD,AE WHERE E multisource_crossed_rel X, X in_state AD, AD name AE, E is Note',
1231
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2479
                   [('FetchStep', [('Any X,AD,AE WHERE X in_state AD, AD name AE, AD is State, X is Note',
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2480
                                    [{'AD': 'State', 'AE': 'String', 'X': 'Note'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  2481
                     [self.cards, self.cards2, self.system],
1231
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2482
                     None, {'AD': 'table0.C1', 'AD.name': 'table0.C2',
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2483
                            'AE': 'table0.C2', 'X': 'table0.C0'},
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2484
                     []),
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2485
                    ('FetchStep', [('Any E WHERE E is Note', [{'E': 'Note'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  2486
                     [self.cards, self.cards2, self.system],
1231
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2487
                     None, {'E': 'table1.C0'},
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2488
                     []),
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2489
                    ('UnionStep', None, None,
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2490
                     [('OneFetchStep', [('Any X,AD,AE WHERE E multisource_crossed_rel X, AD name AE, AD is State, E is Note, X is Note',
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2491
                                         [{'AD': 'State', 'AE': 'String', 'E': 'Note', 'X': 'Note'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  2492
                       None, None, [self.cards, self.cards2], None,
1231
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2493
                       []),
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2494
                      ('OneFetchStep', [('Any X,AD,AE WHERE E multisource_crossed_rel X, AD name AE, AD is State, E is Note, X is Note',
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2495
                                         [{'AD': 'State', 'AE': 'String', 'E': 'Note', 'X': 'Note'}])],
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2496
                       None, None, [self.system],
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2497
                       {'AD': 'table0.C1',
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2498
                        'AD.name': 'table0.C2',
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2499
                        'AE': 'table0.C2',
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2500
                        'E': 'table1.C0',
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2501
                        'X': 'table0.C0'},
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2502
                       [])]
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2503
                     )]
1457a545af03 more fix of cross relation handling
sylvain.thenault@logilab.fr
parents: 1230
diff changeset
  2504
                   )
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2505
6794
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2506
    def test_version_crossed_depends_on_4(self):
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2507
        self._test('Any X,AD,AE WHERE EXISTS(E multisource_crossed_rel X), X in_state AD, AD name AE, E is Note',
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2508
                   [('FetchStep',
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2509
                     [('Any X,AD,AE WHERE X in_state AD, AD name AE, AD is State, X is Note',
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2510
                       [{'X': 'Note', 'AD': 'State', 'AE': 'String'}])],
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2511
                     [self.cards, self.cards2, self.system], None,
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2512
                     {'X': 'table0.C0',
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2513
                      'AD': 'table0.C1',
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2514
                      'AD.name': 'table0.C2',
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2515
                      'AE': 'table0.C2'},
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2516
                     []),
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2517
                    ('FetchStep',
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2518
                     [('Any A WHERE E multisource_crossed_rel A, A is Note, E is Note',
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2519
                       [{'A': 'Note', 'E': 'Note'}])],
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2520
                     [self.cards, self.cards2, self.system], None,
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2521
                     {'A': 'table1.C0'},
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2522
                     []),
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2523
                    ('OneFetchStep',
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2524
                     [('Any X,AD,AE WHERE EXISTS(X identity A), AD name AE, A is Note, AD is State, X is Note',
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2525
                       [{'A': 'Note', 'AD': 'State', 'AE': 'String', 'X': 'Note'}])],
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2526
                     None, None,
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2527
                     [self.system],
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2528
                     {'A': 'table1.C0',
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2529
                      'AD': 'table0.C1',
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2530
                      'AD.name': 'table0.C2',
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2531
                      'AE': 'table0.C2',
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2532
                      'X': 'table0.C0'},
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2533
                     []
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2534
                     )]
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2535
                       )
140d42b41b31 [multi-sources] fix planning of crossed relation w/ some complex queries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
  2536
1786
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1785
diff changeset
  2537
    def test_nonregr_dont_cross_rel_source_filtering_1(self):
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1785
diff changeset
  2538
        self.repo._type_source_cache[999999] = ('Note', 'cards', 999999)
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1785
diff changeset
  2539
        self._test('Any S WHERE E eid %(x)s, E in_state S, NOT S name "moved"',
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1785
diff changeset
  2540
                   [('OneFetchStep', [('Any S WHERE 999999 in_state S, NOT S name "moved", S is State',
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1785
diff changeset
  2541
                                       [{'S': 'State'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  2542
                     None, None, [self.cards], {}, []
1786
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1785
diff changeset
  2543
                     )],
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1785
diff changeset
  2544
                   {'x': 999999})
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1785
diff changeset
  2545
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1785
diff changeset
  2546
    def test_nonregr_dont_cross_rel_source_filtering_2(self):
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  2547
        self.repo._type_source_cache[999999] = ('Note', 'cards', 999999)
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  2548
        self._test('Any X,AA,AB WHERE E eid %(x)s, E in_state X, X name AA, X modification_date AB',
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  2549
                   [('OneFetchStep', [('Any X,AA,AB WHERE 999999 in_state X, X name AA, X modification_date AB, X is State',
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  2550
                                       [{'AA': 'String', 'AB': 'Datetime', 'X': 'State'}])],
2074
9e268cb6202e enhance BasePlannerTC to ease subclasses definition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
  2551
                     None, None, [self.cards], {}, []
1785
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  2552
                     )],
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  2553
                   {'x': 999999})
01245e2a777d ms planning fix
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  2554
2165
dd40c375044e #344177: ms planning bug with "Any X WHERE X eid 123" and 123 coming from an external source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2114
diff changeset
  2555
    def test_nonregr_eid_query(self):
dd40c375044e #344177: ms planning bug with "Any X WHERE X eid 123" and 123 coming from an external source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2114
diff changeset
  2556
        self.repo._type_source_cache[999999] = ('Note', 'cards', 999999)
dd40c375044e #344177: ms planning bug with "Any X WHERE X eid 123" and 123 coming from an external source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2114
diff changeset
  2557
        self._test('Any X WHERE X eid 999999',
dd40c375044e #344177: ms planning bug with "Any X WHERE X eid 123" and 123 coming from an external source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2114
diff changeset
  2558
                   [('OneFetchStep', [('Any 999999', [{}])],
dd40c375044e #344177: ms planning bug with "Any X WHERE X eid 123" and 123 coming from an external source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2114
diff changeset
  2559
                     None, None, [self.system], {}, []
dd40c375044e #344177: ms planning bug with "Any X WHERE X eid 123" and 123 coming from an external source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2114
diff changeset
  2560
                     )],
dd40c375044e #344177: ms planning bug with "Any X WHERE X eid 123" and 123 coming from an external source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2114
diff changeset
  2561
                   {'x': 999999})
dd40c375044e #344177: ms planning bug with "Any X WHERE X eid 123" and 123 coming from an external source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2114
diff changeset
  2562
1228
91ae10ffb611 * refactor ms planner (renaming, reorganization)
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
  2563
6056
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2564
    def test_nonregr_not_is(self):
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2565
        self._test("Any X WHERE X owned_by U, U login 'anon', NOT X is Comment",
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2566
                   [('FetchStep', [('Any X WHERE X is IN(Card, Note, State)',
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2567
                                    [{'X': 'Note'}, {'X': 'State'}, {'X': 'Card'}])],
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2568
                     [self.cards, self.cards2, self.system],
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2569
                     None, {'X': 'table0.C0'}, []),
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2570
                    ('UnionStep', None, None,
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2571
                     [('OneFetchStep',
6944
0cf10429ad39 [sources] rewrite the way pyrorql mapping are stored in the database so it can be reused for other sources (eg datafeed+cwxml)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6943
diff changeset
  2572
                       [(u'Any X WHERE X owned_by U, U login "anon", U is CWUser, X is IN(Affaire, BaseTransition, Basket, Bookmark, CWAttribute, CWCache, CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, CWRType, CWRelation, CWSource, CWSourceHostConfig, CWSourceSchemaConfig, CWUniqueTogetherConstraint, CWUser, Division, Email, EmailAddress, EmailPart, EmailThread, ExternalUri, File, Folder, Personne, RQLExpression, Societe, SubDivision, SubWorkflowExitPoint, Tag, TrInfo, Transition, Workflow, WorkflowTransition)',
6056
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2573
                         [{'U': 'CWUser', 'X': 'Affaire'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2574
                          {'U': 'CWUser', 'X': 'BaseTransition'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2575
                          {'U': 'CWUser', 'X': 'Basket'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2576
                          {'U': 'CWUser', 'X': 'Bookmark'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2577
                          {'U': 'CWUser', 'X': 'CWAttribute'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2578
                          {'U': 'CWUser', 'X': 'CWCache'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2579
                          {'U': 'CWUser', 'X': 'CWConstraint'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2580
                          {'U': 'CWUser', 'X': 'CWConstraintType'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2581
                          {'U': 'CWUser', 'X': 'CWEType'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2582
                          {'U': 'CWUser', 'X': 'CWGroup'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2583
                          {'U': 'CWUser', 'X': 'CWPermission'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2584
                          {'U': 'CWUser', 'X': 'CWProperty'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2585
                          {'U': 'CWUser', 'X': 'CWRType'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2586
                          {'U': 'CWUser', 'X': 'CWRelation'},
6427
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2587
                          {'U': 'CWUser', 'X': 'CWSource'},
c8a5ac2d1eaa [schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6366
diff changeset
  2588
                          {'U': 'CWUser', 'X': 'CWSourceHostConfig'},
6944
0cf10429ad39 [sources] rewrite the way pyrorql mapping are stored in the database so it can be reused for other sources (eg datafeed+cwxml)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6943
diff changeset
  2589
                          {'U': 'CWUser', 'X': 'CWSourceSchemaConfig'},
6209
e3e5870807e9 fix tests
syt
parents: 6131
diff changeset
  2590
                          {'U': 'CWUser', 'X': 'CWUniqueTogetherConstraint'},
6056
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2591
                          {'U': 'CWUser', 'X': 'CWUser'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2592
                          {'U': 'CWUser', 'X': 'Division'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2593
                          {'U': 'CWUser', 'X': 'Email'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2594
                          {'U': 'CWUser', 'X': 'EmailAddress'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2595
                          {'U': 'CWUser', 'X': 'EmailPart'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2596
                          {'U': 'CWUser', 'X': 'EmailThread'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2597
                          {'U': 'CWUser', 'X': 'ExternalUri'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2598
                          {'U': 'CWUser', 'X': 'File'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2599
                          {'U': 'CWUser', 'X': 'Folder'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2600
                          {'U': 'CWUser', 'X': 'Personne'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2601
                          {'U': 'CWUser', 'X': 'RQLExpression'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2602
                          {'U': 'CWUser', 'X': 'Societe'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2603
                          {'U': 'CWUser', 'X': 'SubDivision'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2604
                          {'U': 'CWUser', 'X': 'SubWorkflowExitPoint'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2605
                          {'U': 'CWUser', 'X': 'Tag'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2606
                          {'U': 'CWUser', 'X': 'TrInfo'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2607
                          {'U': 'CWUser', 'X': 'Transition'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2608
                          {'U': 'CWUser', 'X': 'Workflow'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2609
                          {'U': 'CWUser', 'X': 'WorkflowTransition'}])],
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2610
                       None, None,
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2611
                       [self.system], {}, []),
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2612
                      ('OneFetchStep',
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2613
                       [(u'Any X WHERE X owned_by U, U login "anon", U is CWUser, X is IN(Card, Note, State)',
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2614
                         [{'U': 'CWUser', 'X': 'Note'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2615
                          {'U': 'CWUser', 'X': 'State'},
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2616
                          {'U': 'CWUser', 'X': 'Card'}])],
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2617
                       None, None,
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2618
                       [self.system], {'X': 'table0.C0'}, [])
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2619
                      ])
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2620
                    ])
37a37e5ba330 [ms] fix a ms plannification bug with NOT is
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
  2621
2075
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2622
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2623
class FakeVCSSource(AbstractSource):
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2624
    uri = 'ccc'
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2625
    support_entities = {'Card': True, 'Note': True}
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2626
    support_relations = {'multisource_inlined_rel': True,
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2627
                         'multisource_rel': True}
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2628
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2629
    def syntax_tree_search(self, *args, **kwargs):
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2630
        return []
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2631
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2632
class MSPlannerVCSSource(BasePlannerTC):
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2633
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2634
    def setUp(self):
6631
26c303c3f1aa [test] make test independant from the working directory
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6427
diff changeset
  2635
        self.__class__.repo = repo
2075
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2636
        self.setup()
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2637
        self.add_source(FakeVCSSource, 'vcs')
3240
8604a15995d1 refactor so that rql rewriter may be used outside the server. Enhance it to be usable for RRQLExpression as well
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3239
diff changeset
  2638
        self.planner = MSPlanner(self.o.schema, self.repo.vreg.rqlhelper)
2075
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2639
    _test = test_plan
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2640
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2641
    def test_multisource_inlined_rel_skipped(self):
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2642
        self._test('Any MAX(VC) '
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2643
                   'WHERE VC multisource_inlined_rel R2, R para %(branch)s, VC in_state S, S name "published", '
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2644
                   '(EXISTS(R identity R2)) OR (EXISTS(R multisource_rel R2))',
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2645
                   [('FetchStep', [('Any VC WHERE VC multisource_inlined_rel R2, R para "???", (EXISTS(R identity R2)) OR (EXISTS(R multisource_rel R2)), R is Note, R2 is Note, VC is Note',
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2646
                                    [{'R': 'Note', 'R2': 'Note', 'VC': 'Note'}])],
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2647
                     [self.vcs, self.system], None,
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2648
                     {'VC': 'table0.C0'},
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2649
                     []),
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2650
                    ('OneFetchStep', [(u'Any MAX(VC) WHERE VC in_state S, S name "published", S is State, VC is Note',
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2651
                                       [{'S': 'State', 'VC': 'Note'}])],
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2652
                     None, None, [self.system],
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2653
                     {'VC': 'table0.C0'},
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2654
                     [])
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2655
                    ])
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2656
2108
b3f6fa7ad59f add test and fix for queries where all variables are simplified and come from an external source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2076
diff changeset
  2657
    def test_fully_simplified_extsource(self):
b3f6fa7ad59f add test and fix for queries where all variables are simplified and come from an external source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2076
diff changeset
  2658
        self.repo._type_source_cache[999998] = ('Note', 'vcs', 999998)
b3f6fa7ad59f add test and fix for queries where all variables are simplified and come from an external source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2076
diff changeset
  2659
        self.repo._type_source_cache[999999] = ('Note', 'vcs', 999999)
b3f6fa7ad59f add test and fix for queries where all variables are simplified and come from an external source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2076
diff changeset
  2660
        self._test('Any X, Y WHERE NOT X multisource_rel Y, X eid 999998, Y eid 999999',
5582
3e133b29a1a4 [rql2sql] follow rql 0.26.1 changes: NOT nodes normalization, allowing simplification of sql generation, and fix #XXX
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
  2661
                   [('OneFetchStep', [('Any 999998,999999 WHERE NOT EXISTS(999998 multisource_rel 999999)', [{}])],
2108
b3f6fa7ad59f add test and fix for queries where all variables are simplified and come from an external source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2076
diff changeset
  2662
                     None, None, [self.vcs], {}, [])
b3f6fa7ad59f add test and fix for queries where all variables are simplified and come from an external source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2076
diff changeset
  2663
                    ])
b3f6fa7ad59f add test and fix for queries where all variables are simplified and come from an external source
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2076
diff changeset
  2664
2114
862f27d94af4 one more ms planning bug
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 2108
diff changeset
  2665
    def test_nonregr_fully_simplified_extsource(self):
862f27d94af4 one more ms planning bug
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 2108
diff changeset
  2666
        self.repo._type_source_cache[999998] = ('Note', 'vcs', 999998)
862f27d94af4 one more ms planning bug
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 2108
diff changeset
  2667
        self.repo._type_source_cache[999999] = ('Note', 'vcs', 999999)
862f27d94af4 one more ms planning bug
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 2108
diff changeset
  2668
        self.repo._type_source_cache[1000000] = ('Note', 'system', 1000000)
862f27d94af4 one more ms planning bug
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 2108
diff changeset
  2669
        self._test('DISTINCT Any T,FALSE,L,M WHERE L eid 1000000, M eid 999999, T eid 999998',
862f27d94af4 one more ms planning bug
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 2108
diff changeset
  2670
                   [('OneFetchStep', [('DISTINCT Any 999998,FALSE,1000000,999999', [{}])],
862f27d94af4 one more ms planning bug
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 2108
diff changeset
  2671
                     None, None, [self.system], {}, [])
862f27d94af4 one more ms planning bug
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 2108
diff changeset
  2672
                    ])
862f27d94af4 one more ms planning bug
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 2108
diff changeset
  2673
2075
933ccfce6e91 fix bug in multisource planner, w/ inlined relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2074
diff changeset
  2674
332
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2675
if __name__ == '__main__':
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2676
    from logilab.common.testlib import unittest_main
86b8d58664eb backport msplanner test from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
  2677
    unittest_main()