From 69f35d17fcef5ab7d192b7795cf7f1b3d2170935 Mon Sep 17 00:00:00 2001 From: Mark Story Date: Sat, 25 May 2013 22:48:44 -0400 Subject: [PATCH] Multi-row insert's do not work in Sqlite right now. I've fixed some of the issues but not all of them. There is still a problem with nulls being inserted in every column. --- lib/Cake/Database/Dialect/SqliteDialectTrait.php | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/Cake/Database/Dialect/SqliteDialectTrait.php b/lib/Cake/Database/Dialect/SqliteDialectTrait.php index 62f5dd4e350..3000708a00a 100644 --- a/lib/Cake/Database/Dialect/SqliteDialectTrait.php +++ b/lib/Cake/Database/Dialect/SqliteDialectTrait.php @@ -102,32 +102,33 @@ protected function _insertQueryTranslator($query) { return $query; } - $cols = $v->columns(); $newQuery = $query->connection()->newQuery(); + $cols = $v->columns(); $values = []; - debug($cols); foreach ($v->values() as $k => $val) { $values[] = $val; $fillLength = count($cols) - count($val); if ($fillLength > 0) { $val = array_merge($val, array_fill(0, $fillLength, null)); } + // TODO this doesn't work all columns are inserted as null. $val = array_map(function($val) { return $val instanceof ExpressionInterface ? $val : '?'; }, $val); + $select = array_combine($cols, $val); if ($k === 0) { - array_unshift($values, $newQuery->select(array_combine($cols, $val))); + array_unshift($values, $newQuery->select($select)); continue; } $q = $newQuery->connection()->newQuery(); - $newQuery->union($q->select(array_combine($cols, $val)), true); + $newQuery->union($q->select($select), true); } - $v = clone $v; - $v->values($values); - return $query->values($v); + $v->values([$newQuery]); + $query->values($v); + return $query; } /**