Skip to content

Commit

Permalink
Fixed issue: Various SQL errors when running on MySQL 8
Browse files Browse the repository at this point in the history
  • Loading branch information
olleharstedt committed Jun 18, 2020
1 parent 5022019 commit 369e776
Show file tree
Hide file tree
Showing 8 changed files with 26 additions and 13 deletions.
3 changes: 2 additions & 1 deletion application/commands/DemomodeCommand.php
Expand Up @@ -38,7 +38,8 @@ private function _resetDatabase() {
//Truncate most of the tables
$truncatableTables = ['{{assessments}}', '{{answers}}','{{boxes}}', '{{conditions}}', '{{defaultvalues}}', '{{labels}}', '{{labelsets}}', '{{groups}}', '{{questions}}', '{{surveys}}', '{{surveys_languagesettings}}', '{{quota}}', '{{quota_members}}', '{{quota_languagesettings}}', '{{question_attributes}}', '{{quota}}', '{{quota_members}}', '{{quota_languagesettings}}', '{{question_attributes}}', '{{user_groups}}', '{{user_in_groups}}', '{{templates}}', '{{template_configuration}}', '{{participants}}', '{{participant_attribute_names}}', '{{participant_attribute_names_lang}}', '{{participant_attribute_values}}', '{{participant_shares}}', '{{settings_user}}', '{{failed_login_attempts}}', '{{saved_control}}', '{{survey_links}}'];
foreach ($truncatableTables as $table) {
$actquery = "truncate table ".$table;
$quotedTable = Yii::app()->db->quoteTableName($table);
$actquery = "truncate table ".$quotedTable;
Yii::app()->db->createCommand($actquery)->execute();
}
//Now delete the basics in all other tables
Expand Down
3 changes: 2 additions & 1 deletion application/commands/WipeCommand.php
Expand Up @@ -32,7 +32,8 @@ public function run($sArgument)
Yii::app()->db->createCommand($actquery)->execute();
$actquery = "truncate table {{labelsets}}";
Yii::app()->db->createCommand($actquery)->execute();
$actquery = "truncate table {{groups}}";
$quotedGroups = Yii::app()->db->quoteTableName('{{groups}}');
$actquery = "truncate table $quotedGroups";
Yii::app()->db->createCommand($actquery)->execute();
$actquery = "truncate table {{questions}}";
Yii::app()->db->createCommand($actquery)->execute();
Expand Down
3 changes: 2 additions & 1 deletion application/controllers/Statistics_userController.php
Expand Up @@ -144,7 +144,8 @@ public function actionAction($surveyid, $language = null)
* only show questions where question attribute "public_statistics" is set to "1"
*/

$query = "SELECT q.* , group_name, group_order FROM {{questions}} q, {{groups}} g, {{question_attributes}} qa
$quotedGroups = Yii::app()->db->quoteTableName('{{groups}}');
$query = "SELECT q.* , group_name, group_order FROM {{questions}} q, $quotedGroups g, {{question_attributes}} qa
WHERE g.gid = q.gid AND g.language = :lang1 AND q.language = :lang2 AND q.sid = :surveyid AND q.qid = qa.qid AND q.parent_qid = 0 AND qa.attribute = 'public_statistics'";
$databasetype = Yii::app()->db->getDriverName();
if ($databasetype == 'mssql' || $databasetype == "sqlsrv" || $databasetype == "dblib") {
Expand Down
9 changes: 6 additions & 3 deletions application/controllers/admin/checkintegrity.php
Expand Up @@ -800,7 +800,8 @@ protected function _checkintegrity()
/* Check questions */
/**********************************************************************/
$oCriteria = new CDbCriteria;
$oCriteria->join = 'LEFT JOIN {{surveys}} s ON t.sid=s.sid LEFT JOIN {{groups}} g ON t.gid=g.gid';
$quotedGroups = Yii::app()->db->quoteTableName('{{groups}}');
$oCriteria->join = "LEFT JOIN {{surveys}} s ON t.sid=s.sid LEFT JOIN $quotedGroups g ON t.gid=g.gid";
$oCriteria->condition = '(g.gid IS NULL) OR (s.sid IS NULL)';
$questions = Question::model()->findAll($oCriteria);
foreach ($questions as $question) {
Expand Down Expand Up @@ -1018,10 +1019,11 @@ protected function _checkintegrity()
*/
protected function checkGroupOrderDuplicates()
{
$quotedGroups = Yii::app()->db->quoteTableName('{{groups}}');
$sQuery = "
SELECT
g.sid
FROM {{groups}} g
FROM $quotedGroups g
JOIN {{surveys}} s ON s.sid = g.sid
WHERE g.language = s.language
GROUP BY g.sid
Expand All @@ -1047,14 +1049,15 @@ protected function checkGroupOrderDuplicates()
*/
protected function checkQuestionOrderDuplicates()
{
$quotedGroups = Yii::app()->db->quoteTableName('{{groups}}');
$sQuery = "
SELECT
q.sid,
q.gid,
q.parent_qid,
q.scale_id
FROM {{questions}} q
JOIN {{groups}} g ON q.gid = g.gid
JOIN $quotedGroups g ON q.gid = g.gid
JOIN {{surveys}} s ON s.sid = q.sid
WHERE q.language = s.language AND g.language = s.language
GROUP BY q.sid, q.gid, q.parent_qid, q.scale_id
Expand Down
3 changes: 2 additions & 1 deletion application/controllers/admin/dataentry.php
Expand Up @@ -456,7 +456,8 @@ public function editdata($subaction, $id, $surveyid)
Yii::app()->loadHelper('database');

//FIRST LETS GET THE NAMES OF THE QUESTIONS AND MATCH THEM TO THE FIELD NAMES FOR THE DATABASE
$fnquery = "SELECT * FROM {{questions}}, {{groups}} g, {{surveys}} WHERE
$quotedGroups = Yii::app()->db->quoteTableName('{{groups}}');
$fnquery = "SELECT * FROM {{questions}}, $quotedGroups g, {{surveys}} WHERE
{{questions}}.gid=g.gid AND
{{questions}}.language = '{$sDataEntryLanguage}' AND g.language = '{$sDataEntryLanguage}' AND
{{questions}}.sid={{surveys}}.sid AND {{questions}}.sid='$surveyid'
Expand Down
6 changes: 4 additions & 2 deletions application/helpers/common_helper.php
Expand Up @@ -3537,7 +3537,8 @@ function translateInsertansTags($newsid, $oldsid, $fieldnames)
} // end while qentry

# translate 'description' INSERTANS tags in groups
$sql = "SELECT gid, language, group_name, description from {{groups}}
$quotedGroups = Yii::app()->db->quoteTableName('{{groups}}');
$sql = "SELECT gid, language, group_name, description from $quotedGroups
WHERE sid=".$newsid." AND description LIKE '%{$oldsid}X%' OR group_name LIKE '%{$oldsid}X%'";
$res = dbExecuteAssoc($sql) or safeDie("Can't read groups table in transInsertAns"); // Checked

Expand Down Expand Up @@ -3781,7 +3782,8 @@ function fixLanguageConsistency($sid, $availlangs = '')

);
switchMSSQLIdentityInsert('groups', true);
Yii::app()->db->createCommand()->insert('{{groups}}', $data);
$quotedGroups = Yii::app()->db->quoteTableName('{{groups}}');
Yii::app()->db->createCommand()->insert($quotedGroups, $data);
switchMSSQLIdentityInsert('groups', false);
}
}
Expand Down
6 changes: 4 additions & 2 deletions application/helpers/export_helper.php
Expand Up @@ -784,8 +784,9 @@ function surveyGetXMLStructure($iSurveyID, $xmlwriter, $exclude = array())
buildXMLFromQuery($xmlwriter, $query);

// QuestionGroup
$quotedGroups = Yii::app()->db->quoteTableName('{{groups}}');
$gquery = "SELECT *
FROM {{groups}}
FROM $quotedGroups
WHERE sid=$iSurveyID
ORDER BY gid";
buildXMLFromQuery($xmlwriter, $gquery);
Expand Down Expand Up @@ -1858,8 +1859,9 @@ function groupGetXMLStructure($xml, $gid)
$gid = sanitize_paranoid_string($gid);

// QuestionGroup
$quotedGroups = Yii::app()->db->quoteTableName('{{groups}}');
$gquery = "SELECT *
FROM {{groups}}
FROM $quotedGroups
WHERE gid=$gid";
buildXMLFromQuery($xml, $gquery);

Expand Down
6 changes: 4 additions & 2 deletions application/models/Condition.php
Expand Up @@ -230,8 +230,9 @@ public function getAllCfieldnameWithDependenciesForOneSurvey($sid)
*/
public function getConditionCount($qid, $language, Condition $scenarionr)
{
$quotedGroups = Yii::app()->db->quoteTableName('{{groups}}');
$query = "SELECT count(*) as recordcount
FROM {{conditions}} c, {{questions}} q, {{groups}} g
FROM {{conditions}} c, {{questions}} q, $quotedGroups g
WHERE c.cqid=q.qid "
."AND q.gid=g.gid "
."AND q.parent_qid=0 "
Expand All @@ -257,8 +258,9 @@ public function getConditionCount($qid, $language, Condition $scenarionr)
*/
public function getConditions($qid, $language, Condition $scenarionr)
{
$quotedGroups = Yii::app()->db->quoteTableName('{{groups}}');
$query = "SELECT c.cid, c.scenario, c.cqid, c.cfieldname, c.method, c.value, q.type
FROM {{conditions}} c, {{questions}} q, {{groups}} g
FROM {{conditions}} c, {{questions}} q, $quotedGroups g
WHERE c.cqid=q.qid "
."AND q.gid=g.gid "
."AND q.parent_qid=0 "
Expand Down

0 comments on commit 369e776

Please sign in to comment.