pgsql: Speed up resync().

parent 86ee0d86
......@@ -1170,7 +1170,7 @@ private void startquery(int forcetext, .pgsql_util.Result portal, string q,
ERROR("Current transaction is aborted, "
"commands ignored until end of transaction");
}
if (transtype != NOTRANS)
if (transtype != NOTRANS || .pgsql_util.nodataresprefix->match(q))
tp = .pgsql_util.describenodata; // Description already known
else if (!forcetext && forcecache == 1
|| forcecache && sizeof(q) >= MINPREPARELENGTH) {
......
......@@ -110,7 +110,7 @@ private Regexp dontcacheprefix = iregexp("^\a*(FETCH|COPY)\a");
private Regexp paralleliseprefix
= iregexp("^\a*((SELEC|INSER)T|(UPDA|DELE)TE|(FETC|WIT)H)\a");
/* Statements matching transbeginprefix will cause the driver
/* Statements matching transbeginprefix will cause the driver to
* insert a sync after the statement.
* Failure to do so, will result in portal synchronisation errors
* in the event of an ErrorResponse.
......@@ -118,7 +118,7 @@ private Regexp paralleliseprefix
final Regexp transbeginprefix
= iregexp("^\a*(BEGIN|START)([; \t\f\r\n]|$)");
/* Statements matching transendprefix will cause the driver
/* Statements matching transendprefix will cause the driver to
* insert a sync after the statement.
* Failure to do so, will result in portal synchronisation errors
* in the event of an ErrorResponse.
......@@ -126,6 +126,13 @@ final Regexp transbeginprefix
final Regexp transendprefix
= iregexp("^\a*(COMMIT|ROLLBACK|END)([; \t\f\r\n]|$)");
/* Statements matching nodataresprefix will cause the driver
* to skip asking for a query description and query results, since there
* are no arguments or results to begin with.
*/
final Regexp nodataresprefix
= iregexp("^\a*(RESET|CLOSE|DISCARD)\a");
/* For statements matching execfetchlimit the resultrows will not be
* fetched in pieces. This heuristic will be sub-optimal whenever
* either an UPDATE/DELETE/INSERT statement is prefixed by WITH, or
......@@ -139,7 +146,7 @@ final Regexp transendprefix
* tradeoff.
*/
private Regexp execfetchlimit
= iregexp("^\a*((UPDA|DELE)TE|INSERT"
= iregexp("^\a*((UPDA|DELE)TE|INSERT|CREATE|DROP"
"|RESET|CLOSE|DISCARD)\a|\aLIMIT\a+[1-9][; \t\f\r\n]*$");
private void default_backend_runs() { // Runs as soon as the
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment