summaryrefslogtreecommitdiff
path: root/includes/database
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2008-11-13 21:08:16 +0000
committerDries Buytaert <dries@buytaert.net>2008-11-13 21:08:16 +0000
commit44c8391d327f589fb5e96bb7bbe0c08db1611441 (patch)
tree7fbf766b62bd09abfbb1c9c230528b7a49188ae0 /includes/database
parenta269b9cc1d224c1fd0fa63306c84896c37fef173 (diff)
downloadbrdo-44c8391d327f589fb5e96bb7bbe0c08db1611441.tar.gz
brdo-44c8391d327f589fb5e96bb7bbe0c08db1611441.tar.bz2
- Patch #321100 by hswong3i: empty insert statements are better handled now. Comes with tests.
Diffstat (limited to 'includes/database')
-rw-r--r--includes/database/mysql/query.inc4
-rw-r--r--includes/database/pgsql/query.inc4
-rw-r--r--includes/database/query.inc8
3 files changed, 15 insertions, 1 deletions
diff --git a/includes/database/mysql/query.inc b/includes/database/mysql/query.inc
index 58fc8eb22..f468e486c 100644
--- a/includes/database/mysql/query.inc
+++ b/includes/database/mysql/query.inc
@@ -16,6 +16,10 @@ class InsertQuery_mysql extends InsertQuery {
throw new PDOException('You may not specify the same field to have a value and a schema-default value.');
}
+ if (count($this->insertFields) + count($this->defaultFields) == 0) {
+ return NULL;
+ }
+
$last_insert_id = 0;
$max_placeholder = 0;
diff --git a/includes/database/pgsql/query.inc b/includes/database/pgsql/query.inc
index dc9054a99..a489cbeae 100644
--- a/includes/database/pgsql/query.inc
+++ b/includes/database/pgsql/query.inc
@@ -22,6 +22,10 @@ class InsertQuery_pgsql extends InsertQuery {
throw new PDOException('You may not specify the same field to have a value and a schema-default value.');
}
+ if (count($this->insertFields) + count($this->defaultFields) == 0) {
+ return NULL;
+ }
+
$schema = drupal_get_schema($this->table);
$stmt = $this->connection->prepareQuery((string)$this);
diff --git a/includes/database/query.inc b/includes/database/query.inc
index 5ecc8ce6e..a5b2ae313 100644
--- a/includes/database/query.inc
+++ b/includes/database/query.inc
@@ -382,7 +382,9 @@ class InsertQuery extends Query {
* was given multiple sets of values to insert, the return value is
* undefined. If the query is flagged "delayed", then the insert ID
* won't be created until later when the query actually runs so the
- * return value is also undefined.
+ * return value is also undefined. If no fields are specified, this
+ * method will do nothing and return NULL. That makes it safe to use
+ * in multi-insert loops.
*/
public function execute() {
@@ -394,6 +396,10 @@ class InsertQuery extends Query {
throw new PDOException('You may not specify the same field to have a value and a schema-default value.');
}
+ if (count($this->insertFields) + count($this->defaultFields) == 0) {
+ return NULL;
+ }
+
// Each insert happens in its own query in the degenerate case. However,
// we wrap it in a transaction so that it is atomic where possible. On many
// databases, such as SQLite, this is also a notable performance boost.