It is strange that you do not see an exception since the generated INSERT statement is not valid. Everything should work fine if you use the work-around and set any attribute to some value.
Thanks.
--
Kevin

Adriano Crestani wrote:

OK, I can set any attribute ; )

You got an exception? I'm getting no exception here, the new item is just
not being updated in the database.

Adriano Crestani

On 11/30/06, Kevin Williams <[EMAIL PROTECTED]> wrote:


Hello Adriano,

No.  It should not be working this way and thanks for finding this bug!
The fact that a new Cart was added to the graph is recorded in the SDO
change summary and indicates to the DAS that an INSERT should be
generated.  However, it looks like the DAS then generates the insert
statement based solely on attributes that have been set.  I just tested
this and an invalid insert statement is generated which results in the
database throwing a SQLException; I assume you get a similar error.

I think there are two possible correct behaviors for this:

   1. The DAS always generates a complete INSERT statement using
      whatever values exist in the new DataObject.  If a property has
      not been set then these values will be null for object properties
      or default values for primitive properties.
   2. The DAS generates a partial INSERT whenever there are set
      properties and generates a complete INSERT otherwise

My guess is that the first option will be most straightforward for users
to understand and will lead to least astonishment.

Any thoughts folks?

In the meantime, Adriano, can you set some property of the new item you
want inserted?

I created TUSCANY-957 to track this.

Thanks.

--
Kevin




Adriano Crestani wrote:

> I created one table called "cart" with an auto-increment key on mysql,
> then
> I defined this table on the config.xml as containing an auto-increment
> key.
> Using SCO/DAS I create one tuple of the "cart" table, but no attribute
is
> set. I know DAS only update one attribute tuple only if it has been
> modified
> and if no attribute is set the tuple should not be added in the
database,
> but it is implicit that at least one attribute will be set, in this
> case the
> primary key, cause it is set as auto-increment key. Unfortunately the
> tuple
> is not being added in the database : (. Should it be working this way?
>
> Here is the code that tries to create a new cart tuple in the database:
>
> public void newCart() {
>        DAS das = DAS.FACTORY.createDAS
> (getClass().getClassLoader().getResourceAsStream("ShoppingCartConfig.xml
"),
>
> getConnection());
>        Command command = das.getCommand("all carts");
>        DataObject allCarts = command.executeQuery();
>
>        DataObject newCart = allCarts.createDataObject("CART");
>        allCarts.getList("CART").add(newCart);
>        das.applyChanges(allCarts);
>
>    }
>
>
> How the table "cart" is being declared in the mysql database:
>
> CREATE TABLE CART (
>  ID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
>  SUB_TOTAL DOUBLE,
>  TAX DOUBLE,
>  TOTAL DOUBLE,
>  CONFIRMED INTEGER
> );
>
> ShoppingCartConfig.xml:
>
> <?xml version="1.0" encoding="ASCII"?>
> <Config xmlns="http:///org.apache.tuscany.das.rdb/config.xsd";>
>
>    <Command name="all carts" SQL="SELECT * FROM CART" kind="Select"/>
>
>    <Table tableName="CART">
>        <Column columnName="ID" primaryKey="true" generated="true"/>
>    </Table>
>
> </Config>
>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]






---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to