Commit 38a4a23c authored by zYne's avatar zYne

rawSql parser fixed

parent 5059dbc9
......@@ -501,7 +501,7 @@ class Doctrine_Query extends Doctrine_Hydrate {
* @param string $e2 the second bracket, usually ')'
*
*/
public static function bracketExplode($str,$d,$e1,$e2) {
public static function bracketExplode($str,$d,$e1 = '(',$e2 = ')') {
$str = explode("$d",$str);
$i = 0;
$term = array();
......
......@@ -53,7 +53,15 @@ class Doctrine_RawSql extends Doctrine_Hydrate {
return $this;
}
/**
* get
*/
public function get($name) {
if( ! isset($this->parts[$name]))
throw new Doctrine_Exception('Unknown query part '.$name);
return $this->parts[$name];
}
/**
* parseQuery
*
......@@ -66,7 +74,7 @@ class Doctrine_RawSql extends Doctrine_Hydrate {
$this->fields = $m[1];
$this->clear();
$e = explode(" ", $query);
$e = Doctrine_Query::bracketExplode($query,' ');
foreach($e as $k => $part):
$low = strtolower($part);
......@@ -78,7 +86,10 @@ class Doctrine_RawSql extends Doctrine_Hydrate {
case "offset":
case "having":
$p = $low;
if( ! isset($parts[$low]))
$parts[$low] = array();
else
$count[$low]++;
break;
case "order":
case "group":
......@@ -92,7 +103,10 @@ class Doctrine_RawSql extends Doctrine_Hydrate {
case "by":
continue;
default:
$parts[$p][] = $part;
if( ! isset($parts[$p][0]))
$parts[$p][0] = $part;
else
$parts[$p][0] .= ' '.$part;
endswitch;
endforeach;
......
<?php
class Doctrine_RawSql_TestCase extends Doctrine_UnitTestCase {
public function testQueryParser() {
$sql = "SELECT {p.*} FROM photos p";
$query = new Doctrine_RawSql($this->session);
$query->parseQuery($sql);
$this->assertEqual($query->from, array('photos p'));
$sql = "SELECT {p.*} FROM (SELECT p.* FROM photos p LEFT JOIN photos_tags t ON t.photo_id = p.id WHERE t.tag_id = 65) p LEFT JOIN photos_tags t ON t.photo_id = p.id WHERE p.can_see = -1 AND t.tag_id = 62 LIMIT 200";
$query->parseQuery($sql);
$this->assertEqual($query->from, array("(SELECT p.* FROM photos p LEFT JOIN photos_tags t ON t.photo_id = p.id WHERE t.tag_id = 65) p LEFT JOIN photos_tags t ON t.photo_id = p.id"));
$this->assertEqual($query->limit, array(200));
}
public function testAsteriskOperator() {
// Selecting with *
......
......@@ -28,7 +28,7 @@ require_once("QueryLimitTestCase.php");
error_reporting(E_ALL);
$test = new GroupTest("Doctrine Framework Unit Tests");
/**
$test->addTestCase(new Doctrine_RecordTestCase());
$test->addTestCase(new Doctrine_SessionTestCase());
......@@ -53,8 +53,6 @@ $test->addTestCase(new Doctrine_ViewTestCase());
$test->addTestCase(new Doctrine_Cache_Query_SqliteTestCase());
$test->addTestCase(new Doctrine_RawSql_TestCase());
$test->addTestCase(new Doctrine_CustomPrimaryKeyTestCase());
$test->addTestCase(new Doctrine_Filter_TestCase());
......@@ -68,7 +66,8 @@ $test->addTestCase(new Doctrine_CollectionTestCase());
$test->addTestCase(new Doctrine_QueryTestCase());
$test->addTestCase(new Doctrine_Query_Limit_TestCase());
*/
$test->addTestCase(new Doctrine_RawSql_TestCase());
//$test->addTestCase(new Doctrine_Cache_FileTestCase());
//$test->addTestCase(new Doctrine_Cache_SqliteTestCase());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment