Max F 4 lat temu
rodzic
commit
21f487f932

+ 3 - 1
src/App.php

@@ -200,7 +200,9 @@ class App
 			if (empty($dsn) && defined('DB_DSN')) {
 				$dsn = DB_DSN;
 			}
-
+			if (empty($dsn)) {
+				$dsn = App::getConfig('database', $instance_name);
+			}
 			//$instances[$instance_name] = new SqlDb($dsn);
 
 			$db = App::getData('app')->get('db');

+ 7 - 5
src/Database/Sql/Drivers/Mysqli/MySqliDriver.php

@@ -41,7 +41,7 @@ class MySqliDriver extends SqlDriver implements SqlDriverInterface
 	}
 
 
-	public function execute($query)
+	public function execute($query, $mode_use_result=false)
 	{
 		if (! $this->connected) {
 			if ($this->db->throwOnConnectionError) {
@@ -50,10 +50,12 @@ class MySqliDriver extends SqlDriver implements SqlDriverInterface
 			return null;
 		}
 
-		$mode_use_result = false; // TODO: ce mode permet de ne pas stocker tout le resultat en local (ideal pour les gros resultats qui depassent la RAM)
-		if ($mode_use_result && $this->current_recordset) {
-			mysqli_free_result($this->current_recordset);
-			$this->current_recordset = null;
+		//$mode_use_result = false; // TODO: ce mode permet de ne pas stocker tout le resultat en local (ideal pour les gros resultats qui depassent la RAM)
+		if ($mode_use_result) {
+			if ($this->current_recordset) {
+				mysqli_free_result($this->current_recordset);
+				$this->current_recordset = null;
+			}
 
 			$rs = mysqli_query($this->conn, $query, MYSQLI_USE_RESULT);
 

+ 10 - 0
src/Database/Sql/Drivers/Mysqli/MysqliResultset.php

@@ -53,6 +53,16 @@ class MysqliResultset extends SqlResultset implements SqlResultsetInterface
 		return $rows;
 	}
 
+	public function fetchAllGenerator()
+	{
+		while ($row = $this->fetchOne()) {
+			yield $row;
+		}
+		//$this->rs->free();
+		mysqli_free_result($this->rs);
+		$this->rs = null;
+	}
+
 
 	public function getRowsCount()
 	{

+ 11 - 6
src/Database/Sql/SqlQuery.php

@@ -87,7 +87,7 @@ class SqlQuery
 	}
 
 
-	public function execute($query=null, $params=[], $nb_tries=1)
+	public function execute($query=null, $params=[], $nb_tries=1, $mode_use_result=false)
 	{
 		if (! $this->db->isConnected()) {
 			$this->db->connect();
@@ -133,7 +133,7 @@ class SqlQuery
 
 		$mem_start = memory_get_usage();
 
-		$rs = $this->db->getDriver()->execute($_query);
+		$rs = $this->db->getDriver()->execute($_query, $mode_use_result);
 
 		$mem_end = memory_get_usage();
 		$memory_used = $mem_end - $mem_start;
@@ -226,10 +226,10 @@ class SqlQuery
 
 	
 
-	public function executeSelect($query, $params=[])
+	public function executeSelect($query, $params=[], $returns_generator=false)
 	{
 		// Alias of executeSelectAll
-		return $this->executeSelectAll($query, $params);
+		return $this->executeSelectAll($query, $params, $returns_generator);
 	}
 
 	public function executeSelectOne($query, $params=[])
@@ -242,9 +242,14 @@ class SqlQuery
 		return $this->execute($query, $params)->fetchColumn($column_name);
 	}
 
-	public function executeSelectAll($query, $params=[])
+	public function executeSelectAll($query, $params=[], $returns_generator=false)
 	{
-		return $this->execute($query, $params)->fetchAll();
+		if ($returns_generator) {
+			return $this->execute($query, $params, 1, true)->fetchAllGenerator();
+
+		} else {
+			return $this->execute($query, $params)->fetchAll();
+		}
 	}
 
 

+ 4 - 1
src/Database/Sql/SqlTable.php

@@ -261,7 +261,10 @@ class SqlTable
 			return [];
 		}
 
-		return $this->db->createQuery()->executeSelectAll($query);
+		$params = [];
+		$returns_generator = !empty($options['generator']);
+
+		return $this->db->createQuery()->executeSelectAll($query, $params, $returns_generator);
 	}
 
 	public function getAllWithFoundRows($where=null, $options=[]) /* : array */