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üller <[email protected]> properties: branch-nick: forms + timestamp: 2010-11-15 21:25:36.749000072 +0100 committer: Reinhard Müller <[email protected]> properties: branch-nick: forms Name: bzr:file-ids - src/uidrivers/wx/widgets/entry.py 10...@3a364389-8fce-0310-8f11-cc363fde16c7:trunk%2Fgnue-forms:src%2Fuidrivers%2Fwx%2Fwidgets%2Fentry.py + src/GFObjects/GFField.py 1...@3a364389-8fce-0310-8f11-cc363fde16c7:trunk%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 - + src/GFObjects/GFField.py [email protected] Modified: trunk/gnue-forms/src/GFObjects/GFField.py =================================================================== --- trunk/gnue-forms/src/GFObjects/GFField.py 2010-11-14 21:39:07 UTC (rev 10241) +++ trunk/gnue-forms/src/GFObjects/GFField.py 2010-11-15 20:26:25 UTC (rev 10242) @@ -74,7 +74,10 @@ self.__lookup_list = [u""] # all valid user values self.__lookup_dict = None # {db_value: user_value} self.__lookup_dict_reverse = {} # {user_value: db_value} + self.__lookup_index = {} # {db_value: record number} self.lookup_ignorecase = True + # Remark: using self.__lookup_index is much faster than using + # ResultSet.findRecord(). # Autoquery/autosearch support self.__autoquery_value = 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 = self.__lookup_index[new_value] + except KeyError: + index = -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 = [u""] self.__lookup_dict = {} self.__lookup_dict_reverse = {} + self.__lookup_index = {} dpSep = gConfigForms('DropdownSeparator') if dpSep.startswith('"') and dpSep.endswith('"') and len(dpSep) > 2: @@ -692,7 +700,7 @@ "field") self.__lookup_list = [u""] - for line in array: + for index, line in enumerate(array): key = line[0] descr_parts = [] for item in line[1:]: @@ -705,11 +713,16 @@ self.__lookup_list.append(descr) self.__lookup_dict[key] = descr self.__lookup_dict_reverse[descr] = key + self.__lookup_index[key] = index # And now, position the resultSet to the correct record according to # the current field content. if resultSet is not None: - resultSet.findRecord({self.fk_key: self.__get_value()}) + try: + index = self.__lookup_index[self.__get_value()] + except: + index = -1 + resultSet.setRecord(index) # Remember the resultSet for later self.__fk_resultSet = resultSet @@ -733,8 +746,11 @@ 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 = self.__lookup_index[self.__get_value()] + except: + index = -1 + self.__fk_resultSet.setRecord(index) # ------------------------------------------------------------------------- _______________________________________________ commit-gnue mailing list [email protected] http://lists.gnu.org/mailman/listinfo/commit-gnue
