spi.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. /*-------------------------------------------------------------------------
  2. *
  3. * spi.h
  4. * Server Programming Interface public declarations
  5. *
  6. * Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group
  7. * Portions Copyright (c) 1994, Regents of the University of California
  8. *
  9. * src/include/executor/spi.h
  10. *
  11. *-------------------------------------------------------------------------
  12. */
  13. #ifndef SPI_H
  14. #define SPI_H
  15. #include "lib/ilist.h"
  16. #include "nodes/parsenodes.h"
  17. #include "utils/portal.h"
  18. typedef struct SPITupleTable
  19. {
  20. MemoryContext tuptabcxt; /* memory context of result table */
  21. uint64 alloced; /* # of alloced vals */
  22. uint64 free; /* # of free vals */
  23. TupleDesc tupdesc; /* tuple descriptor */
  24. HeapTuple *vals; /* tuples */
  25. slist_node next; /* link for internal bookkeeping */
  26. SubTransactionId subid; /* subxact in which tuptable was created */
  27. } SPITupleTable;
  28. /* Plans are opaque structs for standard users of SPI */
  29. typedef struct _SPI_plan *SPIPlanPtr;
  30. #define SPI_ERROR_CONNECT (-1)
  31. #define SPI_ERROR_COPY (-2)
  32. #define SPI_ERROR_OPUNKNOWN (-3)
  33. #define SPI_ERROR_UNCONNECTED (-4)
  34. #define SPI_ERROR_CURSOR (-5) /* not used anymore */
  35. #define SPI_ERROR_ARGUMENT (-6)
  36. #define SPI_ERROR_PARAM (-7)
  37. #define SPI_ERROR_TRANSACTION (-8)
  38. #define SPI_ERROR_NOATTRIBUTE (-9)
  39. #define SPI_ERROR_NOOUTFUNC (-10)
  40. #define SPI_ERROR_TYPUNKNOWN (-11)
  41. #define SPI_OK_CONNECT 1
  42. #define SPI_OK_FINISH 2
  43. #define SPI_OK_FETCH 3
  44. #define SPI_OK_UTILITY 4
  45. #define SPI_OK_SELECT 5
  46. #define SPI_OK_SELINTO 6
  47. #define SPI_OK_INSERT 7
  48. #define SPI_OK_DELETE 8
  49. #define SPI_OK_UPDATE 9
  50. #define SPI_OK_CURSOR 10
  51. #define SPI_OK_INSERT_RETURNING 11
  52. #define SPI_OK_DELETE_RETURNING 12
  53. #define SPI_OK_UPDATE_RETURNING 13
  54. #define SPI_OK_REWRITTEN 14
  55. extern PGDLLIMPORT uint64 SPI_processed;
  56. extern PGDLLIMPORT Oid SPI_lastoid;
  57. extern PGDLLIMPORT SPITupleTable *SPI_tuptable;
  58. extern PGDLLIMPORT int SPI_result;
  59. extern int SPI_connect(void);
  60. extern int SPI_finish(void);
  61. extern void SPI_push(void);
  62. extern void SPI_pop(void);
  63. extern bool SPI_push_conditional(void);
  64. extern void SPI_pop_conditional(bool pushed);
  65. extern void SPI_restore_connection(void);
  66. extern int SPI_execute(const char *src, bool read_only, long tcount);
  67. extern int SPI_execute_plan(SPIPlanPtr plan, Datum *Values, const char *Nulls,
  68. bool read_only, long tcount);
  69. extern int SPI_execute_plan_with_paramlist(SPIPlanPtr plan,
  70. ParamListInfo params,
  71. bool read_only, long tcount);
  72. extern int SPI_exec(const char *src, long tcount);
  73. extern int SPI_execp(SPIPlanPtr plan, Datum *Values, const char *Nulls,
  74. long tcount);
  75. extern int SPI_execute_snapshot(SPIPlanPtr plan,
  76. Datum *Values, const char *Nulls,
  77. Snapshot snapshot,
  78. Snapshot crosscheck_snapshot,
  79. bool read_only, bool fire_triggers, long tcount);
  80. extern int SPI_execute_with_args(const char *src,
  81. int nargs, Oid *argtypes,
  82. Datum *Values, const char *Nulls,
  83. bool read_only, long tcount);
  84. extern SPIPlanPtr SPI_prepare(const char *src, int nargs, Oid *argtypes);
  85. extern SPIPlanPtr SPI_prepare_cursor(const char *src, int nargs, Oid *argtypes,
  86. int cursorOptions);
  87. extern SPIPlanPtr SPI_prepare_params(const char *src,
  88. ParserSetupHook parserSetup,
  89. void *parserSetupArg,
  90. int cursorOptions);
  91. extern int SPI_keepplan(SPIPlanPtr plan);
  92. extern SPIPlanPtr SPI_saveplan(SPIPlanPtr plan);
  93. extern int SPI_freeplan(SPIPlanPtr plan);
  94. extern Oid SPI_getargtypeid(SPIPlanPtr plan, int argIndex);
  95. extern int SPI_getargcount(SPIPlanPtr plan);
  96. extern bool SPI_is_cursor_plan(SPIPlanPtr plan);
  97. extern bool SPI_plan_is_valid(SPIPlanPtr plan);
  98. extern const char *SPI_result_code_string(int code);
  99. extern List *SPI_plan_get_plan_sources(SPIPlanPtr plan);
  100. extern CachedPlan *SPI_plan_get_cached_plan(SPIPlanPtr plan);
  101. extern HeapTuple SPI_copytuple(HeapTuple tuple);
  102. extern HeapTupleHeader SPI_returntuple(HeapTuple tuple, TupleDesc tupdesc);
  103. extern HeapTuple SPI_modifytuple(Relation rel, HeapTuple tuple, int natts,
  104. int *attnum, Datum *Values, const char *Nulls);
  105. extern int SPI_fnumber(TupleDesc tupdesc, const char *fname);
  106. extern char *SPI_fname(TupleDesc tupdesc, int fnumber);
  107. extern char *SPI_getvalue(HeapTuple tuple, TupleDesc tupdesc, int fnumber);
  108. extern Datum SPI_getbinval(HeapTuple tuple, TupleDesc tupdesc, int fnumber, bool *isnull);
  109. extern char *SPI_gettype(TupleDesc tupdesc, int fnumber);
  110. extern Oid SPI_gettypeid(TupleDesc tupdesc, int fnumber);
  111. extern char *SPI_getrelname(Relation rel);
  112. extern char *SPI_getnspname(Relation rel);
  113. extern void *SPI_palloc(Size size);
  114. extern void *SPI_repalloc(void *pointer, Size size);
  115. extern void SPI_pfree(void *pointer);
  116. extern Datum SPI_datumTransfer(Datum value, bool typByVal, int typLen);
  117. extern void SPI_freetuple(HeapTuple pointer);
  118. extern void SPI_freetuptable(SPITupleTable *tuptable);
  119. extern Portal SPI_cursor_open(const char *name, SPIPlanPtr plan,
  120. Datum *Values, const char *Nulls, bool read_only);
  121. extern Portal SPI_cursor_open_with_args(const char *name,
  122. const char *src,
  123. int nargs, Oid *argtypes,
  124. Datum *Values, const char *Nulls,
  125. bool read_only, int cursorOptions);
  126. extern Portal SPI_cursor_open_with_paramlist(const char *name, SPIPlanPtr plan,
  127. ParamListInfo params, bool read_only);
  128. extern Portal SPI_cursor_find(const char *name);
  129. extern void SPI_cursor_fetch(Portal portal, bool forward, long count);
  130. extern void SPI_cursor_move(Portal portal, bool forward, long count);
  131. extern void SPI_scroll_cursor_fetch(Portal, FetchDirection direction, long count);
  132. extern void SPI_scroll_cursor_move(Portal, FetchDirection direction, long count);
  133. extern void SPI_cursor_close(Portal portal);
  134. extern void AtEOXact_SPI(bool isCommit);
  135. extern void AtEOSubXact_SPI(bool isCommit, SubTransactionId mySubid);
  136. #endif /* SPI_H */