1 /*-------------------------------------------------------------------------
4 * Declarations for operations on built-in types.
7 * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
8 * Portions Copyright (c) 1994, Regents of the University of California
10 * src/include/utils/builtins.h
12 *-------------------------------------------------------------------------
18 #include "nodes/nodes.h"
19 #include "utils/fmgrprotos.h"
21 /* Sign + the most decimal digits an 8-byte number could have */
25 extern bool parse_bool(const char *value
, bool *result
);
26 extern bool parse_bool_with_len(const char *value
, size_t len
, bool *result
);
29 extern void domain_check(Datum value
, bool isnull
, Oid domainType
,
30 void **extra
, MemoryContext mcxt
);
31 extern int errdatatype(Oid datatypeOid
);
32 extern int errdomainconstraint(Oid datatypeOid
, const char *conname
);
35 extern uint64
hex_encode(const char *src
, size_t len
, char *dst
);
36 extern uint64
hex_decode(const char *src
, size_t len
, char *dst
);
37 extern uint64
hex_decode_safe(const char *src
, size_t len
, char *dst
,
41 extern int2vector
*buildint2vector(const int16
*int2s
, int n
);
44 extern void namestrcpy(Name name
, const char *str
);
45 extern int namestrcmp(Name name
, const char *str
);
48 extern int16
pg_strtoint16(const char *s
);
49 extern int16
pg_strtoint16_safe(const char *s
, Node
*escontext
);
50 extern int32
pg_strtoint32(const char *s
);
51 extern int32
pg_strtoint32_safe(const char *s
, Node
*escontext
);
52 extern int64
pg_strtoint64(const char *s
);
53 extern int64
pg_strtoint64_safe(const char *s
, Node
*escontext
);
54 extern int pg_itoa(int16 i
, char *a
);
55 extern int pg_ultoa_n(uint32 value
, char *a
);
56 extern int pg_ulltoa_n(uint64 value
, char *a
);
57 extern int pg_ltoa(int32 value
, char *a
);
58 extern int pg_lltoa(int64 value
, char *a
);
59 extern char *pg_ultostr_zeropad(char *str
, uint32 value
, int32 minwidth
);
60 extern char *pg_ultostr(char *str
, uint32 value
);
63 extern oidvector
*buildoidvector(const Oid
*oids
, int n
);
64 extern Oid
oidparse(Node
*node
);
65 extern int oid_cmp(const void *p1
, const void *p2
);
68 extern char *regexp_fixed_prefix(text
*text_re
, bool case_insensitive
,
69 Oid collation
, bool *exact
);
72 extern PGDLLIMPORT
bool quote_all_identifiers
;
73 extern const char *quote_identifier(const char *ident
);
74 extern char *quote_qualified_identifier(const char *qualifier
,
76 extern void generate_operator_clause(fmStringInfo buf
,
77 const char *leftop
, Oid leftoptype
,
79 const char *rightop
, Oid rightoptype
);
82 extern int bpchartruelen(char *s
, int len
);
84 /* popular functions from varlena.c */
85 extern text
*cstring_to_text(const char *s
);
86 extern text
*cstring_to_text_with_len(const char *s
, int len
);
87 extern char *text_to_cstring(const text
*t
);
88 extern void text_to_cstring_buffer(const text
*src
, char *dst
, size_t dst_len
);
90 #define CStringGetTextDatum(s) PointerGetDatum(cstring_to_text(s))
91 #define TextDatumGetCString(d) text_to_cstring((text *) DatumGetPointer(d))
94 extern int xidComparator(const void *arg1
, const void *arg2
);
95 extern int xidLogicalComparator(const void *arg1
, const void *arg2
);
97 /* inet_cidr_ntop.c */
98 extern char *pg_inet_cidr_ntop(int af
, const void *src
, int bits
,
99 char *dst
, size_t size
);
101 /* inet_net_pton.c */
102 extern int pg_inet_net_pton(int af
, const char *src
,
103 void *dst
, size_t size
);
106 extern double convert_network_to_scalar(Datum value
, Oid typid
, bool *failure
);
107 extern Datum
network_scan_first(Datum in
);
108 extern Datum
network_scan_last(Datum in
);
109 extern void clean_ipv6_addr(int addr_family
, char *addr
);
112 extern Datum
numeric_float8_no_overflow(PG_FUNCTION_ARGS
);
116 /* Control flags for format_type_extended */
117 #define FORMAT_TYPE_TYPEMOD_GIVEN 0x01 /* typemod defined by caller */
118 #define FORMAT_TYPE_ALLOW_INVALID 0x02 /* allow invalid types */
119 #define FORMAT_TYPE_FORCE_QUALIFY 0x04 /* force qualification of type */
120 #define FORMAT_TYPE_INVALID_AS_NULL 0x08 /* NULL if undefined */
121 extern char *format_type_extended(Oid type_oid
, int32 typemod
, bits16 flags
);
123 extern char *format_type_be(Oid type_oid
);
124 extern char *format_type_be_qualified(Oid type_oid
);
125 extern char *format_type_with_typemod(Oid type_oid
, int32 typemod
);
127 extern int32
type_maximum_size(Oid type_oid
, int32 typemod
);
130 extern char *quote_literal_cstr(const char *rawstr
);
132 #endif /* BUILTINS_H */