コード例 #1
0
ファイル: DataCreator.java プロジェクト: hmng/wonder
  private void createTables(boolean dropTables) {
    for (Enumeration e = EOModelGroup.defaultGroup().models().objectEnumerator();
        e.hasMoreElements(); ) {
      final EOModel eomodel = (EOModel) e.nextElement();
      EODatabaseContext dbc = EOUtilities.databaseContextForModelNamed(ec, eomodel.name());
      dbc.lock();
      try {
        EOAdaptorChannel channel = dbc.availableChannel().adaptorChannel();
        if (eomodel.adaptorName().contains("JDBC")) {
          EOSynchronizationFactory syncFactory =
              (EOSynchronizationFactory)
                  channel.adaptorContext().adaptor().synchronizationFactory();
          ERXSQLHelper helper = ERXSQLHelper.newSQLHelper(channel);
          NSDictionary options = helper.defaultOptionDictionary(true, dropTables);

          // Primary key support creation throws an unwanted exception
          // if
          // EO_PK_TABLE already
          // exists (e.g. in case of MySQL), so we add pk support in a
          // stand-alone step
          options = optionsWithPrimaryKeySupportDisabled(options);
          createPrimaryKeySupportForModel(eomodel, channel, syncFactory);

          String sqlScript =
              syncFactory.schemaCreationScriptForEntities(eomodel.entities(), options);
          log.info("Creating tables: {}", eomodel.name());
          ERXJDBCUtilities.executeUpdateScript(channel, sqlScript, true);
        }
      } catch (SQLException ex) {
        log.error("Can't update", ex);
      } finally {
        dbc.unlock();
      }
    }
  }
コード例 #2
0
  /**
   * Returns an EOAttribute with all of its fields filled in based on the properties of this
   * ERXMigrationColumn. The attribute is attached to the given entity.
   *
   * @param entity the entity to add the attribute to
   * @return an EOAttribute with all of its fields filled in
   */
  @SuppressWarnings("unchecked")
  public EOAttribute _newAttribute(EOEntity entity) {
    EOAdaptor eoAdaptor = _table.database().adaptor();
    // MS: Hack to make Memory adaptor migrations "work"
    if (!(eoAdaptor instanceof JDBCAdaptor)) {
      EOAttribute nonJdbcAttribute = new EOAttribute();
      nonJdbcAttribute.setName(_name);
      nonJdbcAttribute.setColumnName(_name);
      nonJdbcAttribute.setExternalType("nonJdbcAttribute");
      entity.addAttribute(nonJdbcAttribute);
      return nonJdbcAttribute;
    }

    JDBCAdaptor adaptor = (JDBCAdaptor) _table.database().adaptor();
    ERXSQLHelper sqlHelper = ERXSQLHelper.newSQLHelper(adaptor);
    String externalType = sqlHelper.externalTypeForJDBCType(adaptor, _jdbcType);
    if (externalType == null) {
      externalType = "IF_YOU_ARE_SEEING_THIS_SOMETHING_WENT_WRONG_WITH_EXTERNAL_TYPES";
    }
    EOAttribute attribute =
        adaptor.createAttribute(
            _name, _name, _jdbcType, externalType, _precision, _scale, _allowsNull ? 1 : 0);
    if (_width > 0) {
      attribute.setWidth(_width);
    }
    if (_defaultValue != null) {
      NSDictionary userInfo = attribute.userInfo();
      NSMutableDictionary mutableUserInfo;
      if (userInfo == null) {
        mutableUserInfo = new NSMutableDictionary();
      } else {
        mutableUserInfo = userInfo.mutableClone();
      }
      mutableUserInfo.setObjectForKey(_defaultValue, "default");
      attribute.setUserInfo(mutableUserInfo);
    }

    if (_overrideValueType != null) {
      if (ERXMigrationColumn.NULL_VALUE_TYPE.equals(_overrideValueType)) {
        attribute.setValueType(null);
      } else {
        attribute.setValueType(_overrideValueType);
      }
      if (sqlHelper.reassignExternalTypeForValueTypeOverride(attribute)) {
        adaptor.assignExternalTypeForAttribute(attribute);
      }
    }

    if (_overrideExternalType != null) {
      attribute.setExternalType(_overrideExternalType);
    }

    entity.addAttribute(attribute);
    return attribute;
  }
コード例 #3
0
 /**
  * Changes the data type of this column.
  *
  * @param jdbcType the new JDBC type of the column (see java.sql.Types)
  * @param scale the new scale
  * @param precision the new precision
  * @param width the new width
  * @param options the options to use for conversion (or null)
  * @throws SQLException if the change fails
  */
 @SuppressWarnings("unchecked")
 public void setDataType(int jdbcType, int scale, int precision, int width, NSDictionary options)
     throws SQLException {
   JDBCAdaptor adaptor = (JDBCAdaptor) _table.database().adaptor();
   String externalType =
       ERXSQLHelper.newSQLHelper(adaptor).externalTypeForJDBCType(adaptor, jdbcType);
   EOSchemaSynchronization schemaSynchronization = _table.database().synchronizationFactory();
   NSArray<EOSQLExpression> expressions =
       schemaSynchronization.statementsToConvertColumnType(
           _name,
           _table.name(),
           null,
           new _ColumnType(externalType, scale, precision, width),
           options);
   ERXMigrationDatabase._ensureNotEmpty(expressions, "convert column type", true);
   ERXJDBCUtilities.executeUpdateScript(
       _table.database().adaptorChannel(),
       ERXMigrationDatabase._stringsForExpressions(expressions));
   _jdbcType = jdbcType;
   _scale = scale;
   _precision = precision;
   _width = width;
 }