commit 3021ae9aeea085ff6f60ef736fe58126afb4f96f Author: Böszörményi Zoltán Date: Wed Nov 20 11:06:37 2013 +0100 ECPG: Make SQLDA loops go forward. One regression test .stderr changed. diff --git a/src/interfaces/ecpg/ecpglib/execute.c b/src/interfaces/ecpg/ecpglib/execute.c index 438d3ab..1fcfebc 100644 --- a/src/interfaces/ecpg/ecpglib/execute.c +++ b/src/interfaces/ecpg/ecpglib/execute.c @@ -1551,6 +1551,7 @@ ecpg_process_output(struct statement * stmt, bool clear_result) { struct sqlda_compat **_sqlda = (struct sqlda_compat **) var->pointer; struct sqlda_compat *sqlda = *_sqlda; + struct sqlda_compat *sqlda_last; struct sqlda_compat *sqlda_new; int i; @@ -1564,8 +1565,8 @@ ecpg_process_output(struct statement * stmt, bool clear_result) free(sqlda); sqlda = sqlda_new; } - *_sqlda = sqlda = sqlda_new = NULL; - for (i = ntuples - 1; i >= 0; i--) + *_sqlda = sqlda = sqlda_last = sqlda_new = NULL; + for (i = 0; i < ntuples; i++) { /* * Build a new sqlda structure. Note that only @@ -1592,14 +1593,19 @@ ecpg_process_output(struct statement * stmt, bool clear_result) { ecpg_log("ecpg_process_output on line %d: new sqlda was built\n", stmt->lineno); - *_sqlda = sqlda_new; + if (sqlda_last) + { + sqlda_last->desc_next = sqlda_new; + sqlda_last = sqlda_new; + } + else + { + *_sqlda = sqlda = sqlda_last = sqlda_new; + } - ecpg_set_compat_sqlda(stmt->lineno, _sqlda, stmt->results, i, stmt->compat); + ecpg_set_compat_sqlda(stmt->lineno, &sqlda_new, stmt->results, i, stmt->compat); ecpg_log("ecpg_process_output on line %d: putting result (1 tuple %d fields) into sqlda descriptor\n", stmt->lineno, PQnfields(stmt->results)); - - sqlda_new->desc_next = sqlda; - sqlda = sqlda_new; } } } @@ -1607,6 +1613,7 @@ ecpg_process_output(struct statement * stmt, bool clear_result) { struct sqlda_struct **_sqlda = (struct sqlda_struct **) var->pointer; struct sqlda_struct *sqlda = *_sqlda; + struct sqlda_struct *sqlda_last; struct sqlda_struct *sqlda_new; int i; @@ -1620,8 +1627,8 @@ ecpg_process_output(struct statement * stmt, bool clear_result) free(sqlda); sqlda = sqlda_new; } - *_sqlda = sqlda = sqlda_new = NULL; - for (i = ntuples - 1; i >= 0; i--) + *_sqlda = sqlda = sqlda_last = sqlda_new = NULL; + for (i = 0; i < ntuples; i++) { /* * Build a new sqlda structure. Note that only @@ -1648,14 +1655,19 @@ ecpg_process_output(struct statement * stmt, bool clear_result) { ecpg_log("ecpg_process_output on line %d: new sqlda was built\n", stmt->lineno); - *_sqlda = sqlda_new; + if (sqlda_last) + { + sqlda_last->desc_next = sqlda_new; + sqlda_last = sqlda_new; + } + else + { + *_sqlda = sqlda = sqlda_last = sqlda_new; + } - ecpg_set_native_sqlda(stmt->lineno, _sqlda, stmt->results, i, stmt->compat); + ecpg_set_native_sqlda(stmt->lineno, &sqlda_new, stmt->results, i, stmt->compat); ecpg_log("ecpg_process_output on line %d: putting result (1 tuple %d fields) into sqlda descriptor\n", stmt->lineno, PQnfields(stmt->results)); - - sqlda_new->desc_next = sqlda; - sqlda = sqlda_new; } } } diff --git a/src/interfaces/ecpg/test/expected/sql-sqlda.stderr b/src/interfaces/ecpg/test/expected/sql-sqlda.stderr index a93ea07..d01aeea 100644 --- a/src/interfaces/ecpg/test/expected/sql-sqlda.stderr +++ b/src/interfaces/ecpg/test/expected/sql-sqlda.stderr @@ -148,23 +148,23 @@ [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_process_output on line 141: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 141 row 2 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 141 row 0 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 141: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 141: RESULT: 1 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 141 row 2 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 141 row 0 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 141: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 141: RESULT: a offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 141 row 2 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 141 row 0 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 141 row 2 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 141 row 0 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 141: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 141: RESULT: 1 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 141 row 2 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 141 row 0 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 141: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 141: RESULT: a offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_process_output on line 141: putting result (1 tuple 5 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 @@ -190,23 +190,23 @@ [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_process_output on line 141: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 141 row 0 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 141 row 2 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 141: RESULT: 1 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 141: RESULT: 4 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 141 row 0 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 141 row 2 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 141: RESULT: a offset: -1; array: no +[NO_PID]: ecpg_get_data on line 141: RESULT: d offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 141 row 0 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 141 row 2 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 141 row 0 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 141 row 2 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 141: RESULT: 1 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 141: RESULT: 4 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 141 row 0 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 141 row 2 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 141: RESULT: a offset: -1; array: no +[NO_PID]: ecpg_get_data on line 141: RESULT: d offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_process_output on line 141: putting result (1 tuple 5 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000