Skip to content
Snippets Groups Projects
Commit 056ba128 authored by Marc G. Fournier's avatar Marc G. Fournier
Browse files

Updating and addign files...
parent fd0366e1
No related branches found
No related tags found
No related merge requests found
#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
// Internal interfaces
#include "pgsql.idl"
module PostgreSQL {
interface QueryResult : CosQueryCollection::Collection, Expirable {};
};
#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;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment