diff --git a/lib/modules/Sql.pmod/pgsql.pike b/lib/modules/Sql.pmod/pgsql.pike index 79ebad3ef0906e6623f29245147ef7e748bfbf69..4f983a18af483e6e49e8a4c2ad7dea02e4d7261a 100644 --- a/lib/modules/Sql.pmod/pgsql.pike +++ b/lib/modules/Sql.pmod/pgsql.pike @@ -502,14 +502,7 @@ protected void destroy() { } private .pgsql_util.Result textquery(string q) { - .pgsql_util.Result res; -#if 1 - foreach (q / ";"; ; string sq) - res = big_query(sq); -#else // textqueries and portals do not mix well - res = big_query(q, (["_text":1])); -#endif - return res; + return big_query(q, (["_text":1])); } private void resyncdone() { @@ -518,11 +511,15 @@ private void resyncdone() { } private void reset_dbsession() { - proxy.statementsinflight->wait_till_drained(); - error(1); - .pgsql_util.Result res - = textquery("ROLLBACK;RESET ALL;CLOSE ALL;DISCARD TEMP"); - while (res->fetch_row()); + mixed err = catch { + proxy.statementsinflight->wait_till_drained(); + error(1); + .pgsql_util.Result res + = textquery("ROLLBACK;RESET ALL;CLOSE ALL;DISCARD TEMP"); + while (res->fetch_row()); + }; + if (err && !proxy.delayederror) + proxy.delayederror = err; resyncdone(); } diff --git a/lib/modules/Sql.pmod/pgsql_util.pmod b/lib/modules/Sql.pmod/pgsql_util.pmod index e2effa721d9580ef8cd3899a87f0d03cff7e8dc2..ba2901a18d1643e732df022776ad14efae580daf 100644 --- a/lib/modules/Sql.pmod/pgsql_util.pmod +++ b/lib/modules/Sql.pmod/pgsql_util.pmod @@ -861,7 +861,7 @@ class sql_result { if (c = _c) cr = c->i; else - losterror(); + losterror(LOSTERROR); _query = query; datarows = Thread.Queue(); _ddescribe = Thread.Condition(); @@ -986,11 +986,11 @@ class sql_result { return index; } - private void losterror() { - string err; + private void losterror(void|string err) { if (pgsqlsess) - err = pgsqlsess->geterror(1); - error("%s\n", err || LOSTERROR); + err = pgsqlsess->geterror(1) || err; + if (err) + error("%s\n", err); } private void trydelayederror() { @@ -2353,11 +2353,9 @@ class proxy { msglen -= 4; PD("NoData %O\n", portal._query); #endif - if (!portal._forcetext) { - portal._fetchlimit = 0; // disables subsequent Executes - portal->_processrowdesc(({}), ({})); - portal = 0; - } + portal._fetchlimit = 0; // disables subsequent Executes + portal->_processrowdesc(({}), ({})); + portal = 0; break; } case 'H':