PgCatalogue: module { # pg_catalogue.b
PATH : con "/dis/lib/pg_catalogue.dis";
Catalogue : adt {
err_chan : chan of string;
conn : ref Connection;
types : array of Type;
procs : array of Proc;
Procfields : array of string;
languages : array of Language;
users : array of User;
last_sync : int; # time since epoch
sync : fn(c : self ref Catalogue) : int;
user_sysid: fn(c : self ref Catalogue, name : string) : (string, int);
fill_procs: fn(c : self ref Catalogue) : int;
fill_types: fn(c : self ref Catalogue) : int;
print_types: fn(c : self ref Catalogue);
print_procs_full: fn(c : self ref Catalogue, user_sysid: int);
print_procs: fn(c : self ref Catalogue, user_sysid: int);
type_name: fn(c : self ref Catalogue, oid : big) : string;
language_name: fn(c : self ref Catalogue, oid : big) : string;
fill_languages: fn(c : self ref Catalogue) : int;
fill_users: fn(c : self ref Catalogue) : int;
user_name: fn(c : self ref Catalogue, sysid : int) : string;
proc_sql : fn(c : self ref Catalogue, r : int) : string;
drop_proc : fn(c : self ref Catalogue, id : int) : int;
};
Proc : adt {
rows : array of array of byte;
oid : big;
name : string;
namespace : big;
owner : int;
lang : big;
isagg : int;
secdef : int;
isstrict : int;
retset : int;
volatile : int;
nargs : int;
rettype : big;
argtypes : array of big;
argnames : array of string;
src : string;
bin : array of byte;
};
Type : adt {
oid : big;
name : string;
namespace : big;
owner : big;
length : int; # pg name is len but that's a reserved word here
byval : int;
typ : string;
isdefined : int;
delim : string;
relid : big;
elem : big;
input : int;
output : int;
receive : int;
send : int;
analyze : int;
align : string;
storage : string;
notnull : int;
basetype : big;
typmod : int;
ndims : int;
defaultbin : array of byte;
default : string;
};
Language : adt {
oid : big;
name : string;
ispl : int;
pltrusted : int;
plcallfoid : big;
validator : big;
acl : string;
};
User : adt {
oid : big;
name : string;
sysid : int;
createdb : int;
super : int;
catupd : int;
valuntil : string;
config : string;
};
new_connection : fn (ip, port, user, password, database, options, parameters: string) : ref Connection;
disconnect : fn(c : ref Connection);
new_catalogue : fn(conn : ref Connection) : ref Catalogue;
};
|