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