PostgreSQL Source Code
git master
|
#include "fmgr.h"
#include "executor/tablefunc.h"
#include "nodes/pg_list.h"
#include "nodes/primnodes.h"
#include "utils/jsonb.h"
#include "utils/jsonfuncs.h"
Go to the source code of this file.
Data Structures | |
struct | JsonPath |
struct | JsonPathItem |
struct | JsonPathParseItem |
struct | JsonPathParseResult |
struct | JsonPathVariableEvalContext |
Macros | |
#define | JSONPATH_VERSION (0x01) |
#define | JSONPATH_LAX (0x80000000) |
#define | JSONPATH_HDRSZ (offsetof(JsonPath, data)) |
#define | DatumGetJsonPathP(d) ((JsonPath *) DatumGetPointer(PG_DETOAST_DATUM(d))) |
#define | DatumGetJsonPathPCopy(d) ((JsonPath *) DatumGetPointer(PG_DETOAST_DATUM_COPY(d))) |
#define | PG_GETARG_JSONPATH_P(x) DatumGetJsonPathP(PG_GETARG_DATUM(x)) |
#define | PG_GETARG_JSONPATH_P_COPY(x) DatumGetJsonPathPCopy(PG_GETARG_DATUM(x)) |
#define | PG_RETURN_JSONPATH_P(p) PG_RETURN_POINTER(p) |
#define | jspIsScalar(type) ((type) >= jpiNull && (type) <= jpiBool) |
#define | JSP_REGEX_ICASE 0x01 /* i flag, case insensitive */ |
#define | JSP_REGEX_DOTALL 0x02 /* s flag, dot matches newline */ |
#define | JSP_REGEX_MLINE 0x04 /* m flag, ^/$ match at newlines */ |
#define | JSP_REGEX_WSPACE 0x08 /* x flag, ignore whitespace in pattern */ |
#define | JSP_REGEX_QUOTE 0x10 /* q flag, no special characters */ |
#define | jspHasNext(jsp) ((jsp)->nextPos > 0) |
Typedefs | |
typedef enum JsonPathItemType | JsonPathItemType |
typedef struct JsonPathItem | JsonPathItem |
typedef struct JsonPathParseItem | JsonPathParseItem |
typedef struct JsonPathParseResult | JsonPathParseResult |
typedef struct JsonPathVariableEvalContext | JsonPathVariableEvalContext |
Enumerations | |
enum | JsonPathItemType { jpiNull = jbvNull , jpiString = jbvString , jpiNumeric = jbvNumeric , jpiBool = jbvBool , jpiAnd , jpiOr , jpiNot , jpiIsUnknown , jpiEqual , jpiNotEqual , jpiLess , jpiGreater , jpiLessOrEqual , jpiGreaterOrEqual , jpiAdd , jpiSub , jpiMul , jpiDiv , jpiMod , jpiPlus , jpiMinus , jpiAnyArray , jpiAnyKey , jpiIndexArray , jpiAny , jpiKey , jpiCurrent , jpiRoot , jpiVariable , jpiFilter , jpiExists , jpiType , jpiSize , jpiAbs , jpiFloor , jpiCeiling , jpiDouble , jpiDatetime , jpiKeyValue , jpiSubscript , jpiLast , jpiStartsWith , jpiLikeRegex } |
Variables | |
PGDLLIMPORT const TableFuncRoutine | JsonbTableRoutine |
#define DatumGetJsonPathP | ( | d | ) | ((JsonPath *) DatumGetPointer(PG_DETOAST_DATUM(d))) |
Definition at line 35 of file jsonpath.h.
#define DatumGetJsonPathPCopy | ( | d | ) | ((JsonPath *) DatumGetPointer(PG_DETOAST_DATUM_COPY(d))) |
Definition at line 36 of file jsonpath.h.
Definition at line 33 of file jsonpath.h.
#define JSONPATH_LAX (0x80000000) |
Definition at line 32 of file jsonpath.h.
#define JSONPATH_VERSION (0x01) |
Definition at line 31 of file jsonpath.h.
Definition at line 95 of file jsonpath.h.
Definition at line 94 of file jsonpath.h.
#define JSP_REGEX_MLINE 0x04 /* m flag, ^/$ match at newlines */ |
Definition at line 96 of file jsonpath.h.
#define JSP_REGEX_QUOTE 0x10 /* q flag, no special characters */ |
Definition at line 98 of file jsonpath.h.
Definition at line 97 of file jsonpath.h.
#define jspHasNext | ( | jsp | ) | ((jsp)->nextPos > 0) |
Definition at line 167 of file jsonpath.h.
Definition at line 41 of file jsonpath.h.
#define PG_GETARG_JSONPATH_P | ( | x | ) | DatumGetJsonPathP(PG_GETARG_DATUM(x)) |
Definition at line 37 of file jsonpath.h.
#define PG_GETARG_JSONPATH_P_COPY | ( | x | ) | DatumGetJsonPathPCopy(PG_GETARG_DATUM(x)) |
Definition at line 38 of file jsonpath.h.
#define PG_RETURN_JSONPATH_P | ( | p | ) | PG_RETURN_POINTER(p) |
Definition at line 39 of file jsonpath.h.
typedef struct JsonPathItem JsonPathItem |
typedef enum JsonPathItemType JsonPathItemType |
typedef struct JsonPathParseItem JsonPathParseItem |
Definition at line 182 of file jsonpath.h.
typedef struct JsonPathParseResult JsonPathParseResult |
typedef struct JsonPathVariableEvalContext JsonPathVariableEvalContext |
enum JsonPathItemType |
Definition at line 46 of file jsonpath.h.
int EvalJsonPathVar | ( | void * | vars, |
char * | varName, | ||
int | varNameLen, | ||
JsonbValue * | val, | ||
JsonbValue * | baseObject | ||
) |
Definition at line 4695 of file execExprInterp.c.
References ExecEvalExpr(), jbvNull, JsonItemFromDatum(), lfirst, list_length(), MemoryContextSwitchTo(), val, and ExprEvalStep::var.
Referenced by JsonPathExists(), JsonPathQuery(), JsonPathValue(), and JsonTableResetContextItem().
void JsonItemFromDatum | ( | Datum | val, |
Oid | typid, | ||
int32 | typmod, | ||
JsonbValue * | res | ||
) |
Definition at line 3062 of file jsonpath_exec.c.
References Assert(), CStringGetDatum, DatumGetBool, DatumGetJsonbP, DatumGetTextP, DirectFunctionCall1, ereport, errcode(), errmsg(), ERROR, float4_numeric(), float8_numeric(), int2_numeric(), int4_numeric(), int8_numeric(), jbvBool, jbvDatetime, jbvString, jsonb_in(), JsonbExtractScalar(), JsonbInitBinary(), JsonbPGetDatum, JsonbValueInitNumericDatum(), JsonContainerIsScalar, pfree(), PG_USED_FOR_ASSERTS_ONLY, res, Jsonb::root, generate_unaccent_rules::str, text_to_cstring(), val, VARDATA_ANY, and VARSIZE_ANY_EXHDR.
Referenced by EvalJsonPathVar().
Definition at line 2904 of file jsonpath_exec.c.
References Assert(), DatumGetJsonbP, error(), EvalJsonPathVar(), executeJsonPath(), jperIsError, jperOk, and res.
Referenced by ExecEvalJsonExpr().
Datum JsonPathQuery | ( | Datum | jb, |
JsonPath * | jp, | ||
JsonWrapper | wrapper, | ||
bool * | empty, | ||
bool * | error, | ||
List * | vars | ||
) |
Definition at line 2919 of file jsonpath_exec.c.
References Assert(), DatumGetJsonbP, elog(), ereport, errcode(), errhint(), errmsg(), ERROR, error(), EvalJsonPathVar(), executeJsonPath(), IsAJsonbScalar, jbvBinary, jperIsError, JsonbPGetDatum, JsonbValueToJsonb(), JsonContainerIsScalar, JsonValueListHead(), JsonValueListLength(), JSW_CONDITIONAL, JSW_NONE, JSW_UNCONDITIONAL, PG_USED_FOR_ASSERTS_ONLY, PointerGetDatum, res, JsonbValue::type, JsonbValue::val, and wrapItemsInArray().
Referenced by ExecEvalJsonExpr().
Definition at line 2988 of file jsonpath_exec.c.
References Assert(), pg_result::binary, DatumGetJsonbP, ereport, errcode(), errmsg(), ERROR, error(), EvalJsonPathVar(), executeJsonPath(), IsAJsonbScalar, jbvBinary, jbvNull, jperIsError, JsonbExtractScalar(), JsonContainerIsScalar, JsonValueListHead(), JsonValueListLength(), PG_USED_FOR_ASSERTS_ONLY, and res.
Referenced by ExecEvalJsonExpr().
int jspConvertRegexFlags | ( | uint32 | xflags | ) |
Referenced by executeLikeRegex().
void jspGetArg | ( | JsonPathItem * | v, |
JsonPathItem * | a | ||
) |
Definition at line 929 of file jsonpath.c.
References a, JsonPathItem::arg, Assert(), JsonPathItem::base, JsonPathItem::content, jpiDatetime, jpiExists, jpiFilter, jpiIsUnknown, jpiMinus, jpiNot, jpiPlus, jspInitByBuffer(), and JsonPathItem::type.
Referenced by executeBoolItem(), executeDateTimeMethod(), executeItemOptUnwrapTarget(), executeUnaryArithmExpr(), extract_jsp_bool_expr(), extract_jsp_path_expr_nodes(), jspIsMutableWalker(), and printJsonPathItem().
bool jspGetArraySubscript | ( | JsonPathItem * | v, |
JsonPathItem * | from, | ||
JsonPathItem * | to, | ||
int | i | ||
) |
Definition at line 1068 of file jsonpath.c.
References JsonPathItem::array, Assert(), JsonPathItem::base, JsonPathItem::content, i, jpiIndexArray, jspInitByBuffer(), and JsonPathItem::type.
Referenced by executeItemOptUnwrapTarget(), jspIsMutableWalker(), and printJsonPathItem().
bool jspGetBool | ( | JsonPathItem * | v | ) |
Definition at line 1040 of file jsonpath.c.
References Assert(), JsonPathItem::content, jpiBool, JsonPathItem::type, and JsonPathItem::value.
Referenced by getJsonPathItem(), and printJsonPathItem().
void jspGetLeftArg | ( | JsonPathItem * | v, |
JsonPathItem * | a | ||
) |
Definition at line 998 of file jsonpath.c.
References a, JsonPathItem::args, Assert(), JsonPathItem::base, JsonPathItem::content, jpiAdd, jpiAnd, jpiDiv, jpiEqual, jpiGreater, jpiGreaterOrEqual, jpiLess, jpiLessOrEqual, jpiMod, jpiMul, jpiNotEqual, jpiOr, jpiStartsWith, jpiSub, jspInitByBuffer(), and JsonPathItem::type.
Referenced by executeBinaryArithmExpr(), executeBoolItem(), extract_jsp_bool_expr(), jspIsMutableWalker(), and printJsonPathItem().
bool jspGetNext | ( | JsonPathItem * | v, |
JsonPathItem * | a | ||
) |
Definition at line 943 of file jsonpath.c.
References a, Assert(), JsonPathItem::base, jpiAbs, jpiAdd, jpiAnd, jpiAny, jpiAnyArray, jpiAnyKey, jpiBool, jpiCeiling, jpiCurrent, jpiDatetime, jpiDiv, jpiDouble, jpiEqual, jpiExists, jpiFilter, jpiFloor, jpiGreater, jpiGreaterOrEqual, jpiIndexArray, jpiIsUnknown, jpiKey, jpiKeyValue, jpiLast, jpiLess, jpiLessOrEqual, jpiMinus, jpiMod, jpiMul, jpiNot, jpiNotEqual, jpiNull, jpiNumeric, jpiOr, jpiPlus, jpiRoot, jpiSize, jpiStartsWith, jpiString, jpiSub, jpiType, jpiVariable, jspHasNext, jspInitByBuffer(), JsonPathItem::nextPos, and JsonPathItem::type.
Referenced by appendBoolResult(), executeBinaryArithmExpr(), executeDateTimeMethod(), executeItemOptUnwrapTarget(), executeKeyValueMethod(), executeNextItem(), executeNumericItemMethod(), executeUnaryArithmExpr(), extract_jsp_path_expr_nodes(), jspIsMutableWalker(), and printJsonPathItem().
Numeric jspGetNumeric | ( | JsonPathItem * | v | ) |
Definition at line 1048 of file jsonpath.c.
References Assert(), JsonPathItem::content, jpiNumeric, JsonPathItem::type, and JsonPathItem::value.
Referenced by getJsonPathItem(), and printJsonPathItem().
void jspGetRightArg | ( | JsonPathItem * | v, |
JsonPathItem * | a | ||
) |
Definition at line 1019 of file jsonpath.c.
References a, JsonPathItem::args, Assert(), JsonPathItem::base, JsonPathItem::content, jpiAdd, jpiAnd, jpiDiv, jpiEqual, jpiGreater, jpiGreaterOrEqual, jpiLess, jpiLessOrEqual, jpiMod, jpiMul, jpiNotEqual, jpiOr, jpiStartsWith, jpiSub, jspInitByBuffer(), and JsonPathItem::type.
Referenced by executeBinaryArithmExpr(), executeBoolItem(), extract_jsp_bool_expr(), jspIsMutableWalker(), and printJsonPathItem().
char* jspGetString | ( | JsonPathItem * | v, |
int32 * | len | ||
) |
Definition at line 1056 of file jsonpath.c.
References Assert(), JsonPathItem::content, jpiKey, jpiString, jpiVariable, len, JsonPathItem::type, and JsonPathItem::value.
Referenced by executeDateTimeMethod(), executeItemOptUnwrapTarget(), getJsonPathItem(), getJsonPathVariable(), jsonb_ops__add_path_item(), jsonb_path_ops__add_path_item(), jspIsMutableWalker(), and printJsonPathItem().
void jspInit | ( | JsonPathItem * | v, |
JsonPath * | js | ||
) |
Definition at line 839 of file jsonpath.c.
References Assert(), JsonPath::data, JsonPath::header, JSONPATH_LAX, JSONPATH_VERSION, and jspInitByBuffer().
Referenced by executeJsonPath(), extract_jsp_query(), jsonPathToCstring(), and jspIsMutable().
void jspInitByBuffer | ( | JsonPathItem * | v, |
char * | base, | ||
int32 | pos | ||
) |
Definition at line 849 of file jsonpath.c.
References JsonPathItem::anybounds, JsonPathItem::arg, JsonPathItem::args, JsonPathItem::array, JsonPathItem::base, JsonPathItem::content, elog(), ERROR, INTALIGN, jpiAbs, jpiAdd, jpiAnd, jpiAny, jpiAnyArray, jpiAnyKey, jpiBool, jpiCeiling, jpiCurrent, jpiDatetime, jpiDiv, jpiDouble, jpiEqual, jpiExists, jpiFilter, jpiFloor, jpiGreater, jpiGreaterOrEqual, jpiIndexArray, jpiIsUnknown, jpiKey, jpiKeyValue, jpiLast, jpiLess, jpiLessOrEqual, jpiLikeRegex, jpiMinus, jpiMod, jpiMul, jpiNot, jpiNotEqual, jpiNull, jpiNumeric, jpiOr, jpiPlus, jpiRoot, jpiSize, jpiStartsWith, jpiString, jpiSub, jpiType, jpiVariable, JsonPathItem::like_regex, JsonPathItem::nextPos, read_byte, read_int32, read_int32_n, JsonPathItem::type, and JsonPathItem::value.
Referenced by executeBoolItem(), jspGetArg(), jspGetArraySubscript(), jspGetLeftArg(), jspGetNext(), jspGetRightArg(), jspInit(), jspIsMutableWalker(), and printJsonPathItem().
Definition at line 1321 of file jsonpath.c.
References JsonPathMutableContext::current, JsonPath::header, jpdsNonDateTime, JSONPATH_LAX, jspInit(), jspIsMutableWalker(), JsonPathMutableContext::lax, JsonPathMutableContext::mutable, JsonPathMutableContext::varexprs, and JsonPathMutableContext::varnames.
Referenced by contain_mutable_functions_walker().
const char* jspOperationName | ( | JsonPathItemType | type | ) |
Definition at line 724 of file jsonpath.c.
References elog(), ERROR, jpiAbs, jpiAdd, jpiAnd, jpiCeiling, jpiDatetime, jpiDiv, jpiDouble, jpiEqual, jpiFloor, jpiGreater, jpiGreaterOrEqual, jpiKeyValue, jpiLess, jpiLessOrEqual, jpiLikeRegex, jpiMinus, jpiMod, jpiMul, jpiNotEqual, jpiOr, jpiPlus, jpiSize, jpiStartsWith, jpiSub, jpiType, and generate_unaccent_rules::type.
Referenced by executeBinaryArithmExpr(), executeDateTimeMethod(), executeItemOptUnwrapTarget(), executeKeyValueMethod(), executeNumericItemMethod(), executeUnaryArithmExpr(), and printJsonPathItem().
JsonPathParseResult* parsejsonpath | ( | const char * | str, |
int | len | ||
) |
Referenced by jsonPathFromCstring().
|
extern |
Definition at line 3553 of file jsonpath_exec.c.
Referenced by ExecInitTableFuncScan().