26#include "utils/fmgrprotos.h"
78 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
79 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
80 errdetail(
"Initial element must be an array."));
86 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
87 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
94 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
95 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
96 errdetail(
"Value of \"%s\" must be an array of attribute numbers.",
103 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
104 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
105 errdetail(
"Attribute lists can only contain attribute numbers."));
111 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
112 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
113 errdetail(
"Value of \"%s\" must be an integer.",
120 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
121 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
122 errdetail(
"Value of \"%s\" must be an integer.",
128 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
129 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
154 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
155 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
160 if (!
parse->found_attributes)
163 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
164 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
165 errdetail(
"Item must contain \"%s\" key",
170 if (!
parse->found_dependency)
173 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
174 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
175 errdetail(
"Item must contain \"%s\" key.",
180 if (!
parse->found_degree)
183 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
184 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
185 errdetail(
"Item must contain \"%s\" key.",
198 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
199 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
200 errdetail(
"The \"%s\" key must contain an array of at least %d and no more than %d elements.",
221 for (
int i = 0;
i < natts;
i++)
227 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
228 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
229 errdetail(
"Item \"%s\" value %d found in the \"%s\" list.",
244 parse->dependency = 0;
246 parse->found_attributes =
false;
247 parse->found_dependency =
false;
248 parse->found_degree =
false;
265 switch (
parse->state)
275 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
276 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
277 errdetail(
"Array found in unexpected place."));
294 switch (
parse->state)
304 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
305 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
306 errdetail(
"The \"%s\" key must be an non-empty array.",
318 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
319 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
320 errdetail(
"Item array cannot be empty."));
330 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
331 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
332 errdetail(
"Array found in unexpected place."));
353 if (
parse->found_attributes)
356 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
357 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
358 errdetail(
"Multiple \"%s\" keys are not allowed.",
363 parse->found_attributes =
true;
370 if (
parse->found_dependency)
373 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
374 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
375 errdetail(
"Multiple \"%s\" keys are not allowed.",
380 parse->found_dependency =
true;
387 if (
parse->found_degree)
390 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
391 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
392 errdetail(
"Multiple \"%s\" keys are not allowed.",
397 parse->found_degree =
true;
403 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
404 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
405 errdetail(
"Only allowed keys are \"%s\", \"%s\" and \"%s\".",
423 switch (
parse->state)
430 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
431 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
432 errdetail(
"Attribute number array cannot be null."));
440 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
441 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
442 errdetail(
"Item list elements cannot be null."));
447 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
448 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
474 return ((
cur > prev) || (
cur < 0));
492 switch (
parse->state)
497 if (escontext.error_occurred)
500 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
501 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
513 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
514 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
527 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
528 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
529 errdetail(
"Invalid \"%s\" element: %d cannot follow %d.",
542 if (escontext.error_occurred)
545 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
546 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
558 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
559 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
572 if (escontext.error_occurred)
575 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
576 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
586 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
587 errmsg(
"malformed pg_dependencies: \"%s\"",
parse->str),
604 if (
a->nattributes !=
b->nattributes)
607 for (
i = 0;
i <
a->nattributes;
i++)
609 if (
a->attributes[
i] !=
b->attributes[
i])
662 switch (
parse->state)
673 "pg_dependencies parsing claims success with an empty item list.");
679 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
680 errmsg(
"malformed pg_dependencies: \"%s\"",
str),
687 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
688 errmsg(
"malformed pg_dependencies: \"%s\"",
str),
697 mvdeps->
ndeps = ndeps;
699 for (
int i = 0;
i < ndeps;
i++)
713 for (
int j = 0;
j <
i;
j++)
722 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
723 errmsg(
"malformed pg_dependencies: \"%s\"",
str),
724 errdetail(
"Duplicate \"%s\" array: [%s] with \"%s\": %d.",
778 sem_action.
semstate = (
void *) &parse_state;
809 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
810 errmsg(
"malformed pg_dependencies: \"%s\"",
str),
830 for (
int i = 0;
i < dependencies->
ndeps;
i++)
838 elog(
ERROR,
"invalid zero-length nattributes array in MVDependencies");
864 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
865 errmsg(
"cannot accept a value of type %s",
"pg_dependencies")));
Datum byteasend(PG_FUNCTION_ARGS)
MVDependencies * statext_dependencies_deserialize(bytea *data)
bytea * statext_dependencies_serialize(MVDependencies *dependencies)
int errdetail(const char *fmt,...)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define errsave(context,...)
#define ereport(elevel,...)
float8 float8in_internal(char *num, char **endptr_p, const char *type_name, const char *orig_string, struct Node *escontext)
#define PG_GETARG_BYTEA_PP(n)
#define PG_RETURN_BYTEA_P(x)
#define PG_RETURN_CSTRING(x)
#define PG_GETARG_CSTRING(n)
Assert(PointerIsAligned(start, uint64))
JsonParseErrorType pg_parse_json(JsonLexContext *lex, const JsonSemAction *sem)
JsonLexContext * makeJsonLexContextCstringLen(JsonLexContext *lex, const char *json, size_t len, int encoding, bool need_escapes)
void freeJsonLexContext(JsonLexContext *lex)
List * lappend(List *list, void *datum)
List * lappend_int(List *list, int datum)
void list_free(List *list)
void list_free_deep(List *list)
void pfree(void *pointer)
void * palloc0(Size size)
#define SOFT_ERROR_OCCURRED(escontext)
int16 pg_strtoint16_safe(const char *s, Node *escontext)
static JsonParseErrorType dependencies_array_end(void *state)
static JsonParseErrorType dependencies_array_start(void *state)
Datum pg_dependencies_in(PG_FUNCTION_ARGS)
static JsonParseErrorType dependencies_array_element_start(void *state, bool isnull)
DependenciesSemanticState
@ DEPS_EXPECT_ATTNUM_LIST
static JsonParseErrorType dependencies_object_end(void *state)
static bytea * build_mvdependencies(DependenciesParseState *parse, char *str)
static bool valid_subsequent_attnum(const AttrNumber prev, const AttrNumber cur)
static char * dep_attnum_list(const MVDependency *item)
Datum pg_dependencies_out(PG_FUNCTION_ARGS)
static AttrNumber dep_attnum_dependency(const MVDependency *item)
static JsonParseErrorType dependencies_scalar(void *state, char *token, JsonTokenType tokentype)
Datum pg_dependencies_send(PG_FUNCTION_ARGS)
static JsonParseErrorType dependencies_object_field_start(void *state, char *fname, bool isnull)
Datum pg_dependencies_recv(PG_FUNCTION_ARGS)
static bool dep_attributes_eq(const MVDependency *a, const MVDependency *b)
static JsonParseErrorType dependencies_object_start(void *state)
static int list_length(const List *l)
static void * list_nth(const List *list, int n)
static int list_nth_int(const List *list, int n)
static struct subre * parse(struct vars *v, int stopper, int type, struct state *init, struct state *final)
#define STATS_MAX_DIMENSIONS
#define STATS_DEPS_TYPE_BASIC
void appendStringInfo(StringInfo str, const char *fmt,...)
void appendStringInfoString(StringInfo str, const char *s)
void appendStringInfoChar(StringInfo str, char ch)
void initStringInfo(StringInfo str)
DependenciesSemanticState state
json_struct_action array_end
json_struct_action object_start
json_ofield_action object_field_start
json_aelem_action array_element_start
json_scalar_action scalar
json_aelem_action array_element_end
json_struct_action array_start
json_struct_action object_end
json_ofield_action object_field_end
MVDependency * deps[FLEXIBLE_ARRAY_MEMBER]
AttrNumber attributes[FLEXIBLE_ARRAY_MEMBER]