[gnue] r10242 - in trunk/gnue-forms: . src/GFObjects

[email protected] Mon, 15 Nov 2010 14:26:25 -0600 (CST)
Newsgroups gmane.comp.cms.gnue.cvs
Message-ID <[email protected]>
Author: reinhard
Date: 2010-11-15 14:26:25 -0600 (Mon, 15 Nov 2010)
New Revision: 10242

Modified:
   trunk/gnue-forms/
   trunk/gnue-forms/src/GFObjects/GFField.py
Log:
Massively speed up lookups by not using ResultSet.findRecord().



Property changes on: trunk/gnue-forms
___________________________________________________________________
Name: bzr:revision-info
   - timestamp: 2010-11-14 22:38:13.628000021 +0100
committer: Reinhard M=C3=BCller <[email protected]>
properties:=20
	branch-nick: forms

   + timestamp: 2010-11-15 21:25:36.749000072 +0100
committer: Reinhard M=C3=BCller <[email protected]>
properties:=20
	branch-nick: forms

Name: bzr:file-ids
   - src/uidrivers/wx/widgets/entry.py	10053@3a364389-8fce-0310-8f11-cc36=
3fde16c7:trunk%2Fgnue-forms:src%2Fuidrivers%2Fwx%2Fwidgets%2Fentry.py

   + src/GFObjects/GFField.py	1459@3a364389-8fce-0310-8f11-cc363fde16c7:t=
runk%2Fgnue-forms:src%2FGFObjects%2FGFField.py

Name: bzr:revision-id:v4
   - 3116 [email protected]
3117 [email protected]
3118 [email protected]
3119 [email protected]
3120 [email protected]
3121 [email protected]
3122 [email protected]
3123 [email protected]
3124 [email protected]
3125 [email protected]
3126 [email protected]
3127 [email protected]
3128 [email protected]
3129 [email protected]
3130 [email protected]
3131 [email protected]
3132 [email protected]
3133 [email protected]
3134 [email protected]
3135 [email protected]
3136 [email protected]
3137 [email protected]
3138 [email protected]
3139 [email protected]
3140 [email protected]
3141 [email protected]
3142 [email protected]
3143 [email protected]
3144 [email protected]
3145 [email protected]
3146 [email protected]
3147 [email protected]
3148 [email protected]
3149 [email protected]
3150 [email protected]
3151 [email protected]
3152 [email protected]
3153 [email protected]

   + 3116 [email protected]
3117 [email protected]
3118 [email protected]
3119 [email protected]
3120 [email protected]
3121 [email protected]
3122 [email protected]
3123 [email protected]
3124 [email protected]
3125 [email protected]
3126 [email protected]
3127 [email protected]
3128 [email protected]
3129 [email protected]
3130 [email protected]
3131 [email protected]
3132 [email protected]
3133 [email protected]
3134 [email protected]
3135 [email protected]
3136 [email protected]
3137 [email protected]
3138 [email protected]
3139 [email protected]
3140 [email protected]
3141 [email protected]
3142 [email protected]
3143 [email protected]
3144 [email protected]
3145 [email protected]
3146 [email protected]
3147 [email protected]
3148 [email protected]
3149 [email protected]
3150 [email protected]
3151 [email protected]
3152 [email protected]
3153 [email protected]
3154 [email protected]

Name: bzr:text-parents
   -=20
   + src/GFObjects/GFField.py	[email protected]=
-598w1lqua0te1m7j


Modified: trunk/gnue-forms/src/GFObjects/GFField.py
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/gnue-forms/src/GFObjects/GFField.py	2010-11-14 21:39:07 UTC (re=
v 10241)
+++ trunk/gnue-forms/src/GFObjects/GFField.py	2010-11-15 20:26:25 UTC (re=
v 10242)
@@ -74,7 +74,10 @@
         self.__lookup_list =3D [u""]              # all valid user value=
s
         self.__lookup_dict =3D None               # {db_value: user_valu=
e}
         self.__lookup_dict_reverse =3D {}         # {user_value: db_valu=
e}
+        self.__lookup_index =3D {}                # {db_value: record nu=
mber}
         self.lookup_ignorecase =3D True
+        # Remark: using self.__lookup_index is much faster than using
+        # ResultSet.findRecord().
=20
         # Autoquery/autosearch support
         self.__autoquery_value =3D None
@@ -547,7 +550,11 @@
         # selected value.
         if hasattr(self, '_GFField__fk_resultSet'):
             if self.__fk_resultSet is not None:
-                self.__fk_resultSet.findRecord({self.fk_key: new_value})
+                try:
+                    index =3D self.__lookup_index[new_value]
+                except KeyError:
+                    index =3D -1
+                self.__fk_resultSet.setRecord(index)
             # This will cause __refresh_ui_current() to be called via
             # __dsCursorMoved
         else:
@@ -678,6 +685,7 @@
             self.__lookup_list =3D [u""]
         self.__lookup_dict =3D {}
         self.__lookup_dict_reverse =3D {}
+        self.__lookup_index =3D {}
=20
         dpSep =3D gConfigForms('DropdownSeparator')
         if dpSep.startswith('"') and dpSep.endswith('"') and len(dpSep) =
> 2:
@@ -692,7 +700,7 @@
                       "field")
             self.__lookup_list =3D [u""]
=20
-        for line in array:
+        for index, line in enumerate(array):
             key =3D line[0]
             descr_parts =3D []
             for item in line[1:]:
@@ -705,11 +713,16 @@
             self.__lookup_list.append(descr)
             self.__lookup_dict[key] =3D descr
             self.__lookup_dict_reverse[descr] =3D key
+            self.__lookup_index[key] =3D index
=20
         # And now, position the resultSet to the correct record accordin=
g to
         # the current field content.
         if resultSet is not None:
-            resultSet.findRecord({self.fk_key: self.__get_value()})
+            try:
+                index =3D self.__lookup_index[self.__get_value()]
+            except:
+                index =3D -1
+            resultSet.setRecord(index)
=20
         # Remember the resultSet for later
         self.__fk_resultSet =3D resultSet
@@ -733,8 +746,11 @@
=20
         if hasattr(self, '_GFField__fk_resultSet'):
             if self.__fk_resultSet is not None:
-                self.__fk_resultSet.findRecord({
-                    self.fk_key: self.__get_value()})
+                try:
+                    index =3D self.__lookup_index[self.__get_value()]
+                except:
+                    index =3D -1
+                self.__fk_resultSet.setRecord(index)
=20
=20
     # ------------------------------------------------------------------=
-------