[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue/geas examples/businessobjects/methods/Make...
From: |
Treshna Enterprises |
Subject: |
gnue/geas examples/businessobjects/methods/Make... |
Date: |
Mon, 14 May 2001 14:57:58 -0700 |
CVSROOT: /cvs
Module name: gnue
Changes by: Treshna Enterprises <address@hidden> 01/05/14 14:57:57
Modified files:
geas/examples/businessobjects/methods: Makefile.am
geas/examples/python: timetest.py
geas/idl : connection.idl dataobject.idl geas.idl
geas/src : Makefile.am collectiondata.c connection.c
connection.h dataobject.c factory.c
geas-internal-classes.h geas-server.c
geas-server.h geas-skeleton.c geas-skeleton.h
objectlist.c query.c servantlocator.h
transaction.c
geas/src/datamonitor: datamonitor.c datamonitor.h
geas/src/methods: methods_glibmodule.h
geas/src/objectstore: objectstore.c postgresql_access.h
geas/src/oql : oql.c oql.h oql_internal.h
Added files:
geas/idl : treshna.idl
Log message:
lots and lots of stupid changes, mostly
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/examples/businessobjects/methods/Makefile.am.diff?cvsroot=OldCVS&tr1=1.7&tr2=1.8&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/examples/python/timetest.py.diff?cvsroot=OldCVS&tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/idl/treshna.idl?cvsroot=OldCVS&rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/idl/connection.idl.diff?cvsroot=OldCVS&tr1=1.13&tr2=1.14&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/idl/dataobject.idl.diff?cvsroot=OldCVS&tr1=1.9&tr2=1.10&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/idl/geas.idl.diff?cvsroot=OldCVS&tr1=1.4&tr2=1.5&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/src/Makefile.am.diff?cvsroot=OldCVS&tr1=1.30&tr2=1.31&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/src/collectiondata.c.diff?cvsroot=OldCVS&tr1=1.14&tr2=1.15&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/src/connection.c.diff?cvsroot=OldCVS&tr1=1.49&tr2=1.50&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/src/connection.h.diff?cvsroot=OldCVS&tr1=1.11&tr2=1.12&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/src/dataobject.c.diff?cvsroot=OldCVS&tr1=1.48&tr2=1.49&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/src/factory.c.diff?cvsroot=OldCVS&tr1=1.11&tr2=1.12&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/src/geas-internal-classes.h.diff?cvsroot=OldCVS&tr1=1.14&tr2=1.15&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/src/geas-server.c.diff?cvsroot=OldCVS&tr1=1.78&tr2=1.79&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/src/geas-server.h.diff?cvsroot=OldCVS&tr1=1.34&tr2=1.35&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/src/geas-skeleton.c.diff?cvsroot=OldCVS&tr1=1.53&tr2=1.54&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/src/geas-skeleton.h.diff?cvsroot=OldCVS&tr1=1.23&tr2=1.24&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/src/objectlist.c.diff?cvsroot=OldCVS&tr1=1.15&tr2=1.16&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/src/query.c.diff?cvsroot=OldCVS&tr1=1.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/src/servantlocator.h.diff?cvsroot=OldCVS&tr1=1.11&tr2=1.12&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/src/transaction.c.diff?cvsroot=OldCVS&tr1=1.7&tr2=1.8&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/src/datamonitor/datamonitor.c.diff?cvsroot=OldCVS&tr1=1.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/src/datamonitor/datamonitor.h.diff?cvsroot=OldCVS&tr1=1.4&tr2=1.5&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/src/methods/methods_glibmodule.h.diff?cvsroot=OldCVS&tr1=1.6&tr2=1.7&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/src/objectstore/objectstore.c.diff?cvsroot=OldCVS&tr1=1.52&tr2=1.53&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/src/objectstore/postgresql_access.h.diff?cvsroot=OldCVS&tr1=1.24&tr2=1.25&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/src/oql/oql.c.diff?cvsroot=OldCVS&tr1=1.47&tr2=1.48&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/src/oql/oql.h.diff?cvsroot=OldCVS&tr1=1.24&tr2=1.25&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/geas/src/oql/oql_internal.h.diff?cvsroot=OldCVS&tr1=1.5&tr2=1.6&r1=text&r2=text
Patches:
Index: gnue/geas/examples/businessobjects/methods/Makefile.am
diff -u gnue/geas/examples/businessobjects/methods/Makefile.am:1.7
gnue/geas/examples/businessobjects/methods/Makefile.am:1.8
--- gnue/geas/examples/businessobjects/methods/Makefile.am:1.7 Wed Apr 4
12:38:29 2001
+++ gnue/geas/examples/businessobjects/methods/Makefile.am Mon May 14
14:57:56 2001
@@ -1,8 +1,25 @@
-INCLUDES = -I$(top_srcdir) `glib-config gmodule glib --cflags` $(ORBIT_CFLAGS)
+INCLUDES = -I$(top_srcdir) `glib-config gmodule glib --cflags`
-lib_LTLIBRARIES = libtest.la
+lib_LTLIBRARIES = libcontact__aaddress.la libmember__amember.la
libmember__amembership.la libmember__aprogramme.la
+#lib_LTLIBRARIES = libtest.la # libcontact_aaddress.la
-libtest_la_SOURCES = test.c
-libtest_la_LDFLAGS = -rdynamic -avoid-version -module
-libtest_la_LIBADD = -ldl
+libcontact__aaddress_la_SOURCES = contact__aaddress.c
+libcontact__aaddress_la_LDFLAGS = -rdynamic -avoid-version -module
+libcontact__aaddress_la_LIBADD = -ldl
+
+libmember__amember_la_SOURCES = member__amember.c timeconv.c
+libmember__amember_la_LDFLAGS = -rdynamic -avoid-version -module
+libmember__amember_la_LIBADD = -ldl
+
+libmember__amembership_la_SOURCES = geaswrapper.c member__amembership.c
timeconv.c
+libmember__amembership_la_LDFLAGS = -rdynamic -avoid-version -module
+libmember__amembership_la_LIBADD = -ldl
+
+libmember__aprogramme_la_SOURCES = geaswrapper.c member__aprogramme.c
timeconv.c
+libmember__aprogramme_la_LDFLAGS = -rdynamic -avoid-version -module
+libmember__aprogramme_la_LIBADD = -ldl
+
+# libcontact_aaddress_la_SOURCES = contact_aaddress.c
+# libcontact_aaddress_la_LDFLAGS = -rdynamic -avoid-version -module
+# libcontact_aaddress_la_LIBADD = -ldl
Index: gnue/geas/examples/python/timetest.py
diff -u gnue/geas/examples/python/timetest.py:1.2
gnue/geas/examples/python/timetest.py:1.3
--- gnue/geas/examples/python/timetest.py:1.2 Wed Apr 11 19:59:54 2001
+++ gnue/geas/examples/python/timetest.py Mon May 14 14:57:57 2001
@@ -35,9 +35,15 @@
try:
print "Creating 'test' objects"
test1 = con.newObject("timetest")
+ if test1.inDatabase: print "yes"
+ else: print "no"
test1.setField( "note" , "just testing..." );
+ if test1.inDatabase: print "yes"
+ else: print "no"
test1.setField( "thedate" , "2001-04-13" );
+ if test1.inDatabase: print "yes"
+ else: print "no"
test1.setField( "thetime" , "15:34:23" );
test1.setField( "both" , "2001-04-13 15:34:23" );
@@ -54,8 +60,13 @@
print "2] thetime: " + test2.getField("thetime")
print "2] both : " + test2.getField("both")
+ if test1.inDatabase: print "yes"
+ else: print "no"
test1.delete()
+ if test1.inDatabase: print "yes"
+ else: print "no"
test2.delete()
+
except ServerError,ex:
print "ServerError: " + ex.detail
except UnknownClass,ex:
Index: gnue/geas/idl/connection.idl
diff -u gnue/geas/idl/connection.idl:1.13 gnue/geas/idl/connection.idl:1.14
--- gnue/geas/idl/connection.idl:1.13 Wed Apr 11 21:38:12 2001
+++ gnue/geas/idl/connection.idl Mon May 14 14:57:57 2001
@@ -1,3 +1,5 @@
+#include "treshna.idl"
+
module GEAS{
interface DataObject;
@@ -173,6 +175,23 @@
*/
LoadDefinition getReferenceDefinition( in string classname , in string
fieldname )
raises( ServerError );
+
+
+ void clearCache();
+ void activateEventLog();
+ readonly attribute Changes latestChanges;
+
+ /* in C:
+ GEAS_Connection_activateEventLog( connection_obj , ev );
+ ... various operations ...
+ ... wait for other clients to modify objects, or modify them yourself
...
+ GEAS_Changes *ch = GEAS_Connection__get_latestChanges( connection_obj ,
ev );
+ ... use it here (see treshna.idl) ...
+ CORBA_free( ch );
+
+ note: GEAS_Connection__get_latestChanges() also resets the change log
for the
+ application - ie, it will not return the same results twice in a
row
+ */
};
};
Index: gnue/geas/idl/dataobject.idl
diff -u gnue/geas/idl/dataobject.idl:1.9 gnue/geas/idl/dataobject.idl:1.10
--- gnue/geas/idl/dataobject.idl:1.9 Thu Mar 29 17:11:14 2001
+++ gnue/geas/idl/dataobject.idl Mon May 14 14:57:57 2001
@@ -18,6 +18,9 @@
*/
readonly attribute ObjectReference objectID;
+ /* returns TRUE if object has this ID */
+ boolean identity( in string classname , in string oid );
+
// schema related methods & attributes
/** \brief Determines if an object is an instance of a given class
* \param classname The name of the class that the client is interested in
@@ -145,6 +148,8 @@
*/
string callMethod( in string methodname , in Arguments args )
raises(ArgumentCount,UnknownMethod,InvalidArgument,MethodError,NullField,ServerError,Locked,TransactionNotInProgress);
+
+ readonly attribute boolean inDatabase;
};
};
Index: gnue/geas/idl/geas.idl
diff -u gnue/geas/idl/geas.idl:1.4 gnue/geas/idl/geas.idl:1.5
--- gnue/geas/idl/geas.idl:1.4 Wed Mar 14 20:17:14 2001
+++ gnue/geas/idl/geas.idl Mon May 14 14:57:57 2001
@@ -14,4 +14,3 @@
// link to method provider code
#include "methodprovider.idl"
-
Index: gnue/geas/src/Makefile.am
diff -u gnue/geas/src/Makefile.am:1.30 gnue/geas/src/Makefile.am:1.31
--- gnue/geas/src/Makefile.am:1.30 Mon Apr 16 18:05:58 2001
+++ gnue/geas/src/Makefile.am Mon May 14 14:57:57 2001
@@ -62,6 +62,7 @@
$(top_srcdir)/idl/transaction.idl \
$(top_srcdir)/idl/factory.idl \
$(top_srcdir)/idl/query.idl \
+ $(top_srcdir)/idl/treshna.idl \
$(top_srcdir)/idl/methodprovider.idl
IDLOUT = \
Index: gnue/geas/src/collectiondata.c
diff -u gnue/geas/src/collectiondata.c:1.14 gnue/geas/src/collectiondata.c:1.15
--- gnue/geas/src/collectiondata.c:1.14 Wed Apr 11 21:47:53 2001
+++ gnue/geas/src/collectiondata.c Mon May 14 14:57:57 2001
@@ -115,13 +115,21 @@
debug_output( DEBUGLEVEL_3 , "List length: %d" , len );
for( i=0 ; i<len ; i++ )
{
+ ObjectKey keydata;
+ char *tmp;
+
debug_output( DEBUGLEVEL_3 , "Item: %d of %d" , i , len );
id = (char *)get_result_field( result , i/*row*/ , idx/*field*/ );
/* store a record of this object */
- uuid_generate( newkeydata );
- uuid_unparse( newkeydata , newkey );
- ob = oc_add_empty_object( "geas::listitem" , newkey );
+ keydata = create_new_object_key();
+ tmp = object_key_as_string( keydata );
+ ob = oc_add_empty_object( "geas::listitem" , tmp );
+ g_free( keydata );
+
+ /* uuid_generate( newkeydata ); */
+ /* uuid_unparse( newkeydata , newkey ); */
+ /* ob = oc_add_empty_object( "geas::listitem" , newkey ); */
/* store the object's details */
sprintf( buf , "%d" , i );
Index: gnue/geas/src/connection.c
diff -u gnue/geas/src/connection.c:1.49 gnue/geas/src/connection.c:1.50
--- gnue/geas/src/connection.c:1.49 Wed Apr 11 21:47:53 2001
+++ gnue/geas/src/connection.c Mon May 14 14:57:57 2001
@@ -240,7 +240,6 @@
make_UnknownClass_exception(ev, "Class '%s' not known", classname);
return (CORBA_OBJECT_NIL);
}
- parents = odl_class_get_parentnames(cl);
key = create_new_object_key();
if (!key)
@@ -251,7 +250,7 @@
return (CORBA_OBJECT_NIL);
}
- keystr = object_key_as_string(key);
+ keystr = (char *)object_key_as_string(key);
if (!keystr)
{
if (parents)
@@ -266,18 +265,46 @@
dm_event(id->username, id->currenttransaction, DM_EVENT_OBJECT_NEW,
odl_class_get_full_name(cl), keystr);
- /* actually create the object */
-
+ retval = make_dataobject_reference(classname, keystr, id->username,
id->sessionid, ev);
+ return( retval );
+ }
+
+/*
+ * this is just another nasty hack. it's not my fault, and I did not want
+ * this. go bother someone else if it doesn't make sense. it does definately
+ * cause problems, though, not that I expect anyone to pay any attention to me
- I
+ * only wrote GEAS, I wouldn't know how to use it, or what problems it has.
+ *
+ */
+
+void
+Connection_realNewObject(GEAS_object_reference * id)
+{
+ odl_class *cl;
+ GList *fields, *fl;
+ ObjectData *ob;
+ GList *parents, *l;
+ CORBA_Environment ev;
+
+ cl = odl_find_class(all_classes, id->classname, NULL);
+ if (!cl)
+ {
+ return;
+ }
+ parents = odl_class_get_parentnames(cl);
+
/* requested class to cache */
- ob = oc_add_empty_object(odl_class_get_full_name(cl), keystr);
+ ob = oc_add_empty_object(odl_class_get_full_name(cl), id->objectid);
fields = odl_class_get_fields(cl, FT_basic);
fl = fields;
while (fl)
{
odl_field *f = fl->data;
+
if (odl_field_get_default(f))
oc_set_object_field(ob, odl_field_get_name(f),
odl_field_get_default(f), FALSE);
+
fl = g_list_next(fl);
}
odl_fieldlist_free(fields);
@@ -312,10 +339,7 @@
}
if (parents)
odl_namelist_free(parents);
- oc_flush_object_to_store( ob );
-
- retval = make_dataobject_reference(classname, keystr, id->username, ev);
- return( retval );
+ oc_set_object_flag(ob, of_indatabase, FLAG_OFF);
}
GEAS_ObjectList Connection_newEmptyList(GEAS_object_reference * id,
@@ -350,7 +374,7 @@
return( CORBA_OBJECT_NIL );
}
- retval = make_list_reference( listid , id->username , ev );
+ retval = make_list_reference( listid , id->username , id->sessionid , ev );
CORBA_free( listid );
return( retval );
}
@@ -392,7 +416,7 @@
return (CORBA_OBJECT_NIL);
}
/* create ObjectList reference */
- retval = (GEAS_ObjectList) make_list_reference(keystr, id->username, ev);
+ retval = (GEAS_ObjectList) make_list_reference(keystr, id->username,
id->sessionid, ev);
CORBA_free(keystr);
return retval;
}
@@ -429,7 +453,7 @@
return (CORBA_OBJECT_NIL);
}
/* create ObjectList reference */
- retval = (GEAS_ObjectList) make_list_reference(keystr, id->username, ev);
+ retval = (GEAS_ObjectList) make_list_reference(keystr, id->username,
id->sessionid, ev);
CORBA_free(keystr);
return retval;
}
@@ -467,13 +491,14 @@
make_ServerError_exception(ev, "Could not create query");
return (CORBA_OBJECT_NIL);
}
+ oql_limit_results( q , 1 );
obj = oc_search_for_single_object(q);
if (obj)
{
retval = make_dataobject_reference(oc_get_object_class(obj),
oc_get_object_key(obj),
- id->username, ev);
+ id->username, id->sessionid, ev);
return (retval);
}
@@ -504,7 +529,7 @@
idx = oql_query_get_field_position(q, "objectid");
retval = make_dataobject_reference(classname,
get_result_field(result, 0, idx),
- id->username, ev);
+ id->username, id->sessionid, ev);
}
else
{
@@ -560,7 +585,7 @@
/* done */
uniqueid = GEAS_DataObject__get_objectID(q,ev);
- retval = make_query_reference( uniqueid , id->username , ev );
+ retval = make_query_reference( uniqueid , id->username , id->sessionid ,
ev );
CORBA_free( uniqueid );
CORBA_Object_release(q,ev);
return( retval );
@@ -659,6 +684,7 @@
list = CORBA_OBJECT_NIL;
goto cleanup;
}
+ list = CORBA_OBJECT_NIL;
/* get objectid of all geas::searchcriteria instances with parent ==
queryid */
@@ -705,7 +731,19 @@
error:
cleanup:
- if( subid ) CORBA_free( id );
+ if( subid ) CORBA_free( subid );
+
+ if( list != CORBA_OBJECT_NIL )
+ {
+ GEAS_ObjectList_release( list , ev );
+ if( ev->_major != CORBA_NO_EXCEPTION ) {
+ list = CORBA_OBJECT_NIL;
+ }
+ CORBA_Object_release( list , ev );
+ if( ev->_major != CORBA_NO_EXCEPTION ) {
+ list = CORBA_OBJECT_NIL;
+ }
+ }
}
GEAS_ObjectList
@@ -722,6 +760,7 @@
QueryData *q = NULL;
GEAS_ObjectList retval = CORBA_OBJECT_NIL;
oql_constraint *constraint=NULL;
+ char *limit = NULL;
/* find root of query */
queryid = GEAS_Query_Query__get_id( querytoperform ,ev );
@@ -753,6 +792,13 @@
q = oql_load_object( configdata , odl_class_get_full_name(c) );
if( !q ) goto error;
+ if( limit )
+ {
+ if( strlen(limit) > 0 && isdigit(limit[0]) )
+ oql_limit_results( q , atoi(limit) );
+ CORBA_free( limit );
+ }
+
/* handle 'order by' */
if( orderby ) add_order_by( q , orderby , reverse );
@@ -773,7 +819,7 @@
"1 Could not create list storage structure");
goto error;
}
- retval = (GEAS_ObjectList) make_list_reference(keystr, id->username, ev);
+ retval = (GEAS_ObjectList) make_list_reference(keystr, id->username,
id->sessionid, ev);
CORBA_free(keystr);
/* done */
@@ -784,6 +830,8 @@
if( queryid ) g_free( queryid );
if( classname ) g_free( classname );
if( orderby ) g_free( orderby );
+
+ return( CORBA_OBJECT_NIL );
}
static GEAS_ObjectList
@@ -953,7 +1001,7 @@
goto error;
}
/* create ObjectList reference */
- retval = (GEAS_ObjectList) make_list_reference(keystr, id->username, ev);
+ retval = (GEAS_ObjectList) make_list_reference(keystr, id->username,
id->sessionid, ev);
CORBA_free(keystr);
/* done */
@@ -1060,4 +1108,6 @@
/* a performance hit for all clients */
oc_empty_cache();
}
+
+#include "event_log_code.h"
Index: gnue/geas/src/connection.h
diff -u gnue/geas/src/connection.h:1.11 gnue/geas/src/connection.h:1.12
--- gnue/geas/src/connection.h:1.11 Wed Apr 11 21:47:53 2001
+++ gnue/geas/src/connection.h Mon May 14 14:57:57 2001
@@ -82,6 +82,8 @@
GEAS_Query_Query querytoperform,
CORBA_Environment * ev);
+void Connection_realNewObject(GEAS_object_reference * id);
+
GEAS_LoadDefinition *
Connection_getReferenceDefinition(GEAS_object_reference * id,
CORBA_char * classname,
@@ -90,5 +92,9 @@
/* did I say you should use this? no, I didn't. so don't. */
void Connection_clearCache(GEAS_object_reference * id,CORBA_Environment * ev);
+void Connection_activateEventLog(GEAS_object_reference * id,CORBA_Environment
* ev);
+GEAS_Changes *Connection__get_latestChanges(GEAS_object_reference *
id,CORBA_Environment * ev);
+void Connection_logEdit( const char *classname , const char *oid , const char
*fieldname , GEAS_object_reference * id );
+void Connection_logDelete(const char *classname, const char *oid,
GEAS_object_reference * id);
#endif /* CONNECTION_H */
Index: gnue/geas/src/datamonitor/datamonitor.c
diff -u gnue/geas/src/datamonitor/datamonitor.c:1.5
gnue/geas/src/datamonitor/datamonitor.c:1.6
--- gnue/geas/src/datamonitor/datamonitor.c:1.5 Mon Mar 5 14:50:56 2001
+++ gnue/geas/src/datamonitor/datamonitor.c Mon May 14 14:57:57 2001
@@ -103,6 +103,7 @@
if( event == DM_EVENT_SECURITY_LOGON_SUCCESS ) fprintf( fp , "
login_success" );
if( event == DM_EVENT_SECURITY_LOGON_FAIL ) fprintf( fp , " login_fail"
);
+ if( event == DM_EVENT_SECURITY ) fprintf( fp , " security" );
if( event == DM_EVENT_ERROR ) fprintf( fp , " error" );
if( event == DM_EVENT_WARNING ) fprintf( fp , " warning" );
Index: gnue/geas/src/datamonitor/datamonitor.h
diff -u gnue/geas/src/datamonitor/datamonitor.h:1.4
gnue/geas/src/datamonitor/datamonitor.h:1.5
--- gnue/geas/src/datamonitor/datamonitor.h:1.4 Mon Mar 5 14:50:56 2001
+++ gnue/geas/src/datamonitor/datamonitor.h Mon May 14 14:57:57 2001
@@ -55,9 +55,10 @@
#define DM_EVENT_SECURITY_LOGON_SUCCESS 0x01000000
#define DM_EVENT_SECURITY_LOGON_FAIL 0x02000000
+#define DM_EVENT_SECURITY 0x04000000
/* log all security related items */
-#define DM_EVENT_ALL_SECURITY (DM_EVENT_SECURITY_LOGON_SUCCES |
DM_EVENT_SECURITY_LOGON_FAIL)
+#define DM_EVENT_ALL_SECURITY (DM_EVENT_SECURITY_LOGON_SUCCES |
DM_EVENT_SECURITY_LOGON_FAIL | DM_EVENT_SECURITY)
/* log file flags (not event types) */
Index: gnue/geas/src/dataobject.c
diff -u gnue/geas/src/dataobject.c:1.48 gnue/geas/src/dataobject.c:1.49
--- gnue/geas/src/dataobject.c:1.48 Tue Apr 3 15:06:28 2001
+++ gnue/geas/src/dataobject.c Mon May 14 14:57:57 2001
@@ -387,6 +387,7 @@
{
/* immediately write it to the database */
/* message( "attempting write" ); */
+ Connection_logEdit( id->classname , id->objectid , fieldname , id );
oc_flush_object_to_store(obj);
}
}
@@ -512,7 +513,7 @@
/* create DataObject reference */
idfield = oql_query_get_field_position( q , "objectid" );
keystr = (char *)get_result_field(result,0,idfield);
- retval = (GEAS_DataObject)
make_dataobject_reference(loadclass,keystr,id->username,ev);
+ retval = (GEAS_DataObject)
make_dataobject_reference(loadclass,keystr,id->username,id->sessionid,ev);
oql_free_query(q);
if( result ) free_query_result( result );
return retval;
@@ -624,7 +625,7 @@
}
/* create ObjectList reference */
- retval = (GEAS_ObjectList) make_list_reference(keystr, id->username, ev);
+ retval = (GEAS_ObjectList) make_list_reference(keystr, id->username,
id->sessionid, ev);
CORBA_free(keystr);
return retval;
@@ -953,6 +954,7 @@
if( strncmp(id->classname,"geas::",6) != 0 )
dm_event( id->username , id->currenttransaction ,
DM_EVENT_OBJECT_DELETE ,
odl_class_get_full_name(cl) , id->objectid );
+ Connection_logDelete( odl_class_get_full_name(cl) , id->objectid , id
);
oc_delete_object( odl_class_get_full_name(cl) , id->objectid );
}
}
Index: gnue/geas/src/factory.c
diff -u gnue/geas/src/factory.c:1.11 gnue/geas/src/factory.c:1.12
--- gnue/geas/src/factory.c:1.11 Wed Feb 21 12:21:25 2001
+++ gnue/geas/src/factory.c Mon May 14 14:57:57 2001
@@ -90,7 +90,6 @@
if( sessionid )
{
c = make_connection_reference(username,sessionid,ev);
- g_free( sessionid );
}
free_object_key( key );
}
Index: gnue/geas/src/geas-internal-classes.h
diff -u gnue/geas/src/geas-internal-classes.h:1.14
gnue/geas/src/geas-internal-classes.h:1.15
--- gnue/geas/src/geas-internal-classes.h:1.14 Wed Mar 14 20:17:14 2001
+++ gnue/geas/src/geas-internal-classes.h Mon May 14 14:57:57 2001
@@ -37,12 +37,16 @@
#undef IN_GCD_LIBRARY
/* UUID values used to identify a class, created with 'uuidgen' */
-#define GEAS_LISTITEM_UUID "f6e52e6e-07a8-4f64-96fa-0bf1be51fec0"
-#define GEAS_LISTHOLDER_UUID "a759a9c5-27e1-45b4-ba98-e34b48ada4d3"
-#define GEAS_USER_UUID "ec3f41af-fd9c-4fe6-836e-3acfe037b76e"
-#define GEAS_TRANSACTION_UUID "6e2384cd-d8fc-4bb8-b681-d4afb784d564"
+#define GEAS_LISTITEM_UUID "f6e52e6e-07a8-4f64-96fa-0bf1be51fec0"
+#define GEAS_LISTHOLDER_UUID "a759a9c5-27e1-45b4-ba98-e34b48ada4d3"
+#define GEAS_USER_UUID "ec3f41af-fd9c-4fe6-836e-3acfe037b76e"
+#define GEAS_TRANSACTION_UUID "6e2384cd-d8fc-4bb8-b681-d4afb784d564"
+#define GEAS_SEARCHCRITERIA_UUID "1fadb197-3149-44d6-9cfa-468a0dae4985"
+#define GEAS_SEARCHFIELD_UUID "0cf1a207-add6-4750-8ee8-be108a5ad3ac"
-/* all classes should be placed in the 'GEAS' module */
+/* all classes should be placed in the 'GEAS' module unless there is */
+/* a good reason to do otherwise ( ie: geas:: is the prefix for GEAS */
+/* specific classes, so no conflict with non geas classes) */
static void make_server_security_classes( odl_module *m )
{
Index: gnue/geas/src/geas-server.c
diff -u gnue/geas/src/geas-server.c:1.78 gnue/geas/src/geas-server.c:1.79
--- gnue/geas/src/geas-server.c:1.78 Wed Apr 11 21:47:53 2001
+++ gnue/geas/src/geas-server.c Mon May 14 14:57:57 2001
@@ -183,6 +183,9 @@
/* read command line arguments, including a config file */
readOptions(argc, argv);
+ /* make lots and lots of OIDs for use */
+ refill_oid_buffer( 1024*1024 );
+
/* initialise various modules */
/* Order of steps is significant */
@@ -509,9 +512,6 @@
vfprintf(stderr, msg, a);
va_end(a);
fprintf(stderr, "\n");
-
- /* write buffers */
- fflush(NULL);
}
#endif
@@ -553,9 +553,6 @@
vfprintf(stderr, msg, a);
va_end(a);
fprintf(stderr, "\n");
-
- /* write buffers */
- fflush(NULL);
}
/** \brief Long command line options options
@@ -1025,7 +1022,9 @@
fprintf(stdout, "--usage, -u :\n");
fprintf(stdout, "--help, -h : Show this help text.\n");
- fprintf(stdout, "\n");
+
+ fprintf(stdout, "\n(Note: -c must be the first command line option, if it
is used.)\n\n");
+
fprintf(stdout, "ORBit related options:\n\n" );
fprintf(stdout, "-ORBIIOPIPv4=1 : Enable IIOP over TCP/IPIP\n");
fprintf(stdout, "-ORBIIOPIPv4=0 : Disable IIOP over
TCP/IPIP\n");
@@ -1187,9 +1186,6 @@
vfprintf(stderr, fmt, a);
va_end(a);
fprintf(stderr, "\n");
-
- /* write buffers */
- fflush(NULL);
}
/** \brief Display tect messages (if not in 'quiet' mode)
@@ -1211,9 +1207,6 @@
vfprintf(stdout, fmt, a);
va_end(a);
fprintf(stdout, "\n");
-
- /* write buffers */
- fflush(NULL);
}
#ifdef SELF_TEST
@@ -1232,9 +1225,6 @@
vfprintf(stderr, fmt, a);
va_end(a);
fprintf(stderr, "\n");
-
- /* write buffers */
- fflush(NULL);
}
#endif
Index: gnue/geas/src/geas-server.h
diff -u gnue/geas/src/geas-server.h:1.34 gnue/geas/src/geas-server.h:1.35
--- gnue/geas/src/geas-server.h:1.34 Mon Mar 26 15:40:31 2001
+++ gnue/geas/src/geas-server.h Mon May 14 14:57:57 2001
@@ -182,7 +182,7 @@
#define DEBUGLEVEL_10 10 /* high */
/* set debug level for features */
-#define TRACE_FUNCTIONCALL 4 /* MEDIUM */
+#define TRACE_FUNCTIONCALL 3 /* MEDIUM */
#define TRACE_NOTDONE 0 /* ALWAYS */
#ifdef DEBUG
Index: gnue/geas/src/geas-skeleton.c
diff -u gnue/geas/src/geas-skeleton.c:1.53 gnue/geas/src/geas-skeleton.c:1.54
--- gnue/geas/src/geas-skeleton.c:1.53 Wed Apr 11 21:47:53 2001
+++ gnue/geas/src/geas-skeleton.c Mon May 14 14:57:57 2001
@@ -56,6 +56,8 @@
static GEAS_object_reference *alloc_geas_object_reference();
static GEAS_object_reference *parse_object_id(const char *id);
+gboolean allow_oid_refill = TRUE;
+
/* private function: convert current object ID to a GEAS_object_reference */
/** \brief Update GEAS object reference to reflect current transaction
@@ -73,6 +75,15 @@
id->transactionopen = FALSE;
id->currenttransaction = NULL;
+ return;
+ }
+
+static void some_old_code(GEAS_object_reference * id)
+{
+ QueryData *query = NULL;
+ ObjectData *user=NULL,*transaction=NULL;
+ char *transactionid = NULL;
+ char *open;
/* find user data by name */
query = NULL;
@@ -706,7 +717,9 @@
if (ev->_major != CORBA_NO_EXCEPTION)
return (retval);
+ allow_oid_refill = FALSE;
retval = Connection_executeQuery(id, querytoperform, ev);
+ allow_oid_refill = TRUE;
free_geas_object_reference(id);
return retval;
@@ -806,6 +819,8 @@
ObjectData *ob;
trace_functioncall();
+ if( allow_oid_refill )
+ refill_oid_buffer(5);
id = get_current_object_reference(servant, servant->poa, ev);
if (ev->_major != CORBA_NO_EXCEPTION)
@@ -878,7 +893,9 @@
if (ev->_major != CORBA_NO_EXCEPTION)
return (retval);
+ allow_oid_refill = FALSE;
retval = Connection_loadObjects(id, classname, fieldname, searchvalue, ev);
+ allow_oid_refill = TRUE;
free_geas_object_reference(id);
return retval;
@@ -898,7 +915,9 @@
if (ev->_major != CORBA_NO_EXCEPTION)
return (retval);
+ allow_oid_refill = FALSE;
retval = Connection_loadAll(id, classname, ev);
+ allow_oid_refill = TRUE;
free_geas_object_reference(id);
return retval;
@@ -1153,6 +1172,9 @@
trace_functioncall();
+ if( allow_oid_refill )
+ refill_oid_buffer(5);
+
id = get_current_object_reference(servant, servant->poa, ev);
if (ev->_major != CORBA_NO_EXCEPTION)
return ;
@@ -1209,8 +1231,55 @@
return;
Connection_clearCache(id, ev);
free_geas_object_reference(id);
+ if( allow_oid_refill )
+ refill_oid_buffer(1024*1024);
+}
+
+static void
+impl_GEAS_Connection_activateEventLog(impl_POA_GEAS_Connection * servant,
+ CORBA_Environment * ev)
+{
+ GEAS_object_reference *id;
+ trace_functioncall();
+ id = get_current_object_reference(servant, servant->poa, ev);
+ if (ev->_major != CORBA_NO_EXCEPTION)
+ return;
+ Connection_activateEventLog(id,ev);
+ free_geas_object_reference(id);
+}
+
+static GEAS_Changes *
+impl_GEAS_Connection__get_latestChanges(impl_POA_GEAS_Connection *
+ servant, CORBA_Environment * ev)
+{
+ GEAS_object_reference *id = NULL;
+ GEAS_Changes *retval = NULL;
+ trace_functioncall();
+ id = get_current_object_reference(servant, servant->poa, ev);
+ if (ev->_major != CORBA_NO_EXCEPTION)
+ return(retval);
+ retval = Connection__get_latestChanges(id,ev);
+ free_geas_object_reference(id);
+ return( retval );
+}
+
+static CORBA_boolean
+impl_GEAS_DataObject_identity(impl_POA_GEAS_DataObject * servant,
+ CORBA_char *classname, CORBA_char * oid,
CORBA_Environment * ev)
+{
+ CORBA_boolean retval = CORBA_FALSE;
+ GEAS_object_reference *id;
+ id = get_current_object_reference(servant, servant->poa, ev);
+ if (ev->_major != CORBA_NO_EXCEPTION)
+ return (retval);
+ if( g_strcasecmp(classname,id->classname)==0 &&
+ strcmp(id->objectid,oid)==0 )
+ retval = CORBA_TRUE;
+ free_geas_object_reference(id);
+ return retval;
}
+
static GEAS_ObjectReference
impl_GEAS_DataObject__get_objectID(impl_POA_GEAS_DataObject * servant,
CORBA_Environment * ev)
@@ -1353,6 +1422,9 @@
trace_functioncall();
+ if( allow_oid_refill )
+ refill_oid_buffer(5);
+
id = get_current_object_reference(servant, servant->poa, ev);
if (ev->_major != CORBA_NO_EXCEPTION)
return (retval);
@@ -1374,6 +1446,8 @@
id = get_current_object_reference(servant, servant->poa, ev);
if (ev->_major != CORBA_NO_EXCEPTION)
return ;
+ if( allow_oid_refill )
+ refill_oid_buffer(5);
DataObject_setField(id, fieldname, value, ev);
@@ -1408,6 +1482,7 @@
GEAS_ObjectList retval;
GEAS_object_reference *id;
+ allow_oid_refill = FALSE;
trace_functioncall();
id = get_current_object_reference(servant, servant->poa, ev);
@@ -1417,6 +1492,7 @@
retval = DataObject_getList(id, fieldname, ev);
free_geas_object_reference(id);
+ allow_oid_refill = TRUE;
return retval;
}
@@ -1466,6 +1542,9 @@
if (ev->_major != CORBA_NO_EXCEPTION)
return ;
+ if( allow_oid_refill )
+ refill_oid_buffer(5);
+
free_geas_object_reference(id);
}
@@ -1483,6 +1562,9 @@
DataObject_delete(id, ev);
+ if( allow_oid_refill )
+ refill_oid_buffer(5);
+
free_geas_object_reference(id);
}
@@ -1496,6 +1578,9 @@
trace_functioncall();
+ if( allow_oid_refill )
+ refill_oid_buffer(5);
+
id = get_current_object_reference(servant, servant->poa, ev);
if (ev->_major != CORBA_NO_EXCEPTION)
return (retval);
@@ -1515,6 +1600,9 @@
trace_functioncall();
+ if( allow_oid_refill )
+ refill_oid_buffer(1);
+
id = get_current_object_reference(servant, servant->poa, ev);
if (ev->_major != CORBA_NO_EXCEPTION)
return (retval);
@@ -1533,6 +1621,9 @@
trace_functioncall();
+ if( allow_oid_refill )
+ refill_oid_buffer(5);
+
id = get_current_object_reference(servant, servant->poa, ev);
if (ev->_major != CORBA_NO_EXCEPTION)
return (retval);
@@ -1571,6 +1662,9 @@
trace_functioncall();
+ if( allow_oid_refill )
+ refill_oid_buffer(2);
+
id = get_current_object_reference(servant, servant->poa, ev);
if (ev->_major != CORBA_NO_EXCEPTION)
return (retval);
@@ -2482,7 +2576,6 @@
}
/* Business Object Identifier */
-
ObjectIdentifier *
create_object_identifier(const char *classname, const char *key)
{
@@ -2519,15 +2612,87 @@
}
/* Create/manage object keys using libuuid */
+#define OID_BUF_LEN 1024
+static unsigned char oid_buffer[OID_BUF_LEN+2][64];
+static int oid_count = (-1);
+
+void refill_oid_buffer( int max )
+{
+ int count = 0;
+ /* create at most max oids */
+
+ while( count < max && oid_count < (OID_BUF_LEN-1) )
+ {
+ oid_count++;
+ count++;
+ uuid_generate_time( &oid_buffer[oid_count][0] );
+ }
+ debug_output( DEBUGLEVEL_2 , "Created %d oids" , count );
+}
ObjectKey
create_new_object_key()
+{
+ ObjectKey key = g_new0( unsigned char , 16 );
+ if( oid_count >= 1 )
+ {
+ memcpy( key , &oid_buffer[ oid_count ][0] , 16 );
+ oid_count--;
+ }
+ else
+ {
+ refill_oid_buffer( 2 );
+ key = create_new_object_key();
+ }
+ return( key );
+}
+
+ObjectKey
+old_create_new_object_key()
{
+ static unsigned char buf[64];
+ static gboolean first = TRUE;
ObjectKey key = g_new0(unsigned char, 16);
+ int i;
+
+ if( first == TRUE )
+ {
+ printf( "using uuid_generate_time()\n" );
+ uuid_generate_time( buf );
+ /* first = FALSE; */
+ }
+ else
+ {
+ printf( "incrementing buffer: " );
+ i = 15;
+ while( i >= 0 )
+ {
+ printf( "%d " , i );
+ if( buf[i] == 255 )
+ {
+ buf[i] = 0;
+ i--;
+ }
+ else
+ {
+ buf[i]++;
+ i = (-1);
+ }
+ }
+ printf( "\n" );
+ }
+ memcpy( key , buf , 16 );
+ return( key );
+
+ /* real code
+
+ ObjectKey key = g_new0(unsigned char, 16);
+
if (key)
uuid_generate(key);
return (key);
+ */
}
void
@@ -2549,18 +2714,15 @@
}
}
-char *
+const char *
object_key_as_string(ObjectKey key)
{
- char *buf = g_new0(char, 38);
+ static char buf[33];
+ buf[32] = '\0';
- if (buf)
- {
- uuid_unparse(key, buf);
- cleanup_oid(buf);
- return (buf);
- }
- return (NULL);
+ uuid_unparse(key, buf);
+ cleanup_oid(buf);
+ return (buf);
}
void
@@ -2584,8 +2746,6 @@
if (k)
fprintf(fp, k);
- if (k)
- g_free(k);
}
ObjectKey
@@ -2806,23 +2966,33 @@
CORBA_Object
-make_admin_reference(const char *username, CORBA_Environment * ev)
+make_admin_reference(const char *username, const char
*sessionid,CORBA_Environment * ev)
{
+ char *uid = NULL;
CORBA_Object retval;
+
+ uid = g_strdup_printf( "%s-%s" , sessionid , username );
+ if( !uid ) return( CORBA_OBJECT_NIL );
retval = make_1_element_reference(OBJECTTYPE_ADMIN,"IDL:GEAS/Admin:1.0",
- username,
+ uid,
poa_data.admin_poa,ev);
+ if( uid ) g_free( uid );
return( retval );
}
CORBA_Object
make_transaction_reference(const char *username, const char *objectid,
- CORBA_Environment * ev)
+ const char *sessionid, CORBA_Environment * ev)
{
+ char *uid = NULL;
CORBA_Object retval;
+
+ uid = g_strdup_printf( "%s-%s" , sessionid , username );
+ if( !uid ) return( CORBA_OBJECT_NIL );
retval =
make_2_element_reference(OBJECTTYPE_TRANSACTION,"IDL:GEAS/Transaction:1.0",
- username,objectid,
+ uid,objectid,
poa_data.transaction_poa,ev);
+ if( uid ) g_free( uid );
return( retval );
}
@@ -2830,56 +3000,102 @@
make_connection_reference(const char *username, const char *sessionid,
CORBA_Environment * ev)
{
+ char *uid = NULL;
CORBA_Object retval;
+
+ uid = g_strdup_printf( "%s-%s" , sessionid , username );
+ if( !uid ) return( CORBA_OBJECT_NIL );
retval =
make_2_element_reference(OBJECTTYPE_CONNECTION,"IDL:GEAS/Connection:1.0",
- username,sessionid,
+ uid,sessionid,
poa_data.connection_poa,ev);
+ if( uid ) g_free( uid );
return( retval );
}
CORBA_Object
make_list_reference(const char *listid, const char *username,
- CORBA_Environment * ev)
+ const char *sessionid,CORBA_Environment * ev)
{
+ char *uid = NULL;
CORBA_Object retval;
+
+ uid = g_strdup_printf( "%s-%s" , sessionid , username );
+ if( !uid ) return( CORBA_OBJECT_NIL );
retval =
make_2_element_reference(OBJECTTYPE_LIST,"IDL:GEAS/ObjectList:1.0",
- listid,username,
+ listid,uid,
poa_data.objectlist_poa,ev);
+ if( uid ) g_free( uid );
return( retval );
}
CORBA_Object
make_dataobject_reference(const char *objectclass, const char *objectid,
- const char *username, CORBA_Environment * ev)
+ const char *username, const char
*sessionid,CORBA_Environment * ev)
{
+ char *uid = NULL;
CORBA_Object retval;
+
+ uid = g_strdup_printf( "%s-%s" , sessionid , username );
+ if( !uid ) return( CORBA_OBJECT_NIL );
retval =
make_3_element_reference(OBJECTTYPE_DATA,"IDL:GEAS/DataObject:1.0",
- objectclass,objectid,username,
+ objectclass,objectid,uid,
poa_data.dataobject_poa,ev);
+ if( uid ) g_free( uid );
return( retval );
}
CORBA_Object
-make_query_reference(const char *uniqueid, const char
*username,CORBA_Environment * ev)
+make_query_reference(const char *uniqueid, const char *username,const char
*sessionid,CORBA_Environment * ev)
{
+ char *uid = NULL;
CORBA_Object retval;
+
+ uid = g_strdup_printf( "%s-%s" , sessionid , username );
+ if( !uid ) return( CORBA_OBJECT_NIL );
retval =
make_2_element_reference(OBJECTTYPE_QUERY,"IDL:GEAS/Query/Query:1.0",
- uniqueid,username,
+ uniqueid,uid,
poa_data.query_poa,ev);
+ if( uid ) g_free( uid );
return( retval );
}
CORBA_Object
make_constraint_reference(const char *uniqueid, const char *parentid, const
char *username,
- CORBA_Environment * ev)
+ const char *sessionid, CORBA_Environment * ev)
{
+ char *uid = NULL;
CORBA_Object retval;
+
+ uid = g_strdup_printf( "%s-%s" , sessionid , username );
+ if( !uid ) return( CORBA_OBJECT_NIL );
retval =
make_3_element_reference(OBJECTTYPE_CONSTRAINT,"IDL:GEAS/Query/Constraint:1.0",
- uniqueid,parentid,username,
+ uniqueid,parentid,uid,
poa_data.constraint_poa,ev);
+ if( uid ) g_free( uid );
return( retval );
}
+static void
+reprocess_username( char **username , char **sessionid )
+{
+ char *p,*tmp;
+
+ tmp = *username;
+
+ if( *sessionid )
+ g_free( *sessionid );
+ *sessionid = NULL;
+
+ p = strchr( *username , '-' );
+ if( !p ) return;
+
+ *p = '\0';
+ p++;
+ *sessionid = g_strdup( *username );
+ *username = g_strdup( p );
+
+ g_free( tmp );
+}
/* convert string to GEAS id */
static GEAS_object_reference *
@@ -2896,36 +3112,43 @@
{
/* DataObject : 02*classname*objectid*username */
unparse_3_element_reference( id , &oi->classname , &oi->objectid ,
&oi->username );
+ reprocess_username( &oi->username , &oi->sessionid );
}
else if (strncmp(id, OBJECTTYPE_LIST, strlen(OBJECTTYPE_LIST)) == 0 &&
id[strlen(OBJECTTYPE_LIST)]=='*' )
{
/* ObjectList : 03*listid*username */
unparse_2_element_reference( id , &oi->listid , &oi->username );
+ reprocess_username( &oi->username , &oi->sessionid );
}
else if (strncmp(id, OBJECTTYPE_CONSTRAINT, strlen(OBJECTTYPE_CONSTRAINT))
==0 && id[strlen(OBJECTTYPE_CONSTRAINT)]=='*' )
{
/* Constraint : 07*uniqueid*parentid */
unparse_3_element_reference( id , &oi->uniqueid , &oi->parentid ,
&oi->username );
+ reprocess_username( &oi->username , &oi->sessionid );
}
else if (strncmp(id, OBJECTTYPE_QUERY, strlen(OBJECTTYPE_QUERY)) == 0 &&
id[strlen(OBJECTTYPE_QUERY)]=='*' )
{
/* Query : 06*uniqueid*username */
unparse_2_element_reference( id , &oi->uniqueid , &oi->username );
+ reprocess_username( &oi->username , &oi->sessionid );
}
else if (strncmp(id, OBJECTTYPE_TRANSACTION,
strlen(OBJECTTYPE_TRANSACTION))== 0 && id[strlen(OBJECTTYPE_TRANSACTION)]=='*' )
{
/* Transaction: 05*username*objectid */
unparse_2_element_reference( id , &oi->username , &oi->objectid );
+ reprocess_username( &oi->username , &oi->sessionid );
}
else if (strncmp(id, OBJECTTYPE_CONNECTION, strlen(OBJECTTYPE_CONNECTION))
== 0 && id[strlen(OBJECTTYPE_CONNECTION)]=='*' )
{
/* Connection : 01*username*sessionid */
unparse_2_element_reference( id , &oi->username , &oi->sessionid );
+ reprocess_username( &oi->username , &oi->sessionid );
}
else if (strncmp(id, OBJECTTYPE_ADMIN, strlen(OBJECTTYPE_ADMIN)) == 0 &&
id[strlen(OBJECTTYPE_ADMIN)]=='*' )
{
/* Admin : 04*username */
unparse_1_element_reference( id , &oi->username );
+ reprocess_username( &oi->username , &oi->sessionid );
}
#ifdef DEBUG
Index: gnue/geas/src/geas-skeleton.h
diff -u gnue/geas/src/geas-skeleton.h:1.23 gnue/geas/src/geas-skeleton.h:1.24
--- gnue/geas/src/geas-skeleton.h:1.23 Mon Apr 2 21:11:46 2001
+++ gnue/geas/src/geas-skeleton.h Mon May 14 14:57:57 2001
@@ -73,10 +73,10 @@
/* Business Object Keys */
typedef unsigned char *ObjectKey;
unsigned long int object_key_size( ObjectKey key );
-ObjectKey create_new_object_key ();
-void free_object_key ( ObjectKey key );
-char *object_key_as_string ( ObjectKey key );
-void print_object_key ( FILE *fp , ObjectKey key );
+ObjectKey create_new_object_key ();
+void free_object_key ( ObjectKey key );
+const char *object_key_as_string ( ObjectKey key );
+void print_object_key ( FILE *fp , ObjectKey key );
ObjectKey object_key_from_string( const char *str );
@@ -114,24 +114,27 @@
make_connection_reference( const char *username , const char *session ,
CORBA_Environment *ev );
CORBA_Object
-make_transaction_reference( const char *username , const char *objectid ,
CORBA_Environment *ev );
+make_transaction_reference( const char *username , const char *objectid ,
+ const char *sessionid, CORBA_Environment *ev );
CORBA_Object
-make_admin_reference( const char *username , CORBA_Environment *ev );
+make_admin_reference( const char *username , const char *sessionid,
CORBA_Environment *ev );
CORBA_Object
-make_list_reference( const char *listid , const char *username ,
CORBA_Environment *ev );
+make_list_reference( const char *listid , const char *username , const char
*sessionid, CORBA_Environment *ev );
CORBA_Object
-make_dataobject_reference( const char *objectclass , const char *objectid ,
const char *username , CORBA_Environment *ev );
+make_dataobject_reference( const char *objectclass , const char *objectid ,
const char *username , const char *sessionid, CORBA_Environment *ev );
CORBA_Object
-make_query_reference( const char *uniqueid , const char *username ,
CORBA_Environment *ev );
+make_query_reference( const char *uniqueid , const char *username , const char
*sessionid, CORBA_Environment *ev );
CORBA_Object
-make_constraint_reference( const char *uniqueid , const char *parentid , const
char *username , CORBA_Environment *ev );
+make_constraint_reference( const char *uniqueid , const char *parentid , const
char *username , const char *sessionid, CORBA_Environment *ev );
/* free memory */
void free_geas_object_reference( GEAS_object_reference *oid );
+
+void refill_oid_buffer( int max );
#endif /* SKELETON_H */
Index: gnue/geas/src/methods/methods_glibmodule.h
diff -u gnue/geas/src/methods/methods_glibmodule.h:1.6
gnue/geas/src/methods/methods_glibmodule.h:1.7
--- gnue/geas/src/methods/methods_glibmodule.h:1.6 Wed Apr 11 21:47:53 2001
+++ gnue/geas/src/methods/methods_glibmodule.h Mon May 14 14:57:57 2001
@@ -181,7 +181,7 @@
/* message( "found it" ); */
CORBA_exception_init(&ev2);
- objref =
make_dataobject_reference(obj->classname,obj->objectid,obj->username,&ev2);
+ objref =
make_dataobject_reference(obj->classname,obj->objectid,obj->username,obj->sessionid,&ev2);
serverref = make_connection_reference(obj->username,"server
allocated",&ev2);
func = p->function;
Index: gnue/geas/src/objectlist.c
diff -u gnue/geas/src/objectlist.c:1.15 gnue/geas/src/objectlist.c:1.16
--- gnue/geas/src/objectlist.c:1.15 Sun Mar 25 18:34:22 2001
+++ gnue/geas/src/objectlist.c Mon May 14 14:57:57 2001
@@ -154,7 +154,7 @@
if( ob )
{
key = oc_get_object_field( ob , "reference" );
- retval = make_dataobject_reference(classname, key, id->username,
ev);
+ retval = make_dataobject_reference(classname, key, id->username,
id->sessionid, ev);
g_free( key );
oql_free_query(q);
return( retval );
@@ -182,7 +182,7 @@
}
idx = oql_query_get_field_position(q, "reference");
key = (char *)get_result_field(result, 0, idx);
- retval = make_dataobject_reference(classname, key, id->username, ev);
+ retval = make_dataobject_reference(classname, key, id->username,
id->sessionid, ev);
free_query_result(result);
oql_free_query(q);
}
@@ -330,7 +330,7 @@
}
idx = oql_query_get_field_position(q, "objectid");
key = (char *)get_result_field(result, 0, idx);
- obj = make_dataobject_reference("geas::listitem", key, id->username, ev);
+ obj = make_dataobject_reference("geas::listitem", key, id->username,
id->sessionid, ev);
/* delete it */
GEAS_DataObject_delete(obj, ev);
@@ -382,7 +382,7 @@
}
idx = oql_query_get_field_position(q, "objectid");
key = (char *)get_result_field(result, 0, idx);
- obj = make_dataobject_reference("geas::listitem", key, id->username, ev);
+ obj = make_dataobject_reference("geas::listitem", key, id->username,
id->sessionid, ev);
/* set new index */
buf = g_strdup_printf("%d", i - 1);
Index: gnue/geas/src/objectstore/objectstore.c
diff -u gnue/geas/src/objectstore/objectstore.c:1.52
gnue/geas/src/objectstore/objectstore.c:1.53
--- gnue/geas/src/objectstore/objectstore.c:1.52 Tue Apr 10 16:39:32 2001
+++ gnue/geas/src/objectstore/objectstore.c Mon May 14 14:57:57 2001
@@ -248,7 +248,9 @@
/* execute query (errors passed back automatically) */
/* TODO: if error == unexpected disconnection then try to reconnect */
/* self_test_message("Executing"); */
+/* printf( "SQL: %s\n" , oql_query_as_sql(query,OQL_DBTYPE_CACHEONLY) ); */
storeresult = h->execute(h, query, err, errmsg);
+/* printf( "query done\n" ); */
#ifdef DEBUG
if( errmsg && *errmsg && debuglevel > 1 )
Index: gnue/geas/src/objectstore/postgresql_access.h
diff -u gnue/geas/src/objectstore/postgresql_access.h:1.24
gnue/geas/src/objectstore/postgresql_access.h:1.25
--- gnue/geas/src/objectstore/postgresql_access.h:1.24 Thu Apr 5 15:21:26 2001
+++ gnue/geas/src/objectstore/postgresql_access.h Mon May 14 14:57:57 2001
@@ -656,6 +656,7 @@
g_string_sprintfa(buf, "CHAR(34)");
break;
default:
+ printf( "unknown type: %d %s\n" , c->datatype ,
odl_datatype_name(c->datatype) );
g_string_sprintfa(buf, "UNKNOWN_TYPE");
break;
}
@@ -793,7 +794,7 @@
if (PQresultStatus(res) == PGRES_COMMAND_OK)
{
/* query appeared to succeed */
- /* message( "[%s] succeeded" , buf->str ); */
+ message( "[%s] succeeded" , buf->str );
}
else
{
@@ -830,12 +831,12 @@
if (PQresultStatus(res) == PGRES_COMMAND_OK)
{
/* query appeared to succeed */
- /* message( "[%s] succeeded" , buf->str ); */
+ message( "[%s] succeeded" , buf->str );
}
else
{
/* TODO: error handling */
- /* message( "[%s] failed" , buf->str ); */
+ message( "[%s] failed" , buf->str );
errormsg(PQresultErrorMessage(res));
}
g_string_free( buf , TRUE );
Index: gnue/geas/src/oql/oql.c
diff -u gnue/geas/src/oql/oql.c:1.47 gnue/geas/src/oql/oql.c:1.48
--- gnue/geas/src/oql/oql.c:1.47 Wed Apr 11 19:59:54 2001
+++ gnue/geas/src/oql/oql.c Mon May 14 14:57:57 2001
@@ -553,6 +553,13 @@
g_string_append(buf, " DESC");
}
+ if( q->uselimit )
+ {
+ quoted = g_strdup_printf( " LIMIT %lu" , q->maxresults );
+ g_string_append(buf, quoted);
+ g_free( quoted );
+ }
+
/* done */
return (buf);
}
@@ -1269,6 +1276,13 @@
}
}
+void
+oql_limit_results( _QueryData *q , unsigned long int limit )
+{
+ q->uselimit = TRUE;
+ q->maxresults = limit;
+}
+
static _QueryData *
create_query_data(const char *orderby)
{
@@ -1286,6 +1300,10 @@
q->orderby = g_strdup(orderby);
else
q->orderby = NULL;
+ q->values = NULL;
+
+ q->uselimit = FALSE;
+ q->maxresults = 0;
}
return (q);
}
Index: gnue/geas/src/oql/oql.h
diff -u gnue/geas/src/oql/oql.h:1.24 gnue/geas/src/oql/oql.h:1.25
--- gnue/geas/src/oql/oql.h:1.24 Tue Apr 3 16:33:11 2001
+++ gnue/geas/src/oql/oql.h Mon May 14 14:57:57 2001
@@ -117,6 +117,8 @@
GList *constraints;
} oql_constraint;
+void oql_limit_results( _QueryData *q , unsigned long int limit );
+
gboolean oql_add_complex_constraint( _QueryData *q , oql_constraint *c );
oql_field *oql_make_field( char *field , enum querytest test , char *value ,
gboolean casesensitive , gboolean invert );
Index: gnue/geas/src/oql/oql_internal.h
diff -u gnue/geas/src/oql/oql_internal.h:1.5
gnue/geas/src/oql/oql_internal.h:1.6
--- gnue/geas/src/oql/oql_internal.h:1.5 Mon Apr 2 17:59:37 2001
+++ gnue/geas/src/oql/oql_internal.h Mon May 14 14:57:57 2001
@@ -63,6 +63,9 @@
GList *complex;
GList *values;
+
+ gboolean uselimit;
+ unsigned int maxresults;
} _QueryData;
static _QueryData *create_query_data(const char *orderby);
Index: gnue/geas/src/query.c
diff -u gnue/geas/src/query.c:1.5 gnue/geas/src/query.c:1.6
--- gnue/geas/src/query.c:1.5 Mon Apr 2 21:11:46 2001
+++ gnue/geas/src/query.c Mon May 14 14:57:57 2001
@@ -190,7 +190,7 @@
/* done */
uniqueid = GEAS_DataObject__get_objectID(c,ev);
- retval = make_constraint_reference( uniqueid , id->uniqueid ,
id->username , ev );
+ retval = make_constraint_reference( uniqueid , id->uniqueid ,
id->username, id->sessionid, ev );
CORBA_free( uniqueid );
CORBA_Object_release(c,ev);
return( retval );
Index: gnue/geas/src/servantlocator.h
diff -u gnue/geas/src/servantlocator.h:1.11 gnue/geas/src/servantlocator.h:1.12
--- gnue/geas/src/servantlocator.h:1.11 Wed Apr 11 21:47:53 2001
+++ gnue/geas/src/servantlocator.h Mon May 14 14:57:57 2001
@@ -131,6 +131,12 @@
{
retval = (PortableServer_Servant)&poa_geas_dataobject_servant;
}
+ else
+ {
+ Connection_realNewObject(id);
+ if( oc_validate_object(id->classname,id->objectid) )
+ retval = (PortableServer_Servant)&poa_geas_dataobject_servant;
+ }
free_geas_object_reference( id );
}
Index: gnue/geas/src/transaction.c
diff -u gnue/geas/src/transaction.c:1.7 gnue/geas/src/transaction.c:1.8
--- gnue/geas/src/transaction.c:1.7 Wed Feb 21 12:21:25 2001
+++ gnue/geas/src/transaction.c Mon May 14 14:57:57 2001
@@ -82,7 +82,7 @@
return( CORBA_OBJECT_NIL );
}
- retval = make_transaction_reference( id->username , newid , ev );
+ retval = make_transaction_reference( id->username , newid , id->sessionid ,
ev );
CORBA_free( newid );
if( ev->_major != CORBA_NO_EXCEPTION )
{
@@ -131,7 +131,7 @@
return( CORBA_OBJECT_NIL );
}
- retval = make_transaction_reference( id->username , tid , ev );
+ retval = make_transaction_reference( id->username , tid , id->sessionid ,
ev );
CORBA_free(tid);
if( ev->_major != CORBA_NO_EXCEPTION )
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- gnue/geas examples/businessobjects/methods/Make...,
Treshna Enterprises <=