ecpg "problem" ...

Started by Marc G. Fournierabout 23 years ago4 messages
#1Marc G. Fournier
scrappy@hub.org

if (ic_flag == 1) {
/*only select those non-IC/Spyder nodes that has full update set*/
EXEC SQL DECLARE full_dyn_node CURSOR FOR
SELECT node_name FROM NODE
WHERE dynamic_community = 'f' AND ic_flag='n' AND machine_type!=22
AND node_id != 0 AND NODE_NAME != :nodename;
}
else{
EXEC SQL DECLARE full_dyn_node CURSOR FOR
SELECT node_name FROM NODE
WHERE dynamic_community = 'f'
AND node_id != 0 AND NODE_NAME != :nodename; (line#493)
}

the above code generates the following error:

The compiler complains:
../subapi.pgc:493: ERROR: cursor full_dyn_node already defined

since its envelop'd in an if/else clause, shouldn't it work?

#2Jakub Ouhrabka
jouh8664@ss1000.ms.mff.cuni.cz
In reply to: Marc G. Fournier (#1)
Re: ecpg "problem" ...

hi,

i think that ecpg is only text preprocessor. it doesn't understand the c
semantics - it goes from the top to the end of the file row by row and
sees your declaration twice.

kuba

On Tue, 12 Nov 2002, Marc G. Fournier wrote:

Show quoted text

if (ic_flag == 1) {
/*only select those non-IC/Spyder nodes that has full update set*/
EXEC SQL DECLARE full_dyn_node CURSOR FOR
SELECT node_name FROM NODE
WHERE dynamic_community = 'f' AND ic_flag='n' AND machine_type!=22
AND node_id != 0 AND NODE_NAME != :nodename;
}
else{
EXEC SQL DECLARE full_dyn_node CURSOR FOR
SELECT node_name FROM NODE
WHERE dynamic_community = 'f'
AND node_id != 0 AND NODE_NAME != :nodename; (line#493)
}

the above code generates the following error:

The compiler complains:
../subapi.pgc:493: ERROR: cursor full_dyn_node already defined

since its envelop'd in an if/else clause, shouldn't it work?

---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo@postgresql.org so that your
message can get through to the mailing list cleanly

#3Lee Kindness
lkindness@csl.co.uk
In reply to: Marc G. Fournier (#1)

Marc,

Marc G. Fournier writes:

if (ic_flag == 1) {
/*only select those non-IC/Spyder nodes that has full update set*/
EXEC SQL DECLARE full_dyn_node CURSOR FOR
SELECT node_name FROM NODE
WHERE dynamic_community = 'f' AND ic_flag='n' AND machine_type!=22
AND node_id != 0 AND NODE_NAME != :nodename;
}
else{
EXEC SQL DECLARE full_dyn_node CURSOR FOR
SELECT node_name FROM NODE
WHERE dynamic_community = 'f'
AND node_id != 0 AND NODE_NAME != :nodename; (line#493)
}

the above code generates the following error:

The compiler complains:
../subapi.pgc:493: ERROR: cursor full_dyn_node already defined

since its envelop'd in an if/else clause, shouldn't it work?

Unfortuantely no, you can only ever have one "EXEC SQL DECLARE" for a
given cursor name due to ecpg/ESQL simple parsing. What you would do
in a situation like this is something like:

if( ic_flag == 1 )
/* only select those non-IC/Spyder nodes that has full update set */
sprintf(stmt, "SELECT node_name FROM NODE WHERE dynamic_community = 'f' AND ic_flag = 'n' AND machine_type != 22 AND node_id != 0 AND NODE_NAME != %s", nodename);
else
sprintf(stmt, "SELECT node_name FROM NODE WHERE dynamic_community = 'f' AND node_id != 0 AND NODE_NAME != %s", nodename);

EXEC SQL PREPARE s_statement FROM :stmt;
EXEC SQL DECLARE full_dyn_node CURSOR FOR s_statement;

Regards, Lee.

#4Michael Meskes
meskes@postgresql.org
In reply to: Marc G. Fournier (#1)
Re: ecpg "problem" ...

On Tue, Nov 12, 2002 at 02:58:17PM -0400, Marc G. Fournier wrote:

if (ic_flag == 1) {
/*only select those non-IC/Spyder nodes that has full update set*/
EXEC SQL DECLARE full_dyn_node CURSOR FOR
SELECT node_name FROM NODE
WHERE dynamic_community = 'f' AND ic_flag='n' AND machine_type!=22
AND node_id != 0 AND NODE_NAME != :nodename;
}
else{
EXEC SQL DECLARE full_dyn_node CURSOR FOR
SELECT node_name FROM NODE
WHERE dynamic_community = 'f'
AND node_id != 0 AND NODE_NAME != :nodename; (line#493)
}
...
since its envelop'd in an if/else clause, shouldn't it work?

By definition no. You could compare it to C preprocessor commands like
#define.

Michael
--
Michael Meskes
Michael@Fam-Meskes.De
Go SF 49ers! Go Rhein Fire!
Use Debian GNU/Linux! Use PostgreSQL!