📄 zlibpgsql.pas
字号:
{********************************************************}
{ }
{ Zeos Database Objects }
{ Plain interface to libpq.dll }
{ }
{ Copyright (c) 1999-2001 Sergey Seroukhov }
{ Copyright (c) 1999-2001 Zeos Development Group }
{ }
{********************************************************}
unit ZLibPgSql;
interface
uses Windows, Classes, ZSqlTypes;
{$IFNDEF LINUX}
{$INCLUDE ..\Zeos.inc}
{$ELSE}
{$INCLUDE ../Zeos.inc}
{$ENDIF}
{***************** Plain API Constants definition ****************}
const
{$IFNDEF LINUX}
DEFAULT_DLL_LOCATION = 'libpq.dll';
{$ELSE}
DEFAULT_DLL_LOCATION = 'libpq.so';
{$ENDIF}
{ Type Lengths }
NAMEDATALEN = 32;
{ OIDNAMELEN should be set to NAMEDATALEN + sizeof(Oid) }
OIDNAMELEN = 36;
INV_WRITE = $00020000;
INV_READ = $00040000;
SEEK_SET = 0;
SEEK_CUR = 1;
SEEK_END = 2;
{****************** Plain API Types definition *****************}
type
Oid = Integer;
{ Application-visible enum types }
ConnStatusType = (
CONNECTION_OK,
CONNECTION_BAD
);
ExecStatusType = (
PGRES_EMPTY_QUERY,
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
);
{ String descriptions of the ExecStatusTypes }
pgresStatus = array[$00..$ff] of PChar;
{ PGconn encapsulates a connection to the backend.
The contents of this struct are not supposed to be known to applications.
}
PGconn = Pointer;
PPGconn = Pointer;
{ 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.
}
PGresult = Pointer;
PPGresult = Pointer;
{ 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.
}
PGnotify = packed record
relname: array [0..NAMEDATALEN-1] of Char; { name of relation containing data }
be_pid: Integer; { process id of backend }
end;
PPGnotify = ^PGnotify;
{ PQnoticeProcessor is the function type for the notice-message callback. }
PQnoticeProcessor = procedure(arg: Pointer; message: PChar); cdecl;
{ Print options for PQprint() }
{
We can't use the conventional "bool", because we are designed to be
included in a user's program, and user may already have that type
defined. Pqbool, on the other hand, is unlikely to be used.
}
PPChar = array[00..$ff] of PChar;
PQprintOpt = packed record
header: TBool; { print output field headings and row count }
align: TBool; { fill align the fields }
standard: TBool; { old brain dead format }
html3: TBool; { output html tables }
expanded: TBool; { expand tables }
pager: TBool; { use pager for output if needed }
fieldSep: PChar; { field separator }
tableOpt: PChar; { insert to HTML <table ...> }
caption: PChar; { HTML <caption> }
fieldName: PPChar; { null terminated array of repalcement field names }
end;
PPQprintOpt = ^PQprintOpt;
{ ----------------
Structure for the conninfo parameter definitions returned by PQconndefaults
----------------
}
PQconninfoOption = packed record
keyword: PChar; { The keyword of the option }
envvar: PChar; { Fallback environment variable name }
compiled: PChar; { Fallback compiled in default value }
val: PChar; { Options value }
lab: PChar; { Label for field in connect dialog }
dispchar: PChar; { Character to display for this field
in a connect dialog. Values are:
"" Display entered value as is
"*" Password field - hide value
"D" Debug options - don't
create a field by default }
dispsize: Integer; { Field size in characters for dialog }
end;
PPQConninfoOption = ^PQconninfoOption;
{ ----------------
PQArgBlock -- structure for PQfn() arguments
----------------
}
PQArgBlock = packed record
len: Integer;
isint: Integer;
case u: Boolean of
True: (ptr: PInteger); { can't use void (dec compiler barfs) }
False: (_int: Integer);
end;
PPQArgBlock = ^PQArgBlock;
{************** Plain API Function types definition *************}
{ === in fe-connect.c === }
TPQconnectdb = function(ConnInfo: PChar): PPGconn; cdecl;
TPQsetdbLogin = function(Host, Port, Options, Tty, Db, User, Passwd: PChar): PPGconn; cdecl;
TPQconndefaults = function: PPQconninfoOption; cdecl;
TPQfinish = procedure(Handle: PPGconn); cdecl;
TPQreset = procedure(Handle: PPGconn); cdecl;
TPQrequestCancel = function(Handle: PPGconn): Integer; cdecl;
TPQdb = function(Handle: PPGconn): PChar; cdecl;
TPQuser = function(Handle: PPGconn): PChar; cdecl;
TPQpass = function(Handle: PPGconn): PChar; cdecl;
TPQhost = function(Handle: PPGconn): PChar; cdecl;
TPQport = function(Handle: PPGconn): PChar; cdecl;
TPQtty = function(Handle: PPGconn): PChar; cdecl;
TPQoptions = function(Handle: PPGconn): PChar; cdecl;
TPQstatus = function(Handle: PPGconn): ConnStatusType; cdecl;
TPQerrorMessage = function(Handle: PPGconn): PChar; cdecl;
TPQsocket = function(Handle: PPGconn): Integer; cdecl;
TPQbackendPID = function(Handle: PPGconn): Integer; cdecl;
TPQtrace = procedure(Handle: PPGconn; DebugPort: Pointer); cdecl;
TPQuntrace = procedure(Handle: PPGconn); cdecl;
TPQsetNoticeProcessor = procedure(Handle: PPGconn; Proc: PQnoticeProcessor; Arg: Pointer); cdecl;
{ === in fe-exec.c === }
TPQexec = function(Handle: PPGconn; Query: PChar): PPGresult; cdecl;
TPQnotifies = function(Handle: PPGconn): PPGnotify; cdecl;
TPQnotifyFree = procedure(Handle: PPGnotify);cdecl;
TPQsendQuery = function(Handle: PPGconn; Query: PChar): Integer; cdecl;
TPQgetResult = function(Handle: PPGconn): PPGresult; cdecl;
TPQisBusy = function(Handle: PPGconn): Integer; cdecl;
TPQconsumeInput = function(Handle: PPGconn): Integer; cdecl;
TPQgetline = function(Handle: PPGconn; Str: PChar; length: Integer): Integer; cdecl;
TPQputline = function(Handle: PPGconn; Str: PChar): Integer; cdecl;
TPQgetlineAsync = function(Handle: PPGconn; Buffer: PChar; BufSize: Integer): Integer; cdecl;
TPQputnbytes = function(Handle: PPGconn; Buffer: PChar; NBytes: Integer): Integer; cdecl;
TPQendcopy = function(Handle: PPGconn): Integer; cdecl;
TPQfn = function(Handle: PPGconn; fnid: Integer; result_buf, result_len: PInteger; result_is_int: Integer; args: PPQArgBlock; nargs: Integer): PPGresult; cdecl;
TPQresultStatus = function(Result: PPGresult): ExecStatusType; cdecl;
TPQresultErrorMessage = function(Result: PPGresult): PChar; cdecl;
TPQntuples = function(Result: PPGresult): Integer; cdecl;
TPQnfields = function(Result: PPGresult): Integer; cdecl;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -