1 /*-------------------------------------------------------------------------
4 * Declarations for operations on built-in types.
7 * Portions Copyright (c) 1996-2024, 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 bool domain_check_safe(Datum value
, bool isnull
, Oid domainType
,
32 void **extra
, MemoryContext mcxt
,
34 extern int errdatatype(Oid datatypeOid
);
35 extern int errdomainconstraint(Oid datatypeOid
, const char *conname
);
38 extern uint64
hex_encode(const char *src
, size_t len
, char *dst
);
39 extern uint64
hex_decode(const char *src
, size_t len
, char *dst
);
40 extern uint64
hex_decode_safe(const char *src
, size_t len
, char *dst
,
44 extern int2vector
*buildint2vector(const int16
*int2s
, int n
);
47 extern void namestrcpy(Name name
, const char *str
);
48 extern int namestrcmp(Name name
, const char *str
);
51 extern int16
pg_strtoint16(const char *s
);
52 extern int16
pg_strtoint16_safe(const char *s
, Node
*escontext
);
53 extern int32
pg_strtoint32(const char *s
);
54 extern int32
pg_strtoint32_safe(const char *s
, Node
*escontext
);
55 extern int64
pg_strtoint64(const char *s
);
56 extern int64
pg_strtoint64_safe(const char *s
, Node
*escontext
);
57 extern uint32
uint32in_subr(const char *s
, char **endloc
,
58 const char *typname
, Node
*escontext
);
59 extern uint64
uint64in_subr(const char *s
, char **endloc
,
60 const char *typname
, Node
*escontext
);
61 extern int pg_itoa(int16 i
, char *a
);
62 extern int pg_ultoa_n(uint32 value
, char *a
);
63 extern int pg_ulltoa_n(uint64 value
, char *a
);
64 extern int pg_ltoa(int32 value
, char *a
);
65 extern int pg_lltoa(int64 value
, char *a
);
66 extern char *pg_ultostr_zeropad(char *str
, uint32 value
, int32 minwidth
);
67 extern char *pg_ultostr(char *str
, uint32 value
);
70 extern oidvector
*buildoidvector(const Oid
*oids
, int n
);
71 extern Oid
oidparse(Node
*node
);
72 extern int oid_cmp(const void *p1
, const void *p2
);
75 extern char *regexp_fixed_prefix(text
*text_re
, bool case_insensitive
,
76 Oid collation
, bool *exact
);
79 extern PGDLLIMPORT
bool quote_all_identifiers
;
80 extern const char *quote_identifier(const char *ident
);
81 extern char *quote_qualified_identifier(const char *qualifier
,
83 extern void generate_operator_clause(fmStringInfo buf
,
84 const char *leftop
, Oid leftoptype
,
86 const char *rightop
, Oid rightoptype
);
89 extern int bpchartruelen(char *s
, int len
);
91 /* popular functions from varlena.c */
92 extern text
*cstring_to_text(const char *s
);
93 extern text
*cstring_to_text_with_len(const char *s
, int len
);
94 extern char *text_to_cstring(const text
*t
);
95 extern void text_to_cstring_buffer(const text
*src
, char *dst
, size_t dst_len
);
97 #define CStringGetTextDatum(s) PointerGetDatum(cstring_to_text(s))
98 #define TextDatumGetCString(d) text_to_cstring((text *) DatumGetPointer(d))
101 extern int xidComparator(const void *arg1
, const void *arg2
);
102 extern int xidLogicalComparator(const void *arg1
, const void *arg2
);
104 /* inet_cidr_ntop.c */
105 extern char *pg_inet_cidr_ntop(int af
, const void *src
, int bits
,
106 char *dst
, size_t size
);
108 /* inet_net_pton.c */
109 extern int pg_inet_net_pton(int af
, const char *src
,
110 void *dst
, size_t size
);
113 extern double convert_network_to_scalar(Datum value
, Oid typid
, bool *failure
);
114 extern Datum
network_scan_first(Datum in
);
115 extern Datum
network_scan_last(Datum in
);
116 extern void clean_ipv6_addr(int addr_family
, char *addr
);
119 extern Datum
numeric_float8_no_overflow(PG_FUNCTION_ARGS
);
123 /* Control flags for format_type_extended */
124 #define FORMAT_TYPE_TYPEMOD_GIVEN 0x01 /* typemod defined by caller */
125 #define FORMAT_TYPE_ALLOW_INVALID 0x02 /* allow invalid types */
126 #define FORMAT_TYPE_FORCE_QUALIFY 0x04 /* force qualification of type */
127 #define FORMAT_TYPE_INVALID_AS_NULL 0x08 /* NULL if undefined */
128 extern char *format_type_extended(Oid type_oid
, int32 typemod
, bits16 flags
);
130 extern char *format_type_be(Oid type_oid
);
131 extern char *format_type_be_qualified(Oid type_oid
);
132 extern char *format_type_with_typemod(Oid type_oid
, int32 typemod
);
134 extern int32
type_maximum_size(Oid type_oid
, int32 typemod
);
137 extern char *quote_literal_cstr(const char *rawstr
);
139 #endif /* BUILTINS_H */