xref: /plugin/strata/_test/query_operators_numeric.test.php (revision 5153720fcc1dd2b6e63035d45f7c2bc32e429371)
1*5153720fSfkaag71<?php
2*5153720fSfkaag71require_once('strataquerytest.inc.php');
3*5153720fSfkaag71
4*5153720fSfkaag71/**
5*5153720fSfkaag71 * Tests queries - numeric operators.
6*5153720fSfkaag71 *
7*5153720fSfkaag71 * @group plugin_strata
8*5153720fSfkaag71 * @group plugins
9*5153720fSfkaag71 */
10*5153720fSfkaag71class query_operators_numeric_test extends Strata_Query_UnitTestCase {
11*5153720fSfkaag71
12*5153720fSfkaag71    function setup() {
13*5153720fSfkaag71        parent::setup();
14*5153720fSfkaag71    }
15*5153720fSfkaag71
16*5153720fSfkaag71    function testGtLte() {
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' => 'is rated'
31*5153720fSfkaag71                    ),
32*5153720fSfkaag71                    'object' => array (
33*5153720fSfkaag71                        'type' => 'variable',
34*5153720fSfkaag71                        'text' => 'rating'
35*5153720fSfkaag71                    )
36*5153720fSfkaag71                ),
37*5153720fSfkaag71                'rhs' => array (
38*5153720fSfkaag71                    array (
39*5153720fSfkaag71                        'type' => 'operator',
40*5153720fSfkaag71                        'lhs' => array (
41*5153720fSfkaag71                            'type' => 'variable',
42*5153720fSfkaag71                            'text' => 'rating'
43*5153720fSfkaag71                        ),
44*5153720fSfkaag71                        'operator' => '>',
45*5153720fSfkaag71                        'rhs' => array (
46*5153720fSfkaag71                            'type' => 'literal',
47*5153720fSfkaag71                            'text' => '1'
48*5153720fSfkaag71                        )
49*5153720fSfkaag71                    ),
50*5153720fSfkaag71                    array (
51*5153720fSfkaag71                        'type' => 'operator',
52*5153720fSfkaag71                        'lhs' => array (
53*5153720fSfkaag71                            'type' => 'variable',
54*5153720fSfkaag71                            'text' => 'rating'
55*5153720fSfkaag71                        ),
56*5153720fSfkaag71                        'operator' => '<=',
57*5153720fSfkaag71                        'rhs' => array (
58*5153720fSfkaag71                            'type' => 'literal',
59*5153720fSfkaag71                            'text' => '10'
60*5153720fSfkaag71                        )
61*5153720fSfkaag71                    )
62*5153720fSfkaag71            )),
63*5153720fSfkaag71            'projection' => array (
64*5153720fSfkaag71                'p',
65*5153720fSfkaag71                'rating'
66*5153720fSfkaag71            ),
67*5153720fSfkaag71            'ordering' => array (
68*5153720fSfkaag71                array (
69*5153720fSfkaag71                    'variable' => 'p',
70*5153720fSfkaag71                    'direction' => 'asc'
71*5153720fSfkaag71                )
72*5153720fSfkaag71            )
73*5153720fSfkaag71        );
74*5153720fSfkaag71
75*5153720fSfkaag71        $expected = array (
76*5153720fSfkaag71            array (
77*5153720fSfkaag71                'p' => array('person:alice'),
78*5153720fSfkaag71                'rating' => array('10')
79*5153720fSfkaag71            ),
80*5153720fSfkaag71            array (
81*5153720fSfkaag71                'p' => array('person:bob'),
82*5153720fSfkaag71                'rating' => array('8')
83*5153720fSfkaag71            )
84*5153720fSfkaag71        );
85*5153720fSfkaag71
86*5153720fSfkaag71        $this->assertQueryResult($query, $expected);
87*5153720fSfkaag71    }
88*5153720fSfkaag71
89*5153720fSfkaag71    function testGteLt() {
90*5153720fSfkaag71        $query = array (
91*5153720fSfkaag71            'type' => 'select',
92*5153720fSfkaag71            'grouping'=>array(),
93*5153720fSfkaag71            'group' => array (
94*5153720fSfkaag71                'type' => 'filter',
95*5153720fSfkaag71                'lhs' => array (
96*5153720fSfkaag71                    'type' => 'triple',
97*5153720fSfkaag71                    'subject' => array (
98*5153720fSfkaag71                        'type' => 'variable',
99*5153720fSfkaag71                        'text' => 'p'
100*5153720fSfkaag71                    ),
101*5153720fSfkaag71                    'predicate' => array (
102*5153720fSfkaag71                        'type' => 'literal',
103*5153720fSfkaag71                        'text' => 'is rated'
104*5153720fSfkaag71                    ),
105*5153720fSfkaag71                    'object' => array (
106*5153720fSfkaag71                        'type' => 'variable',
107*5153720fSfkaag71                        'text' => 'rating'
108*5153720fSfkaag71                    )
109*5153720fSfkaag71                ),
110*5153720fSfkaag71                'rhs' => array (
111*5153720fSfkaag71                    array (
112*5153720fSfkaag71                        'type' => 'operator',
113*5153720fSfkaag71                        'lhs' => array (
114*5153720fSfkaag71                            'type' => 'variable',
115*5153720fSfkaag71                            'text' => 'rating'
116*5153720fSfkaag71                        ),
117*5153720fSfkaag71                        'operator' => '>=',
118*5153720fSfkaag71                        'rhs' => array (
119*5153720fSfkaag71                            'type' => 'literal',
120*5153720fSfkaag71                            'text' => '1'
121*5153720fSfkaag71                        )
122*5153720fSfkaag71                    ),
123*5153720fSfkaag71                    array (
124*5153720fSfkaag71                        'type' => 'operator',
125*5153720fSfkaag71                        'lhs' => array (
126*5153720fSfkaag71                            'type' => 'variable',
127*5153720fSfkaag71                            'text' => 'rating'
128*5153720fSfkaag71                        ),
129*5153720fSfkaag71                        'operator' => '<',
130*5153720fSfkaag71                        'rhs' => array (
131*5153720fSfkaag71                            'type' => 'literal',
132*5153720fSfkaag71                            'text' => '10'
133*5153720fSfkaag71                        )
134*5153720fSfkaag71                    )
135*5153720fSfkaag71            )),
136*5153720fSfkaag71            'projection' => array (
137*5153720fSfkaag71                'p',
138*5153720fSfkaag71                'rating'
139*5153720fSfkaag71            ),
140*5153720fSfkaag71            'ordering' => array (
141*5153720fSfkaag71                array (
142*5153720fSfkaag71                    'variable' => 'p',
143*5153720fSfkaag71                    'direction' => 'asc'
144*5153720fSfkaag71                )
145*5153720fSfkaag71            )
146*5153720fSfkaag71        );
147*5153720fSfkaag71
148*5153720fSfkaag71        $expected = array (
149*5153720fSfkaag71            array (
150*5153720fSfkaag71                'p' => array('person:bob'),
151*5153720fSfkaag71                'rating' => array('8')
152*5153720fSfkaag71            ),
153*5153720fSfkaag71            array (
154*5153720fSfkaag71                'p' => array('person:carol'),
155*5153720fSfkaag71                'rating' => array('1')
156*5153720fSfkaag71            )
157*5153720fSfkaag71        );
158*5153720fSfkaag71
159*5153720fSfkaag71        $this->assertQueryResult($query, $expected);
160*5153720fSfkaag71    }
161*5153720fSfkaag71
162*5153720fSfkaag71    function testPartiallyNumeric() {
163*5153720fSfkaag71        $query = array (
164*5153720fSfkaag71            'type' => 'select',
165*5153720fSfkaag71            'grouping'=>array(),
166*5153720fSfkaag71            'group' => array (
167*5153720fSfkaag71                'type' => 'filter',
168*5153720fSfkaag71                'lhs' => array (
169*5153720fSfkaag71                    'type' => 'triple',
170*5153720fSfkaag71                    'subject' => array (
171*5153720fSfkaag71                        'type' => 'variable',
172*5153720fSfkaag71                        'text' => 'p'
173*5153720fSfkaag71                    ),
174*5153720fSfkaag71                    'predicate' => array (
175*5153720fSfkaag71                        'type' => 'literal',
176*5153720fSfkaag71                        'text' => 'tax rate'
177*5153720fSfkaag71                    ),
178*5153720fSfkaag71                    'object' => array (
179*5153720fSfkaag71                        'type' => 'variable',
180*5153720fSfkaag71                        'text' => 'tax'
181*5153720fSfkaag71                    )
182*5153720fSfkaag71                ),
183*5153720fSfkaag71                'rhs' => array (
184*5153720fSfkaag71                    array (
185*5153720fSfkaag71                        'type' => 'operator',
186*5153720fSfkaag71                        'lhs' => array (
187*5153720fSfkaag71                            'type' => 'variable',
188*5153720fSfkaag71                            'text' => 'tax'
189*5153720fSfkaag71                        ),
190*5153720fSfkaag71                        'operator' => '>',
191*5153720fSfkaag71                        'rhs' => array (
192*5153720fSfkaag71                            'type' => 'literal',
193*5153720fSfkaag71                            'text' => '2'
194*5153720fSfkaag71                        )
195*5153720fSfkaag71                    ),
196*5153720fSfkaag71                    array (
197*5153720fSfkaag71                        'type' => 'operator',
198*5153720fSfkaag71                        'lhs' => array (
199*5153720fSfkaag71                            'type' => 'variable',
200*5153720fSfkaag71                            'text' => 'tax'
201*5153720fSfkaag71                        ),
202*5153720fSfkaag71                        'operator' => '<=',
203*5153720fSfkaag71                        'rhs' => array (
204*5153720fSfkaag71                            'type' => 'literal',
205*5153720fSfkaag71                            'text' => '15'
206*5153720fSfkaag71                        )
207*5153720fSfkaag71                    )
208*5153720fSfkaag71            )),
209*5153720fSfkaag71            'projection' => array (
210*5153720fSfkaag71                'p',
211*5153720fSfkaag71                'tax'
212*5153720fSfkaag71            ),
213*5153720fSfkaag71            'ordering' => array (
214*5153720fSfkaag71                array (
215*5153720fSfkaag71                    'variable' => 'p',
216*5153720fSfkaag71                    'direction' => 'asc'
217*5153720fSfkaag71                )
218*5153720fSfkaag71            )
219*5153720fSfkaag71        );
220*5153720fSfkaag71
221*5153720fSfkaag71        // Result might vary depending on database backed, only require that it does not fail
222*5153720fSfkaag71        $this->assertTrue($this->_triples->queryRelations($query));
223*5153720fSfkaag71    }
224*5153720fSfkaag71
225*5153720fSfkaag71    function testNonNumeric() {
226*5153720fSfkaag71        $query = array (
227*5153720fSfkaag71            'type' => 'select',
228*5153720fSfkaag71            'grouping'=>array(),
229*5153720fSfkaag71            'group' => array (
230*5153720fSfkaag71                'type' => 'filter',
231*5153720fSfkaag71                'lhs' => array (
232*5153720fSfkaag71                    'type' => 'triple',
233*5153720fSfkaag71                    'subject' => array (
234*5153720fSfkaag71                        'type' => 'variable',
235*5153720fSfkaag71                        'text' => 'p'
236*5153720fSfkaag71                    ),
237*5153720fSfkaag71                    'predicate' => array (
238*5153720fSfkaag71                        'type' => 'literal',
239*5153720fSfkaag71                        'text' => 'class'
240*5153720fSfkaag71                    ),
241*5153720fSfkaag71                    'object' => array (
242*5153720fSfkaag71                        'type' => 'variable',
243*5153720fSfkaag71                        'text' => 'person'
244*5153720fSfkaag71                    )
245*5153720fSfkaag71                ),
246*5153720fSfkaag71                'rhs' => array (
247*5153720fSfkaag71                    array (
248*5153720fSfkaag71                        'type' => 'operator',
249*5153720fSfkaag71                        'lhs' => array (
250*5153720fSfkaag71                            'type' => 'variable',
251*5153720fSfkaag71                            'text' => 'p'
252*5153720fSfkaag71                        ),
253*5153720fSfkaag71                        'operator' => '>',
254*5153720fSfkaag71                        'rhs' => array (
255*5153720fSfkaag71                            'type' => 'literal',
256*5153720fSfkaag71                            'text' => '2'
257*5153720fSfkaag71                        )
258*5153720fSfkaag71                    ),
259*5153720fSfkaag71                    array (
260*5153720fSfkaag71                        'type' => 'operator',
261*5153720fSfkaag71                        'lhs' => array (
262*5153720fSfkaag71                            'type' => 'variable',
263*5153720fSfkaag71                            'text' => 'p'
264*5153720fSfkaag71                        ),
265*5153720fSfkaag71                        'operator' => '<=',
266*5153720fSfkaag71                        'rhs' => array (
267*5153720fSfkaag71                            'type' => 'literal',
268*5153720fSfkaag71                            'text' => '25'
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        // Result might vary depending on database backed, only require that it does not fail
284*5153720fSfkaag71        $this->assertTrue($this->_triples->queryRelations($query));
285*5153720fSfkaag71    }
286*5153720fSfkaag71
287*5153720fSfkaag71}
288