summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael P2011-05-26 06:40:07 +0000
committerMichael P2011-05-30 02:39:44 +0000
commit49025616ae6204a041412f5fe2204b41a5113fbf (patch)
tree7680d7ccf57fb2993fb1445946b3e027fbeb7291
parentc07ee5cf650c03a298650ddaf5fa9f0aa9f91876 (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.c4
-rw-r--r--src/backend/utils/cache/plancache.c11
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