xref: /plugin/strata/_test/query_operators_numeric_optional.test.php (revision 5153720fcc1dd2b6e63035d45f7c2bc32e429371)
1*5153720fSfkaag71<?php
2*5153720fSfkaag71require_once('strataquerytest.inc.php');
3*5153720fSfkaag71
4*5153720fSfkaag71/**
5*5153720fSfkaag71 * Tests queries - numeric optional operators.
6*5153720fSfkaag71 *
7*5153720fSfkaag71 * @group plugin_strata_optional
8*5153720fSfkaag71 * @group plugins
9*5153720fSfkaag71 */
10*5153720fSfkaag71class query_operators_numeric_optional_test extends Strata_Query_UnitTestCase {
11*5153720fSfkaag71
12*5153720fSfkaag71    function setup() {
13*5153720fSfkaag71        parent::setup();
14*5153720fSfkaag71    }
15*5153720fSfkaag71
16*5153720fSfkaag71    function testGtLtePartiallyNumeric() {
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 (
38*5153720fSfkaag71                    array (
39*5153720fSfkaag71                        'type' => 'operator',
40*5153720fSfkaag71                        'lhs' => array (
41*5153720fSfkaag71                            'type' => 'variable',
42*5153720fSfkaag71                            'text' => 'tax'
43*5153720fSfkaag71                        ),
44*5153720fSfkaag71                        'operator' => '>',
45*5153720fSfkaag71                        'rhs' => array (
46*5153720fSfkaag71                            'type' => 'literal',
47*5153720fSfkaag71                            'text' => '2'
48*5153720fSfkaag71                        )
49*5153720fSfkaag71                    ),
50*5153720fSfkaag71                    array (
51*5153720fSfkaag71                        'type' => 'operator',
52*5153720fSfkaag71                        'lhs' => array (
53*5153720fSfkaag71                            'type' => 'variable',
54*5153720fSfkaag71                            'text' => 'tax'
55*5153720fSfkaag71                        ),
56*5153720fSfkaag71                        'operator' => '<=',
57*5153720fSfkaag71                        'rhs' => array (
58*5153720fSfkaag71                            'type' => 'literal',
59*5153720fSfkaag71                            'text' => '25'
60*5153720fSfkaag71                        )
61*5153720fSfkaag71                    )
62*5153720fSfkaag71            )),
63*5153720fSfkaag71            'projection' => array (
64*5153720fSfkaag71                'p',
65*5153720fSfkaag71                'tax'
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                'tax' => array('10%')
79*5153720fSfkaag71            ),
80*5153720fSfkaag71            array (
81*5153720fSfkaag71                'p' => array('person:bob'),
82*5153720fSfkaag71                'tax' => array('25%')
83*5153720fSfkaag71            )
84*5153720fSfkaag71        );
85*5153720fSfkaag71
86*5153720fSfkaag71        $this->assertQueryResult($query, $expected, 'Partial numeric comparison (first numbers, then text) unsupported');
87*5153720fSfkaag71    }
88*5153720fSfkaag71
89*5153720fSfkaag71    function testGteLtPartiallyNumeric() {
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' => 'tax rate'
104*5153720fSfkaag71                    ),
105*5153720fSfkaag71                    'object' => array (
106*5153720fSfkaag71                        'type' => 'variable',
107*5153720fSfkaag71                        'text' => 'tax'
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' => 'tax'
116*5153720fSfkaag71                        ),
117*5153720fSfkaag71                        'operator' => '>=',
118*5153720fSfkaag71                        'rhs' => array (
119*5153720fSfkaag71                            'type' => 'literal',
120*5153720fSfkaag71                            'text' => '2'
121*5153720fSfkaag71                        )
122*5153720fSfkaag71                    ),
123*5153720fSfkaag71                    array (
124*5153720fSfkaag71                        'type' => 'operator',
125*5153720fSfkaag71                        'lhs' => array (
126*5153720fSfkaag71                            'type' => 'variable',
127*5153720fSfkaag71                            'text' => 'tax'
128*5153720fSfkaag71                        ),
129*5153720fSfkaag71                        'operator' => '<',
130*5153720fSfkaag71                        'rhs' => array (
131*5153720fSfkaag71                            'type' => 'literal',
132*5153720fSfkaag71                            'text' => '25'
133*5153720fSfkaag71                        )
134*5153720fSfkaag71                    )
135*5153720fSfkaag71            )),
136*5153720fSfkaag71            'projection' => array (
137*5153720fSfkaag71                'p',
138*5153720fSfkaag71                'tax'
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:alice'),
151*5153720fSfkaag71                'tax' => array('10%')
152*5153720fSfkaag71            ),
153*5153720fSfkaag71            array (
154*5153720fSfkaag71                'p' => array('person:carol'),
155*5153720fSfkaag71                'tax' => array('2%')
156*5153720fSfkaag71            )
157*5153720fSfkaag71        );
158*5153720fSfkaag71
159*5153720fSfkaag71        $this->assertQueryResult($query, $expected, 'Partial numeric comparison (first numbers, then text) unsupported');
160*5153720fSfkaag71    }
161*5153720fSfkaag71
162*5153720fSfkaag71    function testGtLteNatural() {
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' => 'has length'
177*5153720fSfkaag71                    ),
178*5153720fSfkaag71                    'object' => array (
179*5153720fSfkaag71                        'type' => 'variable',
180*5153720fSfkaag71                        'text' => 'length'
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' => 'length'
189*5153720fSfkaag71                        ),
190*5153720fSfkaag71                        'operator' => '>',
191*5153720fSfkaag71                        'rhs' => array (
192*5153720fSfkaag71                            'type' => 'literal',
193*5153720fSfkaag71                            'text' => '4 ft'
194*5153720fSfkaag71                        )
195*5153720fSfkaag71                    ),
196*5153720fSfkaag71                    array (
197*5153720fSfkaag71                        'type' => 'operator',
198*5153720fSfkaag71                        'lhs' => array (
199*5153720fSfkaag71                            'type' => 'variable',
200*5153720fSfkaag71                            'text' => 'length'
201*5153720fSfkaag71                        ),
202*5153720fSfkaag71                        'operator' => '<=',
203*5153720fSfkaag71                        'rhs' => array (
204*5153720fSfkaag71                            'type' => 'literal',
205*5153720fSfkaag71                            'text' => '5 ft 5 in'
206*5153720fSfkaag71                        )
207*5153720fSfkaag71                    )
208*5153720fSfkaag71            )),
209*5153720fSfkaag71            'projection' => array (
210*5153720fSfkaag71                'p',
211*5153720fSfkaag71                'length'
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        $expected = array (
222*5153720fSfkaag71            array (
223*5153720fSfkaag71                'p' => array('person:alice'),
224*5153720fSfkaag71                'length' => array('5 ft 5 in')
225*5153720fSfkaag71            ),
226*5153720fSfkaag71            array (
227*5153720fSfkaag71                'p' => array('person:carol'),
228*5153720fSfkaag71                'length' => array('4 ft 11 in')
229*5153720fSfkaag71            )
230*5153720fSfkaag71        );
231*5153720fSfkaag71
232*5153720fSfkaag71        $this->assertQueryResult($query, $expected, 'Natural comparison unsupported');
233*5153720fSfkaag71    }
234*5153720fSfkaag71
235*5153720fSfkaag71    function testGteLtNatural() {
236*5153720fSfkaag71        $query = array (
237*5153720fSfkaag71            'type' => 'select',
238*5153720fSfkaag71            'grouping'=>array(),
239*5153720fSfkaag71            'group' => array (
240*5153720fSfkaag71                'type' => 'filter',
241*5153720fSfkaag71                'lhs' => array (
242*5153720fSfkaag71                    'type' => 'triple',
243*5153720fSfkaag71                    'subject' => array (
244*5153720fSfkaag71                        'type' => 'variable',
245*5153720fSfkaag71                        'text' => 'p'
246*5153720fSfkaag71                    ),
247*5153720fSfkaag71                    'predicate' => array (
248*5153720fSfkaag71                        'type' => 'literal',
249*5153720fSfkaag71                        'text' => 'has length'
250*5153720fSfkaag71                    ),
251*5153720fSfkaag71                    'object' => array (
252*5153720fSfkaag71                        'type' => 'variable',
253*5153720fSfkaag71                        'text' => 'length'
254*5153720fSfkaag71                    )
255*5153720fSfkaag71                ),
256*5153720fSfkaag71                'rhs' => array (
257*5153720fSfkaag71                    array (
258*5153720fSfkaag71                        'type' => 'operator',
259*5153720fSfkaag71                        'lhs' => array (
260*5153720fSfkaag71                            'type' => 'variable',
261*5153720fSfkaag71                            'text' => 'length'
262*5153720fSfkaag71                        ),
263*5153720fSfkaag71                        'operator' => '>=',
264*5153720fSfkaag71                        'rhs' => array (
265*5153720fSfkaag71                            'type' => 'literal',
266*5153720fSfkaag71                            'text' => '4 ft'
267*5153720fSfkaag71                        )
268*5153720fSfkaag71                    ),
269*5153720fSfkaag71                    array (
270*5153720fSfkaag71                        'type' => 'operator',
271*5153720fSfkaag71                        'lhs' => array (
272*5153720fSfkaag71                            'type' => 'variable',
273*5153720fSfkaag71                            'text' => 'length'
274*5153720fSfkaag71                        ),
275*5153720fSfkaag71                        'operator' => '<',
276*5153720fSfkaag71                        'rhs' => array (
277*5153720fSfkaag71                            'type' => 'literal',
278*5153720fSfkaag71                            'text' => '5 ft 10 in'
279*5153720fSfkaag71                        )
280*5153720fSfkaag71                    )
281*5153720fSfkaag71            )),
282*5153720fSfkaag71            'projection' => array (
283*5153720fSfkaag71                'p',
284*5153720fSfkaag71                'length'
285*5153720fSfkaag71            ),
286*5153720fSfkaag71            'ordering' => array (
287*5153720fSfkaag71                array (
288*5153720fSfkaag71                    'variable' => 'p',
289*5153720fSfkaag71                    'direction' => 'asc'
290*5153720fSfkaag71                )
291*5153720fSfkaag71            )
292*5153720fSfkaag71        );
293*5153720fSfkaag71
294*5153720fSfkaag71        $expected = array (
295*5153720fSfkaag71            array (
296*5153720fSfkaag71                'p' => array('person:alice'),
297*5153720fSfkaag71                'length' => array('5 ft 5 in')
298*5153720fSfkaag71            ),
299*5153720fSfkaag71            array (
300*5153720fSfkaag71                'p' => array('person:carol'),
301*5153720fSfkaag71                'length' => array('4 ft 11 in')
302*5153720fSfkaag71            )
303*5153720fSfkaag71        );
304*5153720fSfkaag71
305*5153720fSfkaag71        $this->assertQueryResult($query, $expected, 'Natural comparison unsupported');
306*5153720fSfkaag71    }
307*5153720fSfkaag71
308*5153720fSfkaag71}
309