Updating and addign files...

This commit is contained in:
Marc G. Fournier 1998-11-19 02:39:51 +00:00
parent fd0366e1b5
commit 056ba12881
3 changed files with 162 additions and 79 deletions

View File

@ -1,79 +1,96 @@
#ifndef pgsql_idl
#define pgsql_idl
#ifndef CosQuery_idl
#include "CosQuery.idl"
#endif
#ifndef CosQueryCollection_idl
#include "CosQueryCollection.idl"
#endif
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<Value> Row;
// <info>
// 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.
// </info>
// Connected database object
interface Database : CosQuery::QueryableCollection {
void disconnect();
};
// Server object (stateless)
interface Server {
Database connect(in string db, in string user, in string password);
};
};
#endif // pgsql_idl
#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<Value> Row;
// <info>
// 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.
// </info>
// 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

7
src/corba/pgsql_int.idl Normal file
View File

@ -0,0 +1,7 @@
// Internal interfaces
#include "pgsql.idl"
module PostgreSQL {
interface QueryResult : CosQueryCollection::Collection, Expirable {};
};

59
src/corba/server.cc Normal file
View File

@ -0,0 +1,59 @@
#include <iostream>
#include "pgsql_int.h"
bool terminate = false;
int main(int argc, char *argv)
{
CORBA::ORB_var orb = CORBA::ORB_init(argc,argv,"");
PortableManager::POA_var poa = PortableServer::POA::_narrow(orb->resolve_initial_references("RootPOA"));
PortableManager::POAManager_var mgr = poa->the_POAManager();
Server_impl *server = new Server_impl;
poa->activate_object(server);
CosNaming::NamingContext_var ctx = CosNaming::NamingContext::_narrow(orb->resolve_initial_references("NamingService"));
CosNaming::Name_var n = new CosNaming::Name(1);
n[0].id("PostgreSQL");
n[0].name("service");
bool bindok = false;
if (!CORBA::Object::is_nil(ctx)) {
try {
CosNaming::NamingContext_var myctx = ctx->bind_new_context(n);
CosNaming::Name_var n2 = new CosNaming::Name(1);
n2[0].id("Server");
n2[0].name("Server");
myctx->bind(n2,server->_this());
bindok = true;
} catch (CORBA::Exception &e) {
cerr << "Warning: Naming Service bind failed" << endl;
bindok = false;
}
} else {
cerr << "Warning: Naming Service not found" << endl;
}
mgr->activate();
while (!terminate) {
if (orb->work_pending())
orb->perform_work();
if (expiry_needed())
expire_now();
}
if (!CORBA::Object::is_nil(ctx) && bindok) {
try {
CosNaming::NamingContext myctx = ctx->resolve(n);
ctx->unbind(n);
myctx->destroy();
} catch (CORBA::Exception &e) {
cerr << "Warning: Naming Service unbind failed" << endl;
}
}
orb->shutdown(true);
delete server;
return 0;
}