diff --git a/lib/SP/Services/Backup/FileBackupService.php b/lib/SP/Services/Backup/FileBackupService.php
index 714e04d9..83cd5b9b 100644
--- a/lib/SP/Services/Backup/FileBackupService.php
+++ b/lib/SP/Services/Backup/FileBackupService.php
@@ -291,7 +291,7 @@ final class FileBackupService extends Service
$queryData->setQuery('SELECT * FROM `' . $tableName . '`');
// Consulta para obtener los registros de la tabla
- $queryRes = $db->doQueryRaw($queryData, [\PDO::ATTR_CURSOR => \PDO::CURSOR_SCROLL]);
+ $queryRes = $db->doQueryRaw($queryData, [\PDO::ATTR_CURSOR => \PDO::CURSOR_SCROLL], false);
$numColumns = $queryRes->columnCount();
diff --git a/lib/SP/Services/Install/Installer.php b/lib/SP/Services/Install/Installer.php
index 7f151669..c0ac0e7a 100644
--- a/lib/SP/Services/Install/Installer.php
+++ b/lib/SP/Services/Install/Installer.php
@@ -57,7 +57,7 @@ final class Installer extends Service
*/
const VERSION = [3, 0, 0];
const VERSION_TEXT = '3.0-beta';
- const BUILD = 18110503;
+ const BUILD = 18110601;
/**
* @var DatabaseSetupInterface
diff --git a/lib/SP/Storage/Database/Database.php b/lib/SP/Storage/Database/Database.php
index a9d09942..032c1a31 100644
--- a/lib/SP/Storage/Database/Database.php
+++ b/lib/SP/Storage/Database/Database.php
@@ -164,18 +164,15 @@ final class Database implements DatabaseInterface
* Realizar una consulta a la BBDD.
*
* @param $queryData QueryData Los datos de la consulta
- * @param $getRawData bool realizar la consulta para obtener registro a registro
*
* @return QueryResult
* @throws QueryException
* @throws ConstraintException
*/
- public function doQuery(QueryData $queryData, $getRawData = false)
+ public function doQuery(QueryData $queryData): QueryResult
{
$stmt = $this->prepareQueryData($queryData);
- $this->setFetchMode($queryData, $stmt);
-
$this->eventDispatcher->notifyEvent('database.query',
new Event($this, EventMessage::factory()
->addDescription($queryData->getQuery())
@@ -185,7 +182,7 @@ final class Database implements DatabaseInterface
if (preg_match("/^(select|show)\s/i", $queryData->getQuery())) {
$this->numFields = $stmt->columnCount();
- return new QueryResult($stmt->fetchAll());
+ return new QueryResult($this->fetch($queryData, $stmt));
}
return (new QueryResult())
@@ -279,18 +276,18 @@ final class Database implements DatabaseInterface
/**
* @param QueryData $queryData
* @param PDOStatement $stmt
+ *
+ * @return array
*/
- private function setFetchMode(QueryData $queryData, PDOStatement $stmt)
+ private function fetch(QueryData $queryData, PDOStatement $stmt): array
{
if ($queryData->isUseKeyPair()) {
- $stmt->setFetchMode(PDO::FETCH_KEY_PAIR);
- } elseif (null !== $queryData->getMapClass()) {
- $stmt->setFetchMode(PDO::FETCH_INTO, $queryData->getMapClass());
+ return $stmt->fetchAll(PDO::FETCH_KEY_PAIR);
} elseif ($queryData->getMapClassName()) {
- $stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, $queryData->getMapClassName());
- } else {
- $stmt->setFetchMode(PDO::FETCH_OBJ);
+ return $stmt->fetchAll(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, $queryData->getMapClassName());
}
+
+ return $stmt->fetchAll();
}
/**
@@ -317,15 +314,24 @@ final class Database implements DatabaseInterface
/**
* Don't fetch records and return prepared statement
*
- * @param QueryData $queryData
- * @param array|null $options
+ * @param QueryData $queryData
+ * @param array $options
+ * @param bool $buffered Set buffered behavior (useful for big datasets)
*
* @return \PDOStatement
* @throws ConstraintException
* @throws QueryException
*/
- public function doQueryRaw(QueryData $queryData, array $options = [])
+ public function doQueryRaw(QueryData $queryData, array $options = [], bool $buffered = null)
{
+ if ($buffered === false
+ && $this->dbHandler instanceof MySQLHandler
+ ) {
+ $this->dbHandler
+ ->getConnection()
+ ->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
+ }
+
return $this->prepareQueryData($queryData, $options);
}
diff --git a/lib/SP/Storage/Database/DatabaseInterface.php b/lib/SP/Storage/Database/DatabaseInterface.php
index ac0fb82b..687a84c5 100644
--- a/lib/SP/Storage/Database/DatabaseInterface.php
+++ b/lib/SP/Storage/Database/DatabaseInterface.php
@@ -43,7 +43,7 @@ interface DatabaseInterface
* @throws QueryException
* @throws ConstraintException
*/
- public function doQuery(QueryData $queryData);
+ public function doQuery(QueryData $queryData): QueryResult;
/**
* Don't fetch records and return prepared statement
diff --git a/lib/SP/Storage/Database/MySQLHandler.php b/lib/SP/Storage/Database/MySQLHandler.php
index 4fb4e8af..b6e68ef7 100644
--- a/lib/SP/Storage/Database/MySQLHandler.php
+++ b/lib/SP/Storage/Database/MySQLHandler.php
@@ -40,7 +40,8 @@ final class MySQLHandler implements DBStorageInterface
const PDO_OPTS = [
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
- PDO::MYSQL_ATTR_FOUND_ROWS => true
+ PDO::MYSQL_ATTR_FOUND_ROWS => true,
+ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ
];
/**
* @var PDO
diff --git a/lib/SP/Storage/Database/QueryData.php b/lib/SP/Storage/Database/QueryData.php
index bf754255..d158c525 100644
--- a/lib/SP/Storage/Database/QueryData.php
+++ b/lib/SP/Storage/Database/QueryData.php
@@ -163,22 +163,6 @@ final class QueryData
$this->mapClassName = $mapClassName;
}
- /**
- * @return DataModelBase
- */
- public function getMapClass()
- {
- return $this->mapClass;
- }
-
- /**
- * @param DataModelBase $mapClass
- */
- public function setMapClass(DataModelBase $mapClass)
- {
- $this->mapClass = $mapClass;
- }
-
/**
* @return bool
*/
diff --git a/tests/res/config/config.xml b/tests/res/config/config.xml
index 1149a15a..a14c29cb 100644
--- a/tests/res/config/config.xml
+++ b/tests/res/config/config.xml
@@ -9,11 +9,11 @@
1
1
- beb03b6bfd783be4fa25698979a225020ba40b18
+ 5185a5ba55cadceb1968623709dddb1d7626ed44
0
0
- 1541439997
- 7177ada035ddf5b691cceed5315deec47845fb15
+ 1541544393
+ f292660712a4970a14bb85c93d08c5611d8077a4
@@ -32,7 +32,7 @@
0
- 60d51abafc8742c1a1cbace3d03040a48238e654
+ 9d4a01b3e797c5d98f932e13ef6666d2fe5b52e9
- PDF
- JPG