Re: ECPG patchset - Mailing list pgsql-hackers
From | Boszormenyi Zoltan |
---|---|
Subject | Re: ECPG patchset |
Date | |
Msg-id | 4A9FC2E2.70002@cybertec.at Whole thread Raw |
In response to | ECPG patchset (Boszormenyi Zoltan <zb@cybertec.at>) |
Responses |
Re: ECPG patchset
|
List | pgsql-hackers |
Dynamic cursorname -- Bible has answers for everything. Proof: "But let your communication be, Yea, yea; Nay, nay: for whatsoever is more than these cometh of evil." (Matthew 5:37) - basics of digital technology. "May your kingdom come" - superficial description of plate tectonics ---------------------------------- Zoltán Böszörményi Cybertec Schönig & Schönig GmbH http://www.postgresql.at/ diff -dcrpN pgsql.orig/src/backend/parser/gram.y pgsql.dyncursor/src/backend/parser/gram.y *** pgsql.orig/src/backend/parser/gram.y 2009-08-19 11:31:07.000000000 +0200 --- pgsql.dyncursor/src/backend/parser/gram.y 2009-09-03 12:29:27.000000000 +0200 *************** static TypeName *TableFuncTypeName(List *** 253,259 **** %type <str> relation_name copy_file_name database_name access_method_clause access_method attr_name ! index_name name file_name cluster_index_specification %type <list> func_name handler_name qual_Op qual_all_Op subquery_Op opt_class opt_validator validator_clause --- 253,259 ---- %type <str> relation_name copy_file_name database_name access_method_clause access_method attr_name ! index_name name cursor_name file_name cluster_index_specification %type <list> func_name handler_name qual_Op qual_all_Op subquery_Op opt_class opt_validator validator_clause *************** static TypeName *TableFuncTypeName(List *** 331,337 **** %type <ival> opt_column event cursor_options opt_hold opt_set_data %type <objtype> reindex_type drop_type comment_type ! %type <node> fetch_direction limit_clause select_limit_value offset_clause select_offset_value select_offset_value2 opt_select_fetch_first_value %type <ival> row_or_rows first_or_next --- 331,337 ---- %type <ival> opt_column event cursor_options opt_hold opt_set_data %type <objtype> reindex_type drop_type comment_type ! %type <node> fetch_args limit_clause select_limit_value offset_clause select_offset_value select_offset_value2 opt_select_fetch_first_value %type <ival> row_or_rows first_or_next *************** reloption_elem: *** 1916,1922 **** *****************************************************************************/ ClosePortalStmt: ! CLOSE name { ClosePortalStmt *n = makeNode(ClosePortalStmt); n->portalname = $2; --- 1916,1922 ---- *****************************************************************************/ ClosePortalStmt: ! CLOSE cursor_name { ClosePortalStmt *n = makeNode(ClosePortalStmt); n->portalname = $2; *************** comment_text: *** 4083,4224 **** * *****************************************************************************/ ! FetchStmt: FETCH fetch_direction from_in name { FetchStmt *n = (FetchStmt *) $2; - n->portalname = $4; - n->ismove = FALSE; - $$ = (Node *)n; - } - | FETCH name - { - FetchStmt *n = makeNode(FetchStmt); - n->direction = FETCH_FORWARD; - n->howMany = 1; - n->portalname = $2; n->ismove = FALSE; $$ = (Node *)n; } ! | MOVE fetch_direction from_in name { FetchStmt *n = (FetchStmt *) $2; - n->portalname = $4; n->ismove = TRUE; $$ = (Node *)n; } ! | MOVE name { FetchStmt *n = makeNode(FetchStmt); n->direction = FETCH_FORWARD; n->howMany = 1; - n->portalname = $2; - n->ismove = TRUE; $$ = (Node *)n; } ! ; ! ! fetch_direction: ! /*EMPTY*/ { FetchStmt *n = makeNode(FetchStmt); n->direction = FETCH_FORWARD; n->howMany = 1; $$ = (Node *)n; } ! | NEXT { FetchStmt *n = makeNode(FetchStmt); n->direction = FETCH_FORWARD; n->howMany = 1; $$ = (Node *)n; } ! | PRIOR { FetchStmt *n = makeNode(FetchStmt); n->direction = FETCH_BACKWARD; n->howMany = 1; $$ = (Node *)n; } ! | FIRST_P { FetchStmt *n = makeNode(FetchStmt); n->direction = FETCH_ABSOLUTE; n->howMany = 1; $$ = (Node *)n; } ! | LAST_P { FetchStmt *n = makeNode(FetchStmt); n->direction = FETCH_ABSOLUTE; n->howMany = -1; $$ = (Node *)n; } ! | ABSOLUTE_P SignedIconst { FetchStmt *n = makeNode(FetchStmt); n->direction = FETCH_ABSOLUTE; n->howMany = $2; $$ = (Node *)n; } ! | RELATIVE_P SignedIconst { FetchStmt *n = makeNode(FetchStmt); n->direction = FETCH_RELATIVE; n->howMany = $2; $$ = (Node *)n; } ! | SignedIconst { FetchStmt *n = makeNode(FetchStmt); n->direction = FETCH_FORWARD; n->howMany = $1; $$ = (Node *)n; } ! | ALL { FetchStmt *n = makeNode(FetchStmt); n->direction = FETCH_FORWARD; n->howMany = FETCH_ALL; $$ = (Node *)n; } ! | FORWARD { FetchStmt *n = makeNode(FetchStmt); n->direction = FETCH_FORWARD; n->howMany = 1; $$ = (Node *)n; } ! | FORWARD SignedIconst { FetchStmt *n = makeNode(FetchStmt); n->direction = FETCH_FORWARD; n->howMany = $2; $$ = (Node *)n; } ! | FORWARD ALL { FetchStmt *n = makeNode(FetchStmt); n->direction = FETCH_FORWARD; n->howMany = FETCH_ALL; $$ = (Node *)n; } ! | BACKWARD { FetchStmt *n = makeNode(FetchStmt); n->direction = FETCH_BACKWARD; n->howMany = 1; $$ = (Node *)n; } ! | BACKWARD SignedIconst { FetchStmt *n = makeNode(FetchStmt); n->direction = FETCH_BACKWARD; n->howMany = $2; $$ = (Node *)n; } ! | BACKWARD ALL { FetchStmt *n = makeNode(FetchStmt); n->direction = FETCH_BACKWARD; n->howMany = FETCH_ALL; $$ = (Node *)n; --- 4083,4227 ---- * *****************************************************************************/ ! FetchStmt: FETCH fetch_args { FetchStmt *n = (FetchStmt *) $2; n->ismove = FALSE; $$ = (Node *)n; } ! | MOVE fetch_args { FetchStmt *n = (FetchStmt *) $2; n->ismove = TRUE; $$ = (Node *)n; } ! ; ! ! fetch_args: ! cursor_name { FetchStmt *n = makeNode(FetchStmt); + n->portalname = $1; n->direction = FETCH_FORWARD; n->howMany = 1; $$ = (Node *)n; } ! | from_in cursor_name { FetchStmt *n = makeNode(FetchStmt); + n->portalname = $2; n->direction = FETCH_FORWARD; n->howMany = 1; $$ = (Node *)n; } ! | NEXT opt_from_in cursor_name { FetchStmt *n = makeNode(FetchStmt); + n->portalname = $3; n->direction = FETCH_FORWARD; n->howMany = 1; $$ = (Node *)n; } ! | PRIOR opt_from_in cursor_name { FetchStmt *n = makeNode(FetchStmt); + n->portalname = $3; n->direction = FETCH_BACKWARD; n->howMany = 1; $$ = (Node *)n; } ! | FIRST_P opt_from_in cursor_name { FetchStmt *n = makeNode(FetchStmt); + n->portalname = $3; n->direction = FETCH_ABSOLUTE; n->howMany = 1; $$ = (Node *)n; } ! | LAST_P opt_from_in cursor_name { FetchStmt *n = makeNode(FetchStmt); + n->portalname = $3; n->direction = FETCH_ABSOLUTE; n->howMany = -1; $$ = (Node *)n; } ! | ABSOLUTE_P SignedIconst opt_from_in cursor_name { FetchStmt *n = makeNode(FetchStmt); + n->portalname = $4; n->direction = FETCH_ABSOLUTE; n->howMany = $2; $$ = (Node *)n; } ! | RELATIVE_P SignedIconst opt_from_in cursor_name { FetchStmt *n = makeNode(FetchStmt); + n->portalname = $4; n->direction = FETCH_RELATIVE; n->howMany = $2; $$ = (Node *)n; } ! | SignedIconst opt_from_in cursor_name { FetchStmt *n = makeNode(FetchStmt); + n->portalname = $3; n->direction = FETCH_FORWARD; n->howMany = $1; $$ = (Node *)n; } ! | ALL opt_from_in cursor_name { FetchStmt *n = makeNode(FetchStmt); + n->portalname = $3; n->direction = FETCH_FORWARD; n->howMany = FETCH_ALL; $$ = (Node *)n; } ! | FORWARD opt_from_in cursor_name { FetchStmt *n = makeNode(FetchStmt); + n->portalname = $3; n->direction = FETCH_FORWARD; n->howMany = 1; $$ = (Node *)n; } ! | FORWARD SignedIconst opt_from_in cursor_name { FetchStmt *n = makeNode(FetchStmt); + n->portalname = $4; n->direction = FETCH_FORWARD; n->howMany = $2; $$ = (Node *)n; } ! | FORWARD ALL opt_from_in cursor_name { FetchStmt *n = makeNode(FetchStmt); + n->portalname = $4; n->direction = FETCH_FORWARD; n->howMany = FETCH_ALL; $$ = (Node *)n; } ! | BACKWARD opt_from_in cursor_name { FetchStmt *n = makeNode(FetchStmt); + n->portalname = $3; n->direction = FETCH_BACKWARD; n->howMany = 1; $$ = (Node *)n; } ! | BACKWARD SignedIconst opt_from_in cursor_name { FetchStmt *n = makeNode(FetchStmt); + n->portalname = $4; n->direction = FETCH_BACKWARD; n->howMany = $2; $$ = (Node *)n; } ! | BACKWARD ALL opt_from_in cursor_name { FetchStmt *n = makeNode(FetchStmt); + n->portalname = $4; n->direction = FETCH_BACKWARD; n->howMany = FETCH_ALL; $$ = (Node *)n; *************** from_in: FROM {} *** 4229,4234 **** --- 4232,4242 ---- | IN_P {} ; + opt_from_in: FROM {} + | IN_P {} + | /* EMPTY */ {} + ; + /***************************************************************************** * *************** set_target_list: *** 6848,6854 **** * CURSOR STATEMENTS * *****************************************************************************/ ! DeclareCursorStmt: DECLARE name cursor_options CURSOR opt_hold FOR SelectStmt { DeclareCursorStmt *n = makeNode(DeclareCursorStmt); n->portalname = $2; --- 6856,6862 ---- * CURSOR STATEMENTS * *****************************************************************************/ ! DeclareCursorStmt: DECLARE cursor_name cursor_options CURSOR opt_hold FOR SelectStmt { DeclareCursorStmt *n = makeNode(DeclareCursorStmt); n->portalname = $2; *************** DeclareCursorStmt: DECLARE name cursor_o *** 6859,6864 **** --- 6867,6875 ---- } ; + cursor_name: name { $$ = $1; } + ; + cursor_options: /*EMPTY*/ { $$ = 0; } | cursor_options NO SCROLL { $$ = $1 | CURSOR_OPT_NO_SCROLL; } | cursor_options SCROLL { $$ = $1 | CURSOR_OPT_SCROLL; } diff -dcrpN pgsql.orig/src/interfaces/ecpg/preproc/ecpg.addons pgsql.dyncursor/src/interfaces/ecpg/preproc/ecpg.addons *** pgsql.orig/src/interfaces/ecpg/preproc/ecpg.addons 2009-08-14 16:27:41.000000000 +0200 --- pgsql.dyncursor/src/interfaces/ecpg/preproc/ecpg.addons 2009-09-03 12:31:30.000000000 +0200 *************** ECPG: ConstraintAttributeSpecConstraintT *** 206,226 **** if (strcmp($2, "deferrable") != 0 && strcmp($1, "initially deferrable") == 0 ) mmerror(PARSE_ERROR, ET_ERROR, "constraint declared INITIALLY DEFERRED must be DEFERRABLE"); ECPG: var_valueNumericOnly addon - ECPG: fetch_directionSignedIconst addon if ($1[0] == '$') { free($1); $1 = make_str("$0"); } ! ECPG: fetch_directionABSOLUTE_PSignedIconst addon ! ECPG: fetch_directionRELATIVE_PSignedIconst addon ! ECPG: fetch_directionFORWARDSignedIconst addon ! ECPG: fetch_directionBACKWARDSignedIconst addon if ($2[0] == '$') { free($2); $2 = make_str("$0"); } ECPG: PrepareStmtPREPAREprepared_nameprep_type_clauseASPreparableStmt block { $$.name = $2; --- 206,290 ---- if (strcmp($2, "deferrable") != 0 && strcmp($1, "initially deferrable") == 0 ) mmerror(PARSE_ERROR, ET_ERROR, "constraint declared INITIALLY DEFERRED must be DEFERRABLE"); ECPG: var_valueNumericOnly addon if ($1[0] == '$') { free($1); $1 = make_str("$0"); } ! ECPG: FetchStmtFETCHfetch_args addon ! ECPG: FetchStmtMOVEfetch_args addon ! add_additional_variables(current_cursor, false); ! free(current_cursor); ! current_cursor = NULL; ! ECPG: fetch_argscursor_name addon ! current_cursor = mm_strdup($1); ! if ($1[0] == ':') ! { ! free($1); ! $1 = make_str("$0"); ! } ! ECPG: fetch_argsfrom_incursor_name addon ! current_cursor = mm_strdup($2); ! if ($2[0] == ':') ! { ! free($2); ! $2 = make_str("$0"); ! } ! ECPG: fetch_argsNEXTopt_from_incursor_name addon ! ECPG: fetch_argsPRIORopt_from_incursor_name addon ! ECPG: fetch_argsFIRST_Popt_from_incursor_name addon ! ECPG: fetch_argsLAST_Popt_from_incursor_name addon ! ECPG: fetch_argsALLopt_from_incursor_name addon ! current_cursor = mm_strdup($3); ! if ($3[0] == ':') ! { ! free($3); ! $3 = make_str("$0"); ! } ! ECPG: fetch_argsSignedIconstopt_from_incursor_name addon ! if ($1[0] == '$') ! { ! free($1); ! $1 = make_str("$0"); ! } ! current_cursor = mm_strdup($3); ! if ($3[0] == ':') ! { ! free($3); ! $3 = make_str("$0"); ! } ! ECPG: fetch_argsFORWARDALLopt_from_incursor_name addon ! ECPG: fetch_argsBACKWARDALLopt_from_incursor_name addon ! current_cursor = mm_strdup($4); ! if ($4[0] == ':') ! { ! free($4); ! $4 = make_str("$0"); ! } ! ECPG: fetch_argsABSOLUTE_PSignedIconstopt_from_incursor_name addon ! ECPG: fetch_argsRELATIVE_PSignedIconstopt_from_incursor_name addon ! ECPG: fetch_argsFORWARDSignedIconstopt_from_incursor_name addon ! ECPG: fetch_argsBACKWARDSignedIconstopt_from_incursor_name addon if ($2[0] == '$') { free($2); $2 = make_str("$0"); } + current_cursor = mm_strdup($4); + if ($4[0] == ':') + { + free($4); + $4 = make_str("$0"); + } + ECPG: cursor_namename rule + | char_civar + { + char *curname = mm_alloc(strlen($1) + 2); + sprintf(curname, ":%s", $1); + free($1); + $1 = curname; + $$ = $1; + } ECPG: PrepareStmtPREPAREprepared_nameprep_type_clauseASPreparableStmt block { $$.name = $2; *************** ECPG: PrepareStmtPREPAREprepared_namepre *** 235,243 **** } ECPG: ExecuteStmtEXECUTEprepared_nameexecute_param_clauseexecute_rest block { $$ = $2; } ! ECPG: DeclareCursorStmtDECLAREnamecursor_optionsCURSORopt_holdFORSelectStmt block { struct cursor *ptr, *this; char *comment; for (ptr = cur; ptr != NULL; ptr = ptr->next) --- 299,308 ---- } ECPG: ExecuteStmtEXECUTEprepared_nameexecute_param_clauseexecute_rest block { $$ = $2; } ! ECPG: DeclareCursorStmtDECLAREcursor_namecursor_optionsCURSORopt_holdFORSelectStmt block { struct cursor *ptr, *this; + char *cursor_marker = $2[0] == ':' ? make_str("$0") : mm_strdup($2); char *comment; for (ptr = cur; ptr != NULL; ptr = ptr->next) *************** ECPG: DeclareCursorStmtDECLAREnamecursor *** 252,258 **** this->name = $2; this->connection = connection; this->opened = false; ! this->command = cat_str(7, make_str("declare"), mm_strdup($2), $3, make_str("cursor"), $5, make_str("for"), $7); this->argsinsert = argsinsert; this->argsresult = argsresult; argsinsert = argsresult = NULL; --- 317,323 ---- this->name = $2; this->connection = connection; this->opened = false; ! this->command = cat_str(7, make_str("declare"), cursor_marker, $3, make_str("cursor"), $5, make_str("for"), $7); this->argsinsert = argsinsert; this->argsresult = argsresult; argsinsert = argsresult = NULL; *************** ECPG: DeclareCursorStmtDECLAREnamecursor *** 272,277 **** --- 337,347 ---- else $$ = comment; } + ECPG: ClosePortalStmtCLOSEcursor_name block + { + char *cursor_marker = $2[0] == ':' ? make_str("$0") : $2; + $$ = cat2_str(make_str("close"), cursor_marker); + } ECPG: opt_hold block { if (compat == ECPG_COMPAT_INFORMIX_SE && autocommit == true) *************** ECPG: VariableShowStmtSHOWALL block *** 336,382 **** mmerror(PARSE_ERROR, ET_ERROR, "SHOW ALL is not implemented"); $$ = EMPTY; } ! ECPG: FetchStmtFETCHfetch_directionfrom_inname block { add_additional_variables($4, false); ! $$ = cat_str(4, make_str("fetch"), $2, $3, $4); } ! ECPG: FetchStmtFETCHname block { ! add_additional_variables($2, false); ! $$ = cat_str(2, make_str("fetch"), $2); } - ECPG: FetchStmtMOVEname rule - | FETCH fetch_direction from_in name ecpg_into - { - add_additional_variables($4, false); - $$ = cat_str(4, make_str("fetch"), $2, $3, $4); - } - | FETCH fetch_direction name ecpg_into - { - add_additional_variables($3, false); - $$ = cat_str(4, make_str("fetch"), $2, make_str("from"), $3); - } - | FETCH from_in name ecpg_into - { - add_additional_variables($3, false); - $$ = cat_str(3, make_str("fetch"), $2, $3); - } - | FETCH name ecpg_into - { - add_additional_variables($2, false); - $$ = cat2_str(make_str("fetch"), $2); - } - | FETCH fetch_direction name - { - add_additional_variables($3, false); - $$ = cat_str(4, make_str("fetch"), $2, make_str("from"), $3); - } - | FETCH from_in name - { - add_additional_variables($3, false); - $$ = cat_str(3, make_str("fetch"), $2, $3); - } ECPG: SpecialRuleRelationOLD addon if (!QueryIsRule) mmerror(PARSE_ERROR, ET_ERROR, "OLD used in query that is not in a rule"); --- 406,443 ---- mmerror(PARSE_ERROR, ET_ERROR, "SHOW ALL is not implemented"); $$ = EMPTY; } ! ECPG: FetchStmtMOVEfetch_args rule ! | FETCH fetch_args ecpg_into { + add_additional_variables(current_cursor, false); + free(current_cursor); + current_cursor = NULL; + $$ = cat2_str(make_str("fetch"), $2); + } + | FETCH FORWARD cursor_name opt_ecpg_into + { + char *cursor_marker = $3[0] == ':' ? make_str("$0") : $3; + add_additional_variables($3, false); + $$ = cat_str(2, make_str("fetch forward"), cursor_marker); + } + | FETCH FORWARD from_in cursor_name opt_ecpg_into + { + char *cursor_marker = $4[0] == ':' ? make_str("$0") : $4; add_additional_variables($4, false); ! $$ = cat_str(2, make_str("fetch forward from"), cursor_marker); } ! | MOVE FORWARD cursor_name { ! char *cursor_marker = $3[0] == ':' ? make_str("$0") : $3; ! add_additional_variables($3, false); ! $$ = cat_str(2, make_str("move forward"), cursor_marker); ! } ! | MOVE FORWARD from_in cursor_name ! { ! char *cursor_marker = $4[0] == ':' ? make_str("$0") : $4; ! add_additional_variables($4, false); ! $$ = cat_str(2, make_str("move forward from"), cursor_marker); } ECPG: SpecialRuleRelationOLD addon if (!QueryIsRule) mmerror(PARSE_ERROR, ET_ERROR, "OLD used in query that is not in a rule"); diff -dcrpN pgsql.orig/src/interfaces/ecpg/preproc/ecpg.c pgsql.dyncursor/src/interfaces/ecpg/preproc/ecpg.c *** pgsql.orig/src/interfaces/ecpg/preproc/ecpg.c 2009-08-07 13:06:28.000000000 +0200 --- pgsql.dyncursor/src/interfaces/ecpg/preproc/ecpg.c 2009-09-03 12:28:03.000000000 +0200 *************** enum COMPAT_MODE compat = ECPG_COMPAT_PG *** 26,31 **** --- 26,32 ---- struct _include_path *include_paths = NULL; struct cursor *cur = NULL; + char *current_cursor = NULL; struct typedefs *types = NULL; struct _defines *defines = NULL; diff -dcrpN pgsql.orig/src/interfaces/ecpg/preproc/ecpg.trailer pgsql.dyncursor/src/interfaces/ecpg/preproc/ecpg.trailer *** pgsql.orig/src/interfaces/ecpg/preproc/ecpg.trailer 2009-08-14 16:27:41.000000000 +0200 --- pgsql.dyncursor/src/interfaces/ecpg/preproc/ecpg.trailer 2009-09-03 12:28:03.000000000 +0200 *************** char_variable: cvariable *** 228,233 **** --- 228,265 ---- } ; + cursor_char_variable: cvariable + { + /* check if we have a string variable */ + struct variable *p = find_variable($1); + enum ECPGttype type = p->type->type; + + /* If we have just one character this is not a string */ + if (atol(p->type->size) == 1) + mmerror(PARSE_ERROR, ET_ERROR, "invalid data type"); + else + { + /* if array see what's inside */ + if (type == ECPGt_array) + type = p->type->u.element->type; + + switch (type) + { + case ECPGt_char: + case ECPGt_unsigned_char: + case ECPGt_string: + case ECPGt_varchar: + $$ = $1; + break; + default: + mmerror(PARSE_ERROR, ET_ERROR, "invalid data type"); + $$ = $1; + break; + } + } + } + ; + opt_options: Op connect_options { if (strlen($1) == 0) *************** prepared_name: name { *** 285,293 **** * Declare a prepared cursor. The syntax is different from the standard * declare statement, so we create a new rule. */ ! ECPGCursorStmt: DECLARE name cursor_options CURSOR opt_hold FOR prepared_name { struct cursor *ptr, *this; struct variable *thisquery = (struct variable *)mm_alloc(sizeof(struct variable)); const char *con = connection ? connection : "NULL"; --- 317,326 ---- * Declare a prepared cursor. The syntax is different from the standard * declare statement, so we create a new rule. */ ! ECPGCursorStmt: DECLARE cursor_name cursor_options CURSOR opt_hold FOR prepared_name { struct cursor *ptr, *this; + char *cursor_marker = $2[0] == ':' ? make_str("$0") : mm_strdup($2); struct variable *thisquery = (struct variable *)mm_alloc(sizeof(struct variable)); const char *con = connection ? connection : "NULL"; *************** ECPGCursorStmt: DECLARE name cursor_opt *** 304,310 **** this->next = cur; this->name = $2; this->connection = connection; ! this->command = cat_str(6, make_str("declare"), mm_strdup($2), $3, make_str("cursor"), $5, make_str("for $1")); this->argsresult = NULL; thisquery->type = &ecpg_query; --- 337,343 ---- this->next = cur; this->name = $2; this->connection = connection; ! this->command = cat_str(6, make_str("declare"), cursor_marker, $3, make_str("cursor"), $5, make_str("for $1")); this->argsresult = NULL; thisquery->type = &ecpg_query; *************** ECPGCursorStmt: DECLARE name cursor_opt *** 314,319 **** --- 347,358 ---- sprintf(thisquery->name, "ECPGprepared_statement(%s, %s, __LINE__)", con, $7); this->argsinsert = NULL; + if ($2[0] == ':') + { + struct variable *var = find_variable($2 + 1); + remove_variable_from_list(&argsinsert, var); + add_variable_to_head(&(this->argsinsert), var, &no_indicator); + } add_variable_to_head(&(this->argsinsert), thisquery, &no_indicator); cur = this; *************** ECPGFree: SQL_FREE name { $$ = $2; } *** 957,963 **** /* * open is an open cursor, at the moment this has to be removed */ ! ECPGOpen: SQL_OPEN name opt_ecpg_using { $$ = $2; }; opt_ecpg_using: /*EMPTY*/ { $$ = EMPTY; } | ecpg_using { $$ = $1; } --- 996,1011 ---- /* * open is an open cursor, at the moment this has to be removed */ ! ECPGOpen: SQL_OPEN cursor_name opt_ecpg_using ! { ! if ($2[0] == ':') ! { ! struct variable *var = find_variable($2 + 1); ! remove_variable_from_list(&argsinsert, var); ! } ! $$ = $2; ! } ! ; opt_ecpg_using: /*EMPTY*/ { $$ = EMPTY; } | ecpg_using { $$ = $1; } *************** civarind: cvariable indicator *** 1782,1787 **** --- 1830,1842 ---- } ; + char_civar: cursor_char_variable + { + add_variable_to_head(&argsinsert, find_variable($1), &no_indicator); + $$ = $1; + } + ; + civar: cvariable { add_variable_to_head(&argsinsert, find_variable($1), &no_indicator); *************** ecpg_into: INTO into_list { $$ = EMPTY; *** 1997,2002 **** --- 2052,2061 ---- | into_descriptor { $$ = $1; } ; + + opt_ecpg_into: /* EMPTY */ { $$ = EMPTY; } + | ecpg_into { $$ = $1; } + %% void base_yyerror(const char *error) diff -dcrpN pgsql.orig/src/interfaces/ecpg/preproc/ecpg.type pgsql.dyncursor/src/interfaces/ecpg/preproc/ecpg.type *** pgsql.orig/src/interfaces/ecpg/preproc/ecpg.type 2008-11-14 11:03:33.000000000 +0100 --- pgsql.dyncursor/src/interfaces/ecpg/preproc/ecpg.type 2009-09-03 12:28:03.000000000 +0200 *************** *** 43,50 **** --- 43,52 ---- %type <str> c_term %type <str> c_thing %type <str> char_variable + %type <str> char_civar %type <str> civar %type <str> civarind + %type <str> cursor_char_variable %type <str> ColLabel %type <str> connect_options %type <str> connection_object *************** *** 75,80 **** --- 77,83 ---- %type <str> opt_bit_field %type <str> opt_connection_name %type <str> opt_database_name + %type <str> opt_ecpg_into %type <str> opt_ecpg_using %type <str> opt_initializer %type <str> opt_options diff -dcrpN pgsql.orig/src/interfaces/ecpg/preproc/extern.h pgsql.dyncursor/src/interfaces/ecpg/preproc/extern.h *** pgsql.orig/src/interfaces/ecpg/preproc/extern.h 2009-07-17 07:50:56.000000000 +0200 --- pgsql.dyncursor/src/interfaces/ecpg/preproc/extern.h 2009-09-03 12:28:03.000000000 +0200 *************** extern char *output_filename; *** 47,52 **** --- 47,53 ---- extern struct _include_path *include_paths; extern struct cursor *cur; + extern char *current_cursor; extern struct typedefs *types; extern struct _defines *defines; extern struct ECPGtype ecpg_no_indicator; *************** extern struct descriptor *lookup_descrip *** 91,96 **** --- 92,98 ---- extern struct variable *descriptor_variable(const char *name, int input); extern void add_variable_to_head(struct arguments **, struct variable *, struct variable *); extern void add_variable_to_tail(struct arguments **, struct variable *, struct variable *); + extern void remove_variable_from_list(struct arguments ** list, struct variable * var); extern void dump_variables(struct arguments *, int); extern struct typedefs *get_typedef(char *); extern void adjust_array(enum ECPGttype, char **, char **, char *, char *, int, bool); diff -dcrpN pgsql.orig/src/interfaces/ecpg/preproc/parse.pl pgsql.dyncursor/src/interfaces/ecpg/preproc/parse.pl *** pgsql.orig/src/interfaces/ecpg/preproc/parse.pl 2009-01-30 17:28:46.000000000 +0100 --- pgsql.dyncursor/src/interfaces/ecpg/preproc/parse.pl 2009-09-03 12:28:03.000000000 +0200 *************** $replace_types{'unreserved_keyword'} = ' *** 57,63 **** $replace_types{'Sconst'} = 'ignore'; # some production rules have to be ignored or replaced ! $replace_line{'fetch_direction'} = 'ignore'; $replace_line{"opt_array_boundsopt_array_bounds'['Iconst']'"} = 'ignore'; $replace_line{'col_name_keywordCHAR_P'} = 'ignore'; $replace_line{'col_name_keywordINT_P'} = 'ignore'; --- 57,65 ---- $replace_types{'Sconst'} = 'ignore'; # some production rules have to be ignored or replaced ! $replace_line{'fetch_args'} = 'ignore'; ! $replace_line{'fetch_argsFORWARDopt_from_incursor_name'} = 'ignore'; ! $replace_line{'fetch_argsBACKWARDopt_from_incursor_name'} = 'ignore'; $replace_line{"opt_array_boundsopt_array_bounds'['Iconst']'"} = 'ignore'; $replace_line{'col_name_keywordCHAR_P'} = 'ignore'; $replace_line{'col_name_keywordINT_P'} = 'ignore'; *************** sub include_stuff { *** 311,316 **** --- 313,319 ---- local($includestream, $includefilename, $includeblock, $copy, $field_count) = @_; $copied = 0; $inblock = 0; + $have_addon = 0; $filename = $path . "/" . $includefilename; while (($_ = &Getline2($filename),$getline_ok)) { if ($includeblock ne '' && $Fld[1] eq 'ECPG:' && $inblock == 0) { *************** sub include_stuff { *** 319,327 **** $inblock = 1; $includetype = $Fld[3]; if ($includetype eq 'rule') { ! &dump_fields($stmt_mode, *fields, $field_count, ' { '); } elsif ($includetype eq 'addon') { &add_to_buffer('rules', ' { '); } } --- 322,336 ---- $inblock = 1; $includetype = $Fld[3]; if ($includetype eq 'rule') { ! if ($have_addon == 0) { ! &dump_fields($stmt_mode, *fields, $field_count, ' { '); ! } ! else { ! &dump_fields($stmt_mode, *fields, $field_count, ''); ! } } elsif ($includetype eq 'addon') { + $have_addon = 1; &add_to_buffer('rules', ' { '); } } diff -dcrpN pgsql.orig/src/interfaces/ecpg/preproc/variable.c pgsql.dyncursor/src/interfaces/ecpg/preproc/variable.c *** pgsql.orig/src/interfaces/ecpg/preproc/variable.c 2009-08-07 13:06:28.000000000 +0200 --- pgsql.dyncursor/src/interfaces/ecpg/preproc/variable.c 2009-09-03 12:28:03.000000000 +0200 *************** add_variable_to_tail(struct arguments ** *** 401,406 **** --- 401,430 ---- *list = new; } + void + remove_variable_from_list(struct arguments ** list, struct variable * var) + { + struct arguments *p, *prev = NULL; + bool found = false; + + for (p = *list; p; p = p->next) + { + if (p->variable == var) + { + found = true; + break; + } + prev = p; + } + if (found) + { + if (prev) + prev->next = p->next; + else + *list = p->next; + } + } + /* Dump out a list of all the variable on this list. This is a recursive function that works from the end of the list and deletes the list as we go on. diff -dcrpN pgsql.orig/src/interfaces/ecpg/test/compat_informix/cursor.pgc pgsql.dyncursor/src/interfaces/ecpg/test/compat_informix/cursor.pgc *** pgsql.orig/src/interfaces/ecpg/test/compat_informix/cursor.pgc 1970-01-01 01:00:00.000000000 +0100 --- pgsql.dyncursor/src/interfaces/ecpg/test/compat_informix/cursor.pgc 2009-09-03 12:28:03.000000000 +0200 *************** *** 0 **** --- 1,245 ---- + #include <stdlib.h> + #include <string.h> + + exec sql include ../regression; + + exec sql whenever sqlerror stop; + + exec sql type c is char reference; + typedef char* c; + + exec sql type ind is union { int integer; short smallint; }; + typedef union { int integer; short smallint; } ind; + + #define BUFFERSIZ 8 + exec sql type str is varchar[BUFFERSIZ]; + + #define CURNAME "mycur" + + int + main (void) + { + exec sql begin declare section; + char *stmt1 = "SELECT id, t FROM t1"; + char *curname1 = CURNAME; + char *curname2 = CURNAME; + char *curname3 = CURNAME; + varchar curname4[50]; + int count; + int id; + char t[64]; + exec sql end declare section; + + char msg[128]; + + ECPGdebug(1, stderr); + + strcpy(msg, "connect"); + exec sql connect to REGRESSDB1; + + strcpy(msg, "set"); + exec sql set datestyle to iso; + + strcpy(msg, "create"); + exec sql create table t1(id serial primary key, t text); + + strcpy(msg, "insert"); + exec sql insert into t1(id, t) values (default, 'a'); + exec sql insert into t1(id, t) values (default, 'b'); + exec sql insert into t1(id, t) values (default, 'c'); + exec sql insert into t1(id, t) values (default, 'd'); + + strcpy(msg, "commit"); + exec sql commit; + + /* Dynamic cursorname test with INTO list in FETCH stmts */ + + strcpy(msg, "declare"); + exec sql declare :curname1 cursor for + select id, t from t1; + + strcpy(msg, "open"); + exec sql open :curname1; + + strcpy(msg, "fetch from"); + exec sql fetch from :curname1 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch"); + exec sql fetch :curname1 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch 1 from"); + exec sql fetch 1 from :curname1 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count from"); + count = 1; + exec sql fetch :count from :curname1 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "move in"); + exec sql move absolute 0 in :curname1; + + strcpy(msg, "fetch 1"); + exec sql fetch 1 :curname1 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count"); + count = 1; + exec sql fetch :count :curname1 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "close"); + exec sql close :curname1; + + /* Dynamic cursorname test with INTO list in DECLARE stmt */ + + strcpy(msg, "declare"); + exec sql declare :curname2 cursor for + select id, t into :id, :t from t1; + + strcpy(msg, "open"); + exec sql open :curname2; + + strcpy(msg, "fetch from"); + exec sql fetch from :curname2; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch"); + exec sql fetch :curname2; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch 1 from"); + exec sql fetch 1 from :curname2; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count from"); + count = 1; + exec sql fetch :count from :curname2; + printf("%d %s\n", id, t); + + strcpy(msg, "move"); + exec sql move absolute 0 :curname2; + + strcpy(msg, "fetch 1"); + exec sql fetch 1 :curname2; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count"); + count = 1; + exec sql fetch :count :curname2; + printf("%d %s\n", id, t); + + strcpy(msg, "close"); + exec sql close :curname2; + + /* Dynamic cursorname test with PREPARED stmt */ + + strcpy(msg, "prepare"); + exec sql prepare st_id1 from :stmt1; + + strcpy(msg, "declare"); + exec sql declare :curname3 cursor for st_id1; + + strcpy(msg, "open"); + exec sql open :curname3; + + strcpy(msg, "fetch from"); + exec sql fetch from :curname3 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch"); + exec sql fetch :curname3 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch 1 from"); + exec sql fetch 1 from :curname3 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count from"); + count = 1; + exec sql fetch :count from :curname3 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "move"); + exec sql move absolute 0 :curname3; + + strcpy(msg, "fetch 1"); + exec sql fetch 1 :curname3 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count"); + count = 1; + exec sql fetch :count :curname3 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "close"); + exec sql close :curname3; + + strcpy(msg, "deallocate prepare"); + exec sql deallocate prepare st_id1; + + /* Dynamic cursorname test with PREPARED stmt, + cursor name in varchar */ + + curname4.len = strlen(CURNAME); + strcpy(curname4.arr, CURNAME); + + strcpy(msg, "prepare"); + exec sql prepare st_id2 from :stmt1; + + strcpy(msg, "declare"); + exec sql declare :curname4 cursor for st_id2; + + strcpy(msg, "open"); + exec sql open :curname4; + + strcpy(msg, "fetch from"); + exec sql fetch from :curname4 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch"); + exec sql fetch :curname4 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch 1 from"); + exec sql fetch 1 from :curname4 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count from"); + count = 1; + exec sql fetch :count from :curname4 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "move"); + exec sql move absolute 0 :curname4; + + strcpy(msg, "fetch 1"); + exec sql fetch 1 :curname4 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count"); + count = 1; + exec sql fetch :count :curname4 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "close"); + exec sql close :curname4; + + strcpy(msg, "deallocate prepare"); + exec sql deallocate prepare st_id2; + + /* End test */ + + strcpy(msg, "drop"); + exec sql drop table t1; + + strcpy(msg, "commit"); + exec sql commit; + + strcpy(msg, "disconnect"); + exec sql disconnect; + + return (0); + } diff -dcrpN pgsql.orig/src/interfaces/ecpg/test/compat_informix/Makefile pgsql.dyncursor/src/interfaces/ecpg/test/compat_informix/Makefile *** pgsql.orig/src/interfaces/ecpg/test/compat_informix/Makefile 2006-09-19 17:36:08.000000000 +0200 --- pgsql.dyncursor/src/interfaces/ecpg/test/compat_informix/Makefile 2009-09-03 12:28:03.000000000 +0200 *************** override LIBS := -lecpg_compat $(LIBS) *** 12,17 **** --- 12,18 ---- TESTS = test_informix test_informix.c \ test_informix2 test_informix2.c \ + cursor cursor.c \ dec_test dec_test.c \ rfmtdate rfmtdate.c \ rfmtlong rfmtlong.c \ *************** test_informix.c: test_informix.pgc ../re *** 26,31 **** --- 27,35 ---- test_informix2.c: test_informix2.pgc ../regression.h $(ECPG) -o $@ -I$(srcdir) $< + cursor.c: cursor.pgc ../regression.h + $(ECPG) -o $@ -I$(srcdir) $< + dec_test.c: dec_test.pgc ../regression.h $(ECPG) -o $@ -I$(srcdir) $< diff -dcrpN pgsql.orig/src/interfaces/ecpg/test/ecpg_schedule pgsql.dyncursor/src/interfaces/ecpg/test/ecpg_schedule *** pgsql.orig/src/interfaces/ecpg/test/ecpg_schedule 2008-10-29 11:40:29.000000000 +0100 --- pgsql.dyncursor/src/interfaces/ecpg/test/ecpg_schedule 2009-09-03 12:28:03.000000000 +0200 *************** test: compat_informix/charfuncs *** 3,8 **** --- 3,9 ---- test: compat_informix/rfmtdate test: compat_informix/rfmtlong test: compat_informix/rnull + test: compat_informix/cursor test: compat_informix/test_informix test: compat_informix/test_informix2 test: connect/test2 *************** test: pgtypeslib/num_test2 *** 16,21 **** --- 17,23 ---- test: preproc/array_of_struct test: preproc/autoprep test: preproc/comment + test: preproc/cursor test: preproc/define test: preproc/init test: preproc/strings diff -dcrpN pgsql.orig/src/interfaces/ecpg/test/ecpg_schedule_tcp pgsql.dyncursor/src/interfaces/ecpg/test/ecpg_schedule_tcp *** pgsql.orig/src/interfaces/ecpg/test/ecpg_schedule_tcp 2008-10-29 11:40:29.000000000 +0100 --- pgsql.dyncursor/src/interfaces/ecpg/test/ecpg_schedule_tcp 2009-09-03 12:28:03.000000000 +0200 *************** test: compat_informix/charfuncs *** 3,8 **** --- 3,9 ---- test: compat_informix/rfmtdate test: compat_informix/rfmtlong test: compat_informix/rnull + test: compat_informix/cursor test: compat_informix/test_informix test: compat_informix/test_informix2 test: connect/test2 *************** test: pgtypeslib/num_test2 *** 16,21 **** --- 17,23 ---- test: preproc/array_of_struct test: preproc/autoprep test: preproc/comment + test: preproc/cursor test: preproc/define test: preproc/init test: preproc/strings diff -dcrpN pgsql.orig/src/interfaces/ecpg/test/expected/compat_informix-cursor.c pgsql.dyncursor/src/interfaces/ecpg/test/expected/compat_informix-cursor.c *** pgsql.orig/src/interfaces/ecpg/test/expected/compat_informix-cursor.c 1970-01-01 01:00:00.000000000 +0100 --- pgsql.dyncursor/src/interfaces/ecpg/test/expected/compat_informix-cursor.c 2009-09-03 12:47:24.000000000 +0200 *************** *** 0 **** --- 1,766 ---- + /* Processed by ecpg (regression mode) */ + /* These include files are added by the preprocessor */ + #include <ecpglib.h> + #include <ecpgerrno.h> + #include <sqlca.h> + /* Needed for informix compatibility */ + #include <ecpg_informix.h> + /* End of automatic include section */ + #define ECPGdebug(X,Y) ECPGdebug((X)+100,(Y)) + + #line 1 "cursor.pgc" + #include <stdlib.h> + #include <string.h> + + + #line 1 "regression.h" + + + + + + + #line 4 "cursor.pgc" + + + /* exec sql whenever sqlerror stop ; */ + #line 6 "cursor.pgc" + + + /* exec sql type c is char reference */ + #line 8 "cursor.pgc" + + typedef char* c; + + /* exec sql type ind is union { + #line 11 "cursor.pgc" + int integer ; + + #line 11 "cursor.pgc" + short smallint ; + } */ + #line 11 "cursor.pgc" + + typedef union { int integer; short smallint; } ind; + + #define BUFFERSIZ 8 + /* exec sql type str is [ BUFFERSIZ ] */ + #line 15 "cursor.pgc" + + + #define CURNAME "mycur" + + int + main (void) + { + /* exec sql begin declare section */ + + + + + + + + + + #line 23 "cursor.pgc" + char * stmt1 = "SELECT id, t FROM t1" ; + + #line 24 "cursor.pgc" + char * curname1 = CURNAME ; + + #line 25 "cursor.pgc" + char * curname2 = CURNAME ; + + #line 26 "cursor.pgc" + char * curname3 = CURNAME ; + + #line 27 "cursor.pgc" + struct varchar_curname4_27 { int len; char arr[ 50 ]; } curname4 ; + + #line 28 "cursor.pgc" + int count ; + + #line 29 "cursor.pgc" + int id ; + + #line 30 "cursor.pgc" + char t [ 64 ] ; + /* exec sql end declare section */ + #line 31 "cursor.pgc" + + + char msg[128]; + + ECPGdebug(1, stderr); + + strcpy(msg, "connect"); + { ECPGconnect(__LINE__, 1, "regress1" , NULL, NULL , NULL, 0); + #line 38 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 38 "cursor.pgc" + + + strcpy(msg, "set"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "set datestyle to iso", ECPGt_EOIT, ECPGt_EORT); + #line 41 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 41 "cursor.pgc" + + + strcpy(msg, "create"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "create table t1 ( id serial primary key , t text )", ECPGt_EOIT,ECPGt_EORT); + #line 44 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 44 "cursor.pgc" + + + strcpy(msg, "insert"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "insert into t1 ( id , t ) values ( default , 'a' )", ECPGt_EOIT,ECPGt_EORT); + #line 47 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 47 "cursor.pgc" + + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "insert into t1 ( id , t ) values ( default , 'b' )", ECPGt_EOIT,ECPGt_EORT); + #line 48 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 48 "cursor.pgc" + + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "insert into t1 ( id , t ) values ( default , 'c' )", ECPGt_EOIT,ECPGt_EORT); + #line 49 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 49 "cursor.pgc" + + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "insert into t1 ( id , t ) values ( default , 'd' )", ECPGt_EOIT,ECPGt_EORT); + #line 50 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 50 "cursor.pgc" + + + strcpy(msg, "commit"); + { ECPGtrans(__LINE__, NULL, "commit"); + #line 53 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 53 "cursor.pgc" + + + /* Dynamic cursorname test with INTO list in FETCH stmts */ + + strcpy(msg, "declare"); + ECPG_informix_set_var( 0, &( curname1 ), __LINE__);\ + ECPG_informix_reset_sqlca(); /* declare $0 cursor for select id , t from t1 */ + #line 59 "cursor.pgc" + + + strcpy(msg, "open"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "declare $0 cursor for select id , t from t1", + ECPGt_char,&(*( char *)(ECPG_informix_get_var( 0))),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); + #line 62 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 62 "cursor.pgc" + + + strcpy(msg, "fetch from"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch from $0", + ECPGt_char,&(curname1),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 65 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 65 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch $0", + ECPGt_char,&(curname1),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 69 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 69 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch 1 from"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch 1 from $0", + ECPGt_char,&(curname1),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 73 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 73 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count from"); + count = 1; + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch $0 from $0", + ECPGt_int,&(count),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,&(curname1),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 78 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 78 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "move in"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "move absolute 0 in $0", + ECPGt_char,&(curname1),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); + #line 82 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 82 "cursor.pgc" + + + strcpy(msg, "fetch 1"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch 1 $0", + ECPGt_char,&(curname1),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 85 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 85 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count"); + count = 1; + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch $0 $0", + ECPGt_int,&(count),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,&(curname1),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 90 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 90 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "close"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "close $0", + ECPGt_char,&(curname1),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); + #line 94 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 94 "cursor.pgc" + + + /* Dynamic cursorname test with INTO list in DECLARE stmt */ + + strcpy(msg, "declare"); + ECPG_informix_set_var( 3, &( curname2 ), __LINE__);\ + ECPG_informix_set_var( 1, ( t ), __LINE__);\ + ECPG_informix_set_var( 2, &( id ), __LINE__);\ + ECPG_informix_reset_sqlca(); /* declare $0 cursor for select id , t from t1 */ + #line 100 "cursor.pgc" + + + strcpy(msg, "open"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "declare $0 cursor for select id , t from t1", + ECPGt_char,&(*( char *)(ECPG_informix_get_var( 3))),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(*( int *)(ECPG_informix_get_var( 2))),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(( char *)(ECPG_informix_get_var( 1))),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 103 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 103 "cursor.pgc" + + + strcpy(msg, "fetch from"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch from $0", + ECPGt_char,&(curname2),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(*( int *)(ECPG_informix_get_var( 2))),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(( char *)(ECPG_informix_get_var( 1))),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 106 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 106 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch $0", + ECPGt_char,&(curname2),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(*( int *)(ECPG_informix_get_var( 2))),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(( char *)(ECPG_informix_get_var( 1))),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 110 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 110 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch 1 from"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch 1 from $0", + ECPGt_char,&(curname2),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(*( int *)(ECPG_informix_get_var( 2))),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(( char *)(ECPG_informix_get_var( 1))),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 114 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 114 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count from"); + count = 1; + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch $0 from $0", + ECPGt_int,&(count),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,&(curname2),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(*( int *)(ECPG_informix_get_var( 2))),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(( char *)(ECPG_informix_get_var( 1))),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 119 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 119 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "move"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "move absolute 0 $0", + ECPGt_char,&(curname2),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(*( int *)(ECPG_informix_get_var( 2))),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(( char *)(ECPG_informix_get_var( 1))),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 123 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 123 "cursor.pgc" + + + strcpy(msg, "fetch 1"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch 1 $0", + ECPGt_char,&(curname2),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(*( int *)(ECPG_informix_get_var( 2))),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(( char *)(ECPG_informix_get_var( 1))),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 126 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 126 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count"); + count = 1; + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch $0 $0", + ECPGt_int,&(count),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,&(curname2),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(*( int *)(ECPG_informix_get_var( 2))),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(( char *)(ECPG_informix_get_var( 1))),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 131 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 131 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "close"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "close $0", + ECPGt_char,&(curname2),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); + #line 135 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 135 "cursor.pgc" + + + /* Dynamic cursorname test with PREPARED stmt */ + + strcpy(msg, "prepare"); + { ECPGprepare(__LINE__, NULL, 0, "st_id1", stmt1); + #line 140 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 140 "cursor.pgc" + + + strcpy(msg, "declare"); + ECPG_informix_reset_sqlca(); /* declare $0 cursor for $1 */ + #line 143 "cursor.pgc" + + + strcpy(msg, "open"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "declare $0 cursor for $1", + ECPGt_char,&(curname3),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char_variable,(ECPGprepared_statement(NULL, "st_id1", __LINE__)),(long)1,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); + #line 146 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 146 "cursor.pgc" + + + strcpy(msg, "fetch from"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch from $0", + ECPGt_char,&(curname3),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 149 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 149 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch $0", + ECPGt_char,&(curname3),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 153 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 153 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch 1 from"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch 1 from $0", + ECPGt_char,&(curname3),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 157 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 157 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count from"); + count = 1; + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch $0 from $0", + ECPGt_int,&(count),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,&(curname3),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 162 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 162 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "move"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "move absolute 0 $0", + ECPGt_char,&(curname3),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); + #line 166 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 166 "cursor.pgc" + + + strcpy(msg, "fetch 1"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch 1 $0", + ECPGt_char,&(curname3),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 169 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 169 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count"); + count = 1; + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch $0 $0", + ECPGt_int,&(count),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,&(curname3),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 174 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 174 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "close"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "close $0", + ECPGt_char,&(curname3),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); + #line 178 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 178 "cursor.pgc" + + + strcpy(msg, "deallocate prepare"); + { ECPGdeallocate(__LINE__, 1, NULL, "st_id1"); + #line 181 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 181 "cursor.pgc" + + + /* Dynamic cursorname test with PREPARED stmt, + cursor name in varchar */ + + curname4.len = strlen(CURNAME); + strcpy(curname4.arr, CURNAME); + + strcpy(msg, "prepare"); + { ECPGprepare(__LINE__, NULL, 0, "st_id2", stmt1); + #line 190 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 190 "cursor.pgc" + + + strcpy(msg, "declare"); + ECPG_informix_reset_sqlca(); /* declare $0 cursor for $1 */ + #line 193 "cursor.pgc" + + + strcpy(msg, "open"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "declare $0 cursor for $1", + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_27), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char_variable,(ECPGprepared_statement(NULL, "st_id2", __LINE__)),(long)1,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); + #line 196 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 196 "cursor.pgc" + + + strcpy(msg, "fetch from"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch from $0", + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_27), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 199 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 199 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch $0", + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_27), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 203 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 203 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch 1 from"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch 1 from $0", + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_27), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 207 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 207 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count from"); + count = 1; + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch $0 from $0", + ECPGt_int,&(count),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_27), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 212 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 212 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "move"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "move absolute 0 $0", + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_27), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); + #line 216 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 216 "cursor.pgc" + + + strcpy(msg, "fetch 1"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch 1 $0", + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_27), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 219 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 219 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count"); + count = 1; + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch $0 $0", + ECPGt_int,&(count),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_27), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 224 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 224 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "close"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "close $0", + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_27), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); + #line 228 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 228 "cursor.pgc" + + + strcpy(msg, "deallocate prepare"); + { ECPGdeallocate(__LINE__, 1, NULL, "st_id2"); + #line 231 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 231 "cursor.pgc" + + + /* End test */ + + strcpy(msg, "drop"); + { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "drop table t1", ECPGt_EOIT, ECPGt_EORT); + #line 236 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 236 "cursor.pgc" + + + strcpy(msg, "commit"); + { ECPGtrans(__LINE__, NULL, "commit"); + #line 239 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 239 "cursor.pgc" + + + strcpy(msg, "disconnect"); + { ECPGdisconnect(__LINE__, "CURRENT"); + #line 242 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 242 "cursor.pgc" + + + return (0); + } diff -dcrpN pgsql.orig/src/interfaces/ecpg/test/expected/compat_informix-cursor.stderr pgsql.dyncursor/src/interfaces/ecpg/test/expected/compat_informix-cursor.stderr *** pgsql.orig/src/interfaces/ecpg/test/expected/compat_informix-cursor.stderr 1970-01-01 01:00:00.000000000 +0100 --- pgsql.dyncursor/src/interfaces/ecpg/test/expected/compat_informix-cursor.stderr 2009-09-03 12:28:03.000000000 +0200 *************** *** 0 **** --- 1,372 ---- + [NO_PID]: ECPGdebug: set to 1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ECPGconnect: opening database regress1 on <DEFAULT> port <DEFAULT> + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 41: query: set datestyle to iso; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 41: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 41: OK: SET + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 44: query: create table t1 ( id serial primary key , t text ); with 0 parameter(s) on connectionregress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 44: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 44: OK: CREATE TABLE + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 47: query: insert into t1 ( id , t ) values ( default , 'a' ); with 0 parameter(s) on connectionregress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 47: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 47: OK: INSERT 0 1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 48: query: insert into t1 ( id , t ) values ( default , 'b' ); with 0 parameter(s) on connectionregress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 48: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 48: OK: INSERT 0 1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 49: query: insert into t1 ( id , t ) values ( default , 'c' ); with 0 parameter(s) on connectionregress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 49: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 49: OK: INSERT 0 1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 50: query: insert into t1 ( id , t ) values ( default , 'd' ); with 0 parameter(s) on connectionregress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 50: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 50: OK: INSERT 0 1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ECPGtrans on line 53: action "commit"; connection "regress1" + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 62: query: declare mycur cursor for select id , t from t1; with 0 parameter(s) on connectionregress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 62: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 62: OK: DECLARE CURSOR + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 65: query: fetch from mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 65: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 65: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 65: RESULT: 1 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 65: RESULT: a offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 69: query: fetch mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 69: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 69: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 69: RESULT: 2 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 69: RESULT: b offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 73: query: fetch 1 from mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 73: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 73: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 73: RESULT: 3 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 73: RESULT: c offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 78: query: fetch 1 from mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 78: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 78: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 78: RESULT: 4 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 78: RESULT: d offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 82: query: move absolute 0 in mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 82: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 82: OK: MOVE 0 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 85: query: fetch 1 mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 85: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 85: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 85: RESULT: 1 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 85: RESULT: a offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 90: query: fetch 1 mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 90: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 90: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 90: RESULT: 2 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 90: RESULT: b offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 94: query: close mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 94: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 94: OK: CLOSE CURSOR + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 103: query: declare mycur cursor for select id , t from t1; with 0 parameter(s) on connectionregress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 103: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 103: OK: DECLARE CURSOR + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 106: query: fetch from mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 106: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 106: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 106: RESULT: 1 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 106: RESULT: a offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 110: query: fetch mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 110: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 110: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 110: RESULT: 2 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 110: RESULT: b offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 114: query: fetch 1 from mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 114: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 114: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 114: RESULT: 3 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 114: RESULT: c offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 119: query: fetch 1 from mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 119: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 119: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 119: RESULT: 4 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 119: RESULT: d offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 123: query: move absolute 0 mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 123: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 123: OK: MOVE 0 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 126: query: fetch 1 mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 126: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 126: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 126: RESULT: 1 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 126: RESULT: a offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 131: query: fetch 1 mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 131: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 131: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 131: RESULT: 2 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 131: RESULT: b offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 135: query: close mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 135: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 135: OK: CLOSE CURSOR + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ECPGprepare on line 140: name st_id1; query: "SELECT id, t FROM t1" + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 146: query: declare mycur cursor for SELECT id, t FROM t1; with 0 parameter(s) on connectionregress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 146: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 146: OK: DECLARE CURSOR + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 149: query: fetch from mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 149: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 149: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 149: RESULT: 1 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 149: RESULT: a offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 153: query: fetch mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 153: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 153: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 153: RESULT: 2 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 153: RESULT: b offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 157: query: fetch 1 from mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 157: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 157: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 157: RESULT: 3 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 157: RESULT: c offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 162: query: fetch 1 from mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 162: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 162: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 162: RESULT: 4 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 162: RESULT: d offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 166: query: move absolute 0 mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 166: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 166: OK: MOVE 0 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 169: query: fetch 1 mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 169: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 169: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 169: RESULT: 1 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 169: RESULT: a offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 174: query: fetch 1 mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 174: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 174: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 174: RESULT: 2 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 174: RESULT: b offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 178: query: close mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 178: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 178: OK: CLOSE CURSOR + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ECPGdeallocate on line 181: name st_id1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ECPGprepare on line 190: name st_id2; query: "SELECT id, t FROM t1" + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 196: query: declare mycur cursor for SELECT id, t FROM t1; with 0 parameter(s) on connectionregress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 196: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 196: OK: DECLARE CURSOR + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 199: query: fetch from mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 199: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 199: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 199: RESULT: 1 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 199: RESULT: a offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 203: query: fetch mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 203: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 203: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 203: RESULT: 2 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 203: RESULT: b offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 207: query: fetch 1 from mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 207: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 207: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 207: RESULT: 3 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 207: RESULT: c offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 212: query: fetch 1 from mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 212: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 212: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 212: RESULT: 4 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 212: RESULT: d offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 216: query: move absolute 0 mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 216: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 216: OK: MOVE 0 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 219: query: fetch 1 mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 219: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 219: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 219: RESULT: 1 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 219: RESULT: a offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 224: query: fetch 1 mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 224: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 224: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 224: RESULT: 2 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 224: RESULT: b offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 228: query: close mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 228: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 228: OK: CLOSE CURSOR + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ECPGdeallocate on line 231: name st_id2 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 236: query: drop table t1; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 236: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 236: OK: DROP TABLE + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ECPGtrans on line 239: action "commit"; connection "regress1" + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_finish: connection regress1 closed + [NO_PID]: sqlca: code: 0, state: 00000 diff -dcrpN pgsql.orig/src/interfaces/ecpg/test/expected/compat_informix-cursor.stdout pgsql.dyncursor/src/interfaces/ecpg/test/expected/compat_informix-cursor.stdout *** pgsql.orig/src/interfaces/ecpg/test/expected/compat_informix-cursor.stdout 1970-01-01 01:00:00.000000000 +0100 --- pgsql.dyncursor/src/interfaces/ecpg/test/expected/compat_informix-cursor.stdout 2009-09-03 12:28:03.000000000 +0200 *************** *** 0 **** --- 1,24 ---- + 1 a + 2 b + 3 c + 4 d + 1 a + 2 b + 1 a + 2 b + 3 c + 4 d + 1 a + 2 b + 1 a + 2 b + 3 c + 4 d + 1 a + 2 b + 1 a + 2 b + 3 c + 4 d + 1 a + 2 b diff -dcrpN pgsql.orig/src/interfaces/ecpg/test/expected/compat_informix-test_informix.c pgsql.dyncursor/src/interfaces/ecpg/test/expected/compat_informix-test_informix.c *** pgsql.orig/src/interfaces/ecpg/test/expected/compat_informix-test_informix.c 2009-08-14 16:27:41.000000000 +0200 --- pgsql.dyncursor/src/interfaces/ecpg/test/expected/compat_informix-test_informix.c 2009-09-03 12:28:03.000000000 +0200 *************** if (sqlca.sqlcode < 0) dosqlprint ( );} *** 158,164 **** while (1) { ! { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch forward from c", ECPGt_EOIT, ECPGt_int,&(i),(long)1,(long)1,sizeof(int), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_decimal,&(j),(long)1,(long)1,sizeof(decimal), --- 158,164 ---- while (1) { ! { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch forward c", ECPGt_EOIT, ECPGt_int,&(i),(long)1,(long)1,sizeof(int), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_decimal,&(j),(long)1,(long)1,sizeof(decimal), diff -dcrpN pgsql.orig/src/interfaces/ecpg/test/expected/compat_informix-test_informix.stderr pgsql.dyncursor/src/interfaces/ecpg/test/expected/compat_informix-test_informix.stderr *** pgsql.orig/src/interfaces/ecpg/test/expected/compat_informix-test_informix.stderr 2009-08-14 16:27:41.000000000 +0200 --- pgsql.dyncursor/src/interfaces/ecpg/test/expected/compat_informix-test_informix.stderr 2009-09-03 12:47:45.000000000+0200 *************** DETAIL: Key (i)=(7) already exists. *** 63,69 **** [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_execute on line 95: OK: DECLARE CURSOR [NO_PID]: sqlca: code: 0, state: 00000 ! [NO_PID]: ecpg_execute on line 57: query: fetch forward from c; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_execute on line 57: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 --- 63,69 ---- [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_execute on line 95: OK: DECLARE CURSOR [NO_PID]: sqlca: code: 0, state: 00000 ! [NO_PID]: ecpg_execute on line 57: query: fetch forward c; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_execute on line 57: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 *************** DETAIL: Key (i)=(7) already exists. *** 75,81 **** [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_get_data on line 57: RESULT: test offset: -1; array: yes [NO_PID]: sqlca: code: 0, state: 00000 ! [NO_PID]: ecpg_execute on line 57: query: fetch forward from c; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_execute on line 57: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 --- 75,81 ---- [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_get_data on line 57: RESULT: test offset: -1; array: yes [NO_PID]: sqlca: code: 0, state: 00000 ! [NO_PID]: ecpg_execute on line 57: query: fetch forward c; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_execute on line 57: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 *************** DETAIL: Key (i)=(7) already exists. *** 87,93 **** [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_get_data on line 57: RESULT: a offset: -1; array: yes [NO_PID]: sqlca: code: 0, state: 00000 ! [NO_PID]: ecpg_execute on line 57: query: fetch forward from c; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_execute on line 57: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 --- 87,93 ---- [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_get_data on line 57: RESULT: a offset: -1; array: yes [NO_PID]: sqlca: code: 0, state: 00000 ! [NO_PID]: ecpg_execute on line 57: query: fetch forward c; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_execute on line 57: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 diff -dcrpN pgsql.orig/src/interfaces/ecpg/test/expected/preproc-cursor.c pgsql.dyncursor/src/interfaces/ecpg/test/expected/preproc-cursor.c *** pgsql.orig/src/interfaces/ecpg/test/expected/preproc-cursor.c 1970-01-01 01:00:00.000000000 +0100 --- pgsql.dyncursor/src/interfaces/ecpg/test/expected/preproc-cursor.c 2009-09-03 12:28:03.000000000 +0200 *************** *** 0 **** --- 1,760 ---- + /* Processed by ecpg (regression mode) */ + /* These include files are added by the preprocessor */ + #include <ecpglib.h> + #include <ecpgerrno.h> + #include <sqlca.h> + /* End of automatic include section */ + #define ECPGdebug(X,Y) ECPGdebug((X)+100,(Y)) + + #line 1 "cursor.pgc" + #include <stdlib.h> + #include <string.h> + + + #line 1 "regression.h" + + + + + + + #line 4 "cursor.pgc" + + + /* exec sql whenever sqlerror stop ; */ + #line 6 "cursor.pgc" + + + /* exec sql type c is char reference */ + #line 8 "cursor.pgc" + + typedef char* c; + + /* exec sql type ind is union { + #line 11 "cursor.pgc" + int integer ; + + #line 11 "cursor.pgc" + short smallint ; + } */ + #line 11 "cursor.pgc" + + typedef union { int integer; short smallint; } ind; + + #define BUFFERSIZ 8 + /* exec sql type str is [ BUFFERSIZ ] */ + #line 15 "cursor.pgc" + + + #define CURNAME "mycur" + + int + main (void) + { + /* exec sql begin declare section */ + + + + + + + + + + #line 23 "cursor.pgc" + char * stmt1 = "SELECT id, t FROM t1" ; + + #line 24 "cursor.pgc" + char * curname1 = CURNAME ; + + #line 25 "cursor.pgc" + char * curname2 = CURNAME ; + + #line 26 "cursor.pgc" + char * curname3 = CURNAME ; + + #line 27 "cursor.pgc" + struct varchar_curname4_27 { int len; char arr[ 50 ]; } curname4 ; + + #line 28 "cursor.pgc" + int count ; + + #line 29 "cursor.pgc" + int id ; + + #line 30 "cursor.pgc" + char t [ 64 ] ; + /* exec sql end declare section */ + #line 31 "cursor.pgc" + + + char msg[128]; + + ECPGdebug(1, stderr); + + strcpy(msg, "connect"); + { ECPGconnect(__LINE__, 0, "regress1" , NULL, NULL , NULL, 0); + #line 38 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 38 "cursor.pgc" + + + strcpy(msg, "set"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "set datestyle to iso", ECPGt_EOIT, ECPGt_EORT); + #line 41 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 41 "cursor.pgc" + + + strcpy(msg, "create"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table t1 ( id serial primary key , t text )", ECPGt_EOIT,ECPGt_EORT); + #line 44 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 44 "cursor.pgc" + + + strcpy(msg, "insert"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into t1 ( id , t ) values ( default , 'a' )", ECPGt_EOIT,ECPGt_EORT); + #line 47 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 47 "cursor.pgc" + + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into t1 ( id , t ) values ( default , 'b' )", ECPGt_EOIT,ECPGt_EORT); + #line 48 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 48 "cursor.pgc" + + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into t1 ( id , t ) values ( default , 'c' )", ECPGt_EOIT,ECPGt_EORT); + #line 49 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 49 "cursor.pgc" + + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into t1 ( id , t ) values ( default , 'd' )", ECPGt_EOIT,ECPGt_EORT); + #line 50 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 50 "cursor.pgc" + + + strcpy(msg, "commit"); + { ECPGtrans(__LINE__, NULL, "commit"); + #line 53 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 53 "cursor.pgc" + + + /* Dynamic cursorname test with INTO list in FETCH stmts */ + + strcpy(msg, "declare"); + /* declare $0 cursor for select id , t from t1 */ + #line 59 "cursor.pgc" + + + strcpy(msg, "open"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "declare $0 cursor for select id , t from t1", + ECPGt_char,&(curname1),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); + #line 62 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 62 "cursor.pgc" + + + strcpy(msg, "fetch from"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch from $0", + ECPGt_char,&(curname1),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 65 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 65 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch $0", + ECPGt_char,&(curname1),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 69 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 69 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch 1 from"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch 1 from $0", + ECPGt_char,&(curname1),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 73 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 73 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count from"); + count = 1; + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch $0 from $0", + ECPGt_int,&(count),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,&(curname1),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 78 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 78 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "move in"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "move absolute 0 in $0", + ECPGt_char,&(curname1),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); + #line 82 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 82 "cursor.pgc" + + + strcpy(msg, "fetch 1"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch 1 $0", + ECPGt_char,&(curname1),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 85 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 85 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count"); + count = 1; + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch $0 $0", + ECPGt_int,&(count),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,&(curname1),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 90 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 90 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "close"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "close $0", + ECPGt_char,&(curname1),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); + #line 94 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 94 "cursor.pgc" + + + /* Dynamic cursorname test with INTO list in DECLARE stmt */ + + strcpy(msg, "declare"); + /* declare $0 cursor for select id , t from t1 */ + #line 100 "cursor.pgc" + + + strcpy(msg, "open"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "declare $0 cursor for select id , t from t1", + ECPGt_char,&(curname2),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 103 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 103 "cursor.pgc" + + + strcpy(msg, "fetch from"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch from $0", + ECPGt_char,&(curname2),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 106 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 106 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch $0", + ECPGt_char,&(curname2),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 110 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 110 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch 1 from"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch 1 from $0", + ECPGt_char,&(curname2),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 114 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 114 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count from"); + count = 1; + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch $0 from $0", + ECPGt_int,&(count),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,&(curname2),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 119 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 119 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "move"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "move absolute 0 $0", + ECPGt_char,&(curname2),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 123 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 123 "cursor.pgc" + + + strcpy(msg, "fetch 1"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch 1 $0", + ECPGt_char,&(curname2),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 126 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 126 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count"); + count = 1; + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch $0 $0", + ECPGt_int,&(count),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,&(curname2),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 131 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 131 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "close"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "close $0", + ECPGt_char,&(curname2),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); + #line 135 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 135 "cursor.pgc" + + + /* Dynamic cursorname test with PREPARED stmt */ + + strcpy(msg, "prepare"); + { ECPGprepare(__LINE__, NULL, 0, "st_id1", stmt1); + #line 140 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 140 "cursor.pgc" + + + strcpy(msg, "declare"); + /* declare $0 cursor for $1 */ + #line 143 "cursor.pgc" + + + strcpy(msg, "open"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "declare $0 cursor for $1", + ECPGt_char,&(curname3),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char_variable,(ECPGprepared_statement(NULL, "st_id1", __LINE__)),(long)1,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); + #line 146 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 146 "cursor.pgc" + + + strcpy(msg, "fetch from"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch from $0", + ECPGt_char,&(curname3),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 149 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 149 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch $0", + ECPGt_char,&(curname3),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 153 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 153 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch 1 from"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch 1 from $0", + ECPGt_char,&(curname3),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 157 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 157 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count from"); + count = 1; + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch $0 from $0", + ECPGt_int,&(count),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,&(curname3),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 162 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 162 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "move"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "move absolute 0 $0", + ECPGt_char,&(curname3),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); + #line 166 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 166 "cursor.pgc" + + + strcpy(msg, "fetch 1"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch 1 $0", + ECPGt_char,&(curname3),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 169 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 169 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count"); + count = 1; + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch $0 $0", + ECPGt_int,&(count),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,&(curname3),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 174 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 174 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "close"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "close $0", + ECPGt_char,&(curname3),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); + #line 178 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 178 "cursor.pgc" + + + strcpy(msg, "deallocate prepare"); + { ECPGdeallocate(__LINE__, 0, NULL, "st_id1"); + #line 181 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 181 "cursor.pgc" + + + /* Dynamic cursorname test with PREPARED stmt, + cursor name in varchar */ + + curname4.len = strlen(CURNAME); + strcpy(curname4.arr, CURNAME); + + strcpy(msg, "prepare"); + { ECPGprepare(__LINE__, NULL, 0, "st_id2", stmt1); + #line 190 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 190 "cursor.pgc" + + + strcpy(msg, "declare"); + /* declare $0 cursor for $1 */ + #line 193 "cursor.pgc" + + + strcpy(msg, "open"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "declare $0 cursor for $1", + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_27), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char_variable,(ECPGprepared_statement(NULL, "st_id2", __LINE__)),(long)1,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); + #line 196 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 196 "cursor.pgc" + + + strcpy(msg, "fetch from"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch from $0", + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_27), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 199 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 199 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch $0", + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_27), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 203 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 203 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch 1 from"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch 1 from $0", + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_27), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 207 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 207 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count from"); + count = 1; + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch $0 from $0", + ECPGt_int,&(count),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_27), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 212 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 212 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "move"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "move absolute 0 $0", + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_27), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); + #line 216 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 216 "cursor.pgc" + + + strcpy(msg, "fetch 1"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch 1 $0", + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_27), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 219 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 219 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count"); + count = 1; + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch $0 $0", + ECPGt_int,&(count),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_27), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(t),(long)64,(long)1,(64)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); + #line 224 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 224 "cursor.pgc" + + printf("%d %s\n", id, t); + + strcpy(msg, "close"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "close $0", + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_27), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); + #line 228 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 228 "cursor.pgc" + + + strcpy(msg, "deallocate prepare"); + { ECPGdeallocate(__LINE__, 0, NULL, "st_id2"); + #line 231 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 231 "cursor.pgc" + + + /* End test */ + + strcpy(msg, "drop"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table t1", ECPGt_EOIT, ECPGt_EORT); + #line 236 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 236 "cursor.pgc" + + + strcpy(msg, "commit"); + { ECPGtrans(__LINE__, NULL, "commit"); + #line 239 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 239 "cursor.pgc" + + + strcpy(msg, "disconnect"); + { ECPGdisconnect(__LINE__, "CURRENT"); + #line 242 "cursor.pgc" + + if (sqlca.sqlcode < 0) exit (1);} + #line 242 "cursor.pgc" + + + return (0); + } diff -dcrpN pgsql.orig/src/interfaces/ecpg/test/expected/preproc-cursor.stderr pgsql.dyncursor/src/interfaces/ecpg/test/expected/preproc-cursor.stderr *** pgsql.orig/src/interfaces/ecpg/test/expected/preproc-cursor.stderr 1970-01-01 01:00:00.000000000 +0100 --- pgsql.dyncursor/src/interfaces/ecpg/test/expected/preproc-cursor.stderr 2009-09-03 12:28:03.000000000 +0200 *************** *** 0 **** --- 1,372 ---- + [NO_PID]: ECPGdebug: set to 1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ECPGconnect: opening database regress1 on <DEFAULT> port <DEFAULT> + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 41: query: set datestyle to iso; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 41: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 41: OK: SET + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 44: query: create table t1 ( id serial primary key , t text ); with 0 parameter(s) on connectionregress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 44: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 44: OK: CREATE TABLE + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 47: query: insert into t1 ( id , t ) values ( default , 'a' ); with 0 parameter(s) on connectionregress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 47: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 47: OK: INSERT 0 1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 48: query: insert into t1 ( id , t ) values ( default , 'b' ); with 0 parameter(s) on connectionregress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 48: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 48: OK: INSERT 0 1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 49: query: insert into t1 ( id , t ) values ( default , 'c' ); with 0 parameter(s) on connectionregress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 49: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 49: OK: INSERT 0 1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 50: query: insert into t1 ( id , t ) values ( default , 'd' ); with 0 parameter(s) on connectionregress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 50: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 50: OK: INSERT 0 1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ECPGtrans on line 53: action "commit"; connection "regress1" + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 62: query: declare mycur cursor for select id , t from t1; with 0 parameter(s) on connectionregress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 62: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 62: OK: DECLARE CURSOR + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 65: query: fetch from mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 65: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 65: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 65: RESULT: 1 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 65: RESULT: a offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 69: query: fetch mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 69: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 69: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 69: RESULT: 2 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 69: RESULT: b offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 73: query: fetch 1 from mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 73: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 73: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 73: RESULT: 3 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 73: RESULT: c offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 78: query: fetch 1 from mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 78: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 78: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 78: RESULT: 4 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 78: RESULT: d offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 82: query: move absolute 0 in mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 82: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 82: OK: MOVE 0 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 85: query: fetch 1 mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 85: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 85: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 85: RESULT: 1 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 85: RESULT: a offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 90: query: fetch 1 mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 90: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 90: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 90: RESULT: 2 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 90: RESULT: b offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 94: query: close mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 94: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 94: OK: CLOSE CURSOR + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 103: query: declare mycur cursor for select id , t from t1; with 0 parameter(s) on connectionregress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 103: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 103: OK: DECLARE CURSOR + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 106: query: fetch from mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 106: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 106: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 106: RESULT: 1 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 106: RESULT: a offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 110: query: fetch mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 110: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 110: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 110: RESULT: 2 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 110: RESULT: b offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 114: query: fetch 1 from mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 114: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 114: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 114: RESULT: 3 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 114: RESULT: c offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 119: query: fetch 1 from mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 119: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 119: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 119: RESULT: 4 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 119: RESULT: d offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 123: query: move absolute 0 mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 123: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 123: OK: MOVE 0 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 126: query: fetch 1 mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 126: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 126: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 126: RESULT: 1 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 126: RESULT: a offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 131: query: fetch 1 mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 131: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 131: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 131: RESULT: 2 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 131: RESULT: b offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 135: query: close mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 135: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 135: OK: CLOSE CURSOR + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ECPGprepare on line 140: name st_id1; query: "SELECT id, t FROM t1" + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 146: query: declare mycur cursor for SELECT id, t FROM t1; with 0 parameter(s) on connectionregress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 146: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 146: OK: DECLARE CURSOR + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 149: query: fetch from mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 149: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 149: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 149: RESULT: 1 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 149: RESULT: a offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 153: query: fetch mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 153: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 153: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 153: RESULT: 2 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 153: RESULT: b offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 157: query: fetch 1 from mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 157: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 157: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 157: RESULT: 3 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 157: RESULT: c offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 162: query: fetch 1 from mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 162: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 162: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 162: RESULT: 4 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 162: RESULT: d offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 166: query: move absolute 0 mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 166: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 166: OK: MOVE 0 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 169: query: fetch 1 mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 169: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 169: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 169: RESULT: 1 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 169: RESULT: a offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 174: query: fetch 1 mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 174: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 174: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 174: RESULT: 2 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 174: RESULT: b offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 178: query: close mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 178: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 178: OK: CLOSE CURSOR + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ECPGdeallocate on line 181: name st_id1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ECPGprepare on line 190: name st_id2; query: "SELECT id, t FROM t1" + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 196: query: declare mycur cursor for SELECT id, t FROM t1; with 0 parameter(s) on connectionregress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 196: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 196: OK: DECLARE CURSOR + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 199: query: fetch from mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 199: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 199: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 199: RESULT: 1 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 199: RESULT: a offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 203: query: fetch mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 203: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 203: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 203: RESULT: 2 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 203: RESULT: b offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 207: query: fetch 1 from mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 207: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 207: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 207: RESULT: 3 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 207: RESULT: c offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 212: query: fetch 1 from mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 212: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 212: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 212: RESULT: 4 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 212: RESULT: d offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 216: query: move absolute 0 mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 216: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 216: OK: MOVE 0 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 219: query: fetch 1 mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 219: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 219: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 219: RESULT: 1 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 219: RESULT: a offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 224: query: fetch 1 mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 224: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 224: correctly got 1 tuples with 2 fields + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 224: RESULT: 2 offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_get_data on line 224: RESULT: b offset: -1; array: yes + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 228: query: close mycur; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 228: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 228: OK: CLOSE CURSOR + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ECPGdeallocate on line 231: name st_id2 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 236: query: drop table t1; with 0 parameter(s) on connection regress1 + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 236: using PQexec + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_execute on line 236: OK: DROP TABLE + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ECPGtrans on line 239: action "commit"; connection "regress1" + [NO_PID]: sqlca: code: 0, state: 00000 + [NO_PID]: ecpg_finish: connection regress1 closed + [NO_PID]: sqlca: code: 0, state: 00000 diff -dcrpN pgsql.orig/src/interfaces/ecpg/test/expected/preproc-cursor.stdout pgsql.dyncursor/src/interfaces/ecpg/test/expected/preproc-cursor.stdout *** pgsql.orig/src/interfaces/ecpg/test/expected/preproc-cursor.stdout 1970-01-01 01:00:00.000000000 +0100 --- pgsql.dyncursor/src/interfaces/ecpg/test/expected/preproc-cursor.stdout 2009-09-03 12:28:03.000000000 +0200 *************** *** 0 **** --- 1,24 ---- + 1 a + 2 b + 3 c + 4 d + 1 a + 2 b + 1 a + 2 b + 3 c + 4 d + 1 a + 2 b + 1 a + 2 b + 3 c + 4 d + 1 a + 2 b + 1 a + 2 b + 3 c + 4 d + 1 a + 2 b diff -dcrpN pgsql.orig/src/interfaces/ecpg/test/preproc/cursor.pgc pgsql.dyncursor/src/interfaces/ecpg/test/preproc/cursor.pgc *** pgsql.orig/src/interfaces/ecpg/test/preproc/cursor.pgc 1970-01-01 01:00:00.000000000 +0100 --- pgsql.dyncursor/src/interfaces/ecpg/test/preproc/cursor.pgc 2009-09-03 12:28:03.000000000 +0200 *************** *** 0 **** --- 1,245 ---- + #include <stdlib.h> + #include <string.h> + + exec sql include ../regression; + + exec sql whenever sqlerror stop; + + exec sql type c is char reference; + typedef char* c; + + exec sql type ind is union { int integer; short smallint; }; + typedef union { int integer; short smallint; } ind; + + #define BUFFERSIZ 8 + exec sql type str is varchar[BUFFERSIZ]; + + #define CURNAME "mycur" + + int + main (void) + { + exec sql begin declare section; + char *stmt1 = "SELECT id, t FROM t1"; + char *curname1 = CURNAME; + char *curname2 = CURNAME; + char *curname3 = CURNAME; + varchar curname4[50]; + int count; + int id; + char t[64]; + exec sql end declare section; + + char msg[128]; + + ECPGdebug(1, stderr); + + strcpy(msg, "connect"); + exec sql connect to REGRESSDB1; + + strcpy(msg, "set"); + exec sql set datestyle to iso; + + strcpy(msg, "create"); + exec sql create table t1(id serial primary key, t text); + + strcpy(msg, "insert"); + exec sql insert into t1(id, t) values (default, 'a'); + exec sql insert into t1(id, t) values (default, 'b'); + exec sql insert into t1(id, t) values (default, 'c'); + exec sql insert into t1(id, t) values (default, 'd'); + + strcpy(msg, "commit"); + exec sql commit; + + /* Dynamic cursorname test with INTO list in FETCH stmts */ + + strcpy(msg, "declare"); + exec sql declare :curname1 cursor for + select id, t from t1; + + strcpy(msg, "open"); + exec sql open :curname1; + + strcpy(msg, "fetch from"); + exec sql fetch from :curname1 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch"); + exec sql fetch :curname1 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch 1 from"); + exec sql fetch 1 from :curname1 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count from"); + count = 1; + exec sql fetch :count from :curname1 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "move in"); + exec sql move absolute 0 in :curname1; + + strcpy(msg, "fetch 1"); + exec sql fetch 1 :curname1 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count"); + count = 1; + exec sql fetch :count :curname1 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "close"); + exec sql close :curname1; + + /* Dynamic cursorname test with INTO list in DECLARE stmt */ + + strcpy(msg, "declare"); + exec sql declare :curname2 cursor for + select id, t into :id, :t from t1; + + strcpy(msg, "open"); + exec sql open :curname2; + + strcpy(msg, "fetch from"); + exec sql fetch from :curname2; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch"); + exec sql fetch :curname2; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch 1 from"); + exec sql fetch 1 from :curname2; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count from"); + count = 1; + exec sql fetch :count from :curname2; + printf("%d %s\n", id, t); + + strcpy(msg, "move"); + exec sql move absolute 0 :curname2; + + strcpy(msg, "fetch 1"); + exec sql fetch 1 :curname2; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count"); + count = 1; + exec sql fetch :count :curname2; + printf("%d %s\n", id, t); + + strcpy(msg, "close"); + exec sql close :curname2; + + /* Dynamic cursorname test with PREPARED stmt */ + + strcpy(msg, "prepare"); + exec sql prepare st_id1 from :stmt1; + + strcpy(msg, "declare"); + exec sql declare :curname3 cursor for st_id1; + + strcpy(msg, "open"); + exec sql open :curname3; + + strcpy(msg, "fetch from"); + exec sql fetch from :curname3 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch"); + exec sql fetch :curname3 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch 1 from"); + exec sql fetch 1 from :curname3 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count from"); + count = 1; + exec sql fetch :count from :curname3 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "move"); + exec sql move absolute 0 :curname3; + + strcpy(msg, "fetch 1"); + exec sql fetch 1 :curname3 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count"); + count = 1; + exec sql fetch :count :curname3 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "close"); + exec sql close :curname3; + + strcpy(msg, "deallocate prepare"); + exec sql deallocate prepare st_id1; + + /* Dynamic cursorname test with PREPARED stmt, + cursor name in varchar */ + + curname4.len = strlen(CURNAME); + strcpy(curname4.arr, CURNAME); + + strcpy(msg, "prepare"); + exec sql prepare st_id2 from :stmt1; + + strcpy(msg, "declare"); + exec sql declare :curname4 cursor for st_id2; + + strcpy(msg, "open"); + exec sql open :curname4; + + strcpy(msg, "fetch from"); + exec sql fetch from :curname4 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch"); + exec sql fetch :curname4 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch 1 from"); + exec sql fetch 1 from :curname4 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count from"); + count = 1; + exec sql fetch :count from :curname4 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "move"); + exec sql move absolute 0 :curname4; + + strcpy(msg, "fetch 1"); + exec sql fetch 1 :curname4 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "fetch :count"); + count = 1; + exec sql fetch :count :curname4 into :id, :t; + printf("%d %s\n", id, t); + + strcpy(msg, "close"); + exec sql close :curname4; + + strcpy(msg, "deallocate prepare"); + exec sql deallocate prepare st_id2; + + /* End test */ + + strcpy(msg, "drop"); + exec sql drop table t1; + + strcpy(msg, "commit"); + exec sql commit; + + strcpy(msg, "disconnect"); + exec sql disconnect; + + return (0); + } diff -dcrpN pgsql.orig/src/interfaces/ecpg/test/preproc/Makefile pgsql.dyncursor/src/interfaces/ecpg/test/preproc/Makefile *** pgsql.orig/src/interfaces/ecpg/test/preproc/Makefile 2008-10-29 11:40:29.000000000 +0100 --- pgsql.dyncursor/src/interfaces/ecpg/test/preproc/Makefile 2009-09-03 12:28:03.000000000 +0200 *************** include $(top_srcdir)/$(subdir)/../Makef *** 7,12 **** --- 7,13 ---- TESTS = array_of_struct array_of_struct.c \ autoprep autoprep.c \ comment comment.c \ + cursor cursor.c \ define define.c \ init init.c \ strings strings.c \
pgsql-hackers by date: