From 5b70ba1889fcf3178184fa7a9960efdfeb73d08b Mon Sep 17 00:00:00 2001 From: danil zakablukovskii Date: Mon, 8 Jun 2015 00:21:20 +0200 Subject: [PATCH] fixed bug, where empty array for DynamicActiveRecord::dynColSqlMaria() creates invlid COLUMN_CREATE command --- CHANGELOG.md | 4 ++++ DynamicActiveRecord.php | 16 ++++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ac35266..9d6b501 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,3 +11,7 @@ ## 0.2.0 June 6 2015 - Enh: New attribute name getter method DynamicActiveRecord::allAttributes() + +## 0.2.1 June 8 2015 + +- Bug: Empty array in DynamicActiveRecord::dynColSqlMaria() creates invalid COLUMN_CREATE() command diff --git a/DynamicActiveRecord.php b/DynamicActiveRecord.php index 0936904..96e5bdb 100644 --- a/DynamicActiveRecord.php +++ b/DynamicActiveRecord.php @@ -148,11 +148,14 @@ public static function find() * @return string SQL for a DB Expression * @throws \yii\base\Exception */ - private static function dynColSqlMaria($attrs, & $params) + private static function dynColSqlMaria(array $attrs, & $params) { $sql = []; foreach ($attrs as $key => $value) { - if (!is_scalar($value) && empty($value)) { + if (is_object($value)) { + $value = (array)$value; + } + if ($value === [] || $value === null) { continue; } @@ -160,15 +163,16 @@ private static function dynColSqlMaria($attrs, & $params) $phValue = static::placeholder(); $sql[] = $phKey; $params[$phKey] = $key; - if (is_scalar($value) || $value === null) { + + if (is_scalar($value)) { $sql[] = $phValue; $params[$phValue] = $value; - } else { - $sql[] = static::dynColSqlMaria((array) $value, $params); + } elseif (is_array($value)) { + $sql[] = static::dynColSqlMaria($value, $params); } } - return 'COLUMN_CREATE(' . implode(',', $sql) . ')'; + return $sql === [] ? 'null' : 'COLUMN_CREATE(' . implode(',', $sql) . ')'; } /**