You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@empire-db.apache.org by Eike Kettner <ne...@eknet.org> on 2010/02/11 23:36:46 UTC

how to add a "foreign" table

Hello all,

I'm facing a problem that I want to add a table from one db to another
db. I have two DBDatabases and I like to add a table from DB1 to DB2,
something like this:


  DBDatabase db1 = ..
  DBDatabase db2 = ..

  DBTable table1 = db1.getTable(0);

  db2.addTable(table1);


actually, what i want is to create a table on DB2 that is present on
DB1, without too much coding ;-)

Thankful for any help!

Kind regards,
Eike

re: Spring example

Posted by Rainer Döbele <do...@esteam.de>.
Hi Eike,

finally I had the chance to look at your spring example and I think it is pretty cool.
Thank you very much for providing this example - great work!
I am sure it will be a good guide for many users who wish to use Empire-db with Spring.

In order to simplify it a bit I have removed the dependency to the basic example project and copied the database definition and sample bean over. 
I think this example is ready for distribution with our upcoming release.

Regards
Rainer


Eike Kettner wrote:
> Re: how to add a "foreign" table
> 
> Hi Rainer
> 
> thank you for your quick response; and you're very welcome with this
> spring example, I'm glad if can help.
> 
> My final goal was to create some kind of migration script to upgrade my
> db schema, because my app will contain some new features in next
> versions which will add tables and columns to the existing db schema. I
> want to compare two instances of DBDatabase and generate the sql ddl
> statements. So actually, I don't really need to add the table to the
> other db, but I want to create arbitary sql ddl statements (for
> DBTable,
> DBColumn, DBView...) using a different driver. This works with
> DBDatabse
> already, I can specify a DBDatabaseDriver there and the method will
> change the driver temporarily. Therefor I tried to either add the
> missing table from the one db to the other or to set the
> DBDatabaseDriver of the first db into the second, so I can use the
> second DB to create its table - but now with the driver from the first
> db...
> 
> I somehow got an evil workaround by serializing the two DBDatabses and
> while deserializing back, I inject my desired driver into the
> DBDatabases. So I end up with a clone of the db having my target driver
> attached.
> 
> Thank you four your help!
> Eike
> 
> Rainer Döbele wrote:
> > Hi Eike,
> >
> > first I want to thank you very much for your submission of the spring
> example.
> > Unfortunately I did not have the chance to look at it so far - but I
> am quite keen to do so.
> > I'll let you know when I have.
> >
> > Now about your question:
> > A DBTable object may only belong to one database object just like an
> XMLElement belongs to its XMLDocument.
> > This assignment is usually performed on creation of the DBTable and
> there is no mechanism to change it.
> >
> > Hence if you really need to need a copy of the table object of one
> database in another one you need to create a new instance of the table
> object.
> > Normally you would just create a instalce of the table like this:
> >
> >     DBTable t = new DB1.SomeTable(db2);
> >
> > If your code should be more generic then you might use something
> like:
> >
> >     DBTable t = db1.getTable(...);
> >     t.getClass().getConstructor(DBDatabase.class).newInstance(new
> Object[] { db2 });
> >
> > This assumes that the table has a constructor that takes the db as a
> parameter.
> >
> > Hope this is what you need.
> > Otherwiese I would need to know what excatly you are trying to
> achieve with this.
> >
> > Regards
> > Rainer
> >
> >
> > Eike Kettner wrote:
> >
> >> re: how to add a "foreign" table
> >>
> >> Hello all,
> >>
> >> I'm facing a problem that I want to add a table from one db to
> another
> >> db. I have two DBDatabases and I like to add a table from DB1 to
> DB2,
> >> something like this:
> >>
> >>
> >>   DBDatabase db1 = ..
> >>   DBDatabase db2 = ..
> >>
> >>   DBTable table1 = db1.getTable(0);
> >>
> >>   db2.addTable(table1);
> >>
> >>
> >> actually, what i want is to create a table on DB2 that is present on
> >> DB1, without too much coding ;-)
> >>
> >> Thankful for any help!
> >>
> >> Kind regards,
> >> Eike
> >>
> >
> >


re: Spring example

Posted by Rainer Döbele <do...@esteam.de>.
Hi Eike,

finally I had the chance to look at your spring example and I think it is pretty cool.
Thank you very much for providing this example - great work!
I am sure it will be a good guide for many users who wish to use Empire-db with Spring.

In order to simplify it a bit I have removed the dependency to the basic example project and copied the database definition and sample bean over. 
I think this example is ready for distribution with our upcoming release.

Regards
Rainer


Eike Kettner wrote:
> Re: how to add a "foreign" table
> 
> Hi Rainer
> 
> thank you for your quick response; and you're very welcome with this
> spring example, I'm glad if can help.
> 
> My final goal was to create some kind of migration script to upgrade my
> db schema, because my app will contain some new features in next
> versions which will add tables and columns to the existing db schema. I
> want to compare two instances of DBDatabase and generate the sql ddl
> statements. So actually, I don't really need to add the table to the
> other db, but I want to create arbitary sql ddl statements (for
> DBTable,
> DBColumn, DBView...) using a different driver. This works with
> DBDatabse
> already, I can specify a DBDatabaseDriver there and the method will
> change the driver temporarily. Therefor I tried to either add the
> missing table from the one db to the other or to set the
> DBDatabaseDriver of the first db into the second, so I can use the
> second DB to create its table - but now with the driver from the first
> db...
> 
> I somehow got an evil workaround by serializing the two DBDatabses and
> while deserializing back, I inject my desired driver into the
> DBDatabases. So I end up with a clone of the db having my target driver
> attached.
> 
> Thank you four your help!
> Eike
> 
> Rainer Döbele wrote:
> > Hi Eike,
> >
> > first I want to thank you very much for your submission of the spring
> example.
> > Unfortunately I did not have the chance to look at it so far - but I
> am quite keen to do so.
> > I'll let you know when I have.
> >
> > Now about your question:
> > A DBTable object may only belong to one database object just like an
> XMLElement belongs to its XMLDocument.
> > This assignment is usually performed on creation of the DBTable and
> there is no mechanism to change it.
> >
> > Hence if you really need to need a copy of the table object of one
> database in another one you need to create a new instance of the table
> object.
> > Normally you would just create a instalce of the table like this:
> >
> >     DBTable t = new DB1.SomeTable(db2);
> >
> > If your code should be more generic then you might use something
> like:
> >
> >     DBTable t = db1.getTable(...);
> >     t.getClass().getConstructor(DBDatabase.class).newInstance(new
> Object[] { db2 });
> >
> > This assumes that the table has a constructor that takes the db as a
> parameter.
> >
> > Hope this is what you need.
> > Otherwiese I would need to know what excatly you are trying to
> achieve with this.
> >
> > Regards
> > Rainer
> >
> >
> > Eike Kettner wrote:
> >
> >> re: how to add a "foreign" table
> >>
> >> Hello all,
> >>
> >> I'm facing a problem that I want to add a table from one db to
> another
> >> db. I have two DBDatabases and I like to add a table from DB1 to
> DB2,
> >> something like this:
> >>
> >>
> >>   DBDatabase db1 = ..
> >>   DBDatabase db2 = ..
> >>
> >>   DBTable table1 = db1.getTable(0);
> >>
> >>   db2.addTable(table1);
> >>
> >>
> >> actually, what i want is to create a table on DB2 that is present on
> >> DB1, without too much coding ;-)
> >>
> >> Thankful for any help!
> >>
> >> Kind regards,
> >> Eike
> >>
> >
> >


Re: how to add a "foreign" table

Posted by Eike Kettner <ne...@eknet.org>.
Hi Rainer

thank you for your quick response; and you're very welcome with this 
spring example, I'm glad if can help.

My final goal was to create some kind of migration script to upgrade my 
db schema, because my app will contain some new features in next 
versions which will add tables and columns to the existing db schema. I 
want to compare two instances of DBDatabase and generate the sql ddl 
statements. So actually, I don't really need to add the table to the 
other db, but I want to create arbitary sql ddl statements (for DBTable, 
DBColumn, DBView...) using a different driver. This works with DBDatabse 
already, I can specify a DBDatabaseDriver there and the method will 
change the driver temporarily. Therefor I tried to either add the 
missing table from the one db to the other or to set the 
DBDatabaseDriver of the first db into the second, so I can use the 
second DB to create its table - but now with the driver from the first db...

I somehow got an evil workaround by serializing the two DBDatabses and 
while deserializing back, I inject my desired driver into the 
DBDatabases. So I end up with a clone of the db having my target driver 
attached.

Thank you four your help!
Eike

Rainer Döbele wrote:
> Hi Eike,
>
> first I want to thank you very much for your submission of the spring example.
> Unfortunately I did not have the chance to look at it so far - but I am quite keen to do so.
> I'll let you know when I have.
>
> Now about your question:
> A DBTable object may only belong to one database object just like an XMLElement belongs to its XMLDocument.
> This assignment is usually performed on creation of the DBTable and there is no mechanism to change it.
>
> Hence if you really need to need a copy of the table object of one database in another one you need to create a new instance of the table object.
> Normally you would just create a instalce of the table like this:
>
>     DBTable t = new DB1.SomeTable(db2);
>
> If your code should be more generic then you might use something like:
>
>     DBTable t = db1.getTable(...);
>     t.getClass().getConstructor(DBDatabase.class).newInstance(new Object[] { db2 });
>
> This assumes that the table has a constructor that takes the db as a parameter.
>
> Hope this is what you need.
> Otherwiese I would need to know what excatly you are trying to achieve with this.
>
> Regards
> Rainer
>
>
> Eike Kettner wrote:
>   
>> re: how to add a "foreign" table
>>
>> Hello all,
>>
>> I'm facing a problem that I want to add a table from one db to another
>> db. I have two DBDatabases and I like to add a table from DB1 to DB2,
>> something like this:
>>
>>
>>   DBDatabase db1 = ..
>>   DBDatabase db2 = ..
>>
>>   DBTable table1 = db1.getTable(0);
>>
>>   db2.addTable(table1);
>>
>>
>> actually, what i want is to create a table on DB2 that is present on
>> DB1, without too much coding ;-)
>>
>> Thankful for any help!
>>
>> Kind regards,
>> Eike
>>     
>
>   


re: how to add a "foreign" table

Posted by Rainer Döbele <do...@esteam.de>.
Hi Eike,

first I want to thank you very much for your submission of the spring example.
Unfortunately I did not have the chance to look at it so far - but I am quite keen to do so.
I'll let you know when I have.

Now about your question:
A DBTable object may only belong to one database object just like an XMLElement belongs to its XMLDocument.
This assignment is usually performed on creation of the DBTable and there is no mechanism to change it.

Hence if you really need to need a copy of the table object of one database in another one you need to create a new instance of the table object.
Normally you would just create a instalce of the table like this:

    DBTable t = new DB1.SomeTable(db2);

If your code should be more generic then you might use something like:

    DBTable t = db1.getTable(...);
    t.getClass().getConstructor(DBDatabase.class).newInstance(new Object[] { db2 });

This assumes that the table has a constructor that takes the db as a parameter.

Hope this is what you need.
Otherwiese I would need to know what excatly you are trying to achieve with this.

Regards
Rainer


Eike Kettner wrote:
> re: how to add a "foreign" table
> 
> Hello all,
> 
> I'm facing a problem that I want to add a table from one db to another
> db. I have two DBDatabases and I like to add a table from DB1 to DB2,
> something like this:
> 
> 
>   DBDatabase db1 = ..
>   DBDatabase db2 = ..
> 
>   DBTable table1 = db1.getTable(0);
> 
>   db2.addTable(table1);
> 
> 
> actually, what i want is to create a table on DB2 that is present on
> DB1, without too much coding ;-)
> 
> Thankful for any help!
> 
> Kind regards,
> Eike