diff --git a/nz_include/acPwcache.h b/nz_include/acPwcache.h
new file mode 100644
index 00000000..73122484
--- /dev/null
+++ b/nz_include/acPwcache.h
@@ -0,0 +1,51 @@
+#ifndef ACPWCACHE_INCLUDED
+#define ACPWCACHE_INCLUDED
+
+/*
+ * "C" API for manipulating the password cache
+ *
+ * It is not intended for appcomps code to use this interface directly. Use
+ * the C++ API in acPasswordCache.h.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* lookup the cached password for host and username. Caller must free the
+ * result with free() */
+bool pwcache_lookup_no_resolve(const char *host, const char *username, char **password);
+bool pwcache_lookup(const char *host, const char *username, char **password);
+
+/* remove cached password entry for username and host */
+bool pwcache_delete(const char *host, const char *username);
+
+/* remove all cached password entries */
+bool pwcache_clear();
+
+/* save password for host and username */
+bool pwcache_save(const char *host, const char *username, const char *password);
+
+/* get the current list of hosts/usernames in the cache and return number of
+ * entries, or -1 on error */
+int pwcache_enum(char ***hosts, char ***usernames);
+
+/* free the arrays returned by pwcache_enum */
+void pwcache_free_enum(char **hosts, char **usernames);
+
+/* get the error message for the prior request */
+const char *pwcache_errmsg();
+
+bool pwcache_resetkey(bool none);
+
+/* Control verbose output */
+void pwcache_set_verbose(bool verbose);
+
+/* Control Resolving hostnames */
+void pwcache_set_resolve_mode(bool resolve);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/nz_include/bitarch.h b/nz_include/bitarch.h
new file mode 100755
index 00000000..7762569d
--- /dev/null
+++ b/nz_include/bitarch.h
@@ -0,0 +1,35 @@
+#ifndef _BITARCH_H_
+#define _BITARCH_H_
+/*                                                                    -*-C-*-
+ * (C) Copyright IBM Corp. 2001, 2012  All Rights Reserved.
+ */
+
+/*
+ * Set this to 1 to have 64 bit SPU
+ */
+#ifndef SPU_64BIT
+#define SPU_64BIT 1
+#endif
+
+/*
+ * Set this to 1 for 64 bit HOST.
+ * It's turned off yet but once the host is 64 bit we can turn it on again
+ */
+#ifndef HOST_64BIT
+#define HOST_64BIT 1
+#endif
+
+/* explicitly defined VARHDRSZ */
+
+/*
+ * Check if following items are in sync:
+ * class NzVarlena in nde/misc/geninl.h
+ * class NzVarlena in nde/expr/pgwrap.h
+ * struct varlena in pg/include/c.h
+ * struct varattrib in pg/include/postgres.h
+ */
+
+#define VARLENA_HDR_64BIT 1
+#define VARHDRSZ ((uint32)16)
+
+#endif /* _BITARCH_H_ */
diff --git a/nz_include/c.h b/nz_include/c.h
new file mode 100644
index 00000000..f2abf720
--- /dev/null
+++ b/nz_include/c.h
@@ -0,0 +1,876 @@
+/*-------------------------------------------------------------------------
+ *
+ * c.h
+ *      Fundamental C definitions.  This is included by every .c file in
+ *      PostgreSQL (via either postgres.h or postgres_fe.h, as appropriate).
+ *
+ *      Note that the definitions here are not intended to be exposed to
+ *      clients of the frontend interface libraries --- so we don't worry
+ *      much about polluting the namespace with lots of stuff...
+ *
+ *
+ * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ *-------------------------------------------------------------------------
+ */
+/*
+ *----------------------------------------------------------------
+ *     TABLE OF CONTENTS
+ *
+ *        When adding stuff to this file, please try to put stuff
+ *        into the relevant section, or add new sections as appropriate.
+ *
+ *      section    description
+ *      -------    ------------------------------------------------
+ *        0)        config.h and standard system headers
+ *        1)        hacks to cope with non-ANSI C compilers
+ *        2)        bool, true, false, TRUE, FALSE, NULL
+ *        3)        standard system types
+ *        4)        IsValid macros for system types
+ *        5)        offsetof, lengthof, endof, alignment
+ *        6)        widely useful macros
+ *        7)        random stuff
+ *        8)        system-specific hacks
+ *        9)        assertions
+
+ *
+ * NOTE: since this file is included by both frontend and backend modules,
+ * it's almost certainly wrong to put an "extern" declaration here.
+ * typedefs and macros are the kind of thing that might go here.
+ *
+ *----------------------------------------------------------------
+ */
+#ifndef C_H
+#define C_H
+
+#include "postgres_ext.h"
+
+/* For C++, we want all the ISO C standard macros as well.  */
+#ifndef __STDC_LIMIT_MACROS
+# define __STDC_LIMIT_MACROS
+#endif
+#ifndef __STDC_CONSTANT_MACROS
+# define __STDC_CONSTANT_MACROS
+#endif
+#ifndef __STDC_FORMAT_MACROS
+# define __STDC_FORMAT_MACROS
+#endif
+
+#include "postgres_ext.h"
+
+/* We have to include stdlib.h here because it defines many of these macros
+   on some platforms, and we only want our definitions used if stdlib.h doesn't
+   have its own.  The same goes for stddef and stdarg if present.
+*/
+
+#include "pg_config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stddef.h>
+#include <stdarg.h>
+#include <stdint.h>
+#ifdef STRING_H_WITH_STRINGS_H
+# include <strings.h>
+#endif
+
+#include <errno.h>
+#ifdef __CYGWIN__
+# include <sys/fcntl.h> /* ensure O_BINARY is available */
+#endif
+#ifdef HAVE_SUPPORTDEFS_H
+# include <SupportDefs.h>
+#endif
+
+#ifndef WIN32
+# include "bitarch.h"
+#endif
+
+/* ----------------------------------------------------------------
+ *                Section 1: hacks to cope with non-ANSI C compilers
+ *
+ * type prefixes (const, signed, volatile, inline) are now handled in config.h.
+ * ----------------------------------------------------------------
+ */
+
+/*
+ * CppAsString
+ *        Convert the argument to a string, usingclause the C preprocessor.
+ * CppConcat
+ *        Concatenate two arguments together, usingclause the C preprocessor.
+ *
+ * Note: the standard Autoconf macro AC_C_STRINGIZE actually only checks
+ * whether #identifier works, but if we have that we likely have ## too.
+ */
+#if defined(HAVE_STRINGIZE)
+
+# define CppAsString(identifier) # identifier
+# define CppConcat(x, y)         x##y
+
+#else /* !HAVE_STRINGIZE */
+
+# define CppAsString(identifier) "identifier"
+
+/*
+ * CppIdentity -- On Reiser based cpp's this is used to concatenate
+ *        two tokens.  That is
+ *                CppIdentity(A)B ==> AB
+ *        We renamed it to _private_CppIdentity because it should not
+ *        be referenced outside this file.  On other cpp's it
+ *        produces  A  B.
+ */
+# define _priv_CppIdentity(x)    x
+# define CppConcat(x, y)         _priv_CppIdentity(x) y
+
+#endif /* !HAVE_STRINGIZE */
+
+/*
+ * dummyret is used to set return values in macros that use ?: to make
+ * assignments.  gcc wants these to be void, other compilers like char
+ */
+#ifdef __GNUC__ /* GNU cc */
+# define dummyret void
+#else
+# define dummyret char
+#endif
+
+/*
+ * Append PG_USED_FOR_ASSERTS_ONLY to definitions of variables that are only
+ * used in assert-enabled builds, to avoid compiler warnings about unused
+ * variables in assert-disabled builds.
+ */
+#ifdef USE_ASSERT_CHECKING
+# define PG_USED_FOR_ASSERTS_ONLY
+#else
+# define PG_USED_FOR_ASSERTS_ONLY pg_attribute_unused()
+#endif
+
+#define PG_PRINTF_ATTRIBUTE printf
+/* GCC and XLC support format attributes */
+#if defined(__GNUC__) || defined(__IBMC__)
+# define pg_attribute_format_arg(a) __attribute__((format_arg(a)))
+# define pg_attribute_printf(f, a)  __attribute__((format(PG_PRINTF_ATTRIBUTE, f, a)))
+#else
+# define pg_attribute_format_arg(a)
+# define pg_attribute_printf(f, a)
+#endif
+
+/*
+ * Hints to the compiler about the likelihood of a branch. Both likely() and
+ * unlikely() return the boolean value of the contained expression.
+ *
+ * These should only be used sparingly, in very hot code paths. It's very easy
+ * to mis-estimate likelihoods.
+ */
+#if __GNUC__ >= 3
+# define likely(x)   __builtin_expect((x) != 0, 1)
+# define unlikely(x) __builtin_expect((x) != 0, 0)
+#else
+# define likely(x)   ((x) != 0)
+# define unlikely(x) ((x) != 0)
+#endif
+
+/* ----------------------------------------------------------------
+ *                Section 2:    bool, true, false, TRUE, FALSE, NULL
+ * ----------------------------------------------------------------
+ */
+/*
+ * bool
+ *        Boolean value, either true or false.
+ *
+ */
+
+/* BeOS defines bool already, but the compiler chokes on the
+ * #ifndef unless we wrap it in this check.
+ */
+#ifndef __BEOS__
+
+# ifndef __cplusplus
+#  ifndef bool_defined
+#   define bool_defined
+typedef char bool;
+#  endif /* ndef bool */
+
+#  ifndef true
+#   define true 1
+#  endif
+
+#  ifndef false
+#   define false 0
+#  endif
+# endif /* not C++ */
+
+#endif /* __BEOS__ */
+
+typedef bool *BoolPtr;
+
+#ifndef TRUE
+# define TRUE 1
+#endif
+
+#ifndef FALSE
+# define FALSE 0
+#endif
+
+/*
+ * NULL
+ *        Null pointer.
+ */
+#ifndef NULL
+# define NULL ((void *) 0)
+#endif
+
+/* ----------------------------------------------------------------
+ *                Section 3:    standard system types
+ * ----------------------------------------------------------------
+ */
+
+/*
+ * Pointer
+ *        Variable holding address of any memory resident object.
+ *
+ *        XXX Pointer arithmetic is done with this, so it can't be void *
+ *        under "true" ANSI compilers.
+ */
+typedef char *Pointer;
+
+/*
+ * intN
+ *        Signed integer, EXACTLY N BITS IN SIZE,
+ *        used for numerical computations and the
+ *        frontend/backend protocol.
+ */
+#ifndef __BEOS__ /* this shouldn't be required, but is is! */
+# if !AIX
+typedef signed char int8;   /* == 8 bits */
+typedef signed short int16; /* == 16 bits */
+typedef signed int int32;   /* == 32 bits */
+# endif
+#endif /* __BEOS__ */
+
+/*
+ * uintN
+ *        Unsigned integer, EXACTLY N BITS IN SIZE,
+ *        used for numerical computations and the
+ *        frontend/backend protocol.
+ */
+#ifndef __BEOS__               /* this shouldn't be required, but is is! */
+typedef unsigned char uint8;   /* == 8 bits */
+typedef unsigned short uint16; /* == 16 bits */
+typedef unsigned int uint32;   /* == 32 bits */
+#endif                         /* __BEOS__ */
+
+/*
+ * boolN
+ *        Boolean value, AT LEAST N BITS IN SIZE.
+ */
+typedef uint8 bool8;   /* >= 8 bits */
+typedef uint16 bool16; /* >= 16 bits */
+typedef uint32 bool32; /* >= 32 bits */
+
+/*
+ * bitsN
+ *        Unit of bitwise operation, AT LEAST N BITS IN SIZE.
+ */
+typedef uint8 bits8;   /* >= 8 bits */
+typedef uint16 bits16; /* >= 16 bits */
+typedef uint32 bits32; /* >= 32 bits */
+
+/*
+ * wordN
+ *        Unit of storage, AT LEAST N BITS IN SIZE,
+ *        used to fetch/store data.
+ */
+typedef uint8 word8;   /* >= 8 bits */
+typedef uint16 word16; /* >= 16 bits */
+typedef uint32 word32; /* >= 32 bits */
+
+/*
+ * floatN
+ *        Floating point number, AT LEAST N BITS IN SIZE,
+ *        used for numerical computations.
+ *
+ *        Since sizeof(floatN) may be > sizeof(char *), always pass
+ *        floatN by reference.
+ *
+ * XXX: these typedefs are now deprecated in favor of float4 and float8.
+ * They will eventually go away.
+ */
+typedef float float32data;
+typedef double float64data;
+typedef float *float32;
+typedef double *float64;
+
+/*
+ * 64-bit integers -- use standard types for these
+ */
+typedef int64_t int64;
+typedef uint64_t uint64;
+
+#define INT64CONST(x)  INT64_C(x)
+#define UINT64CONST(x) UINT64_C(x)
+
+/*
+ * Size
+ *        Size of any memory resident object, as returned by sizeof.
+ */
+typedef size_t Size;
+
+/*
+ * Index
+ *        Index into any memory resident array.
+ *
+ * Note:
+ *        Indices are non negative.
+ */
+typedef unsigned int Index;
+
+/*
+ * Offset
+ *        Offset into any memory resident array.
+ *
+ * Note:
+ *        This differs from an Index in that an Index is always
+ *        non negative, whereas Offset may be negative.
+ */
+typedef signed int Offset;
+
+/*
+ * Common Postgres datatype names (as used in the catalogs)
+ */
+typedef char int1;
+typedef int16 int2;
+typedef int32 int4;
+typedef float float4;
+typedef double float8;
+
+typedef int8 timestamp;
+typedef int4 date;
+typedef int4 abstime;
+
+/*
+ * Oid, RegProcedure, TransactionId, CommandId
+ */
+
+/* typedef Oid is in postgres_ext.h */
+
+/* unfortunately, both regproc and RegProcedure are used */
+typedef Oid regproc;
+typedef Oid RegProcedure;
+
+typedef uint32 TransactionId;
+
+#define InvalidTransactionId 0
+
+typedef uint32 CommandId;
+
+#define FirstCommandId 0
+
+/*
+ * Array indexing support
+ */
+#define MAXDIM 6
+typedef struct
+{
+    int indx[MAXDIM];
+} IntArrayMAXDIM; // NZ: blast name conflict
+
+/* ----------------
+ * Variable-length datatypes all share the 'struct varlena' header.
+ *
+ * NOTE: for TOASTable types, this is an oversimplification, since the value
+ * may be compressed or moved out-of-line.  However datatype-specific
+ * routines are mostly content to deal with de-TOASTed values only, and of
+ * course client-side routines should never see a TOASTed value.  See
+ * postgres.h for details of the TOASTed form.
+ * ----------------
+ */
+//  The following items must be in sync:
+//  class NzVarlena in nde/misc/geninl.h
+//  class NzVarlena in nde/expr/pgwrap.h
+//  struct varlena in pg/include/c.h
+//  struct varattrib in pg/include/postgres.h
+//  struct varattrib in udx-source/udx-impls/v2/UDX_Varargs.cpp
+struct varlena
+{
+    int32 vl_len;
+    int32 vl_fixedlen;
+    union
+    {
+        char *vl_ptr;
+        int64 vl_align; // allow for 64bit pointers
+    };
+    char vl_dat[1];
+};
+
+/*
+ * These widely-used datatypes are just a varlena header and the data bytes.
+ * There is no terminating null or anything like that --- the data length is
+ * always VARSIZE(ptr) - VARHDRSZ.
+ */
+typedef struct varlena bytea;
+typedef struct varlena text;
+typedef struct varlena BpChar;  /* blank-padded char, ie SQL char(n) */
+typedef struct varlena VarChar; /* var-length char, ie SQL varchar(n) */
+typedef struct varlena VarBin;  /* var-length binary, ie SQL varbin(n) */
+typedef struct varlena *JsonPtr;
+typedef struct _Jsonb *JsonbPtr;
+typedef struct _JsonPath *JsonPathPtr;
+/*
+ * Fixed-length array types (these are not varlena's!)
+ */
+
+typedef int2 int2vector[INDEX_MAX_KEYS];
+typedef Oid oidvector[INDEX_MAX_KEYS];
+
+/*
+ * We want NameData to have length NAMEDATALEN and int alignment,
+ * because that's how the data type 'name' is defined in pg_type.
+ * Use a union to make sure the compiler agrees.
+ */
+typedef union nameData
+{
+    char data[NAMEDATALEN];
+    int alignmentDummy;
+} NameData;
+typedef NameData *Name;
+
+#define NameStr(name) ((name).data)
+
+/*
+ * stdint.h limits aren't guaranteed to be present and aren't guaranteed to
+ * have compatible types with our fixed width types. So just define our own.
+ */
+#define PG_INT8_MIN   (-0x7F - 1)
+#define PG_INT8_MAX   (0x7F)
+#define PG_UINT8_MAX  (0xFF)
+#define PG_INT16_MIN  (-0x7FFF - 1)
+#define PG_INT16_MAX  (0x7FFF)
+#define PG_UINT16_MAX (0xFFFF)
+#define PG_INT32_MIN  (-0x7FFFFFFF - 1)
+#define PG_INT32_MAX  (0x7FFFFFFF)
+#define PG_UINT32_MAX (0xFFFFFFFFU)
+#define PG_INT64_MIN  (-INT64CONST(0x7FFFFFFFFFFFFFFF) - 1)
+#define PG_INT64_MAX  INT64CONST(0x7FFFFFFFFFFFFFFF)
+#define PG_UINT64_MAX UINT64CONST(0xFFFFFFFFFFFFFFFF)
+
+/* ----------------------------------------------------------------
+ *                Section 4:    IsValid macros for system types
+ * ----------------------------------------------------------------
+ */
+/*
+ * BoolIsValid
+ *        True iff bool is valid.
+ */
+#define BoolIsValid(boolean) ((boolean) == false || (boolean) == true)
+
+/*
+ * PointerIsValid
+ *        True iff pointer is valid.
+ */
+#define PointerIsValid(pointer) ((void *) (pointer) != NULL)
+
+/*
+ * PointerIsAligned
+ *        True iff pointer is properly aligned to point to the given type.
+ */
+#define PointerIsAligned(pointer, type) (((intptr_t) (pointer) % (sizeof(type))) == 0)
+
+#define OidIsValid(objectId) ((bool) ((objectId) != InvalidOid))
+
+#define RegProcedureIsValid(p) OidIsValid(p)
+
+/* ----------------------------------------------------------------
+ *                Section 5:    offsetof, lengthof, endof, alignment
+ * ----------------------------------------------------------------
+ */
+/*
+ * offsetof
+ *        Offset of a structure/union field within that structure/union.
+ *
+ *        XXX This is supposed to be part of stddef.h, but isn't on
+ *        some systems (like SunOS 4).
+ */
+#ifndef offsetof
+# define offsetof(type, field) ((long) &((type *) 0)->field)
+#endif /* offsetof */
+
+/*
+ * lengthof
+ *        Number of elements in an array.
+ */
+#ifndef lengthof
+# define lengthof(array) (sizeof(array) / sizeof((array)[0]))
+#endif
+
+/*
+ * endof
+ *        Address of the element one past the last in an array.
+ */
+#ifndef endof
+# define endof(array) (&array[lengthof(array)])
+#endif
+
+/* ----------------
+ * Alignment macros: align a length or address appropriately for a given type.
+ *
+ * There used to be some incredibly crufty platform-dependent hackery here,
+ * but now we rely on the configure script to get the info for us. Much nicer.
+ *
+ * NOTE: TYPEALIGN will not work if ALIGNVAL is not a power of 2.
+ * That case seems extremely unlikely to occur in practice, however.
+ * ----------------
+ */
+
+#define TYPEALIGN(ALIGNVAL, LEN) \
+ (((intptr_t) (LEN) + (ALIGNVAL - 1)) & ~((intptr_t) (ALIGNVAL - 1)))
+
+#define SHORTALIGN(LEN)  TYPEALIGN(ALIGNOF_SHORT, (LEN))
+#define INTALIGN(LEN)    TYPEALIGN(ALIGNOF_INT, (LEN))
+#define LONGALIGN(LEN)   TYPEALIGN(ALIGNOF_LONG, (LEN))
+#define DOUBLEALIGN(LEN) TYPEALIGN(ALIGNOF_DOUBLE, (LEN))
+#define MAXALIGN(LEN)    TYPEALIGN(MAXIMUM_ALIGNOF, (LEN))
+
+/* ----------------------------------------------------------------
+ *                Section 6:    widely useful macros
+ * ----------------------------------------------------------------
+ */
+/*
+ * Max
+ *        Return the maximum of two numbers.
+ */
+#define Max(x, y) ((x) > (y) ? (x) : (y))
+
+/*
+ * Min
+ *        Return the minimum of two numbers.
+ */
+#define Min(x, y) ((x) < (y) ? (x) : (y))
+
+/*
+ * Abs
+ *        Return the absolute value of the argument.
+ */
+#define Abs(x) ((x) >= 0 ? (x) : -(x))
+
+/* Get a bit mask of the bits set in non-int32 aligned addresses */
+#define INT_ALIGN_MASK (sizeof(int32) - 1)
+
+/* Get a bit mask of the bits set in non-long aligned addresses */
+#define LONG_ALIGN_MASK (sizeof(long) - 1)
+
+/*
+ * MemSet
+ *    Exactly the same as standard library function memset(), but considerably
+ *    faster for zeroing small word-aligned structures (such as parsetree nodes).
+ *    This has to be a macro because the main point is to avoid function-call
+ *    overhead.
+ *
+ *    We got the 64 number by testing this against the stock memset() on
+ *    BSD/OS 3.0. Larger values were slower.    bjm 1997/09/11
+ *
+ *    I think the crossover point could be a good deal higher for
+ *    most platforms, actually.  tgl 2000-03-19
+ */
+#ifdef MemSet
+# undef MemSet
+#endif
+#define MemSet(start, val, len)                                                               \
+ do {                                                                                         \
+  char *_start = (char *) (start);                                                            \
+  int _val = (val);                                                                           \
+  Size _len = (len);                                                                          \
+                                                                                              \
+  if ((((long) _start) & INT_ALIGN_MASK) == 0 && (_len & INT_ALIGN_MASK) == 0 && _val == 0 && \
+      _len <= MEMSET_LOOP_LIMIT) {                                                            \
+   int32 *_p = (int32 *) _start;                                                              \
+   int32 *_stop = (int32 *) (_start + _len);                                                  \
+   while (_p < _stop)                                                                         \
+    *_p++ = 0;                                                                                \
+  } else                                                                                      \
+   memset(_start, _val, _len);                                                                \
+ } while (0)
+
+/*
+ * MemSetAligned is the same as MemSet except it omits the test to see if
+ * "start" is word-aligned.  This is okay to use if the caller knows a-priori
+ * that the pointer is suitably aligned (typically, because he just got it
+ * from palloc(), which always delivers a max-aligned pointer).
+ */
+#define MemSetAligned(start, val, len)                                           \
+ do {                                                                            \
+  long *_start = (long *) (start);                                               \
+  int _val = (val);                                                              \
+  Size _len = (len);                                                             \
+                                                                                 \
+  if ((_len & LONG_ALIGN_MASK) == 0 && _val == 0 && _len <= MEMSET_LOOP_LIMIT && \
+      MEMSET_LOOP_LIMIT != 0) {                                                  \
+   long *_stop = (long *) ((char *) _start + _len);                              \
+   while (_start < _stop)                                                        \
+    *_start++ = 0;                                                               \
+  } else                                                                         \
+   memset(_start, _val, _len);                                                   \
+ } while (0)
+
+#define MEMSET_LOOP_LIMIT 64
+
+/* ----------------------------------------------------------------
+ *                Section 7:    random stuff
+ * ----------------------------------------------------------------
+ */
+
+/* msb for char */
+#define CSIGNBIT           (0x80)
+#define IS_HIGHBIT_SET(ch) ((unsigned char) (ch) &CSIGNBIT)
+
+#define STATUS_OK           (0)
+#define STATUS_ERROR        (-1)
+#define STATUS_NOT_FOUND    (-2)
+#define STATUS_INVALID      (-3)
+#define STATUS_UNCATALOGUED (-4)
+#define STATUS_REPLACED     (-5)
+#define STATUS_NOT_DONE     (-6)
+#define STATUS_BAD_PACKET   (-7)
+#define STATUS_TIMEOUT      (-8)
+#define STATUS_FOUND        (1)
+
+/*
+ * Macro that allows to cast constness and volatile away from an expression, but doesn't
+ * allow changing the underlying type.  Enforcement of the latter
+ * currently only works for gcc like compilers.
+ *
+ * Please note IT IS NOT SAFE to cast constness away if the result will ever
+ * be modified (it would be undefined behaviour). Doing so anyway can cause
+ * compiler misoptimizations or runtime crashes (modifying readonly memory).
+ * It is only safe to use when the result will not be modified, but API
+ * design or language restrictions prevent you from declaring that
+ * (e.g. because a function returns both const and non-const variables).
+ *
+ * Note that this only works in function scope, not for global variables (it'd
+ * be nice, but not trivial, to improve that).
+ */
+#if defined(HAVE__BUILTIN_TYPES_COMPATIBLE_P)
+# define unconstify(underlying_type, expr)                                               \
+  (StaticAssertExpr(__builtin_types_compatible_p(__typeof(expr), const underlying_type), \
+                    "wrong cast"),                                                       \
+   (underlying_type) (expr))
+# define unvolatize(underlying_type, expr)                                                  \
+  (StaticAssertExpr(__builtin_types_compatible_p(__typeof(expr), volatile underlying_type), \
+                    "wrong cast"),                                                          \
+   (underlying_type) (expr))
+#else
+# define unconstify(underlying_type, expr) ((underlying_type) (expr))
+# define unvolatize(underlying_type, expr) ((underlying_type) (expr))
+#endif
+
+/* ----------------------------------------------------------------
+ *                Section 8: system-specific hacks
+ *
+ *        This should be limited to things that absolutely have to be
+ *        included in every source file.  The port-specific header file
+ *        is usually a better place for this sort of thing.
+ * ----------------------------------------------------------------
+ */
+
+#ifdef __CYGWIN__
+# define PG_BINARY   O_BINARY
+# define PG_BINARY_R "rb"
+# define PG_BINARY_W "wb"
+#else
+# define PG_BINARY   0
+# define PG_BINARY_R "r"
+# define PG_BINARY_W "w"
+#endif
+
+#if defined(linux)
+# include <unistd.h>
+#endif
+
+#if defined(sun) && defined(__sparc__) && !defined(__SVR4)
+# include <unistd.h>
+#endif
+
+/* These are for things that are one way on Unix and another on NT */
+#define NULL_DEV "/dev/null"
+#define SEP_CHAR '/'
+
+/* defines for dynamic linking on Win32 platform */
+#ifdef __CYGWIN__
+# if __GNUC__ && !defined(__declspec)
+#  error You need egcs 1.1 or newer for compiling!
+# endif
+# ifdef BUILDING_DLL
+#  define DLLIMPORT __declspec(dllexport)
+# else /* not BUILDING_DLL */
+#  define DLLIMPORT __declspec(dllimport)
+# endif
+#else /* not CYGWIN */
+# define DLLIMPORT
+#endif
+
+/* Provide prototypes for routines not present in a particular machine's
+ * standard C library.    It'd be better to put these in config.h, but
+ * in config.h we haven't yet included anything that defines size_t...
+ */
+
+#ifndef HAVE_SNPRINTF_DECL
+extern int snprintf(char *str, size_t count, const char *fmt, ...);
+
+#endif
+
+#ifndef HAVE_VSNPRINTF_DECL
+extern int vsnprintf(char *str, size_t count, const char *fmt, va_list args);
+
+#endif
+
+#if !defined(HAVE_MEMMOVE) && !defined(memmove)
+# define memmove(d, s, c) bcopy(s, d, c)
+#endif
+
+/* ----------------------------------------------------------------
+ *                Section 9:    exception handling definitions
+ *                        Assert, Trap, etc macros
+ * ----------------------------------------------------------------
+ */
+
+typedef char *ExcMessage;
+
+typedef struct Exception
+{
+    ExcMessage message;
+} Exception;
+
+extern Exception FailedAssertion;
+extern Exception BadArg;
+extern Exception BadState;
+extern Exception VarTagError;
+
+extern bool assert_enabled;
+extern bool log_mask_all_strings;
+
+extern int ExceptionalCondition(const char *conditionName,
+                                Exception *exceptionP,
+                                const char *details,
+                                const char *fileName,
+                                int lineNumber);
+
+/*
+ * USE_ASSERT_CHECKING, if defined, turns on all the assertions.
+ * - plai  9/5/90
+ *
+ * It should _NOT_ be defined in releases or in benchmark copies
+ */
+
+/*
+ * Trap
+ *        Generates an exception if the given condition is true.
+ *
+ */
+#define Trap(condition, exception)                                                       \
+ do {                                                                                    \
+  if ((assert_enabled) && (condition))                                                   \
+   ExceptionalCondition(CppAsString(condition), &(exception), NULL, __FILE__, __LINE__); \
+ } while (0)
+
+/*
+ *    TrapMacro is the same as Trap but it's intended for use in macros:
+ *
+ *        #define foo(x) (AssertM(x != 0) && bar(x))
+ *
+ *    Isn't CPP fun?
+ */
+#define TrapMacro(condition, exception)        \
+ ((bool) ((!assert_enabled) || !(condition) || \
+          (ExceptionalCondition(CppAsString(condition), &(exception), NULL, __FILE__, __LINE__))))
+
+#ifndef USE_ASSERT_CHECKING
+# define Assert(condition)
+# define AssertMacro(condition) ((void) true)
+# define AssertArg(condition)
+# define AssertState(condition)
+# define assert_enabled 0
+
+#elif defined(FRONTEND)
+
+# include <assert.h>
+# define Assert(p)                         assert(p)
+# define AssertMacro(p)                    ((void) assert(p))
+# define AssertArg(condition)              assert(condition)
+# define AssertState(condition)            assert(condition)
+# define AssertPointerAlignment(ptr, bndr) ((void) true)
+
+#else
+# define Assert(condition) Trap(!(condition), FailedAssertion)
+
+# define AssertMacro(condition) ((void) TrapMacro(!(condition), FailedAssertion))
+
+# define AssertArg(condition) Trap(!(condition), BadArg)
+
+# define AssertState(condition) Trap(!(condition), BadState)
+
+#endif /* USE_ASSERT_CHECKING */
+
+/*
+ * LogTrap
+ *        Generates an exception with a message if the given condition is true.
+ *
+ */
+#define LogTrap(condition, exception, printArgs) \
+ do {                                            \
+  if ((assert_enabled) && (condition))           \
+   ExceptionalCondition(CppAsString(condition),  \
+                        &(exception),            \
+                        vararg_format printArgs, \
+                        __FILE__,                \
+                        __LINE__);               \
+ } while (0)
+
+/*
+ *    LogTrapMacro is the same as LogTrap but it's intended for use in macros:
+ *
+ *        #define foo(x) (LogAssertMacro(x != 0, "yow!") && bar(x))
+ */
+#define LogTrapMacro(condition, exception, printArgs)    \
+ ((bool) ((!assert_enabled) || !(condition) ||           \
+          (ExceptionalCondition(CppAsString(condition),  \
+                                &(exception),            \
+                                vararg_format printArgs, \
+                                __FILE__,                \
+                                __LINE__))))
+
+extern char *vararg_format(const char *fmt, ...);
+
+#ifndef USE_ASSERT_CHECKING
+# define LogAssert(condition, printArgs)
+# define LogAssertMacro(condition, printArgs) true
+# define LogAssertArg(condition, printArgs)
+# define LogAssertState(condition, printArgs)
+#else
+# define LogAssert(condition, printArgs) LogTrap(!(condition), FailedAssertion, printArgs)
+
+# define LogAssertMacro(condition, printArgs) LogTrapMacro(!(condition), FailedAssertion, printArgs)
+
+# define LogAssertArg(condition, printArgs) LogTrap(!(condition), BadArg, printArgs)
+
+# define LogAssertState(condition, printArgs) LogTrap(!(condition), BadState, printArgs)
+
+# ifdef ASSERT_CHECKING_TEST
+extern int assertTest(int val);
+
+# endif
+
+#endif /* USE_ASSERT_CHECKING */
+
+#ifdef __cplusplus /* NZ */
+# define CEXTERN extern "C"
+#else
+# define CEXTERN extern
+#endif
+
+/* ----------------
+ *        end of c.h
+ * ----------------
+ */
+#endif /* C_H */
diff --git a/nz_include/comtypes.h b/nz_include/comtypes.h
new file mode 100644
index 00000000..771f2fea
--- /dev/null
+++ b/nz_include/comtypes.h
@@ -0,0 +1,85 @@
+// comtypes.h
+//
+// definitions of fundamental types shared across pg and nz
+//
+// This header file is included in many other include files system-wide, so
+// any additions to it must be applicable to a very wide variety of
+// situations.
+//
+// NOTE TO DEVELOPERS:
+//
+// Please be careful about what you add to this file. Changes to this file
+// impact almost every other source file in the system.
+//
+// (C) Copyright IBM Corp. 2002, 2011  All Rights Reserved.
+
+#ifndef COMTYPES_H_
+#define COMTYPES_H_
+
+#include <inttypes.h>
+
+/*
+ * :host64: When Oid was declared as unsigned int here we are allocation
+ * always an array of 12 chars.
+ * The value numeric_limits<unsigned int>::max() is: 4294967295. We might have
+ * negative values, so:
+ * - 1 for the sign,
+ * - 10 for the number
+ * - 1 from '\0'
+ * TOTAL: 12.
+ *
+ * Now that we have unsigned long int we need to change this value.
+ * - numeric_limits<unsigned long>::max() is: 18446744073709551615 ==> 20 (no sign)
+ * - numeric_limits<long>::max() is:           9223372036854775807 ==> 19.(with sign)
+ * - we need one for the sign (if signed)
+ * - we need one for '\0'
+ * TOTAL: 21.
+ */
+
+// :host64:
+typedef unsigned int INTERNALOID;
+typedef INTERNALOID Oid;
+
+// :host64: we moved it from postgres_ext.h to have Oid and OID_MAX in one place
+#define OID_MAX UINT_MAX
+
+#define OIDMAXLENGTH 12 /* ((1)+(10)+(1)) */
+
+// :host64: we want to add a standard way to print-scan basic types in Postgres
+// in a sort of standard way. We use the same approach used by inttypes.h.
+
+#define __PRI0id_PREFIX /* For 64-bit: "l" */
+
+#define PRI0id __PRI0id_PREFIX "u"
+// "PRI0id"
+
+#define __PRIx_PREFIXZERO "8" /* For 64bit: "16" */
+
+#define PRIx0id "0" __PRIx_PREFIXZERO __PRI0id_PREFIX "x"
+#define PRIX0id "0" __PRIx_PREFIXZERO __PRI0id_PREFIX "X"
+// "PRIx0id"
+
+typedef uintptr_t Datum;
+
+/*
+ * We need a #define symbol for sizeof(Datum) for use in some #if tests.
+ */
+#ifdef __x86_64__
+# define SIZEOF_DATUM 8
+#else
+# define SIZEOF_DATUM 4
+#endif
+
+/*
+ * To stay backward compatible with older kits.
+ * This is used for storing consts in Datum by value
+ * for types other than INT8, at least currently.
+ *
+ */
+enum
+{
+    LegacyCompatibleDatumSize = 4
+};
+
+#define SIZEOF_VOID_P SIZEOF_DATUM
+#endif /* COMTYPES_H_ */
diff --git a/nz_include/libpq-fe.h b/nz_include/libpq-fe.h
new file mode 100644
index 00000000..8ee9806d
--- /dev/null
+++ b/nz_include/libpq-fe.h
@@ -0,0 +1,508 @@
+/*-------------------------------------------------------------------------
+ *
+ * libpq-fe.h
+ *	  This file contains definitions for structures and
+ *	  externs for functions used by frontend postgres applications.
+ *
+ * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#ifndef LIBPQ_FE_H
+#define LIBPQ_FE_H
+
+#ifdef __cplusplus
+extern		"C"
+{
+#endif
+
+#include <stdio.h>
+#include <openssl/ssl.h>
+
+/* postgres_ext.h defines the backend's externally visible types,
+ * such as Oid.
+ */
+#include "postgres_ext.h"
+#include "c.h"
+#include "acPwcache.h"
+
+/* Application-visible enum types */
+
+	typedef enum
+	{
+
+		/*
+		 * Although you may decide to change this list in some way, values
+		 * which become unused should never be removed, nor should
+		 * constants be redefined - that would break compatibility with
+		 * existing code.
+		 */
+		CONNECTION_OK,
+		CONNECTION_BAD,
+        CONNECTION_TERM,        /* connection terminated by host */
+		/* Non-blocking mode only below here */
+
+		/*
+		 * The existence of these should never be relied upon - they
+		 * should only be used for user feedback or similar purposes.
+		 */
+		CONNECTION_STARTED,		/* Waiting for connection to be made.    */
+		CONNECTION_MADE,		/* Connection OK; waiting to send.	     */
+		CONNECTION_STARTUP,		/* Connection OK; use startup packet     */
+		CONNECTION_HANDSHAKE,	/* Connection OK; use handshake protocol */
+		CONNECTION_CLIENT_REQUEST, 	/* Connection OK; use handshake protocol */
+		CONNECTION_CLIENT_RESPONSE,	/* Connection OK; use handshake protocol */
+		CONNECTION_SERVER_REQUEST, 	/* Connection OK; use handshake protocol */
+		CONNECTION_SERVER_RESPONSE,	/* Connection OK; use handshake protocol */
+		CONNECTION_AWAITING_RESPONSE,	/* Waiting for a response from the
+										 * postmaster.		  */
+        CONNECTION_SSL_REQUEST,     /* Connection OK; use handshake protocol */
+        CONNECTION_SSL_RESPONSE,    /* Connection OK; use handshake protocol */
+		CONNECTION_SSL_CONNECTING,  /* Connection OK; use handshake protocol */
+		CONNECTION_AUTH_OK,		/* Received authentication; waiting for
+								 * backend startup. */
+		CONNECTION_SETENV		/* Negotiating environment.    */
+	} ConnStatusType;
+
+	typedef enum
+	{
+		PGRES_POLLING_FAILED = 0,
+		PGRES_POLLING_READING,	/* These two indicate that one may	  */
+		PGRES_POLLING_WRITING,	/* use select before polling again.   */
+		PGRES_POLLING_OK,
+		PGRES_POLLING_ACTIVE	/* Can call poll function immediately. */
+	} PostgresPollingStatusType;
+
+	typedef enum
+	{
+		PGRES_EMPTY_QUERY = 0,
+		PGRES_COMMAND_OK,		/* a query command that doesn't return
+								 * anything was executed properly by the
+								 * backend */
+		PGRES_TUPLES_OK,		/* a query command that returns tuples was
+								 * executed properly by the backend,
+								 * PGresult contains the result tuples */
+		PGRES_COPY_OUT,			/* Copy Out data transfer in progress */
+		PGRES_COPY_IN,			/* Copy In data transfer in progress */
+		PGRES_BAD_RESPONSE,		/* an unexpected response was recv'd from
+								 * the backend */
+		PGRES_NONFATAL_ERROR,
+		PGRES_FATAL_ERROR,
+		PGRES_FATAL_ERROR_TERM
+	} ExecStatusType;
+
+typedef enum
+{
+	PQSHOW_CONTEXT_NEVER,		/* never show CONTEXT field */
+	PQSHOW_CONTEXT_ERRORS,		/* show CONTEXT for errors only (default) */
+	PQSHOW_CONTEXT_ALWAYS		/* always show CONTEXT field */
+} PGContextVisibility;
+
+typedef enum
+{
+	PQERRORS_TERSE,				/* single-line error messages */
+	PQERRORS_DEFAULT,			/* recommended style */
+	PQERRORS_VERBOSE,			/* all the facts, ma'am */
+	PQERRORS_SQLSTATE			/* only error severity and SQLSTATE code */
+} PGVerbosity;
+
+/* PGconn encapsulates a connection to the backend.
+ * The contents of this struct are not supposed to be known to applications.
+ */
+	typedef struct pg_conn PGconn;
+
+/* PGresult encapsulates the result of a query (or more precisely, of a single
+ * SQL command --- a query string given to PQsendQuery can contain multiple
+ * commands and thus return multiple PGresult objects).
+ * The contents of this struct are not supposed to be known to applications.
+ */
+	typedef struct pg_result PGresult;
+
+/* PGnotify represents the occurrence of a NOTIFY message.
+ * Ideally this would be an opaque typedef, but it's so simple that it's
+ * unlikely to change.
+ * NOTE: in Postgres 6.4 and later, the be_pid is the notifying backend's,
+ * whereas in earlier versions it was always your own backend's PID.
+ */
+	typedef struct pgNotify
+	{
+		char		relname[NAMEDATALEN];		/* name of relation
+												 * containing data */
+		int			be_pid;		/* process id of backend */
+	} PGnotify;
+
+/* PQnoticeProcessor is the function type for the notice-message callback.
+ */
+	typedef void (*PQnoticeProcessor) (void *arg, const char *message);
+
+/* Print options for PQprint() */
+	typedef char pqbool;
+
+	typedef struct _PQprintOpt
+	{
+		pqbool		header;		/* print output field headings and row
+								 * count */
+		pqbool		align;		/* fill align the fields */
+		pqbool		standard;	/* old brain dead format */
+		pqbool		html3;		/* output html tables */
+		pqbool		expanded;	/* expand tables */
+		pqbool		pager;		/* use pager for output if needed */
+		char	   *fieldSep;	/* field separator */
+		char	   *tableOpt;	/* insert to HTML <table ...> */
+		char	   *caption;	/* HTML <caption> */
+		char	  **fieldName;	/* null terminated array of repalcement
+								 * field names */
+	} PQprintOpt;
+
+/* ----------------
+ * Structure for the conninfo parameter definitions returned by PQconndefaults
+ *
+ * All fields except "val" point at static strings which must not be altered.
+ * "val" is either NULL or a malloc'd current-value string.  PQconninfoFree()
+ * will release both the val strings and the PQconninfoOption array itself.
+ * ----------------
+ */
+	typedef struct _PQconninfoOption
+	{
+		const char	   *keyword;	/* The keyword of the option			*/
+		const char	   *envvar;		/* Fallback environment variable name	*/
+		const char	   *compiled;	/* Fallback compiled in default value	*/
+		char	   *val;		/* Option's current value, or NULL		 */
+		const char	   *label;		/* Label for field in connect dialog	*/
+		const char	   *dispchar;	/* Character to display for this field in
+								 * a connect dialog. Values are: ""
+								 * Display entered value as is "*"
+								 * Password field - hide value "D"	Debug
+								 * option - don't show by default */
+		int			dispsize;	/* Field size in characters for dialog	*/
+	} PQconninfoOption;
+
+/* ----------------
+ * PQArgBlock -- structure for PQfn() arguments
+ * ----------------
+ */
+	typedef struct
+	{
+		int			len;
+		int			isint;
+		union
+		{
+			int		   *ptr;	/* can't use void (dec compiler barfs)	 */
+			int			integer;
+		}			u;
+	} PQArgBlock;
+
+/* ----------------
+ * AddOpt -- Additional options passed by nzsql
+ * ----------------
+ */
+typedef struct
+{
+	int         securityLevel;
+	char        *caCertFile;
+} AddOpt;
+
+/* ----------------
+ * Exported functions of libpq
+ * ----------------
+ */
+
+/* ===	in fe-connect.c === */
+
+	/* make a new client connection to the backend */
+
+	/* Asynchronous (non-blocking) */
+	extern PGconn *PQconnectStart(const char *conninfo);
+	extern void    PQfreeconnection(PGconn *conn);
+	extern PostgresPollingStatusType PQconnectPoll(PGconn *conn);
+	/* Synchronous (blocking) */
+	extern PGconn *PQconnectdb(const char *conninfo);
+	extern PGconn *PQsetdbLogin(const char *pghost, const char *pgport,
+				    const char *pgoptions, const char *pgtty,
+				    const char *dbName, const char *login,
+				    const char *pwd, const AddOpt* add_opt,
+				    const bool quiet, const bool admin_mode,
+				    const bool noPassword);
+#define PQsetdb(M_PGHOST,M_PGPORT,M_PGOPT,M_PGTTY,M_DBNAME)  \
+	PQsetdbLogin(M_PGHOST, M_PGPORT, M_PGOPT, M_PGTTY, M_DBNAME, NULL, NULL)
+
+	extern PGconn *PQsetdbLoginTermOld(const char *pghost, const char *pgport,
+                                       const char *pgoptions, const char *pgtty,
+                                       const char *dbName,
+                                       const char *login, const char *pwd, const int prevPid,
+                                       const int secLevel, const char *caCertfile,
+                                       const char *priorUser, const char *priorPwd,
+                                       const bool quiet);
+
+	/* close the current connection and free the PGconn data structure */
+	extern void PQfinish(PGconn *conn);
+
+	/* get info about connection options known to PQconnectdb */
+	extern PQconninfoOption *PQconndefaults(void);
+
+	/* free the data structure returned by PQconndefaults() */
+	extern void PQconninfoFree(PQconninfoOption *connOptions);
+
+	/*
+	 * close the current connection and restablish a new one with the same
+	 * parameters
+	 */
+	/* Asynchronous (non-blocking) */
+	extern int	PQresetStart(PGconn *conn);
+	extern PostgresPollingStatusType PQresetPoll(PGconn *conn);
+	/* Synchronous (blocking) */
+	extern void PQreset(PGconn *conn);
+
+	/* issue a cancel request */
+	extern int	PQrequestCancel(PGconn *conn);
+
+	/* Accessor functions for PGconn objects */
+	extern char *PQdb(const PGconn *conn);
+	extern char *PQuser(const PGconn *conn);
+	extern void  PQsetdbname(PGconn *conn, const char* dbname);
+	extern void  PQsetusername(PGconn *conn, const char* username);
+	extern char *PQpass(const PGconn *conn);
+	extern char *PQhost(const PGconn *conn);
+	extern char *PQport(const PGconn *conn);
+	extern char *PQtty(const PGconn *conn);
+	extern char *PQoptions(const PGconn *conn);
+	extern ConnStatusType PQstatus(const PGconn *conn);
+	extern const char *PQerrorMessage(const PGconn *conn);
+    extern void PQresetErrorMessage(PGconn *conn);
+	extern int	PQsocket(const PGconn *conn);
+	extern int	PQbackendPID(const PGconn *conn);
+	extern int	PQsetNzEncoding(PGconn *conn, const int nz_encoding);
+    extern int  PQsetLoadReplayRegion(PGconn *conn, const int64 regionSize);
+	extern int	PQclientEncoding(const PGconn *conn);
+	extern int	PQsetClientEncoding(PGconn *conn, const char *encoding);
+	/* Get the SSL structure associated with a connection */
+	extern SSL  *PQgetssl(PGconn *conn);
+	/* To check for a NULL return */
+	const char* SSLcheckError();
+
+	/* Enable/disable tracing */
+	extern void PQtrace(PGconn *conn, FILE *debug_port);
+	extern void PQuntrace(PGconn *conn);
+
+	/* Override default notice processor */
+	extern PQnoticeProcessor PQsetNoticeProcessor(PGconn *conn, PQnoticeProcessor proc, void *arg);
+
+/* === in fe-exec.c === */
+
+	/* Simple synchronous query */
+	extern PGresult *PQexec(PGconn *conn, const char *query);
+    extern PGresult *PQbatchexec(PGconn *conn, const char *query,
+                                 int batch_rowset);
+	extern PGnotify *PQnotifies(PGconn *conn);
+
+	/* Interface for multiple-result or asynchronous queries */
+	extern int	PQsendQuery(PGconn *conn, const char *query);
+	extern PGresult *PQgetResult(PGconn *conn);
+
+	/* Routines for managing an asychronous query */
+	extern int	PQisBusy(PGconn *conn);
+	extern int	PQconsumeInput(PGconn *conn);
+
+	/* Routines for copy in/out */
+	extern int	PQgetline(PGconn *conn, char *string, int length);
+	extern int	PQputline(PGconn *conn, const char *string);
+	extern int	PQgetlineAsync(PGconn *conn, char *buffer, int bufsize);
+	extern int	PQputnbytes(PGconn *conn, const char *buffer, int nbytes);
+	extern int	PQendcopy(PGconn *conn);
+
+	/* Set blocking/nonblocking connection to the backend */
+	extern int	PQsetnonblocking(PGconn *conn, int arg);
+	extern int	PQisnonblocking(const PGconn *conn);
+
+	/* Force the write buffer to be written (or at least try) */
+	extern int	PQflush(PGconn *conn);
+
+    /* Batching */
+    extern void PQresetbatchdex(PGconn *conn);
+    extern int  PQgetbatchdex(PGconn *conn);
+    extern void PQincrementbatchdex(PGconn *conn);
+    extern bool PQcommand_complete(PGconn *conn);
+
+	/*
+	 * "Fast path" interface --- not really recommended for application
+	 * use
+	 */
+	extern PGresult *PQfn(PGconn *conn,
+									  int fnid,
+									  int *result_buf,
+									  int *result_len,
+									  int result_is_int,
+									  const PQArgBlock *args,
+									  int nargs);
+    extern PGresult *PQset_plan_output_file(PGconn *conn,
+                                            char *plan_output_file,
+                                            bool is_dir);
+
+	/* Accessor functions for PGresult objects */
+	extern ExecStatusType PQresultStatus(const PGresult *res);
+	extern const char *PQresStatus(ExecStatusType status);
+	extern const char *PQresultErrorMessage(const PGresult *res);
+	extern int	PQntuples(const PGresult *res);
+    extern void PQsetntuples(PGresult *res, int ntups);
+	extern int	PQnfields(const PGresult *res);
+	extern int	PQbinaryTuples(const PGresult *res);
+	extern char *PQfname(const PGresult *res, int field_num);
+	extern int	PQfnumber(const PGresult *res, const char *field_name);
+	extern Oid	PQftype(const PGresult *res, int field_num);
+	extern int	PQfsize(const PGresult *res, int field_num);
+	extern int	PQfmod(const PGresult *res, int field_num);
+	extern char *PQcmdStatus(PGresult *res);
+	extern const char *PQoidStatus(const PGresult *res);		/* old and ugly */
+	extern Oid	PQoidValue(const PGresult *res);		/* new and improved */
+	extern const char *PQcmdTuples(PGresult *res);
+	extern char *PQgetvalue(const PGresult *res, int tup_num, int field_num);
+	extern int	PQgetlength(const PGresult *res, int tup_num, int field_num);
+	extern int	PQgetisnull(const PGresult *res, int tup_num, int field_num);
+    extern void PQresult_inc_total_ntups(PGresult *res);
+    extern uint64  PQresult_get_total_ntups(const PGresult *res);
+    extern void PQresult_reset_ntups(PGresult *res);
+    extern bool PQresult_is_batching(const PGresult *res);
+    extern void PQresetcommandcomplete(PGconn *conn);
+    extern void PQresetCancelPending(PGconn *conn);
+
+	/* Delete a PGresult */
+	extern void PQclear(PGresult *res);
+
+	/*
+	 * Make an empty PGresult with given status (some apps find this
+	 * useful). If conn is not NULL and status indicates an error, the
+	 * conn's errorMessage is copied.
+	 */
+	extern PGresult *PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status);
+
+        /* NETEZZA - add three functions to resolve undefines when linked with php-pgsql-4.3.9-3.6 (LAS4) */
+
+        /* Quoting strings before inclusion in queries. */
+        extern size_t PQescapeString(char *to, const char *from, size_t length);
+        extern char *PQescapeIdentifier(PGconn *conn, const char *str, size_t len, bool as_ident);
+        extern unsigned char *PQescapeBytea(const unsigned char *bintext, size_t binlen,
+                                size_t *bytealen);
+        extern unsigned char *PQunescapeBytea(const unsigned char *strtext,
+                                size_t *retbuflen);
+
+    /*
+     * Dbos tuple mode
+     */
+    extern void SetDbosTupleHandler(int (*cbfun) (PGconn *conn));
+
+    /*
+     * Functions for get/se commandNumber
+     */
+    extern void PQsetCommandNumber(PGconn *conn, int cn);
+    extern int PQgetCommandNumber(PGconn *conn);
+
+
+/* === in fe-print.c === */
+
+	extern void PQprint(FILE *fout,		/* output stream */
+									const PGresult *res,
+									const PQprintOpt *ps);		/* option structure */
+
+	/*
+	 * really old printing routines
+	 */
+	extern void PQdisplayTuples(const PGresult *res,
+											FILE *fp,	/* where to send the
+														 * output */
+											int fillAlign,		/* pad the fields with
+																 * spaces */
+											const char *fieldSep,		/* field separator */
+											int printHeader,	/* display headers? */
+											int quiet);
+
+	extern void PQprintTuples(const PGresult *res,
+										  FILE *fout,	/* output stream */
+										  int printAttName,		/* print attribute names */
+										  int terseOutput,		/* delimiter bars */
+										  int width);	/* width of column, if
+														 * 0, use variable width */
+
+
+/* === in fe-lobj.c === */
+
+	/* Large-object access routines */
+	extern int	lo_open(PGconn *conn, Oid lobjId, int mode);
+	extern int	lo_close(PGconn *conn, int fd);
+	extern int	lo_read(PGconn *conn, int fd, char *buf, size_t len);
+	extern int	lo_write(PGconn *conn, int fd, char *buf, size_t len);
+	extern int	lo_lseek(PGconn *conn, int fd, int offset, int whence);
+	extern Oid	lo_creat(PGconn *conn, int mode);
+	extern int	lo_tell(PGconn *conn, int fd);
+	extern int	lo_unlink(PGconn *conn, Oid lobjId);
+	extern Oid	lo_import(PGconn *conn, const char *filename);
+	extern int	lo_export(PGconn *conn, Oid lobjId, const char *filename);
+
+/* === in fe-misc.c === */
+
+	/* Determine length of multibyte encoded char at *s */
+	extern int	PQmblen(const unsigned char *s, int encoding);
+
+	/* Determine display length of multibyte encoded char at *s */
+	extern int	PQdsplen(const unsigned char *s, int encoding);
+
+	/* Get encoding id from environment variable PGCLIENTENCODING */
+	extern int	PQenv2encoding(void);
+
+ /* === for arrow adbc: start === */
+ /*
+ * Note: The following functions will have incremental changes as and when required
+ * in supporting ADBC drivers.
+ */
+    extern PGresult *PQprepare(PGconn *conn, const char *stmtName,
+                               const char *query, int nParams,
+                               const Oid *paramTypes);
+
+    extern PGresult *PQexecParams(PGconn *conn,
+                                  const char *command,
+                                  int nParams,
+                                  const Oid *paramTypes,
+                                  const char *const *paramValues,
+                                  const int *paramLengths,
+                                  const int *paramFormats,
+                                  int resultFormat);
+    
+    extern PGresult *PQexecPrepared(PGconn *conn,
+	                                const char *stmtName,
+	                                int nParams,
+	                                const Oid *paramTypes,
+	                                const char *const *paramValues,
+	                                const int *paramLengths,
+	                                const int *paramFormats,
+	                                int resultFormat);
+    
+    extern PGresult *PQdescribePrepared(PGconn *conn, const char *stmt);
+
+    extern int	PQsendQueryPrepared(PGconn *conn,
+                                    const char *stmtName,
+                                    int nParams,
+                                    const Oid *paramTypes,
+                                    const char *const *paramValues,
+                                    const int *paramLengths,
+                                    const int *paramFormats,
+                                    int resultFormat);
+
+    extern int PQsendQueryParams(PGconn *conn,
+                                 const char *command,
+                                 int nParams,
+                                 const Oid *paramTypes,
+                                 const char *const *paramValues,
+                                 const int *paramLengths,
+                                 const int *paramFormats,
+                                 int resultFormat);
+
+/* === for arrow adbc: end === */
+                    
+#ifdef __cplusplus
+}
+
+#endif
+
+#endif	 /* LIBPQ_FE_H */
diff --git a/nz_include/nzfieldtype.h b/nz_include/nzfieldtype.h
new file mode 100644
index 00000000..1bd549be
--- /dev/null
+++ b/nz_include/nzfieldtype.h
@@ -0,0 +1,632 @@
+#ifndef NZFIELDTYPE_H
+#define NZFIELDTYPE_H
+
+// Field type numbers are persisted in the compressed external
+// table header. Extending this list with new types is fine.
+// The existing constants up to NzTypeLastEntry cannot be renumbered
+// (check with Abhishek Jog for details about external table usage).
+// If you change an existing type number, we need to write some backward
+// compatibility code.
+
+#define NZ_FIELD_TYPE_LIST                                                                                                                       \
+                                                                                                                                                 \
+ /*    (ORDINAL, ENUMERATOR,            REP,  ALIGN, FIXED, SCHEMA, ZMACCUM, COMPARE, DESCRIPTION)                                               \
+  */                                                                                                                                             \
+                                                                                                                                                 \
+ _ROW_(0, NzTypeUndefined, void, 0, 0, INVALID, invalid, Bad, "UNUSED 0")                                                                        \
+ _SEP_ _ROW_(1,                                                                                                                                  \
+             NzTypeRecAddr,                                                                                                                      \
+             int64,                                                                                                                              \
+             ALN64,                                                                                                                              \
+             8,                                                                                                                                  \
+             INT,                                                                                                                                \
+             invalid,                                                                                                                            \
+             Int8,                                                                                                                               \
+             "RecAddr (8 bytes)") _SEP_ _ROW_(2,                                                                                                 \
+                                              NzTypeDouble,                                                                                      \
+                                              double,                                                                                            \
+                                              ALN64,                                                                                             \
+                                              8,                                                                                                 \
+                                              FLOAT,                                                                                             \
+                                              double,                                                                                            \
+                                              Double,                                                                                            \
+                                              "FP double (8 bytes)") _SEP_                                                                       \
+     _ROW_(3, NzTypeInt, int32, ALN32, 4, INT, int32, Int4, "Integer (4 bytes)") _SEP_ _ROW_(                                                    \
+         4,                                                                                                                                      \
+         NzTypeFloat,                                                                                                                            \
+         float,                                                                                                                                  \
+         ALN32,                                                                                                                                  \
+         4,                                                                                                                                      \
+         FLOAT,                                                                                                                                  \
+         float,                                                                                                                                  \
+         Float,                                                                                                                                  \
+         "FP single (4 bytes)") _SEP_ _ROW_(5,                                                                                                   \
+                                            NzTypeMoney,                                                                                         \
+                                            int32,                                                                                               \
+                                            ALN32,                                                                                               \
+                                            4,                                                                                                   \
+                                            INT,                                                                                                 \
+                                            int32,                                                                                               \
+                                            Int4,                                                                                                \
+                                            "Money (4 bytes)") _SEP_                                                                             \
+         _ROW_(6, NzTypeDate, int32, ALN32, 4, INT, int32, Int4, "Date (4 bytes)") _SEP_ _ROW_(                                                  \
+             7,                                                                                                                                  \
+             NzTypeNumeric,                                                                                                                      \
+             void,                                                                                                                               \
+             ALN128,                                                                                                                             \
+             -1,                                                                                                                                 \
+             NUMERIC,                                                                                                                            \
+             cnum64,                                                                                                                             \
+             Bad,                                                                                                                                \
+             "Numeric (4, 8 or 16 bytes)") _SEP_ _ROW_(8,                                                                                        \
+                                                       NzTypeTime,                                                                               \
+                                                       int64,                                                                                    \
+                                                       ALN64,                                                                                    \
+                                                       8,                                                                                        \
+                                                       INT,                                                                                      \
+                                                       int64,                                                                                    \
+                                                       Int8,                                                                                     \
+                                                       "Time (8 bytes)")                                                                         \
+             _SEP_ _ROW_(9,                                                                                                                      \
+                         NzTypeTimestamp,                                                                                                        \
+                         timestamp,                                                                                                              \
+                         ALN64,                                                                                                                  \
+                         8,                                                                                                                      \
+                         INT,                                                                                                                    \
+                         int64,                                                                                                                  \
+                         Int8,                                                                                                                   \
+                         "Timestamp (8 bytes)") _SEP_ _ROW_(10,                                                                                  \
+                                                            NzTypeInterval,                                                                      \
+                                                            interval,                                                                            \
+                                                            ALN128,                                                                              \
+                                                            12,                                                                                  \
+                                                            TIME,                                                                                \
+                                                            interval,                                                                            \
+                                                            Interval,                                                                            \
+                                                            "Interval (12 bytes)")                                                               \
+                 _SEP_ _ROW_(11,                                                                                                                 \
+                             NzTypeTimeTz,                                                                                                       \
+                             timetz,                                                                                                             \
+                             ALN128,                                                                                                             \
+                             12,                                                                                                                 \
+                             TIME,                                                                                                               \
+                             timetz,                                                                                                             \
+                             TimeTz,                                                                                                             \
+                             "Time and TZ (12 bytes)") _SEP_ _ROW_(12,                                                                           \
+                                                                   NzTypeBool,                                                                   \
+                                                                   int8,                                                                         \
+                                                                   ALNNO,                                                                        \
+                                                                   1,                                                                            \
+                                                                   INT,                                                                          \
+                                                                   int8,                                                                         \
+                                                                   Bool,                                                                         \
+                                                                   "Boolean (1 byte)")                                                           \
+                     _SEP_ _ROW_(                                                                                                                \
+                         13,                                                                                                                     \
+                         NzTypeInt1,                                                                                                             \
+                         int8,                                                                                                                   \
+                         ALNNO,                                                                                                                  \
+                         1,                                                                                                                      \
+                         INT,                                                                                                                    \
+                         int8,                                                                                                                   \
+                         Int1,                                                                                                                   \
+                         "Integer (1 byte)") _SEP_ _ROW_(14,                                                                                     \
+                                                         NzTypeBinary,                                                                           \
+                                                         void,                                                                                   \
+                                                         0,                                                                                      \
+                                                         0,                                                                                      \
+                                                         INVALID,                                                                                \
+                                                         invalid,                                                                                \
+                                                         Bad,                                                                                    \
+                                                         "UNUSED 14") _SEP_ _ROW_(15,                                                            \
+                                                                                  NzTypeChar,                                                    \
+                                                                                  void,                                                          \
+                                                                                  ALNNO,                                                         \
+                                                                                  -2,                                                            \
+                                                                                  FIXEDCHAR,                                                     \
+                                                                                  str1A,                                                         \
+                                                                                  Bad,                                                           \
+                                                                                  "Char (fixed, "                                                \
+                                                                                  "1-16 bytes)")                                                 \
+                         _SEP_ _ROW_(16,                                                                                                         \
+                                     NzTypeVarChar,                                                                                              \
+                                     varA,                                                                                                       \
+                                     FVARY,                                                                                                      \
+                                     0,                                                                                                          \
+                                     VARCHAR,                                                                                                    \
+                                     varA,                                                                                                       \
+                                     Bad,                                                                                                        \
+                                     "ASCII Char Varying") _SEP_ _ROW_(17,                                                                       \
+                                                                       NzDEPR_Text,                                                              \
+                                                                       void,                                                                     \
+                                                                       FVARY,                                                                    \
+                                                                       0,                                                                        \
+                                                                       INVALID,                                                                  \
+                                                                       invalid,                                                                  \
+                                                                       Bad,                                                                      \
+                                                                       "UNUSED 17")                                                              \
+                             _SEP_ _ROW_(                                                                                                        \
+                                 18,                                                                                                             \
+                                 NzTypeUnknown,                                                                                                  \
+                                 void,                                                                                                           \
+                                 FVARY,                                                                                                          \
+                                 0,                                                                                                              \
+                                 INVALID,                                                                                                        \
+                                 invalid,                                                                                                        \
+                                 Bad,                                                                                                            \
+                                 "UNUSED 18") _SEP_ _ROW_(19,                                                                                    \
+                                                          NzTypeInt2,                                                                            \
+                                                          int16,                                                                                 \
+                                                          ALN16,                                                                                 \
+                                                          2,                                                                                     \
+                                                          INT,                                                                                   \
+                                                          int16,                                                                                 \
+                                                          Int2,                                                                                  \
+                                                          "Integer (2 "                                                                          \
+                                                          "bytes)") _SEP_ _ROW_(20,                                                              \
+                                                                                NzTypeInt8,                                                      \
+                                                                                int64,                                                           \
+                                                                                ALN64,                                                           \
+                                                                                8,                                                               \
+                                                                                INT,                                                             \
+                                                                                int64,                                                           \
+                                                                                Int8,                                                            \
+                                                                                "Integer (8 "                                                    \
+                                                                                "bytes)")                                                        \
+                                 _SEP_ _ROW_(21,                                                                                                 \
+                                             NzTypeVarFixedChar,                                                                                 \
+                                             varA,                                                                                               \
+                                             FVARY,                                                                                              \
+                                             0,                                                                                                  \
+                                             VARCHAR,                                                                                            \
+                                             varA,                                                                                               \
+                                             Bad,                                                                                                \
+                                             "ASCII Char (using "                                                                                \
+                                             "varying)") _SEP_ _ROW_(22,                                                                         \
+                                                                     NzTypeGeometry,                                                             \
+                                                                     varA,                                                                       \
+                                                                     FVARY,                                                                      \
+                                                                     0,                                                                          \
+                                                                     VARCHAR,                                                                    \
+                                                                     varA,                                                                       \
+                                                                     Bad,                                                                        \
+                                                                     "ST_Geometry")                                                              \
+                                     _SEP_ _ROW_(23,                                                                                             \
+                                                 NzTypeVarBinary,                                                                                \
+                                                 varA,                                                                                           \
+                                                 FVARY,                                                                                          \
+                                                 0,                                                                                              \
+                                                 VARCHAR,                                                                                        \
+                                                 varA,                                                                                           \
+                                                 Bad,                                                                                            \
+                                                 "Binary Varying") _SEP_ _ROW_(24,                                                               \
+                                                                               NzDEPR_Blob,                                                      \
+                                                                               void,                                                             \
+                                                                               FVARY,                                                            \
+                                                                               0,                                                                \
+                                                                               INVALID,                                                          \
+                                                                               invalid,                                                          \
+                                                                               Bad,                                                              \
+                                                                               "UNUSED 24")                                                      \
+                                         _SEP_ _ROW_(                                                                                            \
+                                             25,                                                                                                 \
+                                             NzTypeNChar,                                                                                        \
+                                             varA,                                                                                               \
+                                             FVARY,                                                                                              \
+                                             0,                                                                                                  \
+                                             VARCHAR,                                                                                            \
+                                             varA,                                                                                               \
+                                             Bad,                                                                                                \
+                                             "UTF-8 NChar "                                                                                      \
+                                             "(using varying)") _SEP_ _ROW_(26,                                                                  \
+                                                                            NzTypeNVarChar,                                                      \
+                                                                            varA,                                                                \
+                                                                            FVARY,                                                               \
+                                                                            0,                                                                   \
+                                                                            VARCHAR,                                                             \
+                                                                            varA,                                                                \
+                                                                            Bad,                                                                 \
+                                                                            "UTF-8 NChar Varying")                                               \
+                                             _SEP_ _ROW_(                                                                                        \
+                                                 27,                                                                                             \
+                                                 NzDEPR_NText,                                                                                   \
+                                                 void,                                                                                           \
+                                                 FVARY,                                                                                          \
+                                                 0,                                                                                              \
+                                                 INVALID,                                                                                        \
+                                                 invalid,                                                                                        \
+                                                 Bad,                                                                                            \
+                                                 "UNUSED 27") _SEP_ _ROW_(28,                                                                    \
+                                                                          NzTypeDTIDBitAddr,                                                     \
+                                                                          int64,                                                                 \
+                                                                          ALN64,                                                                 \
+                                                                          8,                                                                     \
+                                                                          INT,                                                                   \
+                                                                          invalid,                                                               \
+                                                                          Int8,                                                                  \
+                                                                          "DTIDBitAddr (8 bytes)")                                               \
+                                                 _SEP_ _ROW_(29,                                                                                 \
+                                                             NzTypeSuperDouble,                                                                  \
+                                                             cnum128,                                                                            \
+                                                             ALN128,                                                                             \
+                                                             16,                                                                                 \
+                                                             FLOAT,                                                                              \
+                                                             invalid,                                                                            \
+                                                             SuperDouble,                                                                        \
+                                                             "FP super double (16 bytes)")                                                       \
+                                                     _SEP_ _ROW_(30,                                                                             \
+                                                                 NzTypeJson,                                                                     \
+                                                                 varA,                                                                           \
+                                                                 FVARY,                                                                          \
+                                                                 0,                                                                              \
+                                                                 VARCHAR,                                                                        \
+                                                                 varA,                                                                           \
+                                                                 Bad,                                                                            \
+                                                                 "JSON") _SEP_ _ROW_(31,                                                         \
+                                                                                     NzTypeJsonb,                                                \
+                                                                                     varA,                                                       \
+                                                                                     FVARY,                                                      \
+                                                                                     0,                                                          \
+                                                                                     VARCHAR,                                                    \
+                                                                                     varA,                                                       \
+                                                                                     Bad,                                                        \
+                                                                                     "JSONB")                                                    \
+                                                         _SEP_ _ROW_(32,                                                                         \
+                                                                     NzTypeJsonpath,                                                             \
+                                                                     varA,                                                                       \
+                                                                     FVARY,                                                                      \
+                                                                     0,                                                                          \
+                                                                     VARCHAR,                                                                    \
+                                                                     varA,                                                                       \
+                                                                     Bad,                                                                        \
+                                                                     "JSONPATH")                                                                 \
+                                                             _SEP_ _ROW_(                                                                        \
+                                                                 33,                                                                             \
+                                                                 NzTypeLastEntry,                                                                \
+                                                                 void,                                                                           \
+                                                                 0,                                                                              \
+                                                                 0,                                                                              \
+                                                                 INVALID,                                                                        \
+                                                                 invalid,                                                                        \
+                                                                 Bad,                                                                            \
+                                                                 "UNUSED 33") /* Entries past                                                    \
+                                                                                 NzTypeLastEntry                                                 \
+                                                                                 are used only                                                   \
+                                                                                 in zonemap                                                      \
+                                                                                 code, via                                                       \
+                                                                                 fieldTypeWithSize(),                                            \
+                                                                                 and are not                                                     \
+                                                                                 persistent.                                                     \
+                                                                               */                                                                \
+     _SEP_ _ROW_(                                                                                                                                \
+         34,                                                                                                                                     \
+         NzTypeChar1A,                                                                                                                           \
+         str1A,                                                                                                                                  \
+         ALNNO,                                                                                                                                  \
+         1,                                                                                                                                      \
+         FIXEDCHAR,                                                                                                                              \
+         str1A,                                                                                                                                  \
+         Bad,                                                                                                                                    \
+         "ASCII Char[1] (1 byte)") _SEP_ _ROW_(35,                                                                                               \
+                                               NzTypeChar2A,                                                                                     \
+                                               str2A,                                                                                            \
+                                               ALNNO,                                                                                            \
+                                               2,                                                                                                \
+                                               FIXEDCHAR,                                                                                        \
+                                               str2A,                                                                                            \
+                                               Bad,                                                                                              \
+                                               "ASCII Char[2] (2 bytes)") _SEP_ _ROW_(36,                                                        \
+                                                                                      NzTypeChar3A,                                              \
+                                                                                      str3A,                                                     \
+                                                                                      ALNNO,                                                     \
+                                                                                      3,                                                         \
+                                                                                      FIXEDCHAR,                                                 \
+                                                                                      str3A,                                                     \
+                                                                                      Bad,                                                       \
+                                                                                      "ASCII "                                                   \
+                                                                                      "Char[3] "                                                 \
+                                                                                      "(3 bytes)") _SEP_                                         \
+         _ROW_(37, NzTypeChar4A, str4A, ALNNO, 4, FIXEDCHAR, str4A, Bad, "ASCII Char[4] (4 bytes)") _SEP_ _ROW_(                                 \
+             38,                                                                                                                                 \
+             NzTypeChar5A,                                                                                                                       \
+             str5A,                                                                                                                              \
+             ALNNO,                                                                                                                              \
+             5,                                                                                                                                  \
+             FIXEDCHAR,                                                                                                                          \
+             str5A,                                                                                                                              \
+             Bad,                                                                                                                                \
+             "ASCII Char[5] (5 bytes)") _SEP_ _ROW_(39,                                                                                          \
+                                                    NzTypeChar6A,                                                                                \
+                                                    str6A,                                                                                       \
+                                                    ALNNO,                                                                                       \
+                                                    6,                                                                                           \
+                                                    FIXEDCHAR,                                                                                   \
+                                                    str6A,                                                                                       \
+                                                    Bad,                                                                                         \
+                                                    "ASCII Char[6] (6 bytes)") _SEP_ _ROW_(40,                                                   \
+                                                                                           NzTypeChar7A,                                         \
+                                                                                           str7A,                                                \
+                                                                                           ALNNO,                                                \
+                                                                                           7,                                                    \
+                                                                                           FIXEDCHAR,                                            \
+                                                                                           str7A,                                                \
+                                                                                           Bad,                                                  \
+                                                                                           "ASCII"                                               \
+                                                                                           " Char"                                               \
+                                                                                           "[7] "                                                \
+                                                                                           "(7 "                                                 \
+                                                                                           "bytes"                                               \
+                                                                                           ")") _SEP_                                            \
+             _ROW_(41, NzTypeChar8A, str8A, ALNNO, 8, FIXEDCHAR, str8, Bad, "ASCII Char[8] (8 bytes)") _SEP_ _ROW_(                              \
+                 42,                                                                                                                             \
+                 NzTypeChar9A,                                                                                                                   \
+                 str9A,                                                                                                                          \
+                 ALNNO,                                                                                                                          \
+                 9,                                                                                                                              \
+                 FIXEDCHAR,                                                                                                                      \
+                 str8,                                                                                                                           \
+                 Bad,                                                                                                                            \
+                 "ASCII Char[9] (9 bytes)") _SEP_                                                                                                \
+                 _ROW_(43, NzTypeChar10A, str10A, ALNNO, 10, FIXEDCHAR, str8, Bad, "ASCII Char[10] (10 bytes)") _SEP_ _ROW_(                     \
+                     44,                                                                                                                         \
+                     NzTypeChar11A,                                                                                                              \
+                     str11A,                                                                                                                     \
+                     ALNNO,                                                                                                                      \
+                     11,                                                                                                                         \
+                     FIXEDCHAR,                                                                                                                  \
+                     str8,                                                                                                                       \
+                     Bad,                                                                                                                        \
+                     "ASCII Char[11] (11 bytes)") _SEP_ _ROW_(45,                                                                                \
+                                                              NzTypeChar12A,                                                                     \
+                                                              str12A,                                                                            \
+                                                              ALNNO,                                                                             \
+                                                              12,                                                                                \
+                                                              FIXEDCHAR,                                                                         \
+                                                              str8,                                                                              \
+                                                              Bad,                                                                               \
+                                                              "ASCII Char[12] (12 bytes)") _SEP_                                                 \
+                     _ROW_(46, NzTypeChar13A, str13A, ALNNO, 13, FIXEDCHAR, str8, Bad, "ASCII Char[13] (13 bytes)") _SEP_ _ROW_(                 \
+                         47,                                                                                                                     \
+                         NzTypeChar14A,                                                                                                          \
+                         str14A,                                                                                                                 \
+                         ALNNO,                                                                                                                  \
+                         14,                                                                                                                     \
+                         FIXEDCHAR,                                                                                                              \
+                         str8,                                                                                                                   \
+                         Bad,                                                                                                                    \
+                         "ASCII Char[14] (14 bytes)") _SEP_                                                                                      \
+                         _ROW_(48, NzTypeChar15A, str15A, ALNNO, 15, FIXEDCHAR, str8, Bad, "ASCII Char[15] (15 bytes)") _SEP_ _ROW_(             \
+                             49,                                                                                                                 \
+                             NzTypeChar16A,                                                                                                      \
+                             str16A,                                                                                                             \
+                             ALNNO,                                                                                                              \
+                             16,                                                                                                                 \
+                             FIXEDCHAR,                                                                                                          \
+                             str8,                                                                                                               \
+                             Bad,                                                                                                                \
+                             "ASCII Char[16] (16 bytes)") _SEP_                                                                                  \
+                             _ROW_(50,                                                                                                           \
+                                   NzTypeChar1E,                                                                                                 \
+                                   str1E,                                                                                                        \
+                                   ALNNO,                                                                                                        \
+                                   1,                                                                                                            \
+                                   FIXEDCHAR,                                                                                                    \
+                                   str1E,                                                                                                        \
+                                   Bad,                                                                                                          \
+                                   "EBCDIC Char[1] (1 byte)") _SEP_ _ROW_(51,                                                                    \
+                                                                          NzTypeChar2E,                                                          \
+                                                                          str2E,                                                                 \
+                                                                          ALNNO,                                                                 \
+                                                                          2,                                                                     \
+                                                                          FIXEDCHAR,                                                             \
+                                                                          str2E,                                                                 \
+                                                                          Bad,                                                                   \
+                                                                          "EBCDIC Char[2] (2 "                                                   \
+                                                                          "bytes)") _SEP_ _ROW_(52,                                              \
+                                                                                                NzTypeChar3E,                                    \
+                                                                                                str3E,                                           \
+                                                                                                ALNNO,                                           \
+                                                                                                3,                                               \
+                                                                                                FIXEDCHAR,                                       \
+                                                                                                str3E,                                           \
+                                                                                                Bad,                                             \
+                                                                                                "EBCDIC Char[3] (3 bytes)") _SEP_                \
+                                 _ROW_(53, NzTypeChar4E, str4E, ALNNO, 4, FIXEDCHAR, str4E, Bad, "EBCDIC Char[4] (4 bytes)") _SEP_ _ROW_(        \
+                                     54,                                                                                                         \
+                                     NzTypeChar5E,                                                                                               \
+                                     str5E,                                                                                                      \
+                                     ALNNO,                                                                                                      \
+                                     5,                                                                                                          \
+                                     FIXEDCHAR,                                                                                                  \
+                                     str5E,                                                                                                      \
+                                     Bad,                                                                                                        \
+                                     "EBCDIC Char[5] (5 bytes)") _SEP_                                                                           \
+                                     _ROW_(55, NzTypeChar6E, str6E, ALNNO, 6, FIXEDCHAR, str6E, Bad, "EBCDIC Char[6] (6 bytes)") _SEP_ _ROW_(    \
+                                         56,                                                                                                     \
+                                         NzTypeChar7E,                                                                                           \
+                                         str7E,                                                                                                  \
+                                         ALNNO,                                                                                                  \
+                                         7,                                                                                                      \
+                                         FIXEDCHAR,                                                                                              \
+                                         str7E,                                                                                                  \
+                                         Bad,                                                                                                    \
+                                         "EBCDIC Char[7] (7 bytes)")                                                                             \
+                                         _SEP_ _ROW_(                                                                                            \
+                                             57,                                                                                                 \
+                                             NzTypeChar8E,                                                                                       \
+                                             str8E,                                                                                              \
+                                             ALNNO,                                                                                              \
+                                             8,                                                                                                  \
+                                             FIXEDCHAR,                                                                                          \
+                                             str8,                                                                                               \
+                                             Bad,                                                                                                \
+                                             "EBCDIC Char[8] (8 bytes)")                                                                         \
+                                             _SEP_ _ROW_(                                                                                        \
+                                                 58,                                                                                             \
+                                                 NzTypeChar9E,                                                                                   \
+                                                 str9E,                                                                                          \
+                                                 ALNNO,                                                                                          \
+                                                 9,                                                                                              \
+                                                 FIXEDCHAR,                                                                                      \
+                                                 str8,                                                                                           \
+                                                 Bad,                                                                                            \
+                                                 "EBCDIC Char[9] (9 bytes)") _SEP_                                                               \
+                                                 _ROW_(59, NzTypeChar10E, str10E, ALNNO, 10, FIXEDCHAR, str8, Bad, "EBCDIC Char[10] (10 bytes)") \
+                                                     _SEP_ _ROW_(                                                                                \
+                                                         60,                                                                                     \
+                                                         NzTypeChar11E,                                                                          \
+                                                         str11E,                                                                                 \
+                                                         ALNNO,                                                                                  \
+                                                         11,                                                                                     \
+                                                         FIXEDCHAR,                                                                              \
+                                                         str8,                                                                                   \
+                                                         Bad,                                                                                    \
+                                                         "EBCDIC Char[11] (11 bytes)")                                                           \
+                                                         _SEP_ _ROW_(                                                                            \
+                                                             61,                                                                                 \
+                                                             NzTypeChar12E,                                                                      \
+                                                             str12E,                                                                             \
+                                                             ALNNO,                                                                              \
+                                                             12,                                                                                 \
+                                                             FIXEDCHAR,                                                                          \
+                                                             str8,                                                                               \
+                                                             Bad,                                                                                \
+                                                             "EBCDIC Char[12] (12 "                                                              \
+                                                             "bytes)")                                                                           \
+                                                             _SEP_ _ROW_(                                                                        \
+                                                                 62,                                                                             \
+                                                                 NzTypeChar13E,                                                                  \
+                                                                 str13E,                                                                         \
+                                                                 ALNNO,                                                                          \
+                                                                 13,                                                                             \
+                                                                 FIXEDCHAR,                                                                      \
+                                                                 str8,                                                                           \
+                                                                 Bad,                                                                            \
+                                                                 "EBCDIC Char[13] (13 "                                                          \
+                                                                 "bytes)")                                                                       \
+                                                                 _SEP_ _ROW_(                                                                    \
+                                                                     63,                                                                         \
+                                                                     NzTypeChar14E,                                                              \
+                                                                     str14E,                                                                     \
+                                                                     ALNNO,                                                                      \
+                                                                     14,                                                                         \
+                                                                     FIXEDCHAR,                                                                  \
+                                                                     str8,                                                                       \
+                                                                     Bad,                                                                        \
+                                                                     "EBCDIC Char[14] "                                                          \
+                                                                     "(14 bytes)")                                                               \
+                                                                     _SEP_ _ROW_(                                                                \
+                                                                         64,                                                                     \
+                                                                         NzTypeChar15E,                                                          \
+                                                                         str15E,                                                                 \
+                                                                         ALNNO,                                                                  \
+                                                                         15,                                                                     \
+                                                                         FIXEDCHAR,                                                              \
+                                                                         str8,                                                                   \
+                                                                         Bad,                                                                    \
+                                                                         "EBCDIC "                                                               \
+                                                                         "Char[15] (15 "                                                         \
+                                                                         "bytes)")                                                               \
+                                                                         _SEP_ _ROW_(                                                            \
+                                                                             65,                                                                 \
+                                                                             NzTypeChar16E,                                                      \
+                                                                             str16E,                                                             \
+                                                                             ALNNO,                                                              \
+                                                                             16,                                                                 \
+                                                                             FIXEDCHAR,                                                          \
+                                                                             str8,                                                               \
+                                                                             Bad,                                                                \
+                                                                             "EBCDIC "                                                           \
+                                                                             "Char[16] "                                                         \
+                                                                             "(16 bytes)")                                                       \
+                                                                             _SEP_ _ROW_(                                                        \
+                                                                                 66,                                                             \
+                                                                                 NzTypeVarCharE,                                                 \
+                                                                                 varE,                                                           \
+                                                                                 FVARY,                                                          \
+                                                                                 0,                                                              \
+                                                                                 VARCHAR,                                                        \
+                                                                                 varE,                                                           \
+                                                                                 Bad,                                                            \
+                                                                                 "EBCDIC "                                                       \
+                                                                                 "Char "                                                         \
+                                                                                 "Varyin"                                                        \
+                                                                                 "g")                                                            \
+                                                                                 _SEP_ _ROW_(                                                    \
+                                                                                     67,                                                         \
+                                                                                     NzTypeVarFixedCharE,                                        \
+                                                                                     varE,                                                       \
+                                                                                     FVARY,                                                      \
+                                                                                     0,                                                          \
+                                                                                     VARCHAR,                                                    \
+                                                                                     varE,                                                       \
+                                                                                     Bad,                                                        \
+                                                                                     "EBC"                                                       \
+                                                                                     "DIC"                                                       \
+                                                                                     " Ch"                                                       \
+                                                                                     "ar "                                                       \
+                                                                                     "(us"                                                       \
+                                                                                     "ing"                                                       \
+                                                                                     " va"                                                       \
+                                                                                     "ryi"                                                       \
+                                                                                     "ng"                                                        \
+                                                                                     ")")                                                        \
+                                                                                     _SEP_ _ROW_(                                                \
+                                                                                         68,                                                     \
+                                                                                         NzTypeNumeric4,                                         \
+                                                                                         int32,                                                  \
+                                                                                         ALN32,                                                  \
+                                                                                         4,                                                      \
+                                                                                         NUMERIC,                                                \
+                                                                                         int32,                                                  \
+                                                                                         Bad,                                                    \
+                                                                                         "CNumeri"                                               \
+                                                                                         "c32 (4 "                                               \
+                                                                                         "bytes)")                                               \
+                                                                                         _SEP_ _ROW_(                                            \
+                                                                                             69,                                                 \
+                                                                                             NzTypeNumeric8,                                     \
+                                                                                             cnum64,                                             \
+                                                                                             ALN64,                                              \
+                                                                                             8,                                                  \
+                                                                                             NUMERIC,                                            \
+                                                                                             cnum64,                                             \
+                                                                                             Bad,                                                \
+                                                                                             "CNu"                                               \
+                                                                                             "mer"                                               \
+                                                                                             "ic6"                                               \
+                                                                                             "4 "                                                \
+                                                                                             "(8 "                                               \
+                                                                                             "byt"                                               \
+                                                                                             "es"                                                \
+                                                                                             ")") _SEP_                                          \
+                                                                                             _ROW_(                                              \
+                                                                                                 70,                                             \
+                                                                                                 NzTypeNumeric16,                                \
+                                                                                                 cnum128,                                        \
+                                                                                                 ALN128,                                         \
+                                                                                                 16,                                             \
+                                                                                                 NUMERIC,                                        \
+                                                                                                 cnum128,                                        \
+                                                                                                 Bad,                                            \
+                                                                                                 "CNumeric128 (16 bytes)")
+
+// Define the EFieldType enumeration
+#define _ROW_(ORDINAL, ENUMERATOR, REP, ALIGN, FIXED, SCHEMA, ZMACCUM, COMPARE, DESCRIPTION) \
+ ENUMERATOR
+#define _SEP_ ,
+enum EFieldType
+{
+    NZ_FIELD_TYPE_LIST
+};
+#undef _ROW_
+#undef _SEP_
+
+#ifdef __cplusplus
+
+EFieldType fieldTypeWithSize(EFieldType ft, unsigned bytes, bool padEbcdic);
+EFieldType fieldTypeWithSize(struct field_t const* f);
+
+#endif
+
+#endif // NZFIELDTYPE_H
diff --git a/nz_include/os.h b/nz_include/os.h
new file mode 100644
index 00000000..d61c3133
--- /dev/null
+++ b/nz_include/os.h
@@ -0,0 +1,115 @@
+#if (__PPC__) /* NZ */
+// !FIX-jpb  defining this for PPC build (spu.bin target)
+# define HAVE_INT_TIMEZONE 1
+#endif
+
+#if !defined(SUN4S)
+//
+// all platforms other than Sparc Solaris
+//
+# if defined(__i386__) || defined(__x86_64__)
+typedef unsigned char slock_t;
+
+#  define HAS_TEST_AND_SET
+
+# elif defined(__powerpc__)
+typedef unsigned int slock_t;
+
+#  define HAS_TEST_AND_SET
+
+# elif defined(__alpha__)
+typedef long int slock_t;
+
+#  define HAS_TEST_AND_SET
+
+# elif defined(__mips__)
+typedef unsigned int slock_t;
+
+#  define HAS_TEST_AND_SET
+
+# elif defined(__arm__)
+typedef unsigned char slock_t;
+
+#  define HAS_TEST_AND_SET
+
+# elif defined(__ia64__)
+typedef unsigned int slock_t;
+
+#  define HAS_TEST_AND_SET
+
+# elif defined(__s390__)
+typedef unsigned int slock_t;
+
+#  define HAS_TEST_AND_SET
+# endif
+#else
+// ====================
+//  For Sparc Solaris
+// ====================
+# define HAS_TEST_AND_SET
+typedef unsigned char slock_t;
+
+/*
+ * Sort this out for all operting systems some time. The __xxx
+ * symbols are defined on both GCC and Solaris CC, although GCC
+ * doesn't document them. The __xxx__ symbols are only on GCC.
+ */
+# if defined(__i386) && !defined(__i386__)
+#  define __i386__
+# endif
+
+# if defined(__sparc) && !defined(__sparc__)
+#  define __sparc__
+# endif
+
+# if defined(__i386__)
+#  include <sys/isa_defs.h>
+# endif
+
+# ifndef BIG_ENDIAN
+#  define BIG_ENDIAN 4321
+# endif
+# ifndef LITTLE_ENDIAN
+#  define LITTLE_ENDIAN 1234
+# endif
+# ifndef PDP_ENDIAN
+#  define PDP_ENDIAN 3412
+# endif
+
+# ifndef BYTE_ORDER
+#  ifdef __sparc__
+#   define BYTE_ORDER BIG_ENDIAN
+#  endif
+#  ifdef __i386__
+#   define BYTE_ORDER LITTLE_ENDIAN
+#  endif
+# endif
+
+# ifndef NAN
+
+#  if defined(__GNUC__) && defined(__i386__)
+
+#   ifndef __nan_bytes
+#    define __nan_bytes            \
+     {                             \
+      0, 0, 0, 0, 0, 0, 0xf8, 0x7f \
+     }
+#   endif
+
+#   define NAN              \
+    (__extension__((union { \
+unsigned char __c[8];             \
+double __d;                       \
+     }){ __nan_bytes })     \
+         .__d)
+
+#  else
+/* not GNUC and i386 */
+
+#   define NAN (0.0 / 0.0)
+
+#  endif /* GCC.  */
+
+# endif /* not NAN */
+
+#endif /* if SUN4S */
diff --git a/nz_include/pg_config.h b/nz_include/pg_config.h
new file mode 100644
index 00000000..cb92f9e3
--- /dev/null
+++ b/nz_include/pg_config.h
@@ -0,0 +1,823 @@
+/*
+ * PostgreSQL configuration-settings file.
+ *
+ * This file was renamed from config.h to pg_config.h -- sanjay
+ *
+ * config.h.in is processed by configure to produce config.h.
+ *
+ * -- this header file has been conditionalized to run on the following
+ *    platforms: linux (x86), PPC, Win32 (x86), and Sparc Solaris.
+ *
+ * If you want to modify any of the tweakable settings in Part 2
+ * of this file, you can do it in config.h.in before running configure,
+ * or in config.h afterwards. Of course, if you edit config.h, then your
+ * changes will be overwritten the next time you run configure.
+ *
+ */
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+/*
+ *------------------------------------------------------------------------
+ * Part 1: feature symbols and limits that are set by configure based on
+ * user-supplied switches. This is first so that stuff in Part 2 can
+ * depend on these values.
+ *
+ * Beware of "fixing" configure-time mistakes by editing these values,
+ * since configure may have inserted the settings in other files as well
+ * as here. Best to rerun configure if you forgot --enable-multibyte
+ * or whatever.
+ *------------------------------------------------------------------------
+ */
+
+/* The version number is actually hard-coded into configure.in */
+#define PG_VERSION "7.1beta6"
+/* A canonical string containing the version number, platform, and C compiler */
+#define PG_VERSION_STR "IBM Netezza SQL Version 1.1" /* NZ */
+
+#define NZ_VERSION_STR "1.1"
+
+/* Set to 1 if you want LOCALE support (--enable-locale) */
+/* #undef USE_LOCALE */
+
+/* Set to 1 if you want cyrillic recode (--enable-recode) */
+/* #undef CYR_RECODE */
+
+/* Set to 1 if you want to use multibyte characters (--enable-multibyte) */
+/* #undef MULTIBYTE */
+
+/* Set to 1 if you want Unicode conversion support (--enable-uniconv) */
+/* #undef UNICODE_CONVERSION */
+
+/* Set to 1 if you want ASSERT checking (--enable-cassert) */
+#define USE_ASSERT_CHECKING 1
+
+/* Define to build with Kerberos 4 support (--with-krb4[=DIR]) */
+/* #undef KRB4 */
+
+/* Define to build with Kerberos 5 support (--with-krb5[=DIR]) */
+/* #undef KRB5 */
+
+/* Kerberos name of the Postgres service principal (--with-krb-srvnam=NAME) */
+#define PG_KRB_SRVNAM "netezza"
+
+/* Define to build with (Open)SSL support (--with-openssl[=DIR]) */
+/* #undef USE_SSL */
+
+/*
+ * DEF_PGPORT is the TCP port number on which the Postmaster listens and
+ * which clients will try to connect to. This is just a default value;
+ * it can be overridden at postmaster or client startup. It's awfully
+ * convenient if your clients have the right default compiled in, though.
+ * (--with-pgport=PORTNUM)
+ */
+#define DEF_PGPORT 5480
+/* ... and once more as a string constant instead */
+#define DEF_PGPORT_STR "5480"
+
+/*
+ * Default soft limit on number of backend server processes per postmaster;
+ * this is just the default setting for the postmaster's -N switch.
+ * (--with-maxbackends=N)
+ */
+#define DEF_MAXBACKENDS 120
+
+/*
+ *------------------------------------------------------------------------
+ * Part 2: feature symbols and limits that are user-configurable, but
+ * only by editing this file ... there's no configure support for them.
+ *
+ * Editing this file and doing a full rebuild (and an initdb if noted)
+ * should be sufficient to change any of these.
+ *------------------------------------------------------------------------
+ */
+
+/*
+ * Hard limit on number of backend server processes per postmaster.
+ * Increasing this costs about 32 bytes per process slot as of v 6.5.
+ */
+#define MAXBACKENDS (DEF_MAXBACKENDS > 2048 ? DEF_MAXBACKENDS : 2048)
+
+/*
+ * Default number of buffers in shared buffer pool (each of size BLCKSZ).
+ * This is just the default setting for the postmaster's -B switch.
+ * Perhaps it ought to be configurable from a configure switch.
+ * NOTE: default setting corresponds to the minimum number of buffers
+ * that postmaster.c will allow for the default MaxBackends value.
+ */
+#define DEF_NBUFFERS (DEF_MAXBACKENDS > 8 ? DEF_MAXBACKENDS * 2 : 16)
+
+/*
+ * Size of a disk block --- this also limits the size of a tuple.
+ * You can set it bigger if you need bigger tuples (although TOAST
+ * should reduce the need to have large tuples, since fields can now
+ * be spread across multiple tuples).
+ *
+ * The maximum possible value of BLCKSZ is currently 2^15 (32768).
+ * This is determined by the 15-bit widths of the lp_off and lp_len
+ * fields in ItemIdData (see include/storage/itemid.h).
+ *
+ * CAUTION: changing BLCKSZ requires an initdb.
+ */
+// NZ #define BLCKSZ    8192
+#define BLCKSZ 16384
+
+/*
+ * RELSEG_SIZE is the maximum number of blocks allowed in one disk file.
+ * Thus, the maximum size of a single file is RELSEG_SIZE * BLCKSZ;
+ * relations bigger than that are divided into multiple files.
+ *
+ * CAUTION: RELSEG_SIZE * BLCKSZ must be less than your OS' limit on file
+ * size. This is typically 2Gb or 4Gb in a 32-bit operating system. By
+ * default, we make the limit 1Gb to avoid any possible integer-overflow
+ * problems within the OS. A limit smaller than necessary only means we
+ * divide a large relation into more chunks than necessary, so it seems
+ * best to err in the direction of a small limit.  (Besides, a power-of-2
+ * value saves a few cycles in md.c.)
+ *
+ * CAUTION: changing RELSEG_SIZE requires an initdb.
+ */
+#define RELSEG_SIZE (0x40000000 / BLCKSZ)
+
+/*
+ * Maximum number of columns in an index and maximum number of arguments
+ * to a function. They must be the same value.
+ *
+ * The minimum value is 8 (index creation uses 8-argument functions).
+ * There is no specific upper limit, although large values will waste
+ * system-table space and processing time.
+ *
+ * CAUTION: changing these requires an initdb.
+ *
+ * BTW: if you need to call dynamically-loaded old-style C functions that
+ * have more than 16 arguments, you will also need to add cases to the
+ * switch statement in fmgr_oldstyle() in src/backend/utils/fmgr/fmgr.c.
+ * But consider converting such functions to new-style instead...
+ */
+#define INDEX_MAX_KEYS 64
+#define FUNC_MAX_ARGS  INDEX_MAX_KEYS
+
+/*
+ * Define this to make libpgtcl's "pg_result -assign" command process C-style
+ * backslash sequences in returned tuple data and convert Postgres array
+ * attributes into Tcl lists. CAUTION: this conversion is *wrong* unless
+ * you install the routines in contrib/string/string_io to make the backend
+ * produce C-style backslash sequences in the first place.
+ */
+/* #define TCL_ARRAYS */
+
+/*
+ * User locks are handled totally on the application side as long term
+ * cooperative locks which extend beyond the normal transaction boundaries.
+ * Their purpose is to indicate to an application that someone is `working'
+ * on an item. Define this flag to enable user locks. You will need the
+ * loadable module user-locks.c to use this feature.
+ */
+#define USER_LOCKS
+
+/*
+ * Define this if you want psql to _always_ ask for a username and a password
+ * for password authentication.
+ */
+/* #define PSQL_ALWAYS_GET_PASSWORDS */
+
+/*
+ * Define this if you want to allow the lo_import and lo_export SQL functions
+ * to be executed by ordinary users. By default these functions are only
+ * available to the Postgres superuser. CAUTION: these functions are
+ * SECURITY HOLES since they can read and write any file that the Postgres
+ * backend has permission to access. If you turn this on, don't say we
+ * didn't warn you.
+ */
+/* #define ALLOW_DANGEROUS_LO_FUNCTIONS */
+
+/*
+ * Use btree bulkload code:
+ * this code is moderately slow (~10% slower) compared to the regular
+ * btree (insertion) build code on sorted or well-clustered data. on
+ * random data, however, the insertion build code is unusable -- the
+ * difference on a 60MB heap is a factor of 15 because the random
+ * probes into the btree thrash the buffer pool.
+ *
+ * Great thanks to Paul M. Aoki (aoki@CS.Berkeley.EDU)
+ */
+#define FASTBUILD /* access/nbtree/nbtsort.c */
+
+/*
+ * MAXPGPATH: standard size of a pathname buffer in Postgres (hence,
+ * maximum usable pathname length is one less).
+ *
+ * We'd use a standard system header symbol for this, if there weren't
+ * so many to choose from: MAXPATHLEN, _POSIX_PATH_MAX, MAX_PATH, PATH_MAX
+ * are all defined by different "standards", and often have different
+ * values on the same platform!  So we just punt and use a reasonably
+ * generous setting here.
+ */
+#define MAXPGPATH 1024
+
+/*
+ * DEFAULT_MAX_EXPR_DEPTH: default value of max_expr_depth SET variable.
+ */
+#define DEFAULT_MAX_EXPR_DEPTH 10000
+
+/*
+ * You can try changing this if you have a machine with bytes of another
+ * size, but no guarantee...
+ */
+#define BITS_PER_BYTE 8
+
+/*
+ * Define this if your operating system supports AF_UNIX family sockets.
+ */
+#if !defined(__QNX__) && !defined(__BEOS__)
+# define HAVE_UNIX_SOCKETS 1
+#endif
+
+/*
+ * This is the default directory in which AF_UNIX socket files are placed.
+ * Caution: changing this risks breaking your existing client applications,
+ * which are likely to continue to look in the old directory. But if you
+ * just hate the idea of sockets in /tmp, here's where to twiddle it.
+ * You can also override this at runtime with the postmaster's -k switch.
+ */
+#define DEFAULT_PGSOCKET_DIR "/tmp"
+
+/*
+ *------------------------------------------------------------------------
+ * These hand-configurable symbols are for enabling debugging code,
+ * not for controlling user-visible features or resource limits.
+ *------------------------------------------------------------------------
+ */
+
+/* Define this to cause pfree()'d memory to be cleared immediately,
+ * to facilitate catching bugs that refer to already-freed values.
+ * XXX For 7.1 development, define this automatically if --enable-cassert.
+ * In the long term it probably doesn't need to be on by default.
+ */
+#ifdef USE_ASSERT_CHECKING
+# define CLOBBER_FREED_MEMORY
+#endif
+
+/* Define this to check memory allocation errors (scribbling on more
+ * bytes than were allocated).
+ * XXX For 7.1 development, define this automatically if --enable-cassert.
+ * In the long term it probably doesn't need to be on by default.
+ */
+#ifdef USE_ASSERT_CHECKING
+# define MEMORY_CONTEXT_CHECKING
+#endif
+
+/* Define this to force all parse and plan trees to be passed through
+ * copyObject(), to facilitate catching errors and omissions in copyObject().
+ */
+/* #define COPY_PARSE_PLAN_TREES */
+
+/* Enable debugging print statements in the date/time support routines. */
+/* #define DATEDEBUG */
+
+/* Enable debugging print statements for lock-related operations. */
+#define LOCK_DEBUG
+
+/*
+ * Other debug #defines (documentation, anyone?)
+ */
+/* #define IPORTAL_DEBUG  */
+/* #define HEAPDEBUGALL  */
+/* #define ISTRATDEBUG  */
+/* #define ACLDEBUG */
+/* #define RTDEBUG */
+/* #define GISTDEBUG */
+/* #define OMIT_PARTIAL_INDEX */
+
+/*
+ *------------------------------------------------------------------------
+ * Part 3: system configuration information that is auto-detected by
+ * configure. In theory you shouldn't have to touch any of this stuff
+ * by hand. In the real world, configure might get it wrong...
+ *------------------------------------------------------------------------
+ */
+
+/* Define const as empty if your compiler doesn't grok const. */
+/* #undef const */
+
+/* Define as your compiler's spelling of "inline", or empty if no inline. */
+/* #undef inline */
+
+/* Define as empty if the C compiler doesn't understand "signed". */
+/* #undef signed */
+
+/* Define as empty if the C compiler doesn't understand "volatile". */
+/* #undef volatile */
+
+/* Define if your cpp understands the ANSI stringizing operators in macros */
+#define HAVE_STRINGIZE 1
+
+/* Set to 1 if you have <crypt.h> */
+#if !WIN32
+# define HAVE_CRYPT_H 1
+#endif
+
+/* Set to 1 if you have <dld.h> */
+/* #undef HAVE_DLD_H */
+
+/* Set to 1 if you have <endian.h> */
+#if !WIN32 && !SUN4S && !SUNIS && !HPITANIUM
+# define HAVE_ENDIAN_H 1
+#endif
+
+/* Set to 1 if you have <fp_class.h> */
+/* #undef HAVE_FP_CLASS_H */
+
+/* Set to 1 if you have <getopt.h> */
+#if LINUX
+# define HAVE_GETOPT_H 1
+#else
+/* #undef HAVE_GETOPT_H */
+#endif
+
+/* Set to 1 if you have <history.h> */
+/* #undef HAVE_HISTORY_H */
+
+/* Set to 1 if you have <ieeefp.h> */
+#if SUN4S
+# define HAVE_IEEEFP_H 1
+#else
+/* #undef HAVE_IEEEFP_H */
+#endif
+
+/* Set to 1 if you have <netinet/tcp.h> */
+#define HAVE_NETINET_TCP_H 1
+
+/* Set to 1 if you have <readline.h> */
+/* #undef HAVE_READLINE_H */
+
+/* Set to 1 if you have <readline/history.h> */
+#if !WIN32
+# define HAVE_READLINE_HISTORY_H 1
+#endif
+
+/* Set to 1 if you have <readline/readline.h> */
+#if !WIN32
+# define HAVE_READLINE_READLINE_H 1
+#endif
+
+/* Set to 1 if you have <sys/ipc.h> */
+#if !WIN32
+# define HAVE_SYS_IPC_H 1
+#endif
+
+/* Set to 1 if  you have <sys/select.h> */
+#if !WIN32 && !HP800 && !HPITANIUM
+# define HAVE_SYS_SELECT_H 1
+#endif
+
+/* Set to 1 if you have <sys/un.h> */
+#define HAVE_SYS_UN_H 1
+
+/* Set to 1 if you have <sys/sem.h> */
+#define HAVE_SYS_SEM_H 1
+
+/* Set to 1 if you have <sys/shm.h> */
+#define HAVE_SYS_SHM_H 1
+
+/* Set to 1 if you have <kernel/OS.h> */
+/* #undef HAVE_KERNEL_OS_H */
+
+/* Set to 1 if you have <SupportDefs.h> */
+/* #undef HAVE_SUPPORTDEFS_H */
+
+/* Set to 1 if you have <kernel/image.h> */
+/* #undef HAVE_KERNEL_IMAGE_H */
+
+/* Set to 1 if you have <termios.h> */
+#if !WIN32
+# define HAVE_TERMIOS_H 1
+#endif
+
+/* Set to 1 if you have <sys/pstat.h> */
+/* #undef HAVE_SYS_PSTAT_H */
+
+/* Define if string.h and strings.h may both be included */
+#if !WIN32
+# define STRING_H_WITH_STRINGS_H 1
+#endif
+
+/* Define if you have the setproctitle function.  */
+/* #undef HAVE_SETPROCTITLE */
+
+/* Define if you have the pstat function. */
+/* #undef HAVE_PSTAT */
+
+/* Define if the PS_STRINGS thing exists. */
+/* #undef HAVE_PS_STRINGS */
+
+/* Define if you have the stricmp function.  */
+/* #undef HAVE_STRICMP */
+
+/* Set to 1 if you have history functions (either in libhistory or libreadline) */
+#define HAVE_HISTORY_FUNCTIONS 1
+
+/* Set to 1 if you have <pwd.h> */
+#define HAVE_PWD_H 1
+
+/* Set to 1 if you have gettimeofday(a) instead of gettimeofday(a,b) */
+/* #undef GETTIMEOFDAY_1ARG */
+#ifdef GETTIMEOFDAY_1ARG
+# define gettimeofday(a, b) gettimeofday(a)
+#endif
+
+/* Set to 1 if you have snprintf() in the C library */
+#define HAVE_SNPRINTF 1
+
+/* Set to 1 if your standard system headers declare snprintf() */
+#define HAVE_SNPRINTF_DECL 1
+
+/* Set to 1 if you have vsnprintf() in the C library */
+#define HAVE_VSNPRINTF 1
+
+/* Set to 1 if your standard system headers declare vsnprintf() */
+#define HAVE_VSNPRINTF_DECL 1
+
+/* Set to 1 if you have strerror() */
+#define HAVE_STRERROR 1
+
+/* Set to 1 if you have isinf() */
+#if !SUN4S && !SUNIS
+# define HAVE_ISINF 1
+#endif
+#ifndef HAVE_ISINF
+extern int isinf(double x);
+#endif
+
+/*
+ *  These are all related to port/isinf.c
+ */
+/* #undef HAVE_FPCLASS */
+/* #undef HAVE_FP_CLASS */
+/* #undef HAVE_FP_CLASS_H */
+/* #undef HAVE_FP_CLASS_D */
+/* #undef HAVE_CLASS */
+
+/* Set to 1 if you have gethostname() */
+#define HAVE_GETHOSTNAME 1
+#ifndef HAVE_GETHOSTNAME
+extern int gethostname(char *name, int namelen);
+#endif
+
+/* Set to 1 if struct tm has a tm_zone member */
+#if !__PPC__ // !FIX-bmz hack
+# if defined(LINUX)
+#  define HAVE_TM_ZONE 1
+# elif defined(SUN4S)
+#  define HAVE_INT_TIMEZONE 1
+# endif
+#endif
+
+/* Set to 1 if you have int timezone.
+ * NOTE: if both tm_zone and a global timezone variable exist,
+ * usingclause the tm_zone field should probably be preferred,
+ * since global variables are inherently not thread-safe.
+ */
+#if __PPC__ // !FIX-bmz hack
+# define HAVE_INT_TIMEZONE 1
+#endif
+
+/* Set to 1 if you have cbrt() */
+#define HAVE_CBRT 1
+
+/* Set to 1 if you have inet_aton() */
+#if !HP800 && !HPITANIUM
+# define HAVE_INET_ATON 1
+#endif
+
+#ifndef HAVE_INET_ATON
+# include <sys/types.h>
+# include <netinet/in.h>
+# include <arpa/inet.h>
+extern int inet_aton(const char *cp, struct in_addr *addr);
+#endif
+
+/* Set to 1 if you have fcvt() */
+#define HAVE_FCVT 1
+
+/* Set to 1 if you have rint() */
+#define HAVE_RINT 1
+
+/* Set to 1 if you have finite() */
+#if !HP800 && !HPITANIUM
+# define HAVE_FINITE 1
+#endif
+
+/* Set to 1 if you have memmove() */
+#define HAVE_MEMMOVE 1
+
+/* Set to 1 if you have sigsetjmp() */
+#define HAVE_SIGSETJMP 1
+
+/*
+ * When there is no sigsetjmp, its functionality is provided by plain
+ * setjmp. Incidentally, nothing provides setjmp's functionality in
+ * that case.
+ */
+#ifndef HAVE_SIGSETJMP
+# define sigjmp_buf      jmp_buf
+# define sigsetjmp(x, y) setjmp(x)
+# define siglongjmp      longjmp
+#endif
+
+/* Set to 1 if you have sysconf() */
+#define HAVE_SYSCONF 1
+
+/* Set to 1 if you have getrusage() */
+#define HAVE_GETRUSAGE 1
+
+/* Set to 1 if you have waitpid() */
+#define HAVE_WAITPID 1
+
+/* Set to 1 if you have setsid() */
+#define HAVE_SETSID 1
+
+/* Set to 1 if you have sigprocmask() */
+#define HAVE_SIGPROCMASK 1
+
+/* Set to 1 if you have sigprocmask() */
+#define HAVE_STRCASECMP 1
+#ifndef HAVE_STRCASECMP
+extern int strcasecmp(const char *s1, const char *s2);
+#endif
+
+/* Set to 1 if you have strtol() */
+#define HAVE_STRTOL 1
+
+/* Set to 1 if you have strtoul() */
+#define HAVE_STRTOUL 1
+
+/* Set to 1 if you have strdup() */
+#define HAVE_STRDUP 1
+#ifndef HAVE_STRDUP
+extern char *strdup(char const *);
+#endif
+
+/* Set to 1 if you have random() */
+#define HAVE_RANDOM 1
+#ifndef HAVE_RANDOM
+extern long random(void);
+#endif
+
+/* Set to 1 if you have srandom() */
+#define HAVE_SRANDOM 1
+#ifndef HAVE_SRANDOM
+extern void srandom(unsigned int seed);
+#endif
+
+/* The random() function is expected to yield values 0 .. MAX_RANDOM_VALUE */
+/* Currently, all known implementations yield 0..2^31-1, so we just hardwire
+ * this constant. We could do a configure test if it proves to be necessary.
+ * CAUTION: Think not to replace this with RAND_MAX. RAND_MAX defines the
+ * maximum value of the older rand() function, which is often different from
+ * --- and considerably inferior to --- random().
+ */
+#define MAX_RANDOM_VALUE (0x7FFFFFFF)
+
+/* Define if you have dlopen() */
+#define HAVE_DLOPEN 1
+
+/* Define if you have fdatasync() */
+#if !SUN4S
+# define HAVE_FDATASYNC 1
+#endif
+
+/* Define if the standard header unistd.h declares fdatasync() */
+#define HAVE_FDATASYNC_DECL 1
+
+#if defined(HAVE_FDATASYNC) && !defined(HAVE_FDATASYNC_DECL)
+extern int fdatasync(int fildes);
+#endif
+
+/* Set to 1 if you have libz.a */
+#if SUN4S
+/* #undef HAVE_LIBZ */
+#else
+# define HAVE_LIBZ 1
+#endif
+
+/* Set to 1 if you have libreadline.a */
+#define HAVE_LIBREADLINE 1
+
+/* Set to 1 if you have libhistory.a */
+/* #undef HAVE_LIBHISTORY */
+
+/* Set to 1 if your libreadline defines rl_completion_append_character */
+#define HAVE_RL_COMPLETION_APPEND_CHARACTER 1
+
+/* Set to 1 if filename_completion_function is declared in the readline header */
+#define HAVE_FILENAME_COMPLETION_FUNCTION_DECL 1
+
+/* Set to 1 if you have getopt_long() (GNU long options) */
+#if !SUN4S
+# define HAVE_GETOPT_LONG 1
+#endif
+
+/* Set to 1 if you have union semun */
+/* #undef HAVE_UNION_SEMUN */
+
+/* Set to 1 if you have struct sockaddr_un */
+#if !WIN32
+# define HAVE_STRUCT_SOCKADDR_UN 1
+#endif
+
+/* Set to 1 if type "long int" works and is 64 bits */
+/* #undef HAVE_LONG_INT_64 */
+
+/* Set to 1 if type "long long int" works and is 64 bits */
+#define HAVE_LONG_LONG_INT_64
+
+/* Set to 1 if type "long long int" constants should be suffixed by LL */
+#if SUN4S
+# define HAVE_LL_CONSTANTS 1
+#endif
+
+/*
+ * These must be defined as the alignment requirement (NOT the size) of
+ * each of the basic C data types (except char, which we assume has align 1).
+ * MAXIMUM_ALIGNOF is the largest alignment requirement for any C data type.
+ * ALIGNOF_LONG_LONG_INT need only be defined if HAVE_LONG_LONG_INT_64 is.
+ */
+#define ALIGNOF_SHORT 2
+#define ALIGNOF_INT   4
+#define ALIGNOF_LONG  4
+#if SUN4S || (HPITANIUM && defined(__LP64__))
+# define ALIGNOF_LONG_LONG_INT 8
+# define ALIGNOF_DOUBLE        8
+# define MAXIMUM_ALIGNOF       8
+#else
+# define ALIGNOF_LONG_LONG_INT 4
+# define ALIGNOF_DOUBLE        4
+# define MAXIMUM_ALIGNOF       4
+#endif
+
+/*
+ * 64 bit compatibility - below
+ * we use sizes appropriate for LP64 data model
+ */
+
+#undef ALIGNOF_DOUBLE
+#ifdef __x86_64__
+# define ALIGNOF_DOUBLE 8
+#else
+# define ALIGNOF_DOUBLE 4
+#endif
+#undef ALIGNOF_LONG
+#ifdef __x86_64__
+# define ALIGNOF_LONG 8
+#else
+# define ALIGNOF_LONG 4
+#endif
+#undef ALIGNOF_LONG_LONG_INT
+#ifndef __x86_64__
+# define ALIGNOF_LONG_LONG_INT 4
+#endif
+#undef FLOAT8PASSBYVAL
+#ifdef __x86_64__
+# define FLOAT8PASSBYVAL true
+#else
+# define FLOAT8PASSBYVAL false
+#endif
+#undef HAVE_LL_CONSTANTS
+#ifndef __x86_64__
+# define HAVE_LL_CONSTANTS 1
+#endif
+#undef HAVE_LONG_INT_64
+#undef HAVE_LONG_LONG_INT_64
+#ifdef __x86_64__
+# define HAVE_LONG_INT_64 1
+#else
+# define HAVE_LONG_LONG_INT_64 1
+#endif
+#undef INT64_FORMAT
+#define INT64_FORMAT "%" PRId64 ""
+#undef MAXIMUM_ALIGNOF
+#if defined(__x86_64__) || (HPITANIUM && defined(__LP64__)) || SUN4S
+# define MAXIMUM_ALIGNOF 8
+#else
+# define MAXIMUM_ALIGNOF 4
+#endif
+#undef SIZEOF_SIZE_T
+#ifdef __x86_64__
+# define SIZEOF_SIZE_T 8
+#else
+# define SIZEOF_SIZE_T 4
+#endif
+#undef SIZEOF_UNSIGNED_LONG
+#ifdef __x86_64__
+# define SIZEOF_UNSIGNED_LONG 8
+#else
+# define SIZEOF_UNSIGNED_LONG 4
+#endif
+#undef UINT64_FORMAT
+#define UINT64_FORMAT "%" PRIu64 ""
+#undef USE_FLOAT8_BYVAL
+#ifdef __x86_64__
+# define USE_FLOAT8_BYVAL 1
+#endif
+
+#undef _FILE_OFFSET_BITS
+#define _FILE_OFFSET_BITS 64
+
+/* end of 64 bit compatibility */
+
+/* Define as the type of the 3rd argument to accept() */
+
+/*
+ * :host64: possible change
+ *
+ * it might be needed to change the ACCEPT_TYPE_ARG3 to socklen_t
+ * due to changed accept prototype. We should rely
+ * on socklen_t type from socket.h
+ *
+ * extern int accept (int __fd, __SOCKADDR_ARG __addr,
+ *          socklen_t *__restrict __addr_len);
+ */
+
+#if SUN4S || HPITANIUM
+# define ACCEPT_TYPE_ARG3 int
+#else
+# define ACCEPT_TYPE_ARG3 socklen_t // :host64:
+#endif
+
+/* Define if POSIX signal interface is available */
+#if !WIN32
+# define HAVE_POSIX_SIGNALS
+#endif
+
+/* Define if C++ compiler accepts "usingclause namespace std" */
+/* #undef HAVE_NAMESPACE_STD */
+
+/* Define if C++ compiler accepts "#include <string>" */
+/* #undef HAVE_CXX_STRING_HEADER */
+
+/* Define if you have the optreset variable */
+/* #undef HAVE_INT_OPTRESET */
+
+/* Define if you have strtoll() */
+#if !HP800 && !AIX && !HPITANIUM
+# define HAVE_STRTOLL 1
+#endif
+
+/* Define if you have strtoq() */
+/* #undef HAVE_STRTOQ */
+
+/* If strtoq() exists, rename it to the more standard strtoll() */
+#if defined(HAVE_LONG_LONG_INT_64) && !defined(HAVE_STRTOLL) && defined(HAVE_STRTOQ)
+# define strtoll      strtoq
+# define HAVE_STRTOLL 1
+#endif
+
+/* Define if you have strtoull() */
+#define HAVE_STRTOULL 1
+
+/* Define if you have strtouq() */
+/* #undef HAVE_STRTOUQ */
+
+/* If strtouq() exists, rename it to the more standard strtoull() */
+#if defined(HAVE_LONG_LONG_INT_64) && !defined(HAVE_STRTOULL) && defined(HAVE_STRTOUQ)
+# define strtoull      strtouq
+# define HAVE_STRTOULL 1
+#endif
+
+/* Define if you have atexit() */
+#define HAVE_ATEXIT 1
+
+/* Define if you have on_exit() */
+/* #undef HAVE_ON_EXIT */
+
+/*
+ *------------------------------------------------------------------------
+ * Part 4: pull in system-specific declarations.
+ *
+ * This is still configure's responsibility, because it picks where
+ * the "os.h" symlink points...
+ *------------------------------------------------------------------------
+ */
+
+/*
+ * Pull in OS-specific declarations (usingclause link created by configure)
+ */
+
+#include "os.h"
+
+/*
+ * The following is used as the arg list for signal handlers. Any ports
+ * that take something other than an int argument should override this in
+ * the port-specific os.h file. Note that variable names are required
+ * because it is used in both the prototypes as well as the definitions.
+ * Note also the long name. We expect that this won't collide with
+ * other names causing compiler warnings.
+ */
+
+#ifndef SIGNAL_ARGS
+# define SIGNAL_ARGS int postgres_signal_arg
+#endif
+
+#endif /* CONFIG_H */
diff --git a/nz_include/postgres_ext.h b/nz_include/postgres_ext.h
new file mode 100644
index 00000000..5f3b46c8
--- /dev/null
+++ b/nz_include/postgres_ext.h
@@ -0,0 +1,88 @@
+#ifndef POSTGRES_EXT_H
+#define POSTGRES_EXT_H
+/// @file postgres_ext.h
+/// @brief Definitions shared between postgres and other parts of NPS
+///
+//////////////////////////////////////////////////////////////////////
+/// Copyright (c) 2008 Netezza Corporation.
+//////////////////////////////////////////////////////////////////////
+///
+/// Description:
+///
+///
+///
+/// postgres_ext.h
+///
+///       This file contains declarations of things that are visible everywhere
+///  in PostgreSQL *and* are visible to clients of frontend interface libraries.
+///    For example, the Oid type is part of the API of libpq and other libraries.
+///
+///       Declarations which are specific to a particular interface should
+///    go in the header file for that interface (such as libpq-fe.h).    This
+///    file is only for fundamental Postgres declarations.
+///
+///       User-written C functions don't count as "external to Postgres."
+///    Those function much as local modifications to the backend itself, and
+///    use header files that are otherwise internal to Postgres to interface
+///    with the backend.
+///
+///
+///
+/// dd - 2008-02-07
+//////////////////////////////////////////////////////////////////////
+
+#include "limits.h"
+
+// :host64:
+#include "comtypes.h"
+
+#define InvalidOid ((Oid) 0)
+
+/*
+ * NAMEDATALEN is the max length for system identifiers (e.g. table names,
+ * attribute names, function names, etc.)
+ *
+ * NOTE that databases with different NAMEDATALEN's cannot interoperate!
+ */
+#define NAMEDATALEN         256 // supported length for database object names is 128 UTF-8 characters
+#define MAX_IDENTIFIER      128 // supported number of characters for database object names
+#define MAX_CFIELD          512 // supported number of characters for client info field names
+#define MAX_BYTES_PER_NCHAR 4
+#define CFIELDDATALEN \
+ (MAX_CFIELD * MAX_BYTES_PER_NCHAR) // supported length for client information fields
+#define MAX_SYSOID           200000
+#define NUM_BASE_VIEW_ATTRS  6
+#define NUM_ROW_SECURE_ATTRS 4
+#define MAX_PASSWORD_LENGTH  2048 // maximum password length
+
+/*
+ * StrNCpy
+ *    Like standard library function strncpy(), except that result string
+ *    is guaranteed to be null-terminated --- that is, at most N-1 bytes
+ *    of the source string will be kept.
+ *    Also, the macro returns no result (too hard to do that without
+ *    evaluating the arguments multiple times, which seems worse).
+ *
+ *    BTW: when you need to copy a non-null-terminated string (like a text
+ *    datum) and add a null, do not do it with StrNCpy(..., len+1). That
+ *    might seem to work, but it fetches one byte more than there is in the
+ *    text object. One fine day you'll have a SIGSEGV because there isn't
+ *    another byte before the end of memory. Don't laugh, we've had real
+ *    live bug reports from real live users over exactly this mistake.
+ *    Do it honestly with "memcpy(dst,src,len); dst[len] = '\0';", instead.
+ */
+#ifdef StrNCpy
+# undef StrNCpy
+#endif
+#define StrNCpy(dst, src, len) \
+ do {                          \
+  char* _dst = (dst);          \
+  int _len = (len);            \
+                               \
+  if (_len > 0) {              \
+   strncpy(_dst, (src), _len); \
+   _dst[_len - 1] = '\0';      \
+  }                            \
+ } while (0)
+
+#endif
diff --git a/nz_lib/libnzpq.so b/nz_lib/libnzpq.so
new file mode 100755
index 00000000..b5d7c646
Binary files /dev/null and b/nz_lib/libnzpq.so differ
diff --git a/psycopg/connection.h b/psycopg/connection.h
index 6d61c2eb..9b9c1e3e 100644
--- a/psycopg/connection.h
+++ b/psycopg/connection.h
@@ -102,7 +102,7 @@ struct connectionObject {
     int server_version;       /* server version */
 
     PGconn *pgconn;           /* the postgresql connection */
-    PGcancel *cancel;         /* the cancellation structure */
+    int *cancel;         /* the cancellation structure */
 
     /* Weakref to the object executing an asynchronous query. The object
      * is a cursor for async connections, but it may be something else
diff --git a/setup.py b/setup.py
index 37f6b5c0..220bd6f1 100644
--- a/setup.py
+++ b/setup.py
@@ -339,6 +339,9 @@ For further information please check the 'doc/src/install.rst' file (also at
     def finalize_linux(self):
         """Finalize build system configuration on GNU/Linux platform."""
         # tell piro that GCC is fine and dandy, but not so MS compilers
+        self.libraries.append("krb5")
+        self.libraries.append("ssl")
+        self.libraries.append("k5crypto")
         for extension in self.extensions:
             extension.extra_compile_args.append(
                 '-Wdeclaration-after-statement')
@@ -358,16 +361,18 @@ For further information please check the 'doc/src/install.rst' file (also at
         pg_config_helper = PostgresConfig(self)
 
         self.include_dirs.append(".")
+        self.include_dirs.append("./nz_include")
         if self.static_libpq:
             if not getattr(self, 'link_objects', None):
                 self.link_objects = []
             self.link_objects.append(
                 os.path.join(pg_config_helper.query("libdir"), "libpq.a"))
         else:
-            self.libraries.append("pq")
+            self.libraries.append("nzpq")
 
         try:
             self.library_dirs.append(pg_config_helper.query("libdir"))
+            self.library_dirs.append("./nz_lib")
             self.include_dirs.append(pg_config_helper.query("includedir"))
             self.include_dirs.append(pg_config_helper.query("includedir-server"))