コード例 #1
0
  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);
  }