diff --git a/lib/SimpleSAML/Database.php b/lib/SimpleSAML/Database.php index e66288b2d8fbb4307f2eb4babee1ffd1a0daefaf..1012e116e6d7cf7add3a6774b648dbfd4c8372a0 100644 --- a/lib/SimpleSAML/Database.php +++ b/lib/SimpleSAML/Database.php @@ -260,14 +260,15 @@ class Database * @param string $stmt Prepared SQL statement * @param array $params Parameters * - * @return \PDOStatement object + * @return int The number of rows affected by the query. */ public function write($stmt, $params = array()) { $db = $this->dbMaster; if (is_array($params)) { - return $this->query($db, $stmt, $params); + $obj = $this->query($db, $stmt, $params); + return $obj->rowCount(); } else { return $this->exec($db, $stmt); } diff --git a/lib/SimpleSAML/Metadata/MetaDataStorageHandlerPdo.php b/lib/SimpleSAML/Metadata/MetaDataStorageHandlerPdo.php index cb66c36ca5c1ab0b22299711b2fdd9b70d9ffb3c..e8981169d4984b18b9fb0d0ebd8e8b766b1bd397 100644 --- a/lib/SimpleSAML/Metadata/MetaDataStorageHandlerPdo.php +++ b/lib/SimpleSAML/Metadata/MetaDataStorageHandlerPdo.php @@ -196,18 +196,18 @@ class SimpleSAML_Metadata_MetaDataStorageHandlerPdo extends SimpleSAML_Metadata_ ); if ($retrivedEntityIDs !== false && count($retrivedEntityIDs) > 0) { - $stmt = $this->db->write( + $rows = $this->db->write( "UPDATE $tableName SET entity_data = :entity_data WHERE entity_id = :entity_id", $params ); } else { - $stmt = $this->db->write( + $rows = $this->db->write( "INSERT INTO $tableName (entity_id, entity_data) VALUES (:entity_id, :entity_data)", $params ); } - return 1 === $stmt->rowCount(); + return $rows === 1; } @@ -229,16 +229,29 @@ class SimpleSAML_Metadata_MetaDataStorageHandlerPdo extends SimpleSAML_Metadata_ /** * Initialize the configured database + * + * @return int|false The number of SQL statements successfully executed, false if some error occurred. */ public function initDatabase() { + $stmt = 0; + $fine = true; foreach ($this->supportedSets as $set) { $tableName = $this->getTableName($set); - $this->db->write( + $rows = $this->db->write( "CREATE TABLE IF NOT EXISTS $tableName (entity_id VARCHAR(255) PRIMARY KEY NOT NULL, entity_data ". "TEXT NOT NULL)" ); + if ($rows === 0) { + $fine = false; + } else { + $stmt += $rows; + } + } + if (!$fine) { + return false; } + return $stmt; } } diff --git a/tests/lib/SimpleSAML/DatabaseTest.php b/tests/lib/SimpleSAML/DatabaseTest.php index 7ab129fd23f1ea588268dc85534c600b55cf41f9..833d2e0ae618fe631f51febd4b9456d5cd0ecd0f 100644 --- a/tests/lib/SimpleSAML/DatabaseTest.php +++ b/tests/lib/SimpleSAML/DatabaseTest.php @@ -251,7 +251,7 @@ class SimpleSAML_DatabaseTest extends PHPUnit_Framework_TestCase "INSERT INTO $table (ssp_key, ssp_value) VALUES (:ssp_key, :ssp_value)", array('ssp_key' => array($ssp_key, PDO::PARAM_INT), 'ssp_value' => $ssp_value) ); - $this->assertEquals(1, $stmt->rowCount(), "Could not insert data into $table."); + $this->assertEquals(1, $stmt, "Could not insert data into $table."); $query2 = $this->db->read("SELECT * FROM $table WHERE ssp_key = :ssp_key", array('ssp_key' => $ssp_key)); $data = $query2->fetch();