Skip to content
Permalink
Browse files

It turns out that SQLite 3.7.11+ implements multi-inserts!

Version 3.8 is the minimum sqlite version fro php 5.5
  • Loading branch information...
lorenzo committed Mar 25, 2016
1 parent 799c7c2 commit 3cbb89cefbd88f4ab973ef701b685dd8552604c1
Showing with 0 additions and 53 deletions.
  1. +0 −53 src/Database/Dialect/SqliteDialectTrait.php
@@ -149,59 +149,6 @@ protected function _transformFunctionExpression(FunctionExpression $expression)
}
}
/**
* Transforms an insert query that is meant to insert multiple rows at a time,
* otherwise it leaves the query untouched.
*
* The way SQLite works with multi insert is by having multiple select statements
* joined with UNION.
*
* @param \Cake\Database\Query $query The query to translate
* @return \Cake\Database\Query
*/
protected function _insertQueryTranslator($query)
{
$v = $query->clause('values');
if (count($v->values()) === 1 || $v->query()) {
return $query;
}
$newQuery = $query->connection()->newQuery();
$cols = $v->columns();
$placeholder = 0;
$replaceQuery = false;
foreach ($v->values() as $k => $val) {
$fillLength = count($cols) - count($val);
if ($fillLength > 0) {
$val = array_merge($val, array_fill(0, $fillLength, null));
}
foreach ($val as $col => $attr) {
if (!($attr instanceof ExpressionInterface)) {
$val[$col] = sprintf(':c%d', $placeholder);
$placeholder++;
}
}
$select = array_combine($cols, $val);
if ($k === 0) {
$replaceQuery = true;
$newQuery->select($select);
continue;
}
$q = $newQuery->connection()->newQuery();
$newQuery->unionAll($q->select($select));
}
if ($replaceQuery) {
$v->query($newQuery);
}
return $query;
}
/**
* Get the schema dialect.
*

0 comments on commit 3cbb89c

Please sign in to comment.
You can’t perform that action at this time.