Theodore,

On 12. 1. 2015, at 19:00, Theodore Petrosky <tedp...@yahoo.com> wrote:
> have you looked at the migrations? 
> ERXMigrationTable personTable = database.existingTableNamed("person");
> personTable.existingColumnNamed("Foo").renameTo("Bar”);
> personTable.newStringColumn(name, width, allowsNull)

well... the API looks OK, but in practice it does not seem quite work. Can you 
(or anybody knowledgeable) please point out what am I doing wrong? Here's my 
code (sans error checking etc. for better readability)

===
        EOObjectStoreCoordinator 
osc=EOObjectStoreCoordinator.defaultCoordinator()
        EODatabaseContext 
ctxt=ERXEOAccessUtilities.databaseContextForEntityNamed(osc,'DBAuction')
        ctxt.lock();
        try {
            EOAdaptorChannel ach = ctxt.availableChannel().adaptorChannel();
            if (!ach.isOpen()) ach.openChannel();
            def tables=ach.describeTableNames() // looks like Migration API 
does not read the current state reliably
            EOModel dbModel=ach.describeModelWithTableNames(tables)
            ERXMigrationDatabase mdb=nil // created on-demand
            mdg.models.each { EOModel localModel ->
                localModel.entities.each { EOEntity localEntity ->
                    if (localEntity.isAbstractEntity()) return
                    String tname=localEntity.externalName()
                    EOEntity dbEntity=dbModel.entityNamed(tname)
                    ERXMigrationTable mtable=nil // on-demand
                    localEntity.attributes.each { EOAttribute localAttribute ->
                        String cname=localAttribute.columnName()
                        EOAttribute dbAttribute=dbEntity.attributeNamed(cname)
                        if (!dbAttribute) {
                            println "  adding column $cname 
($localAttribute.name): $localAttribute.externalType (VT: 
$localAttribute.valueType) ..."
                            if (!mdb) mdb=ERXMigrationDatabase.database(ach)
                            if (!mtable) mtable=mdb.existingTableNamed(tname)
                            switch (localAttribute.externalType) {
...
                                case 'TIMESTAMP':
                                    mtable.newTimestampColumn(cname,YES)
                                    break
                            }
                            println "  - OK"
                        }
                    }
                }
            }
        } finally {
            ctxt.unlock()
        }
===

but it crashes, printing out

===
  adding column DC_ID (ID): TIMESTAMP (VT: null) ...
22:42:09.409 INFO  Executing alter table T_AUCTION null DC_ID TIMESTAMP       
//log:er.extensions.jdbc.ERXJDBCUtilities [main]
...
Caused by: java.lang.RuntimeException: Failed to execute 'alter table T_AUCTION 
null DC_ID TIMESTAMP'.
Caused by: java.sql.SQLException: Syntax error 179. Illegal ALTER TABLE 
statement.
===

Well self-evidently it _is_ an illegal statement, it lacks "add column" having 
"null" instead; but what's the culprit and how to fix the problem?

(Note: I've tried to bump up log levels to
log4j.logger.er.extensions.jdbc.ERXJDBCUtilities=TRACE
log4j.logger.er.extensions.migration.ERXMigrationDatabase=TRACE
log4j.logger.er.extensions.migration.ERXMigrationTable=TRACE
log4j.logger.er.extensions.migration.ERXMigrationColumn=TRACE
but no more logs occurred anyway.)

Thanks,
OC


 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to