commit-gnue
[Top][All Lists]
Advanced

[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 )
      {



reply via email to

[Prev in Thread] Current Thread [Next in Thread]