#ifndef pgsql_idl #define pgsql_idl #ifndef CosQuery_idl #include "CosQuery.idl" #endif #ifndef CosQueryCollection_idl #include "CosQueryCollection.idl" #endif #pragma prefix "" module PostgreSQL { // Built-in types module Types { // Arrays in network order typedef short int2; typedef long int4; typedef long int8[2]; }; // NULL support typedef boolean Null; union Value switch (Null) { case FALSE: any value; }; // Row definition typedef sequence Row; // // More about the application of COSS: // // A Table will be a QueryableCollection of Rows // A Database will be a QueryableCollection of Tables // (Currently Tables are not exported... maybe later.) // Both will be queryable via the Query Service // // Other relations will be representable using the Relationship Service // This includes primary/foreign keys and anything else :) // // GRANT/REVOKE can be supplied via the Security Service // // See a pattern here? The whole of SQL can be implemented by these services! // The statements go through a parser. Queries and subqueries are passed to the // database for processing. Returned items are handled appropriately: // // SELECT: return the items to the caller // UPDATE: modify the items (direct) // DELETE: call delete() on each Row (direct) // GRANT/REVOKE: modify ACLs (via Security Service) // ALTER: modify the items (direct) and/or the relations (via Relationship Service) // etc. // // I'm not sure yet about LOCK and UNLOCK. // // Expirable object interface Expirable { /* oneway? */ void keepalive(); void remove(); }; // Upcall object interface Upcall { void notice(in string message); void abort(); }; // Connected database object interface Database : CosQuery::QueryableCollection, Expirable { void setupcall(in Upcall obj); }; // Server object (stateless) interface Server { Database connect(in string db, in string user, in string password); }; }; #endif // pgsql_idl