summaryrefslogtreecommitdiff
path: root/src/backend/nodes
diff options
context:
space:
mode:
authorPeter Eisentraut2016-09-06 16:00:00 +0000
committerPeter Eisentraut2016-09-06 16:00:00 +0000
commit49eb0fd0972d14014dd3533b1f1bf8c94c899883 (patch)
treebcbfa5cf8f49c1b73066a5c4eaf80f33fc4ecc53 /src/backend/nodes
parent975768f8eae2581b89ceafe8b16a77ff375207fe (diff)
Add location field to DefElem
Add a location field to the DefElem struct, used to parse many utility commands. Update various error messages to supply error position information. To propogate the error position information in a more systematic way, create a ParseState in standard_ProcessUtility() and pass that to interested functions implementing the utility commands. This seems better than passing the query string and then reassembling a parse state ad hoc, which violates the encapsulation of the ParseState type. Reviewed-by: Pavel Stehule <pavel.stehule@gmail.com>
Diffstat (limited to 'src/backend/nodes')
-rw-r--r--src/backend/nodes/copyfuncs.c1
-rw-r--r--src/backend/nodes/equalfuncs.c2
-rw-r--r--src/backend/nodes/makefuncs.c6
-rw-r--r--src/backend/nodes/outfuncs.c1
-rw-r--r--src/backend/nodes/readfuncs.c1
5 files changed, 9 insertions, 2 deletions
diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c
index 1877fb45e57..be2207e3188 100644
--- a/src/backend/nodes/copyfuncs.c
+++ b/src/backend/nodes/copyfuncs.c
@@ -2676,6 +2676,7 @@ _copyDefElem(const DefElem *from)
COPY_STRING_FIELD(defname);
COPY_NODE_FIELD(arg);
COPY_SCALAR_FIELD(defaction);
+ COPY_LOCATION_FIELD(location);
return newnode;
}
diff --git a/src/backend/nodes/equalfuncs.c b/src/backend/nodes/equalfuncs.c
index 448e1a9d55a..c4ec4077a60 100644
--- a/src/backend/nodes/equalfuncs.c
+++ b/src/backend/nodes/equalfuncs.c
@@ -2424,6 +2424,7 @@ _equalDefElem(const DefElem *a, const DefElem *b)
COMPARE_STRING_FIELD(defname);
COMPARE_NODE_FIELD(arg);
COMPARE_SCALAR_FIELD(defaction);
+ COMPARE_LOCATION_FIELD(location);
return true;
}
@@ -2434,6 +2435,7 @@ _equalLockingClause(const LockingClause *a, const LockingClause *b)
COMPARE_NODE_FIELD(lockedRels);
COMPARE_SCALAR_FIELD(strength);
COMPARE_SCALAR_FIELD(waitPolicy);
+ COMPARE_LOCATION_FIELD(location);
return true;
}
diff --git a/src/backend/nodes/makefuncs.c b/src/backend/nodes/makefuncs.c
index d72a85ee1b1..20e2dbda797 100644
--- a/src/backend/nodes/makefuncs.c
+++ b/src/backend/nodes/makefuncs.c
@@ -540,7 +540,7 @@ makeFuncExpr(Oid funcid, Oid rettype, List *args,
* and no special action.
*/
DefElem *
-makeDefElem(char *name, Node *arg)
+makeDefElem(char *name, Node *arg, int location)
{
DefElem *res = makeNode(DefElem);
@@ -548,6 +548,7 @@ makeDefElem(char *name, Node *arg)
res->defname = name;
res->arg = arg;
res->defaction = DEFELEM_UNSPEC;
+ res->location = location;
return res;
}
@@ -558,7 +559,7 @@ makeDefElem(char *name, Node *arg)
*/
DefElem *
makeDefElemExtended(char *nameSpace, char *name, Node *arg,
- DefElemAction defaction)
+ DefElemAction defaction, int location)
{
DefElem *res = makeNode(DefElem);
@@ -566,6 +567,7 @@ makeDefElemExtended(char *nameSpace, char *name, Node *arg,
res->defname = name;
res->arg = arg;
res->defaction = defaction;
+ res->location = location;
return res;
}
diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c
index 29b77125848..90fecb1338d 100644
--- a/src/backend/nodes/outfuncs.c
+++ b/src/backend/nodes/outfuncs.c
@@ -2542,6 +2542,7 @@ _outDefElem(StringInfo str, const DefElem *node)
WRITE_STRING_FIELD(defname);
WRITE_NODE_FIELD(arg);
WRITE_ENUM_FIELD(defaction, DefElemAction);
+ WRITE_LOCATION_FIELD(location);
}
static void
diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c
index 6f9a81e3e31..894a48fb4fc 100644
--- a/src/backend/nodes/readfuncs.c
+++ b/src/backend/nodes/readfuncs.c
@@ -1388,6 +1388,7 @@ _readDefElem(void)
READ_STRING_FIELD(defname);
READ_NODE_FIELD(arg);
READ_ENUM_FIELD(defaction, DefElemAction);
+ READ_LOCATION_FIELD(location);
READ_DONE();
}