commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

r5835 - trunk/gnue-common/src/datasources/drivers/appserver/Schema/Disco


From: johannes
Subject: r5835 - trunk/gnue-common/src/datasources/drivers/appserver/Schema/Discovery
Date: Wed, 26 May 2004 12:55:10 -0500 (CDT)

Author: johannes
Date: 2004-05-26 12:55:09 -0500 (Wed, 26 May 2004)
New Revision: 5835

Modified:
   
trunk/gnue-common/src/datasources/drivers/appserver/Schema/Discovery/Introspection.py
Log:
Conditions are now in prefix notation, so the introspection will work again; 
added calculated fields to be shown too.


Modified: 
trunk/gnue-common/src/datasources/drivers/appserver/Schema/Discovery/Introspection.py
===================================================================
--- 
trunk/gnue-common/src/datasources/drivers/appserver/Schema/Discovery/Introspection.py
       2004-05-26 14:48:24 UTC (rev 5834)
+++ 
trunk/gnue-common/src/datasources/drivers/appserver/Schema/Discovery/Introspection.py
       2004-05-26 17:55:09 UTC (rev 5835)
@@ -74,7 +74,7 @@
       if not type in ['object', None]:
         return []
 
-      cond = {}
+      cond = []
     else:
       cond = self._getNameCondition (name)
 
@@ -94,7 +94,7 @@
                "type"   : "object",
                "gnue_id": classid}
       
-      result.append (GIntrospection.Schema (attrs, 
+      result.append (GIntrospection.Schema (attrs,
                                        getChildSchema = self._getChildSchema))
 
     if len (result):
@@ -143,7 +143,9 @@
       if self._modules [moduleId] == module:
         break
 
-    return {'gnue_module': moduleId, 'gnue_name': classname}
+    return ['and', ['eq', ['field', 'gnue_module'], ['const', moduleId]],
+                   ['eq', ['field', 'gnue_name'], ['const', classname]]]
+                  
 
 
 
@@ -159,8 +161,9 @@
 
     sess   = self._connection._sm
     sessId = self._connection._sess_id
-    listId = sess.request (sessId, 'gnue_property', 
-                           {'gnue_class': parent.gnue_id}, sort, fields)
+    listId = sess.request (sessId, 'gnue_property',
+                    ['eq', ['field', 'gnue_class'], ['const', parent.gnue_id]],
+                           sort, fields)
 
     for rec in sess.fetch (sessId, listId, 0, sess.count (sessId, listId)):
       name = "%s_%s" % (self._modules [rec [1]], rec [2])
@@ -185,5 +188,45 @@
         attrs ['length'] = 32
 
       result.append (GIntrospection.Schema (attrs))
+    
+    # 
+    # add calculated properties
+    #
+    listId = sess.request (sessId, 'gnue_procedure',
+        ['and', ['eq', ['field', 'gnue_class'], ['const', parent.gnue_id]],
+                ['like', ['field', 'gnue_name'], ['const', 'get%']],
+                ['notnull', ['field', 'gnue_type']]],
+                           sort, fields)
 
+    for rec in sess.fetch (sessId, listId, 0, sess.count (sessId, listId)):
+      pList = sess.request (sessId, 'gnue_parameter',
+                ['eq', ['field', 'gnue_procedure'], ['const', rec [0]]],
+                [], ['gnue_id'])
+
+      if sess.count (sessId, pList):
+        continue
+
+      name = "%s_%s" % (self._modules [rec [1]], rec [2] [3:])
+
+      if rec [3] == 'number':
+        datatype = 'number'
+      elif rec [3] in ['date', 'datetime']:
+        datatype = 'date'
+      else:
+        datatype = 'text'
+
+      attrs = {'id'        : "%s.%s" % (parent.id, name.lower ()),
+               'name'      : name,
+               'datatype'  : datatype,
+               'precision' : rec [5],
+               'nativetype': 'unknown',
+               'length'    : rec [4],
+               'required'  : 0}
+
+      # reference properties have a fixed length
+      if '_' in datatype:
+        attrs ['length'] = 32
+
+      result.append (GIntrospection.Schema (attrs))
+
     return result





reply via email to

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