mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-11 13:49:07 +02:00
Postgres: more information in EPQDatabaseError
(cherry picked from commit f9b1a5acfb
)
This commit is contained in:
parent
69ffa43ccf
commit
143062c064
@ -85,6 +85,11 @@ type
|
|||||||
MESSAGE_DETAIL:string;
|
MESSAGE_DETAIL:string;
|
||||||
MESSAGE_HINT:string;
|
MESSAGE_HINT:string;
|
||||||
STATEMENT_POSITION:string;
|
STATEMENT_POSITION:string;
|
||||||
|
SCHEMA_NAME: string;
|
||||||
|
TABLE_NAME: string;
|
||||||
|
COLUMN_NAME: string;
|
||||||
|
DATATYPE_NAME: string;
|
||||||
|
CONSTRAINT_NAME: string;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TPQTranConnection }
|
{ TPQTranConnection }
|
||||||
@ -691,6 +696,11 @@ var
|
|||||||
MESSAGE_DETAIL: string;
|
MESSAGE_DETAIL: string;
|
||||||
MESSAGE_HINT: string;
|
MESSAGE_HINT: string;
|
||||||
STATEMENT_POSITION: string;
|
STATEMENT_POSITION: string;
|
||||||
|
SCHEMA_NAME: string;
|
||||||
|
TABLE_NAME: string;
|
||||||
|
COLUMN_NAME: string;
|
||||||
|
DATATYPE_NAME: string;
|
||||||
|
CONSTRAINT_NAME: string;
|
||||||
P : Pchar;
|
P : Pchar;
|
||||||
haveError : Boolean;
|
haveError : Boolean;
|
||||||
|
|
||||||
@ -706,12 +716,18 @@ begin
|
|||||||
else if (PQresultStatus(res) <> PGRES_COMMAND_OK) then
|
else if (PQresultStatus(res) <> PGRES_COMMAND_OK) then
|
||||||
begin
|
begin
|
||||||
HaveError:=True;
|
HaveError:=True;
|
||||||
SEVERITY:=PQresultErrorField(res,ord('S'));
|
SEVERITY:=PQresultErrorField(res,PG_DIAG_SEVERITY);
|
||||||
SQLSTATE:=PQresultErrorField(res,ord('C'));
|
SQLSTATE:=PQresultErrorField(res,PG_DIAG_SQLSTATE);
|
||||||
MESSAGE_PRIMARY:=PQresultErrorField(res,ord('M'));
|
MESSAGE_PRIMARY:=PQresultErrorField(res,PG_DIAG_MESSAGE_PRIMARY);
|
||||||
MESSAGE_DETAIL:=PQresultErrorField(res,ord('D'));
|
MESSAGE_DETAIL:=PQresultErrorField(res,PG_DIAG_MESSAGE_DETAIL);
|
||||||
MESSAGE_HINT:=PQresultErrorField(res,ord('H'));
|
MESSAGE_HINT:=PQresultErrorField(res,PG_DIAG_MESSAGE_HINT);
|
||||||
STATEMENT_POSITION:=PQresultErrorField(res,ord('P'));
|
STATEMENT_POSITION:=PQresultErrorField(res,PG_DIAG_STATEMENT_POSITION);
|
||||||
|
SCHEMA_NAME:=PQresultErrorField(res,PG_DIAG_SCHEMA_NAME);
|
||||||
|
TABLE_NAME:=PQresultErrorField(res,PG_DIAG_TABLE_NAME);
|
||||||
|
COLUMN_NAME:=PQresultErrorField(res,PG_DIAG_COLUMN_NAME);
|
||||||
|
DATATYPE_NAME:=PQresultErrorField(res,PG_DIAG_DATATYPE_NAME);
|
||||||
|
CONSTRAINT_NAME:=PQresultErrorField(res,PG_DIAG_CONSTRAINT_NAME);
|
||||||
|
|
||||||
sErr:=PQresultErrorMessage(res);
|
sErr:=PQresultErrorMessage(res);
|
||||||
if VerboseErrors then
|
if VerboseErrors then
|
||||||
begin
|
begin
|
||||||
@ -721,6 +737,11 @@ begin
|
|||||||
MaybeAdd(sErr,'Error Detail',MESSAGE_DETAIL);
|
MaybeAdd(sErr,'Error Detail',MESSAGE_DETAIL);
|
||||||
MaybeAdd(sErr,'Hint',MESSAGE_HINT);
|
MaybeAdd(sErr,'Hint',MESSAGE_HINT);
|
||||||
MaybeAdd(sErr,'Character',STATEMENT_POSITION);
|
MaybeAdd(sErr,'Character',STATEMENT_POSITION);
|
||||||
|
MaybeAdd(sErr,'Schema',SCHEMA_NAME);
|
||||||
|
MaybeAdd(sErr,'Table',TABLE_NAME);
|
||||||
|
MaybeAdd(sErr,'Column',COLUMN_NAME);
|
||||||
|
MaybeAdd(sErr,'Data Type',DATATYPE_NAME);
|
||||||
|
MaybeAdd(sErr,'Constraint',CONSTRAINT_NAME);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
if HaveError then
|
if HaveError then
|
||||||
@ -733,6 +754,12 @@ begin
|
|||||||
E.MESSAGE_DETAIL:=MESSAGE_DETAIL;
|
E.MESSAGE_DETAIL:=MESSAGE_DETAIL;
|
||||||
E.MESSAGE_HINT:=MESSAGE_HINT;
|
E.MESSAGE_HINT:=MESSAGE_HINT;
|
||||||
E.STATEMENT_POSITION:=STATEMENT_POSITION;
|
E.STATEMENT_POSITION:=STATEMENT_POSITION;
|
||||||
|
E.SCHEMA_NAME:=SCHEMA_NAME;
|
||||||
|
E.TABLE_NAME:=TABLE_NAME;
|
||||||
|
E.COLUMN_NAME:=COLUMN_NAME;
|
||||||
|
E.DATATYPE_NAME:=DATATYPE_NAME;
|
||||||
|
E.CONSTRAINT_NAME:=CONSTRAINT_NAME;
|
||||||
|
|
||||||
PQclear(res);
|
PQclear(res);
|
||||||
res:=nil;
|
res:=nil;
|
||||||
if assigned(conn) then
|
if assigned(conn) then
|
||||||
|
@ -14,6 +14,25 @@ const
|
|||||||
ERROR_MSG_LENGTH = 4096;
|
ERROR_MSG_LENGTH = 4096;
|
||||||
CMDSTATUS_LEN = 40;
|
CMDSTATUS_LEN = 40;
|
||||||
|
|
||||||
|
PG_DIAG_SEVERITY = Ord('S');
|
||||||
|
PG_DIAG_SEVERITY_NONLOCALIZED = Ord('V');
|
||||||
|
PG_DIAG_SQLSTATE = Ord('C');
|
||||||
|
PG_DIAG_MESSAGE_PRIMARY = Ord('M');
|
||||||
|
PG_DIAG_MESSAGE_DETAIL = Ord('D');
|
||||||
|
PG_DIAG_MESSAGE_HINT = Ord('H');
|
||||||
|
PG_DIAG_STATEMENT_POSITION = Ord('P');
|
||||||
|
PG_DIAG_INTERNAL_POSITION = Ord('p');
|
||||||
|
PG_DIAG_INTERNAL_QUERY = Ord('q');
|
||||||
|
PG_DIAG_CONTEXT = Ord('W');
|
||||||
|
PG_DIAG_SCHEMA_NAME = Ord('s');
|
||||||
|
PG_DIAG_TABLE_NAME = Ord('t');
|
||||||
|
PG_DIAG_COLUMN_NAME = Ord('c');
|
||||||
|
PG_DIAG_DATATYPE_NAME = Ord('d');
|
||||||
|
PG_DIAG_CONSTRAINT_NAME = Ord('n');
|
||||||
|
PG_DIAG_SOURCE_FILE = Ord('F');
|
||||||
|
PG_DIAG_SOURCE_LINE = Ord('L');
|
||||||
|
PG_DIAG_SOURCE_FUNCTION = Ord('R');
|
||||||
|
|
||||||
Type
|
Type
|
||||||
TSockAddr = Array [1..112] of byte;
|
TSockAddr = Array [1..112] of byte;
|
||||||
TPGresAttDesc = record
|
TPGresAttDesc = record
|
||||||
|
Loading…
Reference in New Issue
Block a user