@@ -32,6 +32,8 @@ module W = Debug.Debugger(struct let name = "db_write" end)
3232open  Db_cache_types 
3333open  Db_ref 
3434
35+ let  fist_delay_read_records_where =  ref  false 
36+ 
3537(*  Only needed by the DB_ACCESS signature *) 
3638let  initialise  ()  =  () 
3739
@@ -122,8 +124,7 @@ let read_set_ref t rcd =
122124   and iterates through set-refs [returning (fieldname, ref list) list; where fieldname is the 
123125   name of the Set Ref field in tbl; and ref list is the list of foreign keys from related 
124126   table with remote-fieldname=objref] *)  
125- let  read_record  t  tblname  objref   = 
126- 	let  db =  get_database t in 
127+ let  read_record_internal  db  tblname  objref  = 
127128	let  tbl =  TableSet. find tblname (Database. tableset db) in 
128129	let  row =  Table. find_exn tblname objref tbl in 
129130	let  fvlist =  Row. fold (fun  k  _  _  d  env  -> (k,d)::env) row []  in 
@@ -142,6 +143,7 @@ let read_record t tblname objref  =
142143	let  set_ref =  List. map (fun  (k , v ) -> 
143144		k, String_unmarshall_helper. set (fun  x  -> x) v) set_ref in 
144145	(fvlist, set_ref)
146+ let  read_record  t  =  read_record_internal (get_database t)
145147
146148(*  Delete row from tbl *) 
147149let  delete_row_locked  t  tblname  objref  = 
@@ -210,8 +212,7 @@ let read_refs t tblname =
210212	Table. fold (fun  r  _  _  _  acc  -> r :: acc) tbl [] 
211213
212214(*  Return a list of all the refs for which the expression returns true. *) 
213- let  find_refs_with_filter  t  (tblname : string ) (expr : Db_filter_types.expr ) =  
214- 	let  db =  get_database t in 
215+ let  find_refs_with_filter_internal  db  (tblname : string ) (expr : Db_filter_types.expr ) = 
215216	let  tbl =  TableSet. find tblname (Database. tableset db) in 
216217	let  eval_val  row  =  function 
217218		|  Db_filter_types. Literal  x  -> x
@@ -221,10 +222,13 @@ let find_refs_with_filter t (tblname: string) (expr: Db_filter_types.expr) =
221222			if  Db_filter. eval_expr (eval_val row) expr
222223			then  Row. find Db_names. ref  row :: acc else  acc
223224		) tbl [] 
225+ let  find_refs_with_filter  t  =  find_refs_with_filter_internal (get_database t)
224226
225227let  read_records_where  t  tbl  expr  = 
226- 	let  reqd_refs =  find_refs_with_filter t tbl expr in 
227- 	List. map (fun  ref ->ref , read_record t tbl ref ) reqd_refs
228+ 	let  db =  get_database t in 
229+ 	let  reqd_refs =  find_refs_with_filter_internal db tbl expr in 
230+ 	if  ! fist_delay_read_records_where then  Thread. delay 0.5 ;
231+ 	List. map (fun  ref ->ref , read_record_internal db tbl ref ) reqd_refs
228232
229233let  process_structured_field_locked  t  (key ,value ) tblname  fld  objref  proc_fn_selector  = 
230234
0 commit comments