Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Postgres/src/include/utils/   (Postgres Database Version 18.4©)  Datei vom 11.4.2026 mit Größe 3 kB image not shown  

Quelle  jsonfuncs.h

  Sprache: C
 

/*-------------------------------------------------------------------------
 *
 * jsonfuncs.h
 *   Functions to process JSON data types.
 *
 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 * src/include/utils/jsonfuncs.h
 *
 *-------------------------------------------------------------------------
 */


#ifndef JSONFUNCS_H
#define JSONFUNCS_H

#include "common/jsonapi.h"
#include "nodes/nodes.h"
#include "utils/jsonb.h"

/*
 * Flag types for iterate_json(b)_values to specify what elements from a
 * json(b) document we want to iterate.
 */

typedef enum JsonToIndex
{
 jtiKey = 0x01,
 jtiString = 0x02,
 jtiNumeric = 0x04,
 jtiBool = 0x08,
 jtiAll = jtiKey | jtiString | jtiNumeric | jtiBool
} JsonToIndex;

/* an action that will be applied to each value in iterate_json(b)_values functions */
typedef void (*JsonIterateStringValuesAction) (void *state, char *elem_value, int elem_len);

/* an action that will be applied to each value in transform_json(b)_values functions */
typedef text *(*JsonTransformStringValuesAction) (void *state, char *elem_value, int elem_len);

/* build a JsonLexContext from a text datum; see also freeJsonLexContext */
extern JsonLexContext *makeJsonLexContext(JsonLexContext *lex, text *json, bool need_escapes);

/* try to parse json, and errsave(escontext) on failure */
extern bool pg_parse_json_or_errsave(JsonLexContext *lex, const JsonSemAction *sem,
          struct Node *escontext);

#define pg_parse_json_or_ereport(lex, sem) \
 (void) pg_parse_json_or_errsave(lex, sem, NULL)

/* save an error during json lexing or parsing */
extern void json_errsave_error(JsonParseErrorType error, JsonLexContext *lex,
          struct Node *escontext);

/* get first JSON token */
extern JsonTokenType json_get_first_token(text *json, bool throw_error);

extern uint32 parse_jsonb_index_flags(Jsonb *jb);
extern void iterate_jsonb_values(Jsonb *jb, uint32 flags, void *state,
         JsonIterateStringValuesAction action);
extern void iterate_json_values(text *json, uint32 flags, void *action_state,
        JsonIterateStringValuesAction action);
extern Jsonb *transform_jsonb_string_values(Jsonb *jsonb, void *action_state,
           JsonTransformStringValuesAction transform_action);
extern text *transform_json_string_values(text *json, void *action_state,
            JsonTransformStringValuesAction transform_action);

/* Type categories returned by json_categorize_type */
typedef enum
{
 JSONTYPE_NULL,    /* null, so we didn't bother to identify */
 JSONTYPE_BOOL,    /* boolean (built-in types only) */
 JSONTYPE_NUMERIC,   /* numeric (ditto) */
 JSONTYPE_DATE,    /* we use special formatting for datetimes */
 JSONTYPE_TIMESTAMP,
 JSONTYPE_TIMESTAMPTZ,
 JSONTYPE_JSON,    /* JSON (and JSONB, if not is_jsonb) */
 JSONTYPE_JSONB,    /* JSONB (if is_jsonb) */
 JSONTYPE_ARRAY,    /* array */
 JSONTYPE_COMPOSITE,   /* composite */
 JSONTYPE_CAST,    /* something with an explicit cast to JSON */
 JSONTYPE_OTHER,    /* all else */
} JsonTypeCategory;

extern void json_categorize_type(Oid typoid, bool is_jsonb,
         JsonTypeCategory *tcategory, Oid *outfuncoid);
extern Datum datum_to_json(Datum val, JsonTypeCategory tcategory,
         Oid outfuncoid);
extern Datum datum_to_jsonb(Datum val, JsonTypeCategory tcategory,
       Oid outfuncoid);
extern Datum jsonb_from_text(text *js, bool unique_keys);

extern Datum json_populate_type(Datum json_val, Oid json_type,
        Oid typid, int32 typmod,
        void **cache, MemoryContext mcxt,
        bool *isnull,
        bool omit_quotes,
        Node *escontext);

#endif

Messung V0.5 in Prozent
C=93 H=95 G=93

¤ Dauer der Verarbeitung: 0.12 Sekunden  (vorverarbeitet am  2026-08-08) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.