From be8693f39f827e0b0666f9a6391f1e3e1be9c068 Mon Sep 17 00:00:00 2001 From: mgrauer Date: Thu, 1 Oct 2015 19:50:37 +0000 Subject: [PATCH] Cleave tracker_scalar param to tracker_param --- modules/tracker/configs/module.ini | 2 +- modules/tracker/database/upgrade/1.2.2.php | 56 ++++++++++++++ .../tracker/models/base/ParamModelBase.php | 49 ++++++++++++ .../tracker/models/base/ScalarModelBase.php | 27 +++++-- modules/tracker/models/dao/ParamDao.php | 76 +++++++++++++++++++ modules/tracker/models/pdo/ParamModel.php | 26 +++++++ modules/tracker/models/pdo/ScalarModel.php | 1 + 7 files changed, 228 insertions(+), 9 deletions(-) create mode 100644 modules/tracker/database/upgrade/1.2.2.php create mode 100644 modules/tracker/models/base/ParamModelBase.php create mode 100644 modules/tracker/models/dao/ParamDao.php create mode 100644 modules/tracker/models/pdo/ParamModel.php diff --git a/modules/tracker/configs/module.ini b/modules/tracker/configs/module.ini index a3811ebf2..85d30b929 100644 --- a/modules/tracker/configs/module.ini +++ b/modules/tracker/configs/module.ini @@ -6,4 +6,4 @@ description = "Track scalar results over time" category = "Visualization" dependencies = api,scheduler uuid = "3048a9fa-89ab-4e61-a55e-a49379fa6dc" -version = "1.2.0" +version = "1.2.2" diff --git a/modules/tracker/database/upgrade/1.2.2.php b/modules/tracker/database/upgrade/1.2.2.php new file mode 100644 index 000000000..a81364954 --- /dev/null +++ b/modules/tracker/database/upgrade/1.2.2.php @@ -0,0 +1,56 @@ +db->query( + 'CREATE TABLE IF NOT EXISTS `tracker_param` ('. + ' `param_id` bigint(20) NOT NULL AUTO_INCREMENT,'. + ' `scalar_id` bigint(20) NOT NULL,'. + ' `param_name` varchar(255) NOT NULL,'. + ' `param_type` enum(\'text\', \'numeric\') NOT NULL,'. + ' `text_value` text,'. + ' `numeric_value` double,'. + ' PRIMARY KEY (`param_id`),'. + ' KEY (`param_name`)'. + ') DEFAULT CHARSET=utf8;'); + } + + /** Upgrade a PostgreSQL database. */ + public function pgsql() + { + $this->db->query( + 'CREATE TABLE IF NOT EXISTS "tracker_param" ('. + ' "param_id" serial PRIMARY KEY,'. + ' "scalar_id" bigint NOT NULL,'. + ' "param_name" character varying(255) NOT NULL,'. + ' "param_type" text CHECK (param_type in (\'text\', \'numeric\')),'. + ' "text_value" text,'. + ' "numeric_value" double precision);' + ); + $this->db->query('CREATE INDEX "tracker_param_param_name_idx" on "tracker_param" ("param_name");'); + } +} diff --git a/modules/tracker/models/base/ParamModelBase.php b/modules/tracker/models/base/ParamModelBase.php new file mode 100644 index 000000000..4705b7bc9 --- /dev/null +++ b/modules/tracker/models/base/ParamModelBase.php @@ -0,0 +1,49 @@ +_name = 'tracker_param'; + $this->_key = 'param_id'; + $this->_mainData = array( + 'param_id' => array('type' => MIDAS_DATA), + 'scalar_id' => array('type' => MIDAS_DATA), + 'param_name' => array('type' => MIDAS_DATA), + 'param_type' => array('type' => MIDAS_DATA), + 'text_value' => array('type' => MIDAS_DATA), + 'numeric_value' => array('type' => MIDAS_DATA), + 'scalar' => array( + 'type' => MIDAS_MANY_TO_ONE, + 'model' => 'Scalar', + 'module' => $this->moduleName, + 'parent_column' => 'scalar_id', + 'child_column' => 'scalar_id', + ), + ); + + $this->initialize(); + } +} diff --git a/modules/tracker/models/base/ScalarModelBase.php b/modules/tracker/models/base/ScalarModelBase.php index df6f008dc..6ebb6922b 100644 --- a/modules/tracker/models/base/ScalarModelBase.php +++ b/modules/tracker/models/base/ScalarModelBase.php @@ -35,7 +35,6 @@ public function __construct() 'submission_id' => array('type' => MIDAS_DATA), 'official' => array('type' => MIDAS_DATA), 'build_results_url' => array('type' => MIDAS_DATA), - 'params' => array('type' => MIDAS_DATA), 'extra_urls' => array('type' => MIDAS_DATA), 'branch' => array('type' => MIDAS_DATA), 'submit_time' => array('type' => MIDAS_DATA), @@ -61,6 +60,13 @@ public function __construct() 'parent_column' => 'user_id', 'child_column' => 'user_id', ), + 'params' => array( + 'type' => MIDAS_ONE_TO_MANY, + 'model' => 'Param', + 'module' => $this->moduleName, + 'parent_column' => 'scalar_id', + 'child_column' => 'scalar_id', + ), ); $this->initialize(); @@ -155,12 +161,6 @@ public function addToTrend( } } - if (empty($params)) { - $params = null; - } elseif (is_array($params)) { - $params = json_encode($params); - } - if (empty($extraUrls)) { $extraUrls = null; } elseif (is_array($extraUrls)) { @@ -180,10 +180,21 @@ public function addToTrend( $scalarDao->setOfficial((int) $official); $scalarDao->setBuildResultsUrl($buildResultsUrl); $scalarDao->setBranch(trim($branch)); - $scalarDao->setParams($params); $scalarDao->setExtraUrls($extraUrls); $this->save($scalarDao); + if (!empty($params) && is_array($params)) { + $paramModel = MidasLoader::loadModel('Param', $this->moduleName); + foreach ($params as $paramName => $paramValue) { + /** @var Tracker_ParamDao $paramDao */ + $paramDao = MidasLoader::newDao('ParamDao', $this->moduleName); + $paramDao->setScalarId($scalarDao->getScalarId()); + $paramDao->setParamName($paramName); + $paramDao->setParamValue($paramValue); + $paramModel->save($paramDao); + } + } + return $scalarDao; } diff --git a/modules/tracker/models/dao/ParamDao.php b/modules/tracker/models/dao/ParamDao.php new file mode 100644 index 000000000..f3de104dc --- /dev/null +++ b/modules/tracker/models/dao/ParamDao.php @@ -0,0 +1,76 @@ +setParamType('numeric'); + $this->setNumericValue(floatval($paramValue)); + } else { + $this->setParamType('text'); + $this->setTextValue($paramValue); + } + } + + /** + * Get the value of the param, regardless of its type, returning either a + * numeric or a string. + * + * @return mixed value of the param + */ + public function getParamValue() + { + if ($this->getParamType() === 'numeric') { + return $this->getNumericValue(); + } else { + return $this->getTextValue(); + } + } +} diff --git a/modules/tracker/models/pdo/ParamModel.php b/modules/tracker/models/pdo/ParamModel.php new file mode 100644 index 000000000..807371949 --- /dev/null +++ b/modules/tracker/models/pdo/ParamModel.php @@ -0,0 +1,26 @@ +database->getDB()->delete('tracker_scalar2item', 'scalar_id = '.$scalarDao->getKey()); + $this->database->getDB()->delete('tracker_param', 'scalar_id = '.$scalarDao->getKey()); parent::delete($scalarDao); }