postgres.h
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:5k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * postgres.h
  4.  *   definition of (and support for) postgres system types.
  5.  * this file is included by almost every .c in the system
  6.  *
  7.  * Copyright (c) 1995, Regents of the University of California
  8.  *
  9.  * $Id: postgres.h,v 1.23 1999/06/10 22:59:22 momjian Exp $
  10.  *
  11.  *-------------------------------------------------------------------------
  12.  */
  13. /*
  14.  *  NOTES
  15.  * this file will eventually contain the definitions for the
  16.  * following (and perhaps other) system types:
  17.  *
  18.  * int2    int4   float4    float8
  19.  * Oid    regproc   RegProcedure
  20.  * aclitem
  21.  * struct varlena
  22.  * int28   oid8
  23.  * bytea    text
  24.  * NameData   Name
  25.  *
  26.  *  TABLE OF CONTENTS
  27.  * 1) simple type definitions
  28.  * 2) varlena and array types
  29.  * 3) TransactionId and CommandId
  30.  * 4) genbki macros used by catalog/pg_xxx.h files
  31.  * 5) random CSIGNBIT, MAXPGPATH, STATUS macros
  32.  *
  33.  * ----------------------------------------------------------------
  34.  */
  35. #ifndef POSTGRES_H
  36. #define POSTGRES_H
  37. #include "postgres_ext.h"
  38. #ifndef WIN32
  39. #include "config.h"
  40. #endif
  41. #include "c.h"
  42. #include "utils/elog.h"
  43. #include "utils/palloc.h"
  44. /* ----------------------------------------------------------------
  45.  * Section 1: simple type definitions
  46.  * ----------------------------------------------------------------
  47.  */
  48. typedef int16 int2;
  49. typedef int32 int4;
  50. typedef float float4;
  51. typedef double float8;
  52. typedef int4 aclitem;
  53. #define InvalidOid 0
  54. #define OidIsValid(objectId)  ((bool) (objectId != InvalidOid))
  55. /* unfortunately, both regproc and RegProcedure are used */
  56. typedef Oid regproc;
  57. typedef Oid RegProcedure;
  58. /* ptr to func returning (char *) */
  59. #if defined(__mc68000__) && defined(__ELF__)
  60. /* The m68k SVR4 ABI defines that pointers are returned in %a0 instead of
  61.  * %d0. So if a function pointer is declared to return a pointer, the
  62.  * compiler may look only into %a0, but if the called function was declared
  63.  * to return return an integer type, it puts its value only into %d0. So the
  64.  * caller doesn't pink up the correct return value. The solution is to
  65.  * declare the function pointer to return int, so the compiler picks up the
  66.  * return value from %d0. (Functions returning pointers put their value
  67.  * *additionally* into %d0 for compability.) The price is that there are
  68.  * some warnings about int->pointer conversions...
  69.  */
  70. typedef int32 ((*func_ptr) ());
  71. #else 
  72. typedef char *((*func_ptr) ());
  73. #endif
  74. #define RegProcedureIsValid(p) OidIsValid(p)
  75. /* ----------------------------------------------------------------
  76.  * Section 2: variable length and array types
  77.  * ----------------------------------------------------------------
  78.  */
  79. /* ----------------
  80.  * struct varlena
  81.  * ----------------
  82.  */
  83. struct varlena
  84. {
  85. int32 vl_len;
  86. char vl_dat[1];
  87. };
  88. #define VARSIZE(PTR) (((struct varlena *)(PTR))->vl_len)
  89. #define VARDATA(PTR) (((struct varlena *)(PTR))->vl_dat)
  90. #define VARHDRSZ sizeof(int32)
  91. typedef struct varlena bytea;
  92. typedef struct varlena text;
  93. typedef int2 int28[8];
  94. typedef Oid oid8[8];
  95. /* We want NameData to have length NAMEDATALEN and int alignment,
  96.  * because that's how the data type 'name' is defined in pg_type.
  97.  * Use a union to make sure the compiler agrees.
  98.  */
  99. typedef union nameData
  100. {
  101. char data[NAMEDATALEN];
  102. int alignmentDummy;
  103. } NameData;
  104. typedef NameData *Name;
  105. /* ----------------------------------------------------------------
  106.  * Section 3: TransactionId and CommandId
  107.  * ----------------------------------------------------------------
  108.  */
  109. typedef uint32 TransactionId;
  110. #define InvalidTransactionId 0
  111. typedef uint32 CommandId;
  112. #define FirstCommandId 0
  113. /* ----------------------------------------------------------------
  114.  * Section 4: genbki macros used by the
  115.  *    catalog/pg_xxx.h files
  116.  * ----------------------------------------------------------------
  117.  */
  118. #define CATALOG(x) 
  119. typedef struct CppConcat(FormData_,x)
  120. #define DATA(x) extern int errno
  121. #define DESCR(x) extern int errno
  122. #define DECLARE_INDEX(x) extern int errno
  123. #define BUILD_INDICES
  124. #define BOOTSTRAP
  125. #define BKI_BEGIN
  126. #define BKI_END
  127. /* ----------------------------------------------------------------
  128.  * Section 5: random stuff
  129.  * CSIGNBIT, MAXPGPATH, STATUS...
  130.  * ----------------------------------------------------------------
  131.  */
  132. /* msb for int/unsigned */
  133. #define ISIGNBIT (0x80000000)
  134. #define WSIGNBIT (0x8000)
  135. /* msb for char */
  136. #define CSIGNBIT (0x80)
  137. /* ----------------
  138.  * global variables which should probably go someplace else.
  139.  * ----------------
  140.  */
  141. #define MAXPGPATH 128
  142. #define MAX_QUERY_SIZE (BLCKSZ*2)
  143. #define STATUS_OK (0)
  144. #define STATUS_ERROR (-1)
  145. #define STATUS_NOT_FOUND (-2)
  146. #define STATUS_INVALID (-3)
  147. #define STATUS_UNCATALOGUED (-4)
  148. #define STATUS_REPLACED (-5)
  149. #define STATUS_NOT_DONE (-6)
  150. #define STATUS_BAD_PACKET (-7)
  151. #define STATUS_FOUND (1)
  152. /* ---------------
  153.  * Cyrillic on the fly charsets recode
  154.  * ---------------
  155.  */
  156. #ifdef CYR_RECODE
  157. void SetCharSet();
  158. #endif  /* CYR_RECODE */
  159. #endif  /* POSTGRES_H */