mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-02-17 19:30:00 +08:00
Updating and addign files...
This commit is contained in:
parent
fd0366e1b5
commit
056ba12881
@ -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
7
src/corba/pgsql_int.idl
Normal file
@ -0,0 +1,7 @@
|
||||
// Internal interfaces
|
||||
|
||||
#include "pgsql.idl"
|
||||
|
||||
module PostgreSQL {
|
||||
interface QueryResult : CosQueryCollection::Collection, Expirable {};
|
||||
};
|
59
src/corba/server.cc
Normal file
59
src/corba/server.cc
Normal 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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user