@@ -56,8 +56,7 @@ def query_join(a, b):
5656
5757
5858def make_default_search_query (table ):
59- builder = QueryBuilder ()
60- return ["Query" , (lambda text , table = table : builder .parse (table , text )), None ]
59+ return ["Query" , lambda text , table = table : QueryBuilder ().parse (table , text ), None ]
6160
6261
6362class GridClassStyle :
@@ -500,8 +499,7 @@ def __init__(
500499
501500 # instance variables that will be computed
502501 self .db = query ._db # the database
503- self .query_init = query # the filter query
504- self .query = query # the query with additional filters
502+ self .query = query # the filter query
505503 self .query_parms = safely (lambda : request .params , default = {})
506504 self .search_query_error = None # error to be displayed in case failed search
507505 self .T = T # the translator
@@ -592,25 +590,7 @@ def process(self):
592590 # SECURITY: if the record does not exist or does not match query, than we are not allowed
593591 self .table = db [self .tablename ]
594592
595- # use the default search for the table
596- if self .param .search_queries is None :
597- self .param .search_queries = [make_default_search_query (self .table )]
598-
599- # apply the search query
600- if not self .param .search_form and self .param .search_queries :
601- search_type = safe_int (request .query .get ("search_type" , 0 ), default = 0 )
602- search_string = request .query .get ("search_string" )
603- if search_type < len (self .param .search_queries ) and search_string :
604- _ , query_lambda , requires = self .param .search_queries [search_type ]
605- if requires :
606- search_string , self .search_query_error = requires (search_string )
607- if not self .search_query_error :
608- try :
609- query = query_lambda (search_string )
610- self .query = self .query_init & query
611- except Exception as e :
612- self .search_query_error = str (e )
613-
593+ # if we have a record id retrieve the record
614594 if self .record_id :
615595 self .record = self .table (self .record_id )
616596 if not self .record :
@@ -696,6 +676,27 @@ def _handle_redirect_to_referrer(self, inject_back, redirect_on_post):
696676
697677 def _handle_mode_select (self ):
698678 db = self .db
679+
680+ # use the default search for the table
681+ if self .param .search_queries is None :
682+ self .param .search_queries = [make_default_search_query (self .table )]
683+
684+ query = self .query
685+
686+ # apply the search query
687+ if not self .param .search_form and self .param .search_queries :
688+ search_type = safe_int (request .query .get ("search_type" , 0 ), default = 0 )
689+ search_string = request .query .get ("search_string" )
690+ if search_type < len (self .param .search_queries ) and search_string :
691+ _ , query_lambda , requires = self .param .search_queries [search_type ]
692+ if requires :
693+ search_string , self .search_query_error = requires (search_string )
694+ if not self .search_query_error :
695+ try :
696+ query = self .query & query_lambda (search_string )
697+ except Exception as e :
698+ self .search_query_error = str (e )
699+
699700 # if no column specified use all fields
700701 if not self .param .columns :
701702 self .param .columns = [field for field in self .table if field .readable ]
@@ -798,10 +799,10 @@ def compute(row, name=str(col)):
798799 if self .param .groupby or self .param .left :
799800 # need groupby fields in select to get proper count
800801 self .total_number_of_rows = len (
801- db (self . query ).select (db [self .tablename ]._id , ** select_params )
802+ db (query ).select (db [self .tablename ]._id , ** select_params )
802803 )
803804 else :
804- self .total_number_of_rows = db (self . query ).count ()
805+ self .total_number_of_rows = db (query ).count ()
805806
806807 # if at a high page number and then filter causes less records to be displayed, reset to page 1
807808 if (
@@ -820,7 +821,7 @@ def compute(row, name=str(col)):
820821 self .page_end = self .total_number_of_rows
821822
822823 # get the data
823- self .rows = db (self . query ).select (* self .needed_fields , ** select_params )
824+ self .rows = db (query ).select (* self .needed_fields , ** select_params )
824825
825826 self .number_of_pages = self .total_number_of_rows // self .param .rows_per_page
826827 if self .total_number_of_rows % self .param .rows_per_page > 0 :
0 commit comments