diff options
| author | Michael P | 2011-05-26 06:40:07 +0000 |
|---|---|---|
| committer | Michael P | 2011-05-30 02:39:44 +0000 |
| commit | 49025616ae6204a041412f5fe2204b41a5113fbf (patch) | |
| tree | 7680d7ccf57fb2993fb1445946b3e027fbeb7291 | |
| parent | c07ee5cf650c03a298650ddaf5fa9f0aa9f91876 (diff) | |
Fix for bug 3299211: JDBC and DML queries
Running DML queries through JDBC to an XC instance
was crashing the server.
Report and patch from sch19831106,
with some code refactoring by me.
| -rw-r--r-- | src/backend/commands/prepare.c | 4 | ||||
| -rw-r--r-- | src/backend/utils/cache/plancache.c | 11 |
2 files changed, 12 insertions, 3 deletions
diff --git a/src/backend/commands/prepare.c b/src/backend/commands/prepare.c index a54ac74d5b..662baa7272 100644 --- a/src/backend/commands/prepare.c +++ b/src/backend/commands/prepare.c @@ -475,6 +475,10 @@ InitQueryHashTable(void) static int set_remote_stmtname(Plan *plan, const char *stmt_name, int n) { + /* If no plan simply return */ + if (!plan) + return 0; + if (IsA(plan, RemoteQuery)) { DatanodeStatement *entry; diff --git a/src/backend/utils/cache/plancache.c b/src/backend/utils/cache/plancache.c index cbe9cc598b..d8cd8301c3 100644 --- a/src/backend/utils/cache/plancache.c +++ b/src/backend/utils/cache/plancache.c @@ -676,12 +676,17 @@ ReleaseCachedPlan(CachedPlan *plan, bool useResOwner) if (plan->fully_planned) { ListCell *lc; - /* close any active datanode statements */ + + /* Close any active planned datanode statements */ foreach (lc, plan->stmt_list) { - PlannedStmt *ps = (PlannedStmt *)lfirst(lc); + Node *node = lfirst(lc); - release_datanode_statements(ps->planTree); + if (IsA(node, PlannedStmt)) + { + PlannedStmt *ps = (PlannedStmt *)node; + release_datanode_statements(ps->planTree); + } } } #endif |
