public static void processColumns( SyncDatabaseInfo action, IDatabaseSettings dbSettings, IContext context, Database CurDatabase) throws CoreException { DBReplicationSettings settings = new DBReplicationSettings(context, dbSettings, Column.getType(), null); String fromAlias = settings.setFromTable("SysColumns"); String joinAliasType = settings .joinTable(JoinType.INNER, "SysTypes", null) .addConstraint("xtype", fromAlias, "xtype") .getAlias(); String joinAliasTable = settings .joinTable(JoinType.INNER, "SysObjects", null) .addConstraint("Id", fromAlias, "Id") .getAlias(); settings.addCustomColumnMapping( "'" + CurDatabase.getDbId() + "' + " + joinAliasTable + ".Name", Column.MemberNames.TableId.toString(), KeyType.ObjectKey, true, null); settings.addCustomColumnMapping( "'" + CurDatabase.getDbId() + "'", Column.MemberNames.DbId.toString()); settings.addColumnMapping( fromAlias, "name", Column.MemberNames.Name.toString(), KeyType.ObjectKey, true, null); settings.addColumnMapping(joinAliasType, "name", Column.MemberNames.DataType.toString()); settings.addColumnMapping(fromAlias, "Length", Column.MemberNames.Length.toString()); settings.addAssociationMapping( joinAliasTable, "Name", Column.MemberNames.Column_Table.toString(), Table.getType(), Table.MemberNames.Name.toString(), null, KeyType.AssociationKey, false); settings .addCustomAssociationMapping( "'" + CurDatabase.getDbId() + "'", Column.MemberNames.Column_Table.toString(), Table.getType(), Table.MemberNames.DbId.toString(), null, KeyType.AssociationKey, false) .setObjectSearchAction(ObjectSearchAction.FindCreate); settings.setConstraint( " (" + joinAliasTable + ".[type] = 'U' OR " + joinAliasTable + ".[type] = 'V' ) "); if (dbSettings.getTableFilters().size() > 0) { String filterConstraint = ""; for (String tableFilter : dbSettings.getTableFilters()) { if (!"".equals(filterConstraint)) filterConstraint += " OR "; filterConstraint += joinAliasTable + ".[name]" + " = '" + tableFilter + "' "; } settings.addConstraint(filterConstraint); } settings .getMainObjectConfig() .setObjectSearchAction(ObjectSearchAction.FindCreate) .setCommitUnchangedObjects(true) .removeUnusedObjects( ChangeTracking.TrackChanges, Column.MemberNames.UpdateCounter.toString()); settings.printAllNotFoundMessages(true); settings.printImportStatistics(StatisticsLevel.AllStatistics); IDataManager manager = IDataManager.instantiate("Column", settings); manager.startSynchronizing(action, false); /* * Prepare an OQL query that can be used in order to remove the unchanged tables */ String xPath = "//" + Column.getType() + "[" + Column.MemberNames.DbId.toString() + "=" + CurDatabase.getDbId() + "][" + Column.MemberNames.UpdateCounter.toString() + "!=" + manager.getRemoveIndicatorValue() + " or " + Column.MemberNames.UpdateCounter.toString() + "=NULL]"; manager.removeUnchangedObjectsByQuery(xPath); }