Tim,

On 12. 1. 2015, at 23:59, Timothy Worman <li...@thetimmy.com> wrote:

> I don’t know how far you’ve dug - but just in case I’ll throw this out. One 
> of the keys to how all this works is ERXSQLHelper sqlHelper = 
> ERXSQLHelper.newSQLHelper. This returns the vendor specific ERXSQLHelper for 
> your database (Frontbase). DB specific code is there.

Where do I set this up for the ERXMigration* stuff? There does not seem to be 
any place for me to set this up.

ERXSQLHelper was the first place I have looked, but I haven't found there 
anything related to adding (and removing/renaming) columns, only stuff related 
to whole entities/tables. Perhaps I did look wrong.

> Just my 2¢, but instead of that large block of code, why not just change some 
> properties, run migrations at app startup, and declare your changes there? 
> Migrations work and you don’t have to reinvent the wheel. Then, if your SQL 
> continues to be incorrect, you know where to focus. 

Can you please point me to some howto? To be frank, I have absolutely no idea 
what “migration” is. (Truth is, I must be missing something pretty obvious at 
the documentation side: whilst I can find my way in WOnder if I know what 
exactly to search for, so far, I haven't found anything which would help me to 
find a support for some general functionality, unless 'find wonderdoc | xargs 
fgrep thedesiredthing' helps, which it very often does not. Consider my current 
case -- I need to sync tables to model /more details below/, and perhaps I'm 
just dumb, but "migration" is about the very last word I would search for, to 
fulfill that need?!? I don't migrate anything to anywhere; all I need is to 
synchronize the database to the model.)

Anyway, my workflow is this

(a) I open the database and read from there some dynamic information (works OK)
(b) based on this information, I add a number of dynamic EOAttributes to my 
model (works OK too)
(c) at this moment, I need to sync the DB and model, namely
- adding columns to the database for EOAttributes which do not have any
- removing colums from the database for which there are no EOAttributes
- removing and re-adding columns for which there are EOAttributes of an 
incompatible kind

If the migration thing can do this, it would be just great.

Thanks a big lot,
OC

>> On Jan 12, 2015, at 2:18 PM, OC <o...@ocs.cz> wrote:
>> 
>> P.S. my current environment is
>> 
>> Groovy 2.3.8 / WebObjects 5.4.3 / ERExtensions 6.1.2-SNAPSHOT / Java 
>> 1.7.0_13 / Mac OS X 10.8.5 / FrontBase 7.2
>> 
>> On 12. 1. 2015, at 22:56, OC <o...@ocs.cz> wrote:
>> 
>>> 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/ocs%40ocs.cz
>>> 
>>> This email sent to o...@ocs.cz
>> 
>> 
>> _______________________________________________
>> 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/lists%40thetimmy.com
>> 
>> This email sent to li...@thetimmy.com
> 


 _______________________________________________
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