Consultor Eletrônico



Kbase P143635: 4GL/ABL: Session crashes applying .df files to add and drop the same table to the connected databas
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   6/22/2009
Status: Unverified

SYMPTOM(s):

4GL/ABL: Session crashes applying .df files to add and drop the same table to the connected database.

The adding and dropping portions of the procedure are performed in two separate transactions.

Executing the following code:

FIND _File WHERE _File._File-name = "Customer":U NO-LOCK NO-ERROR.
DO TRANSACTION:
RUN prodict.pl<<prodict\load_df.r>>("LoadCustomer.df").
END.
DO TRANSACTION:
RUN prodict.pl<<prodict\load_df.r>>("DropCustomer.df").
END.
Where LoadCustomer.df is a data definition file to load a Customer table to the database and DropCustomer.df is a data definition file to drop the same table from the database. The DropCustomer.df contains the following single line:
DROP TABLE "Customer"

FACT(s) (Environment):

The crash does not occur if the adding and dropping actions are performed in one transaction.
The crash does not occur if the FIND statement is not executed in the beginning of the procedure.
All Supported Operating Systems
Progress 9.1E
OpenEdge 10.1A
OpenEdge 10.1B
OpenEdge 10.1C
OpenEdge 10.2A
OpenEdge Category: Database

CAUSE:

Bug# OE00182677

FIX:

Upgrade to OpenEdge 10.1C04 or later. If upgrading to OpenEdge 10.1C04 or later is not feasible, then use one of the following three workarounds:
1. Remove the FIND statement from the begining of the procedure. For example:
DO TRANSACTION:
RUN prodict.pl<<prodict\load_df.r>>("LoadCustomer.df").
END.
DO TRANSACTION:
RUN prodict.pl<<prodict\load_df.r>>("DropCustomer.df").
END.
2. Combine the two transactions into one. For example:
FIND _File WHERE _File._File-name = "Customer":U NO-LOCK NO-ERROR.
DO TRANSACTION:
RUN prodict.pl<<prodict\load_df.r>>("LoadCustomer.df").
RUN prodict.pl<<prodict\load_df.r>>("DropCustomer.df").
END.
3. Perform the load and drop actions in two seperate exernal procedures. For example:
FIND _File WHERE _File._File-name = "Customer":U NO-LOCK NO-ERROR.
RUN LoadTable.p.
RUN DropTable.p.
Where : LoadTable.p is the code of the first transaction:
DO TRANSACTION:
RUN prodict.pl<<prodict\load_df.r>>("LoadCustomer.df").
END.
And DropTable.p is the code of the second transaction:
DO TRANSACTION:
RUN prodict.pl<<prodict\load_df.r>>("DropCustomer.df").
END.