Bug #4181 Loader cannot load catalog if procedure calls later declared one
Submitted: 17 Jun 2004 11:37 Modified: 28 Dec 2004 20:24
Reporter: Donatas Ciuksys Email Updates:
Status: Closed Impact on me:
None 
Category:MaxDB Severity:S2 (Serious)
Version:7.5.00.14 OS:Linux (Linux)
Assigned to: Ulf Wendel CPU Architecture:Any

[17 Jun 2004 11:37] Donatas Ciuksys
Description:
I'm using MaxDB v7.5.00.14 on RedHat 9.0 (and Suse 9.1 as test bed on
laptop), extended parameters:

_UNICODE=YES
DEFAULT_CODE=UNICODE

I was evaluating loader with my database and was not able to load catalog
and data previously extracted. I used following steps:

1. Start loader via command 

    loadercli -d PAGDDB -u ADMIN,***********

2. Execute command:

    DBEXTRACT CATALOG OUTSTREAM FILE 'catalog1' PAGES DATA OUTSTREAM FILE
'data1' PAGES

3. Exit loader, start DBMGUI, create new empty database "TEST" with enough
initial data volume and the same extended parameters, start loader again: 

    loadercli -d TEST -u ADMIN,***********

4. Execute command:

    DBLOAD CATALOG INSTREAM FILE 'catalog1' PAGES DATA INSTREAM FILE 'data1'
PAGES

And so loading of catalog fails with error: 

ERR -25392
'[MySQL MaxDB][LIBSQLOD SO][MaxDB] General error;-4016 POS(159) Unknown
procedure name:DELETEKORTELE'

The reason is that my stored procedure "DELETEBAD" calls other
stored procedure "DELETEKORTELE" that is declared later in catalog.

How to repeat:
Declare in database two stored procedures (one must call another). If DBEXTRACT CATALOG will generate description firstly for the calling procedure and after that for the called one, DBLOAD will report an error.
[26 Oct 2004 14:39] Ulf Wendel
Ahoy,

your bug report contains an intresting question: how does the loader handle procedures/functions that reference each other? In general the loader tries to onload the procedures in the order that is needed to recreate them. 

If you have two procedures A, B and A calls B, then the loader will first export B (which is required by A) before it exports A. This ensures that on import B will be defined before A gets defined and the creation of a will not fail, because B already exists. I did a simple test of this with 7.5.0.18 and it worked fine for me.

If you have cyclic dependencies, that is A calls B and B calls A, then the loader will fail. 

Are you sure that you do not have cyclic dependencies? If so, can you send me the catalog file so that we can search for the reason of the trouble? Please try to make the test case as small as possible.

Thanks & Best regards,

Ulf Wendel
[27 Oct 2004 6:21] Donatas Ciuksys
Test case

Attachment: catalog1.zip (application/x-zip-compressed, text), 4.38 KiB.

[27 Oct 2004 6:21] Donatas Ciuksys
Hi,

I'm sending you my catalog. I just tested with 7.5.00.16 and new fresh database TEST (freshly created, with two user specified extended parameters _UNICODE=YES and DEFAULT_CODE=UNICODE) and loader command:

CATALOGLOAD ALL INSTREAM FILE 'catalog1' PAGES

failed with error:

-25392
'[MySQL MaxDB][SQLOD32 DLL][MaxDB] General error;-4016 POS(159) Unknown procedure name:DELETEKORTELE
'
OK

As you will see in catalog, my stored procedure DELETEBAD calles procedure DELETEKORTELE, that is declared later in catalog. Catalog was extracted with the command:

DBEXTRACT CATALOG OUTSTREAM FILE 'catalog1' PAGES DATA OUTSTREAM FILE 'data1' PAGES

Sorry for not so small catalog file, stored procedure declarations are at the end of file.

Regards,
Donatas Ciuksys
[28 Oct 2004 16:38] Ulf Wendel
Thank you for your support Donatas! 

I could reproduce your problem on build 18, so that I can pass it to the developers. 

I can not promise a time frame within we will provide you solution but be sure that we are working on it.

Best regards,

Ulf Wendel
[28 Dec 2004 20:24] Ulf Wendel
Hi,

I'll close this bug report. The bug is verified and added to the TODO list of the programmer. Please recheck with 7.6 which is expected for Q1/2005.

Thanks!
Ulf