1*5153720fSfkaag71<?php 2*5153720fSfkaag71require_once('strataquerytest.inc.php'); 3*5153720fSfkaag71 4*5153720fSfkaag71/** 5*5153720fSfkaag71 * Tests queries - sorting optional. 6*5153720fSfkaag71 * 7*5153720fSfkaag71 * @group plugin_strata_optional 8*5153720fSfkaag71 * @group plugins 9*5153720fSfkaag71 */ 10*5153720fSfkaag71class query_sort_optional_test extends Strata_Query_UnitTestCase { 11*5153720fSfkaag71 12*5153720fSfkaag71 function setup() { 13*5153720fSfkaag71 parent::setup(); 14*5153720fSfkaag71 } 15*5153720fSfkaag71 16*5153720fSfkaag71 function testPartiallyNumericSort() { 17*5153720fSfkaag71 $query = array ( 18*5153720fSfkaag71 'type' => 'select', 19*5153720fSfkaag71 'grouping'=>array(), 20*5153720fSfkaag71 'group' => array ( 21*5153720fSfkaag71 'type' => 'triple', 22*5153720fSfkaag71 'subject' => array ( 23*5153720fSfkaag71 'type' => 'variable', 24*5153720fSfkaag71 'text' => 'p' 25*5153720fSfkaag71 ), 26*5153720fSfkaag71 'predicate' => array ( 27*5153720fSfkaag71 'type' => 'literal', 28*5153720fSfkaag71 'text' => 'tax rate' 29*5153720fSfkaag71 ), 30*5153720fSfkaag71 'object' => array ( 31*5153720fSfkaag71 'type' => 'variable', 32*5153720fSfkaag71 'text' => 'tax' 33*5153720fSfkaag71 ) 34*5153720fSfkaag71 ), 35*5153720fSfkaag71 'projection' => array ( 36*5153720fSfkaag71 'p', 37*5153720fSfkaag71 'tax' 38*5153720fSfkaag71 ), 39*5153720fSfkaag71 'ordering' => array ( 40*5153720fSfkaag71 array ( 41*5153720fSfkaag71 'variable' => 'tax', 42*5153720fSfkaag71 'direction' => 'asc' 43*5153720fSfkaag71 ) 44*5153720fSfkaag71 ) 45*5153720fSfkaag71 ); 46*5153720fSfkaag71 47*5153720fSfkaag71 $expected = array ( 48*5153720fSfkaag71 array ( 49*5153720fSfkaag71 'p' => array('person:carol'), 50*5153720fSfkaag71 'tax' => array('2%') 51*5153720fSfkaag71 ), 52*5153720fSfkaag71 array ( 53*5153720fSfkaag71 'p' => array('person:alice'), 54*5153720fSfkaag71 'tax' => array('10%') 55*5153720fSfkaag71 ), 56*5153720fSfkaag71 array ( 57*5153720fSfkaag71 'p' => array('person:bob'), 58*5153720fSfkaag71 'tax' => array('25%') 59*5153720fSfkaag71 ) 60*5153720fSfkaag71 ); 61*5153720fSfkaag71 62*5153720fSfkaag71 $this->assertQueryResult($query, $expected, 'Partial numeric sort (numbers first, text second) unsupported'); 63*5153720fSfkaag71 } 64*5153720fSfkaag71 65*5153720fSfkaag71 function testNaturalSort() { 66*5153720fSfkaag71 $query = array ( 67*5153720fSfkaag71 'type' => 'select', 68*5153720fSfkaag71 'grouping'=>array(), 69*5153720fSfkaag71 'group' => array ( 70*5153720fSfkaag71 'type' => 'triple', 71*5153720fSfkaag71 'subject' => array ( 72*5153720fSfkaag71 'type' => 'variable', 73*5153720fSfkaag71 'text' => 'p' 74*5153720fSfkaag71 ), 75*5153720fSfkaag71 'predicate' => array ( 76*5153720fSfkaag71 'type' => 'literal', 77*5153720fSfkaag71 'text' => 'has length' 78*5153720fSfkaag71 ), 79*5153720fSfkaag71 'object' => array ( 80*5153720fSfkaag71 'type' => 'variable', 81*5153720fSfkaag71 'text' => 'length' 82*5153720fSfkaag71 ) 83*5153720fSfkaag71 ), 84*5153720fSfkaag71 'projection' => array ( 85*5153720fSfkaag71 'p', 86*5153720fSfkaag71 'length' 87*5153720fSfkaag71 ), 88*5153720fSfkaag71 'ordering' => array ( 89*5153720fSfkaag71 array ( 90*5153720fSfkaag71 'variable' => 'length', 91*5153720fSfkaag71 'direction' => 'asc' 92*5153720fSfkaag71 ) 93*5153720fSfkaag71 ) 94*5153720fSfkaag71 ); 95*5153720fSfkaag71 96*5153720fSfkaag71 $expected = array ( 97*5153720fSfkaag71 array ( 98*5153720fSfkaag71 'p' => array('person:carol'), 99*5153720fSfkaag71 'length' => array('4 ft 11 in') 100*5153720fSfkaag71 ), 101*5153720fSfkaag71 array ( 102*5153720fSfkaag71 'p' => array('person:alice'), 103*5153720fSfkaag71 'length' => array('5 ft 5 in') 104*5153720fSfkaag71 ), 105*5153720fSfkaag71 array ( 106*5153720fSfkaag71 'p' => array('person:bob'), 107*5153720fSfkaag71 'length' => array('5 ft 10 in') 108*5153720fSfkaag71 ) 109*5153720fSfkaag71 ); 110*5153720fSfkaag71 111*5153720fSfkaag71 $this->assertQueryResult($query, $expected, 'Full natural sort unsupported'); 112*5153720fSfkaag71 } 113*5153720fSfkaag71 114*5153720fSfkaag71 function testUnicodeSort() { 115*5153720fSfkaag71 $query = array ( 116*5153720fSfkaag71 'type' => 'select', 117*5153720fSfkaag71 'grouping'=>array(), 118*5153720fSfkaag71 'group' => array ( 119*5153720fSfkaag71 'type' => 'triple', 120*5153720fSfkaag71 'subject' => array ( 121*5153720fSfkaag71 'type' => 'variable', 122*5153720fSfkaag71 'text' => 'p' 123*5153720fSfkaag71 ), 124*5153720fSfkaag71 'predicate' => array ( 125*5153720fSfkaag71 'type' => 'literal', 126*5153720fSfkaag71 'text' => 'identifier' 127*5153720fSfkaag71 ), 128*5153720fSfkaag71 'object' => array ( 129*5153720fSfkaag71 'type' => 'variable', 130*5153720fSfkaag71 'text' => 'id' 131*5153720fSfkaag71 ) 132*5153720fSfkaag71 ), 133*5153720fSfkaag71 'projection' => array ( 134*5153720fSfkaag71 'p', 135*5153720fSfkaag71 'id' 136*5153720fSfkaag71 ), 137*5153720fSfkaag71 'ordering' => array ( 138*5153720fSfkaag71 array ( 139*5153720fSfkaag71 'variable' => 'id', 140*5153720fSfkaag71 'direction' => 'asc' 141*5153720fSfkaag71 ) 142*5153720fSfkaag71 ) 143*5153720fSfkaag71 ); 144*5153720fSfkaag71 145*5153720fSfkaag71 $expected = array ( 146*5153720fSfkaag71 array ( 147*5153720fSfkaag71 'p' => array('person:alice'), 148*5153720fSfkaag71 'id' => array('α') 149*5153720fSfkaag71 ), 150*5153720fSfkaag71 array ( 151*5153720fSfkaag71 'p' => array('person:bob'), 152*5153720fSfkaag71 'id' => array('Β') 153*5153720fSfkaag71 ), 154*5153720fSfkaag71 array ( 155*5153720fSfkaag71 'p' => array('person:carol'), 156*5153720fSfkaag71 'id' => array('γ') 157*5153720fSfkaag71 ) 158*5153720fSfkaag71 ); 159*5153720fSfkaag71 160*5153720fSfkaag71 $this->assertQueryResult($query, $expected, 'Case insensitive unicode sort unsupported'); 161*5153720fSfkaag71 } 162*5153720fSfkaag71 163*5153720fSfkaag71} 164