4#include <libkern/OSByteOrder.h>
12#include <catalog/pg_type_d.h>
15#if __DCL_HAVE_ALLOC_DEBUG
16#undef __DCL_ALLOC_LEVEL
17#define __DCL_ALLOC_LEVEL __DCL_ALLOC_INTERNAL
25#define __DCL_TRACE0_N __DCL_TRACE0
26#define __DCL_TRACE1_N __DCL_TRACE1
27#define __DCL_TRACE2_N __DCL_TRACE2
28#define __DCL_TRACE3_N __DCL_TRACE3
29#define __DCL_TRACE4_N __DCL_TRACE4
31#define __DCL_TRACE0_N(fmt)
32#define __DCL_TRACE1_N(fmt, arg)
33#define __DCL_TRACE2_N(fmt, arg1, arg2)
34#define __DCL_TRACE3_N(fmt, arg1, arg2, arg3)
35#define __DCL_TRACE4_N(fmt, arg1, arg2, arg3, arg4)
38#if __DCL_HAVE_THIS_FILE__
48static inline char __nibble__(
char _c)
50 if (
'0' <= _c && _c <=
'9')
52 else if (
'a' <= _c && _c <=
'f')
53 return _c -
'a' + (char)10;
54 else if (
'A' <= _c && _c <=
'F')
55 return _c -
'A' + (char)10;
60 const char* _src,
const char*& _srcend,
61 char* _dst,
char*& _dstend
66 if (!(_src && _srcend && _dst && _dstend)) {
76 while (_src + 1 < _srcend && _dst < _dstend) {
78 high = __nibble__(*_src++);
79 if (high == (
char)-1) {
84 low = __nibble__(*_src++);
85 if (low == (
char)-1) {
90 *_dst++ = (high << 4) | low;
98static inline bool __is_first_oct_digit(
char _c)
100 return '0' <= _c && _c <=
'3';
103static inline bool __is_oct_digit(
char _c)
105 return '0' <= _c && _c <=
'7';
109 const char* _src,
const char*& _srcend,
110 char* _dst,
char*& _dstend
115 if (!(_src && _srcend && _dst && _dstend)) {
120 while (_src < _srcend && _dst < _dstend) {
123 if (_src < _srcend) {
128 if ((_src + 3) < _srcend) {
129 if (__is_first_oct_digit(*(_src))
130 && __is_oct_digit(*(_src + 1))
131 && __is_oct_digit(*(_src + 2))
133 unsigned char c = (*_src++ -
'0');
134 c = (c << 3) | (*_src++ -
'0');
135 c = (c << 3) | (*_src++ -
'0');
161static int32_t __fraction_normalize(
long _n)
163 if (_n > 999999999) {
173 return _n * (1000000000 / divider);
177 const char* _s,
const char** _endptr,
206 memset(&_r, 0,
sizeof(_r));
210 char* endptr = (
char*)_s;
213 const char* nptr = endptr;
214 long n = strtol(nptr, &endptr, 10);
215 if (errno == ERANGE) {
221 if (*endptr ==
'-') {
224 else if (*endptr ==
':') {
233 else if (*endptr ==
'B') {
242 state, n, endptr, *endptr ? *endptr :
'$');
245 _r.
year = (int16_t)n;
248 _r.
month = (uint8_t)n;
254 _r.
hour = (uint8_t)n;
263 _r.
frac = __fraction_normalize(n);
266 _r.
tzoff = (int16_t)(n * 60);
269 _r.
tzoff += (int16_t)n;
285 if (*endptr ==
'\0' || state ==
__DONE) {
291 && (*endptr ==
'+' || *endptr ==
'-')
309 const char* _s,
const char** _endptr,
339 memset(&_r, 0,
sizeof(_r));
342 char* endptr = (
char*)_s;
345 const char* nptr = endptr;
346 long n = strtol(nptr, &endptr, 10);
347 if (errno == ERANGE) {
353 state, endptr, (*endptr ? *endptr :
'$'), n);
356 _r.
years = (int32_t)n;
367 _r.
days = (int32_t)n;
373 _r.
hours = (int8_t)n;
382 _r.
fracs = __fraction_normalize(n)
383 * (dotsign ==
'-' ? -1 : 1);
416#define SQLTYPE_NAME(_oid, name) case _oid : return L ## name
528 default:
return L
"Unknown Type (Binary Mapped)";
#define __DCL_ASSERT(expr)
#define __DCL_TRACE4_N(fmt, arg1, arg2, arg3, arg4)
#define SQLTYPE_NAME(_oid, name)
bool __unescape_hex(const char *_src, const char *&_srcend, char *_dst, char *&_dstend)
bool __unescape_oct(const char *_src, const char *&_srcend, char *_dst, char *&_dstend)
bool __decode_timestamp_iso(const char *_s, const char **_endptr, SQL::TimeStamp &_r)
#define __DCL_TRACE1_N(fmt, arg)
bool __decode_interval_iso(const char *_s, const char **_endptr, SQL::Interval &_r)
const wchar_t * __dataTypeName(Oid _oid)
bool __is_hex_escaped(const char *_src)