builtins.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. /*-------------------------------------------------------------------------
  2. *
  3. * builtins.h
  4. * Declarations for operations on built-in types.
  5. *
  6. *
  7. * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
  8. * Portions Copyright (c) 1994, Regents of the University of California
  9. *
  10. * src/include/utils/builtins.h
  11. *
  12. *-------------------------------------------------------------------------
  13. */
  14. #ifndef BUILTINS_H
  15. #define BUILTINS_H
  16. #include "fmgr.h"
  17. #include "nodes/nodes.h"
  18. #include "utils/fmgrprotos.h"
  19. /* Sign + the most decimal digits an 8-byte number could have */
  20. #define MAXINT8LEN 20
  21. /* bool.c */
  22. extern bool parse_bool(const char *value, bool *result);
  23. extern bool parse_bool_with_len(const char *value, size_t len, bool *result);
  24. /* domains.c */
  25. extern void domain_check(Datum value, bool isnull, Oid domainType,
  26. void **extra, MemoryContext mcxt);
  27. extern int errdatatype(Oid datatypeOid);
  28. extern int errdomainconstraint(Oid datatypeOid, const char *conname);
  29. /* encode.c */
  30. extern uint64 hex_encode(const char *src, size_t len, char *dst);
  31. extern uint64 hex_decode(const char *src, size_t len, char *dst);
  32. /* int.c */
  33. extern int2vector *buildint2vector(const int16 *int2s, int n);
  34. /* name.c */
  35. extern void namestrcpy(Name name, const char *str);
  36. extern int namestrcmp(Name name, const char *str);
  37. /* numutils.c */
  38. extern int16 pg_strtoint16(const char *s);
  39. extern int32 pg_strtoint32(const char *s);
  40. extern int64 pg_strtoint64(const char *s);
  41. extern int pg_itoa(int16 i, char *a);
  42. extern int pg_ultoa_n(uint32 l, char *a);
  43. extern int pg_ulltoa_n(uint64 l, char *a);
  44. extern int pg_ltoa(int32 l, char *a);
  45. extern int pg_lltoa(int64 ll, char *a);
  46. extern char *pg_ultostr_zeropad(char *str, uint32 value, int32 minwidth);
  47. extern char *pg_ultostr(char *str, uint32 value);
  48. /* oid.c */
  49. extern oidvector *buildoidvector(const Oid *oids, int n);
  50. extern Oid oidparse(Node *node);
  51. extern int oid_cmp(const void *p1, const void *p2);
  52. /* regexp.c */
  53. extern char *regexp_fixed_prefix(text *text_re, bool case_insensitive,
  54. Oid collation, bool *exact);
  55. /* ruleutils.c */
  56. extern PGDLLIMPORT bool quote_all_identifiers;
  57. extern const char *quote_identifier(const char *ident);
  58. extern char *quote_qualified_identifier(const char *qualifier,
  59. const char *ident);
  60. extern void generate_operator_clause(fmStringInfo buf,
  61. const char *leftop, Oid leftoptype,
  62. Oid opoid,
  63. const char *rightop, Oid rightoptype);
  64. /* varchar.c */
  65. extern int bpchartruelen(char *s, int len);
  66. /* popular functions from varlena.c */
  67. extern text *cstring_to_text(const char *s);
  68. extern text *cstring_to_text_with_len(const char *s, int len);
  69. extern char *text_to_cstring(const text *t);
  70. extern void text_to_cstring_buffer(const text *src, char *dst, size_t dst_len);
  71. #define CStringGetTextDatum(s) PointerGetDatum(cstring_to_text(s))
  72. #define TextDatumGetCString(d) text_to_cstring((text *) DatumGetPointer(d))
  73. /* xid.c */
  74. extern int xidComparator(const void *arg1, const void *arg2);
  75. extern int xidLogicalComparator(const void *arg1, const void *arg2);
  76. /* inet_cidr_ntop.c */
  77. extern char *pg_inet_cidr_ntop(int af, const void *src, int bits,
  78. char *dst, size_t size);
  79. /* inet_net_pton.c */
  80. extern int pg_inet_net_pton(int af, const char *src,
  81. void *dst, size_t size);
  82. /* network.c */
  83. extern double convert_network_to_scalar(Datum value, Oid typid, bool *failure);
  84. extern Datum network_scan_first(Datum in);
  85. extern Datum network_scan_last(Datum in);
  86. extern void clean_ipv6_addr(int addr_family, char *addr);
  87. /* numeric.c */
  88. extern Datum numeric_float8_no_overflow(PG_FUNCTION_ARGS);
  89. /* format_type.c */
  90. /* Control flags for format_type_extended */
  91. #define FORMAT_TYPE_TYPEMOD_GIVEN 0x01 /* typemod defined by caller */
  92. #define FORMAT_TYPE_ALLOW_INVALID 0x02 /* allow invalid types */
  93. #define FORMAT_TYPE_FORCE_QUALIFY 0x04 /* force qualification of type */
  94. #define FORMAT_TYPE_INVALID_AS_NULL 0x08 /* NULL if undefined */
  95. extern char *format_type_extended(Oid type_oid, int32 typemod, bits16 flags);
  96. extern char *format_type_be(Oid type_oid);
  97. extern char *format_type_be_qualified(Oid type_oid);
  98. extern char *format_type_with_typemod(Oid type_oid, int32 typemod);
  99. extern int32 type_maximum_size(Oid type_oid, int32 typemod);
  100. /* quote.c */
  101. extern char *quote_literal_cstr(const char *rawstr);
  102. #endif /* BUILTINS_H */