Hi all,

There is a problem with the execution of onCreateDefault statements for 
non-mandatory columns in Oracle. The issue was introduced as part of the 
fix for this issue:

https://issues.openbravo.com/view.php?id=11886

Due to the issue 11886 (and other issues related to the same problem) we 
decided to initiate a refactoring of dbsourcemanager to make it 
independent from DAL, in order to prevent similar issues. This new 
dbsourcemanager which has been refactored already fixes the original 
issue that Rafa has now encountered. This new dbsourcemanager hasn't 
been merged yet to pi, but will be merged in the near future, and will 
be included as part of Openbravo ERP MP12 release.

This issue can introduce some data inconsistencies in Oracle instances. 
Ismael will send an email to this list next week with tips to fix the 
potential problems.

Regards,

Antonio.

Rafa Roda @ Openbravo wrote:
> Some clues:
>
>    1. Please notice that you need to add an Attribute Set Value to any
>       product with an Attribute Set in order to make it fail: update
>       m_product set m_attributesetinstance_id = '1000000' where name
>       in ('Boots', 'Body')
>    2. This new column is not mandatory: anyway we want to use the
>       onCreateDefault capability.
>    3. In 2.40 and Oracle it does work perfectly.
>    4. In pi and PostgreSQL it does work perfectly.
>    5. In pi and Oracle the check constraint fails with error of
>       constraint violation (since the onCreateDefault has not been
>       applied properly).
>
> [java] Recreating Primary Keys
>         [java] Executed 61 SQL command(s) with 0 error(s)
>         [java] Executing update final script (NOT NULLs and dropping 
> temporary tables
>         [java] Executed 132 SQL command(s) with 0 error(s)
>         [java] Executed 57 SQL command(s) with 0 error(s)
>         [java] SQL Command failed with: ORA-02293: no se puede validar 
> (TADATTRI.M_PRODUCT_ATSETVALTYPE_CHK) - restricción de control violada
>         [java] -- END
>         [java] ALTER TABLE M_PRODUCT
>         [java]     ADD CONSTRAINT M_PRODUCT_ATSETVALTYPE_CHK CHECK 
> ((M_ATTRIBUTESETINSTANCE_ID IS NULL) OR (ATTRSETVALUETYPE IS NOT NULL))
>         [java] Executed 927 SQL command(s) with 1 error(s)
>         [java] Enabling Foreign Keys and Triggers
>         [java] Executing default postscript
>         [java] Executed 22 SQL command(s) with 0 error(s)
>
> database.postupdate.ORACLE:
>          [sql] Executing commands
>          [sql] 4 of 4 SQL statements executed successfully
>
>
> Having a look at some other onCreateDefault for non-mandatory column, 
> the onCreateDefault is not executed. Remove FREIGHT_CURRENCY_ID column 
> of M_INOUT table and execute update.database:
> <column name="FREIGHT_CURRENCY_ID" primaryKey="false" required="false" 
> type="VARCHAR" size="32" autoIncrement="false">
>         <default/>
>         <onCreateDefault><![CDATA[SELECT C_ACCTSCHEMA.C_CURRENCY_ID 
> FROM C_ACCTSCHEMA, AD_CLIENTINFO, AD_CLIENT WHERE 
> AD_CLIENTINFO.C_ACCTSCHEMA1_ID = C_ACCTSCHEMA.C_ACCTSCHEMA_ID AND 
> AD_CLIENT.AD_CLIENT_ID = AD_CLIENTINFO.AD_CLIENT_ID AND 
> AD_CLIENT.AD_CLIENT_ID = M_INOUT.AD_CLIENT_ID]]></onCreateDefault>
>       </column>
>
>
> 2010/2/3 Rafa Roda @ Openbravo <rafael.r...@openbravo.com 
> <mailto:rafael.r...@openbravo.com>>
>
>     Hi Openbravo developers,
>
>     I was just trying to add a new column named "ATTRSETVALUETYPE" to
>     the "M_PRODUCT" table with an onCreateDefault value and a check
>     constraint (see patch attached):
>
>         * <column name="ATTRSETVALUETYPE" primaryKey="false"
>           required="false" type="VARCHAR" size="60" autoIncrement="false">
>                   <default/>
>                   <onCreateDefault><![CDATA[CASE WHEN
>           M_ATTRIBUTESETINSTANCE_ID IS NOT NULL THEN 'D' ELSE NULL
>           END]]></onCreateDefault>
>                 </column>
>         * <check
>           
> name="M_PRODUCT_ATSETVALTYPE_CHK"><![CDATA[(M_ATTRIBUTESETINSTANCE_ID
>           IS NULL) OR (ATTRSETVALUETYPE IS NOT NULL)]]></check>
>
>     The column is created but neither the onCreateDefault value nor
>     the check constraint are applied when I update.database. The check
>     constraint fails with error of constraint violation (since the
>     onCreateDefault has not been applied properly).
>
>     Surprisingly, if I start from scratch again (removing
>     "ATTRSETVALUETYPE" column from the database), remove the check
>     constraint from the M_PRODUCT.XML table file and run
>     update.database, the onCreateDefault value is properly applied. I
>     add then the check constraint to the M_PRODUCT.XML table file and
>     run update.database again and the check constraint is now properly
>     applied.
>
>     Can someone explain this behaviour of dbSourceManager?
>
>     Thanks.
>
>
> ------------------------------------------------------------------------
>
> ------------------------------------------------------------------------------
> The Planet: dedicated and managed hosting, cloud storage, colocation
> Stay online with enterprise data centers and the best network in the business
> Choose flexible plans and management services without long-term contracts
> Personal 24x7 support from experience hosting pros just a phone call away.
> http://p.sf.net/sfu/theplanet-com
> ------------------------------------------------------------------------
>
> _______________________________________________
> Openbravo-development mailing list
> Openbravo-development@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/openbravo-development
>   


------------------------------------------------------------------------------
The Planet: dedicated and managed hosting, cloud storage, colocation
Stay online with enterprise data centers and the best network in the business
Choose flexible plans and management services without long-term contracts
Personal 24x7 support from experience hosting pros just a phone call away.
http://p.sf.net/sfu/theplanet-com
_______________________________________________
Openbravo-development mailing list
Openbravo-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openbravo-development

Reply via email to