[Fusionforge-commits] r8497 - in trunk: gforge/common/include tests/unit/utils

Roland Mas lolando at libremir.placard.fr.eu.org
Thu Dec 10 14:15:50 CET 2009


Author: lolando
Date: 2009-12-10 14:15:50 +0100 (Thu, 10 Dec 2009)
New Revision: 8497

Modified:
   trunk/gforge/common/include/database-pgsql.php
   trunk/tests/unit/utils/AllTests.php
   trunk/tests/unit/utils/DbUtilsTests.php
Log:
Fixed db_construct_qpa API and unit tests

Modified: trunk/gforge/common/include/database-pgsql.php
===================================================================
--- trunk/gforge/common/include/database-pgsql.php	2009-12-10 13:15:36 UTC (rev 8496)
+++ trunk/gforge/common/include/database-pgsql.php	2009-12-10 13:15:50 UTC (rev 8497)
@@ -471,7 +471,7 @@
 }
 
 function db_construct_qpa ($old_qpa = false, $new_sql = '', $new_params = array ()) {
-	if (!is_array($old_qpa), count ($old_qpa) < 3) {
+	if (!is_array($old_qpa) || count ($old_qpa) < 3) {
 		$old_qpa = array ('', array(), 0) ;
 	}
 	$old_sql = $old_qpa[0] ;
@@ -483,10 +483,14 @@
 	$max = $old_max ;
 
 	foreach ($new_params as $index => $value) {
-		$sql = strreplace ($new_sql, '$'.$index, '$'.($index + $old_max)) ;
+		$i = count ($new_params) - $index ;
+		$new_sql = preg_replace ('/\\$'.$i.'(?!\d)/', '$_'.($i + $old_max), $new_sql) ;
 		$params[] = $value ;
 		$max++ ;
 	}
+	$new_sql = str_replace ('$_', '$', $new_sql) ;
+
+	$sql .= $new_sql ;
 	
 	return array ($sql, $params, $max) ;
 }

Modified: trunk/tests/unit/utils/AllTests.php
===================================================================
--- trunk/tests/unit/utils/AllTests.php	2009-12-10 13:15:36 UTC (rev 8496)
+++ trunk/tests/unit/utils/AllTests.php	2009-12-10 13:15:50 UTC (rev 8497)
@@ -2,6 +2,7 @@
 
 require_once 'PHPUnit/Framework.php';
 require_once dirname(__FILE__).'/UtilsTests.php';
+require_once dirname(__FILE__).'/DbUtilsTests.php';
 require_once dirname(__FILE__).'/TextSanitizerTests.php';
  
 class Utils_AllTests
@@ -12,6 +13,7 @@
  
         $suite->addTestSuite('Utils_Tests');
         $suite->addTestSuite('TextSanitizerTests');
+        $suite->addTestSuite('Database_Utils_Tests');
  
         return $suite;
     }

Modified: trunk/tests/unit/utils/DbUtilsTests.php
===================================================================
--- trunk/tests/unit/utils/DbUtilsTests.php	2009-12-10 13:15:36 UTC (rev 8496)
+++ trunk/tests/unit/utils/DbUtilsTests.php	2009-12-10 13:15:50 UTC (rev 8497)
@@ -1,7 +1,7 @@
 <?php
 
 require_once 'PHPUnit/Framework/TestCase.php';
-require_once dirname(__FILE__) . '/../../../gforge/common/database/database-pgsql.php';
+require_once dirname(__FILE__) . '/../../../gforge/common/include/database-pgsql.php';
 
 /**
  * Simple tests for the utils library.
@@ -16,30 +16,34 @@
 	/**
 	 * test the validate_hostname function.
 	 */
-	public function testHostname()
+	public function testConstructQPA()
 	{
 		$qpa = db_construct_qpa () ;
-		$this->assertTrue($qpa[0], '');
+		$this->assertEquals($qpa[0], '');
 
-		$qpa = db_constract_qpa ('SELECT foo FROM bar') ;
-		$this->assertTrue($qpa[0], 'SELECT foo FROM bar');
-		$this->assertTrue(count($qpa[1]), 0);
-		$this->assertTrue($qpa[2], 0);
+		$qpa = db_construct_qpa ($qpa, 'SELECT foo FROM bar') ;
+		$this->assertEquals($qpa[0], 'SELECT foo FROM bar');
+		$this->assertEquals(count($qpa[1]), 0);
+		$this->assertEquals($qpa[2], 0);
 
 		$qpa = db_construct_qpa ($qpa, ' WHERE name = $1', array ('nrst')) ;
-		$this->assertTrue($qpa[0], 'SELECT foo FROM bar WHERE name = $1');
+		$this->assertEquals($qpa[0], 'SELECT foo FROM bar WHERE name = $1');
 
 		$qpa = db_construct_qpa ($qpa, ' AND mail = $1 AND addr LIKE $2', array ('auie at foobar',
 									'bépo')) ;
-		$this->assertTrue($qpa[0], 'SELECT foo FROM bar WHERE name = $1 AND mail = $2 AND addr LIKE $3');
+		$this->assertEquals($qpa[0], 'SELECT foo FROM bar WHERE name = $1 AND mail = $2 AND addr LIKE $3');
 
 		$qpa = db_construct_qpa ($qpa, ' AND quux = $1', array ('jldv')) ;
-		$this->assertTrue($qpa[0], 'SELECT foo FROM bar WHERE name = $1 AND mail = $2 AND addr LIKE $3 AND quux = $4');
-		$this->assertTrue($qpa[1][0], 'nrst') ;
-		$this->assertTrue($qpa[1][1], 'auie') ;
-		$this->assertTrue($qpa[1][2], 'bépo') ;
-		$this->assertTrue($qpa[1][3], 'jldv') ;
-		$this->assertTrue($qpa[2], 4) ;		
+		$this->assertEquals($qpa[0], 'SELECT foo FROM bar WHERE name = $1 AND mail = $2 AND addr LIKE $3 AND quux = $4');
+		$this->assertEquals($qpa[1], array ('nrst', 'auie at foobar', 'bépo', 'jldv')) ;
+		$this->assertEquals($qpa[2], 4) ;		
+
+		$qpa = db_construct_qpa ($qpa, ' AND long1 = $1 AND long2 = $2 AND long3 = $3 AND long4 = $4 AND long5 = $5 AND long6 = $6 AND long7 = $7 AND long8 = $8 AND long9 = $9 AND long10 = $10 AND long11 = $11 AND long12 = $12', array (1,2,3,4,5,6,7,8,9,10,11,12)) ;
+		$this->assertEquals($qpa[0], 'SELECT foo FROM bar WHERE name = $1 AND mail = $2 AND addr LIKE $3 AND quux = $4 AND long1 = $5 AND long2 = $6 AND long3 = $7 AND long4 = $8 AND long5 = $9 AND long6 = $10 AND long7 = $11 AND long8 = $12 AND long9 = $13 AND long10 = $14 AND long11 = $15 AND long12 = $16') ;
+
+		$this->assertEquals($qpa[1], array ('nrst', 'auie at foobar', 'bépo', 'jldv', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)) ;
+		$this->assertEquals($qpa[2], 16) ;		
+
 	}
 }
 




More information about the Fusionforge-commits mailing list