You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@manifoldcf.apache.org by "Karl Wright (JIRA)" <ji...@apache.org> on 2014/02/10 18:01:23 UTC
[jira] [Commented] (CONNECTORS-887) Database schema not updated
properly
[ https://issues.apache.org/jira/browse/CONNECTORS-887?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13896759#comment-13896759 ]
Karl Wright commented on CONNECTORS-887:
----------------------------------------
Actually, the upgrade first adds the column, then modifies it after creating the corresponding authority group:
{code}
cd = (ColumnDescription)existing.get(groupNameField);
if (cd == null)
{
Map addMap = new HashMap();
addMap.put(groupNameField,new ColumnDescription("VARCHAR(32)",false,true,
authMgr.getTableName(),authMgr.getGroupNameColumn(),false));
performAlter(addMap,null,null,null);
boolean revert = true;
try
{
ArrayList params = new ArrayList();
IResultSet set = performQuery("SELECT "+nameField+","+descriptionField+" FROM "+getTableName(),null,null,null);
for (int i = 0 ; i < set.getRowCount() ; i++)
{
IResultRow row = set.getRow(i);
String authName = (String)row.getValue(nameField);
String authDescription = (String)row.getValue(descriptionField);
// Attempt to create a matching auth group. This will fail if the group
// already exists
IAuthorityGroup grp = authMgr.create();
grp.setName(authName);
grp.setDescription(authDescription);
try
{
authMgr.save(grp);
}
catch (ManifoldCFException e)
{
if (e.getErrorCode() == ManifoldCFException.INTERRUPTED)
throw e;
// Fall through; the row exists already
}
Map<String,String> map = new HashMap<String,String>();
map.put(groupNameField,authName);
params.clear();
String query = buildConjunctionClause(params,new ClauseDescription[]{
new UnitaryClause(nameField,authName)});
performUpdate(map," WHERE "+query,params,null);
}
Map modifyMap = new HashMap();
modifyMap.put(groupNameField,new ColumnDescription("VARCHAR(32)",false,false,
authMgr.getTableName(),authMgr.getGroupNameColumn(),false));
performAlter(null,modifyMap,null,null);
revert = false;
}
finally
{
if (revert)
{
// Upgrade failed; back out our changes
List<String> deleteList = new ArrayList<String>();
deleteList.add(groupNameField);
performAlter(null,null,deleteList,null);
}
}
}
{code}
I tried this on a PostgreSQL instance to be sure it worked; it did. Is there anything unique about your setup that would prevent the above code from working in your case?
> Database schema not updated properly
> ------------------------------------
>
> Key: CONNECTORS-887
> URL: https://issues.apache.org/jira/browse/CONNECTORS-887
> Project: ManifoldCF
> Issue Type: Bug
> Components: Framework core
> Affects Versions: ManifoldCF 1.6
> Environment: MySQL database
> Reporter: Florian Schmedding
> Priority: Minor
> Labels: database, easyfix
>
> When running Manifold 1.6 the first time with an database schema from Manifold 1.3 the schema is not updated properly. The SQL-command
> "ALTER TABLE authconnections MODIFY groupname VARCHAR(32) NOT NULL REFERENCES authgroups(groupname) ON DELETE RESTRICT"
> fails. It should instead add the column:
> "ALTER TABLE authconnections ADD groupname VARCHAR(32) NOT NULL REFERENCES authgroups(groupname) ON DELETE RESTRICT"
> The next startup after executing the corrected SQL-statement succeeds.
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)