xref: /plugin/strata/_test/query_operators.test.php (revision 5153720fcc1dd2b6e63035d45f7c2bc32e429371)
1*5153720fSfkaag71<?php
2*5153720fSfkaag71require_once('strataquerytest.inc.php');
3*5153720fSfkaag71
4*5153720fSfkaag71/**
5*5153720fSfkaag71 * Tests queries - operators.
6*5153720fSfkaag71 *
7*5153720fSfkaag71 * @group plugin_strata
8*5153720fSfkaag71 * @group plugins
9*5153720fSfkaag71 */
10*5153720fSfkaag71class query_operators_test extends Strata_Query_UnitTestCase {
11*5153720fSfkaag71
12*5153720fSfkaag71    function setup() {
13*5153720fSfkaag71        parent::setup();
14*5153720fSfkaag71    }
15*5153720fSfkaag71
16*5153720fSfkaag71    function testEquals() {
17*5153720fSfkaag71        $query = array (
18*5153720fSfkaag71            'type' => 'select',
19*5153720fSfkaag71            'grouping'=>array(),
20*5153720fSfkaag71            'group' => array (
21*5153720fSfkaag71                'type' => 'filter',
22*5153720fSfkaag71                'lhs' => array (
23*5153720fSfkaag71                    'type' => 'triple',
24*5153720fSfkaag71                    'subject' => array (
25*5153720fSfkaag71                        'type' => 'variable',
26*5153720fSfkaag71                        'text' => 'p'
27*5153720fSfkaag71                    ),
28*5153720fSfkaag71                    'predicate' => array (
29*5153720fSfkaag71                        'type' => 'literal',
30*5153720fSfkaag71                        'text' => 'tax rate'
31*5153720fSfkaag71                    ),
32*5153720fSfkaag71                    'object' => array (
33*5153720fSfkaag71                        'type' => 'variable',
34*5153720fSfkaag71                        'text' => 'tax'
35*5153720fSfkaag71                    )
36*5153720fSfkaag71                ),
37*5153720fSfkaag71                'rhs' => array (array (
38*5153720fSfkaag71                    'type' => 'operator',
39*5153720fSfkaag71                    'lhs' => array (
40*5153720fSfkaag71                        'type' => 'variable',
41*5153720fSfkaag71                        'text' => 'tax'
42*5153720fSfkaag71                    ),
43*5153720fSfkaag71                    'operator' => '=',
44*5153720fSfkaag71                    'rhs' => array (
45*5153720fSfkaag71                        'type' => 'literal',
46*5153720fSfkaag71                        'text' => '2%'
47*5153720fSfkaag71                    )
48*5153720fSfkaag71                )
49*5153720fSfkaag71            )),
50*5153720fSfkaag71            'projection' => array (
51*5153720fSfkaag71                'p'
52*5153720fSfkaag71            ),
53*5153720fSfkaag71            'ordering' => array (
54*5153720fSfkaag71                array (
55*5153720fSfkaag71                    'variable' => 'p',
56*5153720fSfkaag71                    'direction' => 'asc'
57*5153720fSfkaag71                )
58*5153720fSfkaag71            )
59*5153720fSfkaag71        );
60*5153720fSfkaag71
61*5153720fSfkaag71        $expected = array (
62*5153720fSfkaag71            array (
63*5153720fSfkaag71                'p' => array('person:carol')
64*5153720fSfkaag71            )
65*5153720fSfkaag71        );
66*5153720fSfkaag71
67*5153720fSfkaag71        $this->assertQueryResult($query, $expected);
68*5153720fSfkaag71    }
69*5153720fSfkaag71
70*5153720fSfkaag71    function testNotEquals() {
71*5153720fSfkaag71        $query = array (
72*5153720fSfkaag71            'type' => 'select',
73*5153720fSfkaag71            'grouping'=>array(),
74*5153720fSfkaag71            'group' => array (
75*5153720fSfkaag71                'type' => 'filter',
76*5153720fSfkaag71                'lhs' => array (
77*5153720fSfkaag71                    'type' => 'triple',
78*5153720fSfkaag71                    'subject' => array (
79*5153720fSfkaag71                        'type' => 'variable',
80*5153720fSfkaag71                        'text' => 'p'
81*5153720fSfkaag71                    ),
82*5153720fSfkaag71                    'predicate' => array (
83*5153720fSfkaag71                        'type' => 'literal',
84*5153720fSfkaag71                        'text' => 'tax rate'
85*5153720fSfkaag71                    ),
86*5153720fSfkaag71                    'object' => array (
87*5153720fSfkaag71                        'type' => 'variable',
88*5153720fSfkaag71                        'text' => 'tax'
89*5153720fSfkaag71                    )
90*5153720fSfkaag71                ),
91*5153720fSfkaag71                'rhs' => array (array (
92*5153720fSfkaag71                    'type' => 'operator',
93*5153720fSfkaag71                    'lhs' => array (
94*5153720fSfkaag71                        'type' => 'variable',
95*5153720fSfkaag71                        'text' => 'tax'
96*5153720fSfkaag71                    ),
97*5153720fSfkaag71                    'operator' => '!=',
98*5153720fSfkaag71                    'rhs' => array (
99*5153720fSfkaag71                        'type' => 'literal',
100*5153720fSfkaag71                        'text' => '2%'
101*5153720fSfkaag71                    )
102*5153720fSfkaag71                )
103*5153720fSfkaag71            )),
104*5153720fSfkaag71            'projection' => array (
105*5153720fSfkaag71                'p'
106*5153720fSfkaag71            ),
107*5153720fSfkaag71            'ordering' => array (
108*5153720fSfkaag71                array (
109*5153720fSfkaag71                    'variable' => 'p',
110*5153720fSfkaag71                    'direction' => 'asc'
111*5153720fSfkaag71                )
112*5153720fSfkaag71            )
113*5153720fSfkaag71        );
114*5153720fSfkaag71
115*5153720fSfkaag71        $expected = array (
116*5153720fSfkaag71            array (
117*5153720fSfkaag71                'p' => array('person:alice')
118*5153720fSfkaag71            ),
119*5153720fSfkaag71            array (
120*5153720fSfkaag71                'p' => array('person:bob')
121*5153720fSfkaag71            )
122*5153720fSfkaag71        );
123*5153720fSfkaag71
124*5153720fSfkaag71        $this->assertQueryResult($query, $expected);
125*5153720fSfkaag71    }
126*5153720fSfkaag71
127*5153720fSfkaag71    function testLike() {
128*5153720fSfkaag71        $query = array (
129*5153720fSfkaag71            'type' => 'select',
130*5153720fSfkaag71            'grouping'=>array(),
131*5153720fSfkaag71            'group' => array (
132*5153720fSfkaag71                'type' => 'filter',
133*5153720fSfkaag71                'lhs' => array (
134*5153720fSfkaag71                    'type' => 'triple',
135*5153720fSfkaag71                    'subject' => array (
136*5153720fSfkaag71                        'type' => 'variable',
137*5153720fSfkaag71                        'text' => 'p'
138*5153720fSfkaag71                    ),
139*5153720fSfkaag71                    'predicate' => array (
140*5153720fSfkaag71                        'type' => 'literal',
141*5153720fSfkaag71                        'text' => 'tax rate'
142*5153720fSfkaag71                    ),
143*5153720fSfkaag71                    'object' => array (
144*5153720fSfkaag71                        'type' => 'variable',
145*5153720fSfkaag71                        'text' => 'tax'
146*5153720fSfkaag71                    )
147*5153720fSfkaag71                ),
148*5153720fSfkaag71                'rhs' => array (array (
149*5153720fSfkaag71                    'type' => 'operator',
150*5153720fSfkaag71                    'lhs' => array (
151*5153720fSfkaag71                        'type' => 'variable',
152*5153720fSfkaag71                        'text' => 'tax'
153*5153720fSfkaag71                    ),
154*5153720fSfkaag71                    'operator' => '~',
155*5153720fSfkaag71                    'rhs' => array (
156*5153720fSfkaag71                        'type' => 'literal',
157*5153720fSfkaag71                        'text' => '2%'
158*5153720fSfkaag71                    )
159*5153720fSfkaag71                )
160*5153720fSfkaag71            )),
161*5153720fSfkaag71            'projection' => array (
162*5153720fSfkaag71                'p'
163*5153720fSfkaag71            ),
164*5153720fSfkaag71            'ordering' => array (
165*5153720fSfkaag71                array (
166*5153720fSfkaag71                    'variable' => 'p',
167*5153720fSfkaag71                    'direction' => 'asc'
168*5153720fSfkaag71                )
169*5153720fSfkaag71            )
170*5153720fSfkaag71        );
171*5153720fSfkaag71
172*5153720fSfkaag71        $expected = array (
173*5153720fSfkaag71            array (
174*5153720fSfkaag71                'p' => array('person:carol')
175*5153720fSfkaag71            )
176*5153720fSfkaag71        );
177*5153720fSfkaag71
178*5153720fSfkaag71        $this->assertQueryResult($query, $expected);
179*5153720fSfkaag71    }
180*5153720fSfkaag71
181*5153720fSfkaag71    function testNotLike() {
182*5153720fSfkaag71        $query = array (
183*5153720fSfkaag71            'type' => 'select',
184*5153720fSfkaag71            'grouping'=>array(),
185*5153720fSfkaag71            'group' => array (
186*5153720fSfkaag71                'type' => 'filter',
187*5153720fSfkaag71                'lhs' => array (
188*5153720fSfkaag71                    'type' => 'triple',
189*5153720fSfkaag71                    'subject' => array (
190*5153720fSfkaag71                        'type' => 'variable',
191*5153720fSfkaag71                        'text' => 'p'
192*5153720fSfkaag71                    ),
193*5153720fSfkaag71                    'predicate' => array (
194*5153720fSfkaag71                        'type' => 'literal',
195*5153720fSfkaag71                        'text' => 'tax rate'
196*5153720fSfkaag71                    ),
197*5153720fSfkaag71                    'object' => array (
198*5153720fSfkaag71                        'type' => 'variable',
199*5153720fSfkaag71                        'text' => 'tax'
200*5153720fSfkaag71                    )
201*5153720fSfkaag71                ),
202*5153720fSfkaag71                'rhs' => array (array (
203*5153720fSfkaag71                    'type' => 'operator',
204*5153720fSfkaag71                    'lhs' => array (
205*5153720fSfkaag71                        'type' => 'variable',
206*5153720fSfkaag71                        'text' => 'tax'
207*5153720fSfkaag71                    ),
208*5153720fSfkaag71                    'operator' => '!~',
209*5153720fSfkaag71                    'rhs' => array (
210*5153720fSfkaag71                        'type' => 'literal',
211*5153720fSfkaag71                        'text' => '2%'
212*5153720fSfkaag71                    )
213*5153720fSfkaag71                )
214*5153720fSfkaag71            )),
215*5153720fSfkaag71            'projection' => array (
216*5153720fSfkaag71                'p'
217*5153720fSfkaag71            ),
218*5153720fSfkaag71            'ordering' => array (
219*5153720fSfkaag71                array (
220*5153720fSfkaag71                    'variable' => 'p',
221*5153720fSfkaag71                    'direction' => 'asc'
222*5153720fSfkaag71                )
223*5153720fSfkaag71            )
224*5153720fSfkaag71        );
225*5153720fSfkaag71
226*5153720fSfkaag71        $expected = array (
227*5153720fSfkaag71            array (
228*5153720fSfkaag71                'p' => array('person:alice')
229*5153720fSfkaag71            ),
230*5153720fSfkaag71            array (
231*5153720fSfkaag71                'p' => array('person:bob')
232*5153720fSfkaag71            )
233*5153720fSfkaag71        );
234*5153720fSfkaag71
235*5153720fSfkaag71        $this->assertQueryResult($query, $expected);
236*5153720fSfkaag71    }
237*5153720fSfkaag71
238*5153720fSfkaag71    function testBeginsWith() {
239*5153720fSfkaag71        $query = array (
240*5153720fSfkaag71            'type' => 'select',
241*5153720fSfkaag71            'grouping'=>array(),
242*5153720fSfkaag71            'group' => array (
243*5153720fSfkaag71                'type' => 'filter',
244*5153720fSfkaag71                'lhs' => array (
245*5153720fSfkaag71                    'type' => 'triple',
246*5153720fSfkaag71                    'subject' => array (
247*5153720fSfkaag71                        'type' => 'variable',
248*5153720fSfkaag71                        'text' => 'p'
249*5153720fSfkaag71                    ),
250*5153720fSfkaag71                    'predicate' => array (
251*5153720fSfkaag71                        'type' => 'literal',
252*5153720fSfkaag71                        'text' => 'tax rate'
253*5153720fSfkaag71                    ),
254*5153720fSfkaag71                    'object' => array (
255*5153720fSfkaag71                        'type' => 'variable',
256*5153720fSfkaag71                        'text' => 'tax'
257*5153720fSfkaag71                    )
258*5153720fSfkaag71                ),
259*5153720fSfkaag71                'rhs' => array (array (
260*5153720fSfkaag71                    'type' => 'operator',
261*5153720fSfkaag71                    'lhs' => array (
262*5153720fSfkaag71                        'type' => 'variable',
263*5153720fSfkaag71                        'text' => 'tax'
264*5153720fSfkaag71                    ),
265*5153720fSfkaag71                    'operator' => '^~',
266*5153720fSfkaag71                    'rhs' => array (
267*5153720fSfkaag71                        'type' => 'literal',
268*5153720fSfkaag71                        'text' => '2%'
269*5153720fSfkaag71                    )
270*5153720fSfkaag71                )
271*5153720fSfkaag71            )),
272*5153720fSfkaag71            'projection' => array (
273*5153720fSfkaag71                'p'
274*5153720fSfkaag71            ),
275*5153720fSfkaag71            'ordering' => array (
276*5153720fSfkaag71                array (
277*5153720fSfkaag71                    'variable' => 'p',
278*5153720fSfkaag71                    'direction' => 'asc'
279*5153720fSfkaag71                )
280*5153720fSfkaag71            )
281*5153720fSfkaag71        );
282*5153720fSfkaag71
283*5153720fSfkaag71        $expected = array (
284*5153720fSfkaag71            array (
285*5153720fSfkaag71                'p' => array('person:carol')
286*5153720fSfkaag71            )
287*5153720fSfkaag71        );
288*5153720fSfkaag71
289*5153720fSfkaag71        $this->assertQueryResult($query, $expected);
290*5153720fSfkaag71    }
291*5153720fSfkaag71
292*5153720fSfkaag71    function testEndsWith() {
293*5153720fSfkaag71        $query = array (
294*5153720fSfkaag71            'type' => 'select',
295*5153720fSfkaag71            'grouping'=>array(),
296*5153720fSfkaag71            'group' => array (
297*5153720fSfkaag71                'type' => 'filter',
298*5153720fSfkaag71                'lhs' => array (
299*5153720fSfkaag71                    'type' => 'triple',
300*5153720fSfkaag71                    'subject' => array (
301*5153720fSfkaag71                        'type' => 'variable',
302*5153720fSfkaag71                        'text' => 'p'
303*5153720fSfkaag71                    ),
304*5153720fSfkaag71                    'predicate' => array (
305*5153720fSfkaag71                        'type' => 'literal',
306*5153720fSfkaag71                        'text' => 'tax rate'
307*5153720fSfkaag71                    ),
308*5153720fSfkaag71                    'object' => array (
309*5153720fSfkaag71                        'type' => 'variable',
310*5153720fSfkaag71                        'text' => 'tax'
311*5153720fSfkaag71                    )
312*5153720fSfkaag71                ),
313*5153720fSfkaag71                'rhs' => array (array (
314*5153720fSfkaag71                    'type' => 'operator',
315*5153720fSfkaag71                    'lhs' => array (
316*5153720fSfkaag71                        'type' => 'variable',
317*5153720fSfkaag71                        'text' => 'tax'
318*5153720fSfkaag71                    ),
319*5153720fSfkaag71                    'operator' => '$~',
320*5153720fSfkaag71                    'rhs' => array (
321*5153720fSfkaag71                        'type' => 'literal',
322*5153720fSfkaag71                        'text' => '2%'
323*5153720fSfkaag71                    )
324*5153720fSfkaag71                )
325*5153720fSfkaag71            )),
326*5153720fSfkaag71            'projection' => array (
327*5153720fSfkaag71                'p'
328*5153720fSfkaag71            ),
329*5153720fSfkaag71            'ordering' => array (
330*5153720fSfkaag71                array (
331*5153720fSfkaag71                    'variable' => 'p',
332*5153720fSfkaag71                    'direction' => 'asc'
333*5153720fSfkaag71                )
334*5153720fSfkaag71            )
335*5153720fSfkaag71        );
336*5153720fSfkaag71
337*5153720fSfkaag71        $expected = array (
338*5153720fSfkaag71            array (
339*5153720fSfkaag71                'p' => array('person:carol')
340*5153720fSfkaag71            )
341*5153720fSfkaag71        );
342*5153720fSfkaag71
343*5153720fSfkaag71        $this->assertQueryResult($query, $expected);
344*5153720fSfkaag71    }
345*5153720fSfkaag71
346*5153720fSfkaag71}
347*5153720fSfkaag71
348