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