|
From: <gem...@li...> - 2012-11-08 16:10:59
|
Revision: 1007
http://gemstracker.svn.sourceforge.net/gemstracker/?rev=1007&view=rev
Author: matijsdejong
Date: 2012-11-08 16:10:47 +0000 (Thu, 08 Nov 2012)
Log Message:
-----------
Started caching in DbLookup.php
DatabaseModelAbstract: switched from many OR to single IN() and allowed column expressions to be searched on fieldlist instead
Many indeces for speeding up the database
Modified Paths:
--------------
trunk/library/classes/Gems/Default/RespondentAction.php
trunk/library/classes/Gems/Model.php
trunk/library/classes/Gems/Util/DbLookup.php
trunk/library/classes/MUtil/Model/DatabaseModelAbstract.php
trunk/library/configs/db/patches.sql
trunk/library/configs/db/tables/gems__respondent2org.50.sql
trunk/library/configs/db/tables/gems__respondent2track.40.sql
trunk/library/configs/db/tables/gems__surveys.30.sql
trunk/library/configs/db/tables/gems__tokens.200.sql
trunk/library/configs/db/tables/gems__tracks.30.sql
Modified: trunk/library/classes/Gems/Default/RespondentAction.php
===================================================================
--- trunk/library/classes/Gems/Default/RespondentAction.php 2012-11-08 13:25:32 UTC (rev 1006)
+++ trunk/library/classes/Gems/Default/RespondentAction.php 2012-11-08 16:10:47 UTC (rev 1007)
@@ -483,7 +483,7 @@
$this->openedRespondent($data['gr2o_patient_nr'], $data['gr2o_id_organization'], $data['grs_id_user']);
// Check for completed tokens
- if ($this->loader->getTracker()->processCompletedTokens($data['grs_id_user'], $this->session->user_id)) {
+ if ($this->loader->getTracker()->processCompletedTokens($data['grs_id_user'], $this->session->user_id, $data['gr2o_id_organization'])) {
//As data might have changed due to token events... reload
$data = $model->applyRequest($this->getRequest(), true)->loadFirst();
}
Modified: trunk/library/classes/Gems/Model.php
===================================================================
--- trunk/library/classes/Gems/Model.php 2012-11-08 13:25:32 UTC (rev 1006)
+++ trunk/library/classes/Gems/Model.php 2012-11-08 16:10:47 UTC (rev 1007)
@@ -222,7 +222,8 @@
$model->setIfExists('grs_last_name', 'label', $this->translate->_('Last name'));
}
$model->set('name', 'label', $this->translate->_('Name'),
- 'column_expression', "CONCAT(COALESCE(CONCAT(grs_last_name, ', '), '-, '), COALESCE(CONCAT(grs_first_name, ' '), ''), COALESCE(grs_surname_prefix, ''))");
+ 'column_expression', "CONCAT(COALESCE(CONCAT(grs_last_name, ', '), '-, '), COALESCE(CONCAT(grs_first_name, ' '), ''), COALESCE(grs_surname_prefix, ''))",
+ 'fieldlist', array('grs_last_name', 'grs_first_name', 'grs_surname_prefix'));
$model->setIfExists('grs_address_1', 'label', $this->translate->_('Street'));
$model->setIfExists('grs_zipcode', 'label', $this->translate->_('Zipcode'));
Modified: trunk/library/classes/Gems/Util/DbLookup.php
===================================================================
--- trunk/library/classes/Gems/Util/DbLookup.php 2012-11-08 13:25:32 UTC (rev 1006)
+++ trunk/library/classes/Gems/Util/DbLookup.php 2012-11-08 16:10:47 UTC (rev 1007)
@@ -53,6 +53,12 @@
/**
*
+ * @var Zend_Cache_Core
+ */
+ protected $cache;
+
+ /**
+ *
* @var Zend_Db_Adapter_Abstract
*/
protected $db;
@@ -376,19 +382,29 @@
/**
* Return key/value pairs of all staff members, currently active or not
*
- * @staticvar array $data
* @return array
*/
public function getStaff()
{
- static $data;
+ $cacheId = __CLASS__ . '_' . __FUNCTION__;
- if (! $data) {
- $data = $this->db->fetchPairs("SELECT gsf_id_user, CONCAT(COALESCE(gsf_last_name, '-'), ', ', COALESCE(gsf_first_name, ''), COALESCE(CONCAT(' ', gsf_surname_prefix), ''))
- FROM gems__staff ORDER BY gsf_last_name, gsf_first_name, gsf_surname_prefix");
+ if ($results = $this->cache->load($cacheId)) {
+ return $results;
}
- return $data;
+ $select = "SELECT gsf_id_user,
+ CONCAT(
+ COALESCE(gsf_last_name, '-'),
+ ', ',
+ COALESCE(gsf_first_name, ''),
+ COALESCE(CONCAT(' ', gsf_surname_prefix), '')
+ )
+ FROM gems__staff
+ ORDER BY gsf_last_name, gsf_first_name, gsf_surname_prefix";
+
+ $results = $this->db->fetchPairs($select);
+ $this->cache->save($results, $cacheId, array('staff'));
+ return $results;
}
public function getStaffGroups()
Modified: trunk/library/classes/MUtil/Model/DatabaseModelAbstract.php
===================================================================
--- trunk/library/classes/MUtil/Model/DatabaseModelAbstract.php 2012-11-08 13:25:32 UTC (rev 1006)
+++ trunk/library/classes/MUtil/Model/DatabaseModelAbstract.php 2012-11-08 16:10:47 UTC (rev 1007)
@@ -722,12 +722,19 @@
// MUtil_Echo::track($key, $value, $filter, stripos($value, $filter));
if (stripos($value, $filter) !== false) {
if (null === $key) {
- $wheres[] = $sqlField . ' IS NULL';
+ $wheres[1] = $sqlField . ' IS NULL';
} else {
- $wheres[] = $sqlField . ' = ' . $adapter->quote($key);
+ $wheres[0][] = $adapter->quote($key);
}
}
}
+ if (isset($wheres[0])) {
+ if (count($wheres[0]) == 1) {
+ $wheres[0] = $sqlField . ' = ' . $wheres[0][0];
+ } else {
+ $wheres[0] = $sqlField . ' IN (' . implode(', ', $wheres[0]) . ')';
+ }
+ }
return $wheres;
}
@@ -761,7 +768,13 @@
foreach ($this->getItemsUsed() as $name) {
if ($this->get($name, 'label')) {
if ($expression = $this->get($name, 'column_expression')) {
- $fields[$name] = $expression;
+ if ($fieldList = $this->get($name, 'fieldlist')) {
+ foreach ((array) $fieldList as $field) {
+ $fields[$field] = $adapter->quoteIdentifier($field);
+ }
+ } else {
+ $fields[$name] = $expression;
+ }
} else {
$fields[$name] = $adapter->quoteIdentifier($name);
}
Modified: trunk/library/configs/db/patches.sql
===================================================================
--- trunk/library/configs/db/patches.sql 2012-11-08 13:25:32 UTC (rev 1006)
+++ trunk/library/configs/db/patches.sql 2012-11-08 16:10:47 UTC (rev 1007)
@@ -441,3 +441,22 @@
ALTER TABLE `gems__tracks` CHANGE gtr_completed_event gtr_completed_event varchar(128) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' null;
-- GEMS VERSION: 50
+-- PATCH: Speedup respondent screen
+ALTER TABLE gems__respondent2org
+ ADD INDEX (gr2o_id_organization),
+ ADD INDEX (gr2o_opened_by),
+ ADD INDEX (gr2o_changed_by);
+
+ALTER TABLE gems__respondent2track
+ ADD INDEX (gr2t_id_track),
+ ADD INDEX (gr2t_id_user),
+ ADD INDEX (gr2t_id_organization),
+ ADD INDEX (gr2t_start_date);
+
+ALTER TABLE `gems__tokens` ADD INDEX (gto_id_organization);
+ALTER TABLE `gems__tokens` ADD INDEX (gto_id_respondent);
+
+ALTER TABLE gems__surveys ADD INDEX (gsu_surveyor_active);
+
+ALTER TABLE gems__tracks ADD INDEX (gtr_track_type), ADD INDEX (gtr_track_class);
+
Modified: trunk/library/configs/db/tables/gems__respondent2org.50.sql
===================================================================
--- trunk/library/configs/db/tables/gems__respondent2org.50.sql 2012-11-08 13:25:32 UTC (rev 1006)
+++ trunk/library/configs/db/tables/gems__respondent2org.50.sql 2012-11-08 16:10:47 UTC (rev 1007)
@@ -27,8 +27,11 @@
PRIMARY KEY (gr2o_patient_nr, gr2o_id_organization),
UNIQUE KEY (gr2o_id_user, gr2o_id_organization),
+ INDEX (gr2o_id_organization),
INDEX (gr2o_opened),
- INDEX (gr2o_reception_code)
+ INDEX (gr2o_reception_code)
+ INDEX (gr2o_opened_by),
+ INDEX (gr2o_changed_by)
)
ENGINE=InnoDB
CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';
Modified: trunk/library/configs/db/tables/gems__respondent2track.40.sql
===================================================================
--- trunk/library/configs/db/tables/gems__respondent2track.40.sql 2012-11-08 13:25:32 UTC (rev 1006)
+++ trunk/library/configs/db/tables/gems__respondent2track.40.sql 2012-11-08 16:10:47 UTC (rev 1007)
@@ -25,7 +25,11 @@
gr2t_created timestamp not null,
gr2t_created_by bigint unsigned not null,
- PRIMARY KEY (gr2t_id_respondent_track)
+ PRIMARY KEY (gr2t_id_respondent_track),
+ INDEX (gr2t_id_track),
+ INDEX (gr2t_id_user),
+ INDEX (gr2t_start_date),
+ INDEX (gr2t_id_organization)
)
ENGINE=InnoDB
auto_increment = 100000
Modified: trunk/library/configs/db/tables/gems__surveys.30.sql
===================================================================
--- trunk/library/configs/db/tables/gems__surveys.30.sql 2012-11-08 13:25:32 UTC (rev 1006)
+++ trunk/library/configs/db/tables/gems__surveys.30.sql 2012-11-08 16:10:47 UTC (rev 1007)
@@ -47,6 +47,7 @@
PRIMARY KEY(gsu_id_survey),
INDEX (gsu_active),
+ INDEX (gsu_surveyor_active),
INDEX (gsu_code)
)
ENGINE=InnoDB
Modified: trunk/library/configs/db/tables/gems__tokens.200.sql
===================================================================
--- trunk/library/configs/db/tables/gems__tokens.200.sql 2012-11-08 13:25:32 UTC (rev 1006)
+++ trunk/library/configs/db/tables/gems__tokens.200.sql 2012-11-08 16:10:47 UTC (rev 1007)
@@ -50,6 +50,8 @@
gto_created_by bigint unsigned not null,
PRIMARY KEY (gto_id_token),
+ INDEX (gto_id_organization);
+ INDEX (gto_id_respondent);
INDEX (gto_id_survey),
INDEX (gto_id_track),
INDEX (gto_id_round),
Modified: trunk/library/configs/db/tables/gems__tracks.30.sql
===================================================================
--- trunk/library/configs/db/tables/gems__tracks.30.sql 2012-11-08 13:25:32 UTC (rev 1006)
+++ trunk/library/configs/db/tables/gems__tracks.30.sql 2012-11-08 16:10:47 UTC (rev 1007)
@@ -30,7 +30,9 @@
PRIMARY KEY (gtr_id_track),
INDEX (gtr_track_name),
- INDEX (gtr_active)
+ INDEX (gtr_active),
+ INDEX (gtr_track_type),
+ INDEX (gtr_track_class)
)
ENGINE=InnoDB
auto_increment = 7000
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|