combiner->copy_file = NULL;
combiner->errorMessage = NULL;
combiner->errorDetail = NULL;
+ combiner->errorHint = NULL;
combiner->tuple_desc = NULL;
#ifdef XCP
combiner->probing_primary = false;
char *code = NULL;
char *message = NULL;
char *detail = NULL;
+ char *hint = NULL;
int offset = 0;
/*
detail = str;
break;
+ case 'H': /* hint */
+ hint = str;
+ break;
+
/* Fields not yet in use */
case 'S': /* severity */
case 'R': /* routine */
- case 'H': /* hint */
case 'P': /* position string */
case 'p': /* position int */
case 'q': /* int query */
memcpy(combiner->errorCode, code, 5);
if (detail)
combiner->errorDetail = pstrdup(detail);
+ if (hint)
+ combiner->errorHint = pstrdup(hint);
}
/*
pfree(combiner->errorMessage);
if (combiner->errorDetail)
pfree(combiner->errorDetail);
+ if (combiner->errorHint)
+ pfree(combiner->errorHint);
if (combiner->cursor_connections)
pfree(combiner->cursor_connections);
if (combiner->tapenodes)
if (!validate_combiner(&combiner) || error)
{
if (combiner.errorMessage)
- {
- char *code = combiner.errorCode;
- if (combiner.errorDetail)
- ereport(ERROR,
- (errcode(MAKE_SQLSTATE(code[0], code[1], code[2], code[3], code[4])),
- errmsg("%s", combiner.errorMessage), errdetail("%s", combiner.errorDetail) ));
- else
- ereport(ERROR,
- (errcode(MAKE_SQLSTATE(code[0], code[1], code[2], code[3], code[4])),
- errmsg("%s", combiner.errorMessage)));
- }
+ pgxc_node_report_error(&combiner);
else
ereport(ERROR,
(errcode(ERRCODE_INTERNAL_ERROR),
errmsg("Unexpected response from data node")));
}
if (combiner->errorMessage)
- {
- char *code = combiner->errorCode;
- if (combiner->errorDetail != NULL)
- ereport(ERROR,
- (errcode(MAKE_SQLSTATE(code[0], code[1], code[2], code[3], code[4])),
- errmsg("%s", combiner->errorMessage), errdetail("%s", combiner->errorDetail) ));
- else
- ereport(ERROR,
- (errcode(MAKE_SQLSTATE(code[0], code[1], code[2], code[3], code[4])),
- errmsg("%s", combiner->errorMessage)));
- }
+ pgxc_node_report_error(combiner);
}
for (i = 0; i < regular_conn_count; i++)
}
if (combiner->errorMessage)
- {
- char *code = combiner->errorCode;
- if (combiner->errorDetail != NULL)
- ereport(ERROR,
- (errcode(MAKE_SQLSTATE(code[0], code[1], code[2], code[3], code[4])),
- errmsg("%s", combiner->errorMessage), errdetail("%s", combiner->errorDetail) ));
- else
- ereport(ERROR,
- (errcode(MAKE_SQLSTATE(code[0], code[1], code[2], code[3], code[4])),
- errmsg("%s", combiner->errorMessage)));
- }
+ pgxc_node_report_error(combiner);
return NULL;
}
goto primary_mode_phase_two;
}
if (combiner->errorMessage)
- {
- char *code = combiner->errorCode;
- if (combiner->errorDetail)
- ereport(ERROR,
- (errcode(MAKE_SQLSTATE(code[0], code[1], code[2], code[3], code[4])),
- errmsg("%s", combiner->errorMessage), errdetail("%s", combiner->errorDetail) ));
- else
- ereport(ERROR,
- (errcode(MAKE_SQLSTATE(code[0], code[1], code[2], code[3], code[4])),
- errmsg("%s", combiner->errorMessage)));
- }
+ pgxc_node_report_error(combiner);
+
return NULL;
}
if (combiner->errorMessage)
{
char *code = combiner->errorCode;
- if (combiner->errorDetail != NULL)
+ if ((combiner->errorDetail == NULL) && (combiner->errorHint == NULL))
+ ereport(ERROR,
+ (errcode(MAKE_SQLSTATE(code[0], code[1], code[2], code[3], code[4])),
+ errmsg("%s", combiner->errorMessage)));
+ else if ((combiner->errorDetail != NULL) && (combiner->errorHint != NULL))
+ ereport(ERROR,
+ (errcode(MAKE_SQLSTATE(code[0], code[1], code[2], code[3], code[4])),
+ errmsg("%s", combiner->errorMessage),
+ errdetail("%s", combiner->errorDetail),
+ errhint("%s", combiner->errorHint)));
+ else if (combiner->errorDetail != NULL)
ereport(ERROR,
(errcode(MAKE_SQLSTATE(code[0], code[1], code[2], code[3], code[4])),
- errmsg("%s", combiner->errorMessage), errdetail("%s", combiner->errorDetail) ));
+ errmsg("%s", combiner->errorMessage),
+ errdetail("%s", combiner->errorDetail)));
else
ereport(ERROR,
(errcode(MAKE_SQLSTATE(code[0], code[1], code[2], code[3], code[4])),
- errmsg("%s", combiner->errorMessage)));
+ errmsg("%s", combiner->errorMessage),
+ errhint("%s", combiner->errorHint)));
}
}