diff --git a/src/corba/CosQueryCollection.idl b/src/corba/CosQueryCollection.idl new file mode 100644 index 0000000000..f6473d420e --- /dev/null +++ b/src/corba/CosQueryCollection.idl @@ -0,0 +1,83 @@ +/* RCS $Id: CosQueryCollection.idl,v 1.1 1998/11/16 18:03:34 scrappy Exp $ + * + * ---------------------------------------------------------------------------- + * This is unmarked software provided by the Object Management Group,Inc. (OMG) + * ---------------------------------------------------------------------------- + */ + + +/** + * CosQueryCollection is the Common Object Services Specification query + * query colleciton module as it it appears in COSS1, v1.0. + */ + + +#ifndef CosQueryCollection_idl +#define CosQueryCollection_idl + +module CosQueryCollection { + + exception ElementInvalid {}; + exception IteratorInvalid {}; + exception PositionInvalid {}; + + typedef string Istring; + struct NVPair { + Istring name; + any value; + }; + + typedef sequence ParameterList; + + interface Collection; + interface Iterator; + + interface CollectionFactory { + Collection create (in ParameterList params); + }; + + interface Collection { + + readonly attribute long cardinality; + + void add_element (in any element) + raises(ElementInvalid); + + void add_all_elements (in Collection elements) + raises(ElementInvalid); + + void insert_element_at (in any element, in Iterator where) + raises(IteratorInvalid, + ElementInvalid); + + void replace_element_at (in any element, in Iterator where) + raises(IteratorInvalid, + PositionInvalid, + ElementInvalid); + + void remove_element_at (in Iterator where) + raises(IteratorInvalid, + PositionInvalid); + + void remove_all_elements (); + + any retrieve_element_at (in Iterator where) + raises(IteratorInvalid, + PositionInvalid); + + Iterator create_iterator (); + + }; + + interface Iterator { + any next () + raises(IteratorInvalid, + PositionInvalid); + void reset (); + boolean more (); + }; + +}; + +#endif // CosQueryCollection_idl + diff --git a/src/corba/pgsql.idl b/src/corba/pgsql.idl new file mode 100644 index 0000000000..33c5484016 --- /dev/null +++ b/src/corba/pgsql.idl @@ -0,0 +1,78 @@ +#include "CosQueryCollection.idl" + +#ifndef pgsql_idl +#define pgsql_idl + +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; + }; + + 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 + // 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. + // + + + // Query result interface + // + // Should the iterator support a 'boolean skip(in long n)' extension? + + interface QueryResult : CosQueryCollection::Collection {}; + interface QueryResultIterator : CosQueryCollection::Iterator {}; + + + // Connected database object + + interface Database { + QueryResult exec(in string query); + void disconnect(); + }; + + + // Server object (stateless) + + interface Server { + Database connect(in string db, in string user, in string password); + }; +}; + +#endif // pgsql_idl