Skip to content

Commit

Permalink
Fixed issue #7115: PostgreSQL update to 2.0 fails with blocked transa…
Browse files Browse the repository at this point in the history
…ction error
  • Loading branch information
c-schmitz committed Jan 3, 2013
1 parent 5ff7349 commit 478e08a
Showing 1 changed file with 49 additions and 32 deletions.
81 changes: 49 additions & 32 deletions application/helpers/update/updatedb_helper.php
Expand Up @@ -596,11 +596,11 @@ function db_upgrade_all($oldversion) {

if ($oldversion < 146) //Modify surveys table
{
upgradeSurveyTimings146();
// Fix permissions for new feature quick-translation
modifyDatabase("", "INSERT into {{survey_permissions}} (sid,uid,permission,read_p,update_p) SELECT sid,owner_id,'translations','1','1' from {{surveys}}"); echo $modifyoutput; flush();@ob_flush();
Yii::app()->db->createCommand()->update('{{settings_global}}',array('stg_value'=>146),"stg_name='DBVersion'");
}
upgradeSurveyTimings146();
// Fix permissions for new feature quick-translation
try { setTransactionBookmark(); Yii::app()->db->createCommand("INSERT into {{survey_permissions}} (sid,uid,permission,read_p,update_p) SELECT sid,owner_id,'translations','1','1' from {{surveys}}")->execute(); echo $modifyoutput; flush();@ob_flush();} catch(Exception $e) { rollBackToTransactionBookmark();}
Yii::app()->db->createCommand()->update('{{settings_global}}',array('stg_value'=>146),"stg_name='DBVersion'");
}

if ($oldversion < 147)
{
Expand Down Expand Up @@ -733,7 +733,7 @@ function db_upgrade_all($oldversion) {
{
addColumn('{{surveys}}','googleanalyticsstyle',"{$sVarchar}(1)");
addColumn('{{surveys}}','googleanalyticsapikey',"{$sVarchar}(25)");
try{ Yii::app()->db->createCommand()->renameColumn('{{surveys}}','showXquestions','showxquestions');} catch(Exception $e) {};
try { setTransactionBookmark(); Yii::app()->db->createCommand()->renameColumn('{{surveys}}','showXquestions','showxquestions');} catch(Exception $e) { rollBackToTransactionBookmark();}
Yii::app()->db->createCommand()->update('{{settings_global}}',array('stg_value'=>155),"stg_name='DBVersion'");
}

Expand Down Expand Up @@ -799,7 +799,7 @@ function db_upgrade_all($oldversion) {
if ($oldversion < 157)
{
// MySQL DB corrections
try{ Yii::app()->db->createCommand()->dropIndex('questions_idx4','{{questions}}');} catch(Exception $e) {};
try { setTransactionBookmark(); Yii::app()->db->createCommand()->dropIndex('questions_idx4','{{questions}}'); } catch(Exception $e) { rollBackToTransactionBookmark();}

alterColumn('{{answers}}','assessment_value','integer',false , '0');
dropPrimaryKey('answers');
Expand All @@ -820,8 +820,7 @@ function db_upgrade_all($oldversion) {
alterColumn('{{quota}}','active','integer',false , '1');
alterColumn('{{quota}}','autoload_url','integer',false , '0');
alterColumn('{{saved_control}}','status',"{$sVarchar}(1)",false , '');
alterColumn('{{sessions}}','id',"{$sVarchar}(32)",false);

try { setTransactionBookmark(); alterColumn('{{sessions}}','id',"{$sVarchar}(32)",false); } catch(Exception $e) { rollBackToTransactionBookmark();}
alterColumn('{{surveys}}','active',"{$sVarchar}(1)",false , 'N');
alterColumn('{{surveys}}','anonymized',"{$sVarchar}(1)",false,'N');
alterColumn('{{surveys}}','format',"{$sVarchar}(1)");
Expand Down Expand Up @@ -860,8 +859,8 @@ function db_upgrade_all($oldversion) {
alterColumn('{{surveys}}','googleanalyticsstyle',"{$sVarchar}(1)");

alterColumn('{{surveys_languagesettings}}','surveyls_dateformat','integer',false , 1);
alterColumn('{{survey_permissions}}','sid','integer',false);
alterColumn('{{survey_permissions}}','uid', 'integer',false);
try { setTransactionBookmark(); alterColumn('{{survey_permissions}}','sid',"integer",false); } catch(Exception $e) { rollBackToTransactionBookmark();}
try { setTransactionBookmark(); alterColumn('{{survey_permissions}}','uid',"integer",false); } catch(Exception $e) { rollBackToTransactionBookmark();}
alterColumn('{{survey_permissions}}','create_p', 'integer',false , '0');
alterColumn('{{survey_permissions}}','read_p', 'integer',false , '0');
alterColumn('{{survey_permissions}}','update_p','integer',false , '0');
Expand All @@ -885,33 +884,33 @@ function db_upgrade_all($oldversion) {
alterColumn('{{users}}','dateformat','integer',false, 1);
alterColumn('{{users}}','participant_panel','integer',false , '0');
alterColumn('{{users}}','parent_id','integer',false);
alterColumn('{{surveys_languagesettings}}','surveyls_survey_id','integer',false);
try { setTransactionBookmark(); alterColumn('{{surveys_languagesettings}}','surveyls_survey_id',"integer",false); } catch(Exception $e) { rollBackToTransactionBookmark(); }
alterColumn('{{user_groups}}','owner_id',"integer",false);
alterColumn('{{user_in_groups}}','ugid',"integer",false);
alterColumn('{{user_in_groups}}','uid',"integer",false);

// Additional corrections for Postgres
try{ Yii::app()->db->createCommand()->createIndex('questions_idx3','{{questions}}','gid');} catch(Exception $e) {};
try{ Yii::app()->db->createCommand()->createIndex('conditions_idx3','{{conditions}}','cqid');} catch(Exception $e) {};
try{ Yii::app()->db->createCommand()->createIndex('questions_idx4','{{questions}}','type');} catch(Exception $e) {};
try{ Yii::app()->db->createCommand()->dropIndex('user_in_groups_idx1','{{user_in_groups}}');} catch(Exception $e) {};
try{ Yii::app()->db->createCommand()->dropIndex('{{user_name_key}}','{{users}}');} catch(Exception $e) {};
try{ Yii::app()->db->createCommand()->createIndex('users_name','{{users}}','users_name',true);} catch(Exception $e) {};
try{ addPrimaryKey('user_in_groups', array('ugid','uid'));} catch(Exception $e) {};
try{ setTransactionBookmark(); Yii::app()->db->createCommand()->createIndex('questions_idx3','{{questions}}','gid');} catch(Exception $e) { rollBackToTransactionBookmark(); };
try{ setTransactionBookmark(); Yii::app()->db->createCommand()->createIndex('conditions_idx3','{{conditions}}','cqid');} catch(Exception $e) { rollBackToTransactionBookmark(); };
try{ setTransactionBookmark(); Yii::app()->db->createCommand()->createIndex('questions_idx4','{{questions}}','type');} catch(Exception $e) { rollBackToTransactionBookmark(); };
try{ setTransactionBookmark(); Yii::app()->db->createCommand()->dropIndex('user_in_groups_idx1','{{user_in_groups}}');} catch(Exception $e) { rollBackToTransactionBookmark(); };
try{ setTransactionBookmark(); Yii::app()->db->createCommand()->dropIndex('{{user_name_key}}','{{users}}');} catch(Exception $e) { rollBackToTransactionBookmark(); };
try{ setTransactionBookmark(); Yii::app()->db->createCommand()->createIndex('users_name','{{users}}','users_name',true);} catch(Exception $e) { rollBackToTransactionBookmark(); };
try{ setTransactionBookmark(); addPrimaryKey('user_in_groups', array('ugid','uid'));} catch(Exception $e) { rollBackToTransactionBookmark(); };

alterColumn('{{participant_attribute}}','value',"{$sVarchar}(50)", false);
alterColumn('{{participant_attribute_names}}','attribute_type',"{$sVarchar}(4)", false);
try{ dropColumn('{{participant_attribute_names_lang}}','id');} catch(Exception $e) {};
try{ addPrimaryKey('participant_attribute_names_lang',array('attribute_id','lang'));} catch(Exception $e) {};
try{ Yii::app()->db->createCommand()->renameColumn('{{participant_shares}}','shared_uid','share_uid');} catch(Exception $e) {};
try{ setTransactionBookmark(); alterColumn('{{participant_attribute_names}}','attribute_type',"{$sVarchar}(4)", false);} catch(Exception $e) { rollBackToTransactionBookmark(); };
try{ setTransactionBookmark(); dropColumn('{{participant_attribute_names_lang}}','id');} catch(Exception $e) { rollBackToTransactionBookmark(); };
try{ setTransactionBookmark(); addPrimaryKey('participant_attribute_names_lang',array('attribute_id','lang'));} catch(Exception $e) { rollBackToTransactionBookmark(); };
try{ setTransactionBookmark(); Yii::app()->db->createCommand()->renameColumn('{{participant_shares}}','shared_uid','share_uid');} catch(Exception $e) { rollBackToTransactionBookmark(); };
alterColumn('{{participant_shares}}','date_added',"datetime", false);
alterColumn('{{participants}}','firstname',"{$sVarchar}(40)");
alterColumn('{{participants}}','lastname',"{$sVarchar}(40)");
alterColumn('{{participants}}','email',"{$sVarchar}(80)");
alterColumn('{{participants}}','language',"{$sVarchar}(40)");
alterColumn('{{quota_languagesettings}}','quotals_name',"string");
alterColumn('{{survey_permissions}}','sid','integer',false);
alterColumn('{{survey_permissions}}','uid','integer',false);
try{ setTransactionBookmark(); alterColumn('{{survey_permissions}}','sid','integer',false); } catch(Exception $e) { rollBackToTransactionBookmark(); };
try{ setTransactionBookmark(); alterColumn('{{survey_permissions}}','uid','integer',false); } catch(Exception $e) { rollBackToTransactionBookmark(); };
alterColumn('{{users}}','htmleditormode',"{$sVarchar}(7)",true,'default');
alterColumn('{{survey_links}}','date_created',"datetime",true);
alterColumn('{{saved_control}}','identifier',"text",false);
Expand All @@ -920,19 +919,19 @@ function db_upgrade_all($oldversion) {
alterColumn('{{surveys}}','bounce_email',"{$sVarchar}(320)");
alterColumn('{{users}}','email',"{$sVarchar}(320)");

try{ Yii::app()->db->createCommand()->dropIndex('assessments_idx','{{assessments}}');} catch(Exception $e) {};
try{ Yii::app()->db->createCommand()->createIndex('assessments_idx3','{{assessments}}','gid');} catch(Exception $e) {};
try{ setTransactionBookmark(); Yii::app()->db->createCommand()->dropIndex('assessments_idx','{{assessments}}');} catch(Exception $e) { rollBackToTransactionBookmark(); };
try{ setTransactionBookmark(); Yii::app()->db->createCommand()->createIndex('assessments_idx3','{{assessments}}','gid');} catch(Exception $e) { rollBackToTransactionBookmark(); };

try{ Yii::app()->db->createCommand()->dropIndex('ixcode','{{labels}}');} catch(Exception $e) {};
try{ Yii::app()->db->createCommand()->dropIndex('{{labels_ixcode_idx}}','{{labels}}');} catch(Exception $e) {};
try{ Yii::app()->db->createCommand()->createIndex('labels_code_idx','{{labels}}','code');} catch(Exception $e) {};
try{ setTransactionBookmark(); Yii::app()->db->createCommand()->dropIndex('ixcode','{{labels}}');} catch(Exception $e) { rollBackToTransactionBookmark(); };
try{ setTransactionBookmark(); Yii::app()->db->createCommand()->dropIndex('{{labels_ixcode_idx}}','{{labels}}');} catch(Exception $e) { rollBackToTransactionBookmark(); };
try{ setTransactionBookmark(); Yii::app()->db->createCommand()->createIndex('labels_code_idx','{{labels}}','code');} catch(Exception $e) { rollBackToTransactionBookmark(); };



if ($sDBDriverName=='pgsql')
{
try{ Yii::app()->db->createCommand("ALTER TABLE ONLY {{user_groups}} ADD PRIMARY KEY (ugid); ")->execute;} catch(Exception $e) {};
try{ Yii::app()->db->createCommand("ALTER TABLE ONLY {{users}} ADD PRIMARY KEY (uid); ")->execute;} catch(Exception $e) {};
try{ setTransactionBookmark(); Yii::app()->db->createCommand("ALTER TABLE ONLY {{user_groups}} ADD PRIMARY KEY (ugid); ")->execute;} catch(Exception $e) { rollBackToTransactionBookmark(); };
try{ setTransactionBookmark(); Yii::app()->db->createCommand("ALTER TABLE ONLY {{users}} ADD PRIMARY KEY (uid); ")->execute;} catch(Exception $e) { rollBackToTransactionBookmark(); };
}

// Additional corrections for MSSQL
Expand Down Expand Up @@ -1885,6 +1884,24 @@ function addColumn($sTableName, $sColumn, $sType)
}


function setTransactionBookmark($sBookmark='limesurvey')
{
$sDBDriverName=Yii::app()->db->getDriverName();
if ($sDBDriverName=='pgsql')
{
Yii::app()->db->createCommand("SAVEPOINT {$sBookmark};")->execute();
}
}

function rollBackToTransactionBookmark($sBookmark='limesurvey')
{
$sDBDriverName=Yii::app()->db->getDriverName();
if ($sDBDriverName=='pgsql')
{
Yii::app()->db->createCommand("ROLLBACK TO SAVEPOINT {$sBookmark};")->execute();
}
}


function dropDefaultValueMSSQL($fieldname, $tablename)
{
Expand Down

0 comments on commit 478e08a

Please sign in to comment.