postgres3.pp 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495
  1. { This unit contains the definitions for structures and externs for
  2. functions used by frontend postgres applications. It is based on
  3. Postgresql's libpq-fe.h.
  4. It is for postgreSQL version 7.4 and higher with support for the v3.0
  5. connection-protocol
  6. }
  7. unit postgres3;
  8. interface
  9. uses dllist;
  10. {$PACKRECORDS C}
  11. const
  12. External_library='pq';
  13. Type
  14. PLongint = ^Longint;
  15. PSmallInt = ^SmallInt;
  16. PByte = ^Byte;
  17. PWord = ^Word;
  18. PDWord = ^DWord;
  19. PDouble = ^Double;
  20. size_t = sizeint;
  21. psize_t = ^size_t;
  22. TFILE = Longint;
  23. PFIle = ^TFILE;
  24. POid = ^Oid;
  25. Oid = dword;
  26. const
  27. ERROR_MSG_LENGTH = 4096;
  28. CMDSTATUS_LEN = 40;
  29. Type
  30. TSockAddr = Array [1..112] of byte;
  31. TPGresAttDesc = record
  32. name : Pchar;
  33. adtid : Oid;
  34. adtsize : integer;
  35. end;
  36. PPGresAttDesc= ^TPGresAttDesc;
  37. PPPGresAttDesc= ^PPGresAttDesc;
  38. TPGresAttValue = record
  39. len : longint;
  40. value : Pchar;
  41. end;
  42. PPGresAttValue= ^TPGresAttValue;
  43. PPPGresAttValue= ^PPGresAttValue;
  44. PExecStatusType = ^TExecStatusType;
  45. TExecStatusType = (PGRES_EMPTY_QUERY := 0,PGRES_COMMAND_OK,
  46. PGRES_TUPLES_OK,PGRES_COPY_OUT,PGRES_COPY_IN,
  47. PGRES_BAD_RESPONSE,PGRES_NONFATAL_ERROR,
  48. PGRES_FATAL_ERROR);
  49. TPGlobjfuncs = record
  50. fn_lo_open : Oid;
  51. fn_lo_close : Oid;
  52. fn_lo_creat : Oid;
  53. fn_lo_unlink : Oid;
  54. fn_lo_lseek : Oid;
  55. fn_lo_tell : Oid;
  56. fn_lo_read : Oid;
  57. fn_lo_write : Oid;
  58. end;
  59. PPGlobjfuncs= ^TPGlobjfuncs;
  60. PConnStatusType = ^TConnStatusType;
  61. TConnStatusType = (CONNECTION_OK,CONNECTION_BAD,CONNECTION_STARTED,
  62. CONNECTION_MADE,CONNECTION_AWAITING_RESPONSE,
  63. CONNECTION_AUTH_OK,CONNECTION_SETENV,
  64. CONNECTION_SSL_STARTUP,CONNECTION_NEEDED);
  65. TPGconn = record
  66. pghost : Pchar;
  67. pgtty : Pchar;
  68. pgport : Pchar;
  69. pgoptions : Pchar;
  70. dbName : Pchar;
  71. status : TConnStatusType;
  72. errorMessage : array[0..(ERROR_MSG_LENGTH)-1] of char;
  73. Pfin : PFILE;
  74. Pfout : PFILE;
  75. Pfdebug : PFILE;
  76. sock : longint;
  77. laddr : TSockAddr;
  78. raddr : TSockAddr;
  79. salt : array[0..(2)-1] of char;
  80. asyncNotifyWaiting : longint;
  81. notifyList : PDllist;
  82. pguser : Pchar;
  83. pgpass : Pchar;
  84. lobjfuncs : PPGlobjfuncs;
  85. end;
  86. PPGconn= ^TPGconn;
  87. TPGresult = record
  88. ntups : longint;
  89. numAttributes : longint;
  90. attDescs : PPGresAttDesc;
  91. tuples : PPPGresAttValue;
  92. tupArrSize : longint;
  93. resultStatus : TExecStatusType;
  94. cmdStatus : array[0..(CMDSTATUS_LEN)-1] of char;
  95. binary : longint;
  96. conn : PPGconn;
  97. end;
  98. PPGresult= ^TPGresult;
  99. PPostgresPollingStatusType = ^PostgresPollingStatusType;
  100. PostgresPollingStatusType = (PGRES_POLLING_FAILED := 0,PGRES_POLLING_READING,
  101. PGRES_POLLING_WRITING,PGRES_POLLING_OK,
  102. PGRES_POLLING_ACTIVE);
  103. PPGTransactionStatusType = ^PGTransactionStatusType;
  104. PGTransactionStatusType = (PQTRANS_IDLE,PQTRANS_ACTIVE,PQTRANS_INTRANS,
  105. PQTRANS_INERROR,PQTRANS_UNKNOWN);
  106. PPGVerbosity = ^PGVerbosity;
  107. PGVerbosity = (PQERRORS_TERSE,PQERRORS_DEFAULT,PQERRORS_VERBOSE);
  108. PpgNotify = ^pgNotify;
  109. pgNotify = record
  110. relname : Pchar;
  111. be_pid : longint;
  112. extra : Pchar;
  113. end;
  114. { Function types for notice-handling callbacks }
  115. PQnoticeReceiver = procedure (arg:pointer; res:PPGresult);cdecl;
  116. PQnoticeProcessor = procedure (arg:pointer; message:Pchar);cdecl;
  117. { Print options for PQprint() }
  118. Ppqbool = ^pqbool;
  119. pqbool = char;
  120. P_PQprintOpt = ^_PQprintOpt;
  121. _PQprintOpt = record
  122. header : pqbool;
  123. align : pqbool;
  124. standard : pqbool;
  125. html3 : pqbool;
  126. expanded : pqbool;
  127. pager : pqbool;
  128. fieldSep : Pchar;
  129. tableOpt : Pchar;
  130. caption : Pchar;
  131. fieldName : ^Pchar;
  132. end;
  133. PQprintOpt = _PQprintOpt;
  134. PPQprintOpt = ^PQprintOpt;
  135. { ----------------
  136. * Structure for the conninfo parameter definitions returned by PQconndefaults
  137. *
  138. * All fields except "val" point at static strings which must not be altered.
  139. * "val" is either NULL or a malloc'd current-value string. PQconninfoFree()
  140. * will release both the val strings and the PQconninfoOption array itself.
  141. * ----------------
  142. }
  143. P_PQconninfoOption = ^_PQconninfoOption;
  144. _PQconninfoOption = record
  145. keyword : Pchar;
  146. envvar : Pchar;
  147. compiled : Pchar;
  148. val : Pchar;
  149. _label : Pchar;
  150. dispchar : Pchar;
  151. dispsize : longint;
  152. end;
  153. PQconninfoOption = _PQconninfoOption;
  154. PPQconninfoOption = ^PQconninfoOption;
  155. { ----------------
  156. * PQArgBlock -- structure for PQfn() arguments
  157. * ----------------
  158. }
  159. { can't use void (dec compiler barfs) }
  160. PPQArgBlock = ^PQArgBlock;
  161. PQArgBlock = record
  162. len : longint;
  163. isint : longint;
  164. u : record
  165. case longint of
  166. 0 : ( ptr : Plongint );
  167. 1 : ( integer : longint );
  168. end;
  169. end;
  170. { ----------------
  171. * Exported functions of libpq
  172. * ----------------
  173. }
  174. { === in fe-connect.c === }
  175. { make a new client connection to the backend }
  176. { Asynchronous (non-blocking) }
  177. (* Const before type ignored *)
  178. function PQconnectStart(conninfo:Pchar):PPGconn;cdecl;external External_library name 'PQconnectStart';
  179. function PQconnectPoll(conn:PPGconn):PostgresPollingStatusType;cdecl;external External_library name 'PQconnectPoll';
  180. { Synchronous (blocking) }
  181. (* Const before type ignored *)
  182. function PQconnectdb(conninfo:Pchar):PPGconn;cdecl;external External_library name 'PQconnectdb';
  183. function PQsetdbLogin(pghost:Pchar; pgport:Pchar; pgoptions:Pchar; pgtty:Pchar; dbName:Pchar;
  184. login:Pchar; pwd:Pchar):PPGconn;cdecl;external External_library name 'PQsetdbLogin';
  185. { was #define dname(params) para_def_expr }
  186. { argument types are unknown }
  187. { return type might be wrong }
  188. function PQsetdb(M_PGHOST,M_PGPORT,M_PGOPT,M_PGTTY,M_DBNAME : pchar) : ppgconn;
  189. { close the current connection and free the PGconn data structure }
  190. procedure PQfinish(conn:PPGconn);cdecl;external External_library name 'PQfinish';
  191. { get info about connection options known to PQconnectdb }
  192. function PQconndefaults:PPQconninfoOption;cdecl;external External_library name 'PQconndefaults';
  193. { free the data structure returned by PQconndefaults() }
  194. procedure PQconninfoFree(connOptions:PPQconninfoOption);cdecl;external External_library name 'PQconninfoFree';
  195. {
  196. * close the current connection and restablish a new one with the same
  197. * parameters
  198. }
  199. { Asynchronous (non-blocking) }
  200. function PQresetStart(conn:PPGconn):longint;cdecl;external External_library name 'PQresetStart';
  201. function PQresetPoll(conn:PPGconn):PostgresPollingStatusType;cdecl;external External_library name 'PQresetPoll';
  202. { Synchronous (blocking) }
  203. procedure PQreset(conn:PPGconn);cdecl;external External_library name 'PQreset';
  204. { issue a cancel request }
  205. function PQrequestCancel(conn:PPGconn):longint;cdecl;external External_library name 'PQrequestCancel';
  206. { Accessor functions for PGconn objects }
  207. function PQdb(conn:PPGconn):Pchar;cdecl;external External_library name 'PQdb';
  208. function PQuser(conn:PPGconn):Pchar;cdecl;external External_library name 'PQuser';
  209. function PQpass(conn:PPGconn):Pchar;cdecl;external External_library name 'PQpass';
  210. function PQhost(conn:PPGconn):Pchar;cdecl;external External_library name 'PQhost';
  211. function PQport(conn:PPGconn):Pchar;cdecl;external External_library name 'PQport';
  212. function PQtty(conn:PPGconn):Pchar;cdecl;external External_library name 'PQtty';
  213. function PQoptions(conn:PPGconn):Pchar;cdecl;external External_library name 'PQoptions';
  214. function PQstatus(conn:PPGconn):TConnStatusType;cdecl;external External_library name 'PQstatus';
  215. function PQtransactionStatus(conn:PPGconn):PGTransactionStatusType;cdecl;external External_library name 'PQtransactionStatus';
  216. function PQparameterStatus(conn:PPGconn; paramName:Pchar):Pchar;cdecl;external External_library name 'PQparameterStatus';
  217. function PQprotocolVersion(conn:PPGconn):longint;cdecl;external External_library name 'PQprotocolVersion';
  218. function PQerrorMessage(conn:PPGconn):Pchar;cdecl;external External_library name 'PQerrorMessage';
  219. function PQsocket(conn:PPGconn):longint;cdecl;external External_library name 'PQsocket';
  220. function PQbackendPID(conn:PPGconn):longint;cdecl;external External_library name 'PQbackendPID';
  221. function PQclientEncoding(conn:PPGconn):longint;cdecl;external External_library name 'PQclientEncoding';
  222. function PQsetClientEncoding(conn:PPGconn; encoding:Pchar):longint;cdecl;external External_library name 'PQsetClientEncoding';
  223. {$ifdef USE_SSL}
  224. { Get the SSL structure associated with a connection }
  225. function PQgetssl(conn:PPGconn):PSSL;cdecl;external External_library name 'PQgetssl';
  226. {$endif}
  227. { Set verbosity for PQerrorMessage and PQresultErrorMessage }
  228. function PQsetErrorVerbosity(conn:PPGconn; verbosity:PGVerbosity):PGVerbosity;cdecl;external External_library name 'PQsetErrorVerbosity';
  229. { Enable/disable tracing }
  230. procedure PQtrace(conn:PPGconn; debug_port:PFILE);cdecl;external External_library name 'PQtrace';
  231. procedure PQuntrace(conn:PPGconn);cdecl;external External_library name 'PQuntrace';
  232. { Override default notice handling routines }
  233. function PQsetNoticeReceiver(conn:PPGconn; proc:PQnoticeReceiver; arg:pointer):PQnoticeReceiver;cdecl;external External_library name 'PQsetNoticeReceiver';
  234. function PQsetNoticeProcessor(conn:PPGconn; proc:PQnoticeProcessor; arg:pointer):PQnoticeProcessor;cdecl;external External_library name 'PQsetNoticeProcessor';
  235. { === in fe-exec.c === }
  236. { Simple synchronous query }
  237. function PQexec(conn:PPGconn; query:Pchar):PPGresult;cdecl;external External_library name 'PQexec';
  238. function PQexecParams(conn:PPGconn; command:Pchar; nParams:longint; paramTypes:POid; paramValues:PPchar;
  239. paramLengths:Plongint; paramFormats:Plongint; resultFormat:longint):PPGresult;cdecl;external External_library name 'PQexecParams';
  240. function PQexecPrepared(conn:PPGconn; stmtName:Pchar; nParams:longint; paramValues:PPchar; paramLengths:Plongint;
  241. paramFormats:Plongint; resultFormat:longint):PPGresult;cdecl;external External_library name 'PQexecPrepared';
  242. { Interface for multiple-result or asynchronous queries }
  243. function PQsendQuery(conn:PPGconn; query:Pchar):longint;cdecl;external External_library name 'PQsendQuery';
  244. function PQsendQueryParams(conn:PPGconn; command:Pchar; nParams:longint; paramTypes:POid; paramValues:PPchar;
  245. paramLengths:Plongint; paramFormats:Plongint; resultFormat:longint):longint;cdecl;external External_library name 'PQsendQueryParams';
  246. function PQsendQueryPrepared(conn:PPGconn; stmtName:Pchar; nParams:longint; paramValues:PPchar; paramLengths:Plongint;
  247. paramFormats:Plongint; resultFormat:longint):longint;cdecl;external External_library name 'PQsendQueryPrepared';
  248. function PQgetResult(conn:PPGconn):PPGresult;cdecl;external External_library name 'PQgetResult';
  249. { Routines for managing an asynchronous query }
  250. function PQisBusy(conn:PPGconn):longint;cdecl;external External_library name 'PQisBusy';
  251. function PQconsumeInput(conn:PPGconn):longint;cdecl;external External_library name 'PQconsumeInput';
  252. { LISTEN/NOTIFY support }
  253. function PQnotifies(conn:PPGconn):PPGnotify;cdecl;external External_library name 'PQnotifies';
  254. { Routines for copy in/out }
  255. function PQputCopyData(conn:PPGconn; buffer:Pchar; nbytes:longint):longint;cdecl;external External_library name 'PQputCopyData';
  256. function PQputCopyEnd(conn:PPGconn; errormsg:Pchar):longint;cdecl;external External_library name 'PQputCopyEnd';
  257. function PQgetCopyData(conn:PPGconn; buffer:PPchar; async:longint):longint;cdecl;external External_library name 'PQgetCopyData';
  258. { Deprecated routines for copy in/out }
  259. function PQgetline(conn:PPGconn; _string:Pchar; length:longint):longint;cdecl;external External_library name 'PQgetline';
  260. function PQputline(conn:PPGconn; _string:Pchar):longint;cdecl;external External_library name 'PQputline';
  261. function PQgetlineAsync(conn:PPGconn; buffer:Pchar; bufsize:longint):longint;cdecl;external External_library name 'PQgetlineAsync';
  262. function PQputnbytes(conn:PPGconn; buffer:Pchar; nbytes:longint):longint;cdecl;external External_library name 'PQputnbytes';
  263. function PQendcopy(conn:PPGconn):longint;cdecl;external External_library name 'PQendcopy';
  264. { Set blocking/nonblocking connection to the backend }
  265. function PQsetnonblocking(conn:PPGconn; arg:longint):longint;cdecl;external External_library name 'PQsetnonblocking';
  266. function PQisnonblocking(conn:PPGconn):longint;cdecl;external External_library name 'PQisnonblocking';
  267. { Force the write buffer to be written (or at least try) }
  268. function PQflush(conn:PPGconn):longint;cdecl;external External_library name 'PQflush';
  269. {
  270. * "Fast path" interface --- not really recommended for application
  271. * use
  272. }
  273. function PQfn(conn:PPGconn; fnid:longint; result_buf:Plongint; result_len:Plongint; result_is_int:longint;
  274. args:PPQArgBlock; nargs:longint):PPGresult;cdecl;external External_library name 'PQfn';
  275. { Accessor functions for PGresult objects }
  276. function PQresultStatus(res:PPGresult):TExecStatusType;cdecl;external External_library name 'PQresultStatus';
  277. function PQresStatus(status:TExecStatusType):Pchar;cdecl;external External_library name 'PQresStatus';
  278. function PQresultErrorMessage(res:PPGresult):Pchar;cdecl;external External_library name 'PQresultErrorMessage';
  279. function PQresultErrorField(res:PPGresult; fieldcode:longint):Pchar;cdecl;external External_library name 'PQresultErrorField';
  280. function PQntuples(res:PPGresult):longint;cdecl;external External_library name 'PQntuples';
  281. function PQnfields(res:PPGresult):longint;cdecl;external External_library name 'PQnfields';
  282. function PQbinaryTuples(res:PPGresult):longint;cdecl;external External_library name 'PQbinaryTuples';
  283. function PQfname(res:PPGresult; field_num:longint):Pchar;cdecl;external External_library name 'PQfname';
  284. function PQfnumber(res:PPGresult; field_name:Pchar):longint;cdecl;external External_library name 'PQfnumber';
  285. function PQftable(res:PPGresult; field_num:longint):Oid;cdecl;external External_library name 'PQftable';
  286. function PQftablecol(res:PPGresult; field_num:longint):longint;cdecl;external External_library name 'PQftablecol';
  287. function PQfformat(res:PPGresult; field_num:longint):longint;cdecl;external External_library name 'PQfformat';
  288. function PQftype(res:PPGresult; field_num:longint):Oid;cdecl;external External_library name 'PQftype';
  289. function PQfsize(res:PPGresult; field_num:longint):longint;cdecl;external External_library name 'PQfsize';
  290. function PQfmod(res:PPGresult; field_num:longint):longint;cdecl;external External_library name 'PQfmod';
  291. function PQcmdStatus(res:PPGresult):Pchar;cdecl;external External_library name 'PQcmdStatus';
  292. function PQoidStatus(res:PPGresult):Pchar;cdecl;external External_library name 'PQoidStatus';
  293. { old and ugly }
  294. function PQoidValue(res:PPGresult):Oid;cdecl;external External_library name 'PQoidValue';
  295. { new and improved }
  296. function PQcmdTuples(res:PPGresult):Pchar;cdecl;external External_library name 'PQcmdTuples';
  297. function PQgetvalue(res:PPGresult; tup_num:longint; field_num:longint):Pchar;cdecl;external External_library name 'PQgetvalue';
  298. function PQgetlength(res:PPGresult; tup_num:longint; field_num:longint):longint;cdecl;external External_library name 'PQgetlength';
  299. function PQgetisnull(res:PPGresult; tup_num:longint; field_num:longint):longint;cdecl;external External_library name 'PQgetisnull';
  300. { Delete a PGresult }
  301. procedure PQclear(res:PPGresult);cdecl;external External_library name 'PQclear';
  302. { For freeing other alloc'd results, such as PGnotify structs }
  303. procedure PQfreemem(ptr:pointer);cdecl;external External_library name 'PQfreemem';
  304. { Exists for backward compatibility. bjm 2003-03-24 }
  305. { was #define dname(params) para_def_expr }
  306. { argument types are unknown }
  307. { return type might be wrong }
  308. // function PQfreeNotify(ptr : longint) : longint;
  309. {
  310. * Make an empty PGresult with given status (some apps find this
  311. * useful). If conn is not NULL and status indicates an error, the
  312. * conn's errorMessage is copied.
  313. }
  314. function PQmakeEmptyPGresult(conn:PPGconn; status:TExecStatusType):PPGresult;cdecl;external External_library name 'PQmakeEmptyPGresult';
  315. { Quoting strings before inclusion in queries. }
  316. function PQescapeString(till:Pchar; from:Pchar; length:size_t):size_t;cdecl;external External_library name 'PQescapeString';
  317. function PQescapeBytea(bintext:Pbyte; binlen:size_t; bytealen:Psize_t):Pbyte;cdecl;external External_library name 'PQescapeBytea';
  318. function PQunescapeBytea(strtext:Pbyte; retbuflen:Psize_t):Pbyte;cdecl;external External_library name 'PQunescapeBytea';
  319. { === in fe-print.c === }
  320. { output stream }
  321. procedure PQprint(fout:PFILE; res:PPGresult; ps:PPQprintOpt);cdecl;external External_library name 'PQprint';
  322. { option structure }
  323. {
  324. * really old printing routines
  325. }
  326. { where to send the output }
  327. { pad the fields with spaces }
  328. { field separator }
  329. { display headers? }
  330. procedure PQdisplayTuples(res:PPGresult; fp:PFILE; fillAlign:longint; fieldSep:Pchar; printHeader:longint;
  331. quiet:longint);cdecl;external External_library name 'PQdisplayTuples';
  332. (* Const before type ignored *)
  333. { output stream }
  334. { print attribute names }
  335. { delimiter bars }
  336. procedure PQprintTuples(res:PPGresult; fout:PFILE; printAttName:longint; terseOutput:longint; width:longint);cdecl;external External_library name 'PQprintTuples';
  337. { width of column, if 0, use variable
  338. * width }
  339. { === in fe-lobj.c === }
  340. { Large-object access routines }
  341. function lo_open(conn:PPGconn; lobjId:Oid; mode:longint):longint;cdecl;external External_library name 'lo_open';
  342. function lo_close(conn:PPGconn; fd:longint):longint;cdecl;external External_library name 'lo_close';
  343. function lo_read(conn:PPGconn; fd:longint; buf:Pchar; len:size_t):longint;cdecl;external External_library name 'lo_read';
  344. function lo_write(conn:PPGconn; fd:longint; buf:Pchar; len:size_t):longint;cdecl;external External_library name 'lo_write';
  345. function lo_lseek(conn:PPGconn; fd:longint; offset:longint; whence:longint):longint;cdecl;external External_library name 'lo_lseek';
  346. function lo_creat(conn:PPGconn; mode:longint):Oid;cdecl;external External_library name 'lo_creat';
  347. function lo_tell(conn:PPGconn; fd:longint):longint;cdecl;external External_library name 'lo_tell';
  348. function lo_unlink(conn:PPGconn; lobjId:Oid):longint;cdecl;external External_library name 'lo_unlink';
  349. function lo_import(conn:PPGconn; filename:Pchar):Oid;cdecl;external External_library name 'lo_import';
  350. function lo_export(conn:PPGconn; lobjId:Oid; filename:Pchar):longint;cdecl;external External_library name 'lo_export';
  351. { === in fe-misc.c === }
  352. { Determine length of multibyte encoded char at *s }
  353. function PQmblen(s:Pbyte; encoding:longint):longint;cdecl;external External_library name 'PQmblen';
  354. { Get encoding id from environment variable PGCLIENTENCODING }
  355. function PQenv2encoding:longint;cdecl;external External_library name 'PQenv2encoding';
  356. implementation
  357. { was #define dname(params) para_def_expr }
  358. { argument types are unknown }
  359. { return type might be wrong }
  360. function PQsetdb(M_PGHOST,M_PGPORT,M_PGOPT,M_PGTTY,M_DBNAME : pchar) : ppgconn;
  361. begin
  362. PQsetdb:=PQsetdbLogin(M_PGHOST,M_PGPORT,M_PGOPT,M_PGTTY,M_DBNAME,'','');
  363. end;
  364. { was #define dname(params) para_def_expr }
  365. { argument types are unknown }
  366. { return type might be wrong }
  367. { function PQfreeNotify(ptr : longint) : longint;
  368. begin
  369. PQfreeNotify:=PQfreemem(ptr);
  370. end;}
  371. end.