From 2b3da3c9a8c373bf592a6b8abb96148b45106f3a Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Mon, 2 Nov 2015 18:37:20 +1300 Subject: [PATCH] BUG Fix decimal not supporting non-integer values --- .travis.yml | 10 +++++++++- code/PostgreSQLSchemaManager.php | 6 +++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index f638b3b..59ba062 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,15 @@ php: env: matrix: - - DB=POSTGRESQL CORE_RELEASE=master + - DB=POSTGRESQL CORE_RELEASE=3.2 + + +matrix: + include: + - php: 5.6 + env: DB=POSTGRESQL CORE_RELEASE=3.2 + - php: 5.5 + env: DB=POSTGRESQL CORE_RELEASE=3 before_script: - composer self-update || true diff --git a/code/PostgreSQLSchemaManager.php b/code/PostgreSQLSchemaManager.php index abe0ff4..b737c30 100644 --- a/code/PostgreSQLSchemaManager.php +++ b/code/PostgreSQLSchemaManager.php @@ -442,7 +442,7 @@ class PostgreSQLSchemaManager extends DBSchemaManager { // TODO: this returns an empty array for the following string: int(11) not null auto_increment // on second thoughts, why is an auto_increment field being passed through? - $pattern = '/^([\w()]+)\s?((?:not\s)?null)?\s?(default\s[\w\']+)?\s?(check\s[\w()\'",\s]+)?$/i'; + $pattern = '/^([\w(\,)]+)\s?((?:not\s)?null)?\s?(default\s[\w\.\']+)?\s?(check\s[\w()\'",\s]+)?$/i'; preg_match($pattern, $colSpec, $matches); if(sizeof($matches)==0) return ''; @@ -598,7 +598,7 @@ class PostgreSQLSchemaManager extends DBSchemaManager { break; case 'numeric': - $output[$field['column_name']]='decimal(' . $field['numeric_precision'] . ',' . $field['numeric_scale'] . ') default ' . (int)$field['column_default']; + $output[$field['column_name']]='decimal(' . $field['numeric_precision'] . ',' . $field['numeric_scale'] . ') default ' . floatval($field['column_default']); break; case 'integer': @@ -1026,7 +1026,7 @@ class PostgreSQLSchemaManager extends DBSchemaManager { $defaultValue = ''; if(isset($values['default']) && is_numeric($values['default'])) { - $defaultValue = ' default ' . $values['default']; + $defaultValue = ' default ' . floatval($values['default']); } if($asDbValue) {