Thanks a lot, glad that I asked this before pulling my hairs out coz for some reason It never occurred to me that it could be a bug in views. :)
It worked after applying the patch. Thanks again! On Sat, Jun 4, 2011 at 10:17 PM, Earl Miles <[email protected]> wrote: > You're in a batch, and Views has a bug with batches. It's fixed in the > -dev version: See http://drupal.org/node/829550 > > On 6/4/2011 7:59 AM, Dipen wrote: > > Hi, > > > > I am badly stuck at this one, I am trying to convert a cron function > > to batched drush execution to overcome memory limits etc. I could > > have gone for queued cron execution but in my initial assessment I > > found batched drush execution simpler. Anyways, I am using > > views_savedsearches to allow my users to keep a tab on their exposed > > filters, since the data keeps coming in for their criteria I am also > > using notifications_views_savedsearches (which comes in the same > > package) to notify them if they have subscribed to their saved > > searches. So All is good except the amount of content is huge for > > hook_cron of notifications_views_savedsearches to process without > > memory errors which prompted me to convert it into batched drush > > execution. > > > > So I got to a good start and quickly deconstructed (almost) the > > notifications_views_savedsearches_cron implementation into batch > > process to be run by drush. Everything is fine, except that > > $view->execute() doesn't return any result for my implementation but > > does yield results in the original implementation. This is the place > > I am stuck, few things to note here: > > > > 1> $view Object just before calling $view->execute() is exactly same > > for both implementations ( old cron and new batch worker process ), I > > ran a diff couple of times. Please note that both functions have > > practically same code except that I had to write couple of extra > > function to make batch work. 2> On further investigation found out > > that query and count query are same too but args are different. > > > > Am I wrong to assume that calling execute() on two identical view > > objects can lead to different results? Atleast thats what I am > > experiencing? (There is no additional processing on the view object, > > they are exactly same before execute() is called on them) > > > > On further investigation found out that the view object of my batch > > worker process has $this->exposed_data empty and thats the reason > > for args to be malformed and for query to returning empty result. I > > haven't been able to find out much on why is exposed_data set in one > > view and not in other when they were identical before calling > > execute() on them, looking at call stack, I found out much of the > > query building and pre processing is done in $this->build and > > $this->_build($key) and thats where $this->exposed_data is bailing > > out on me. > > > > Some of the debugged Arrays: > > > > $args for the cron function (the one thats working) - Array ( [0] => > > drealty_property [1] => 0 [2] => 100000000 [3] => 0 [4] => 0 [5] => > > 39 ) > > > > $this->exposed_data returns a healthy array > > > > One thats not working ( my batched execution $args) : > > > > Array ( [0] => drealty_property [1] => [2] => [3] => [4] => [5] => > > [6] => ) > > > > $this->exposed_data doesn't return anything. > > > > > > Code of both functions is almost same and the $view object just prior > > to $view->execute() is exactly identical. > > > > Has anyone faced anything similar? Could it be due to the batch API? > > I am using drush_backend_batch_process() to process my batch. > > Everything else is working except that my batch process doesn't have > > anything in $view->result. I haven't been able to find where does > > $this->exposed_data get set. > > > > Crux of code for both function is: > > > > $vs = views_savedsearches_load($subscription['sid']); // Retrieving > > exposed filter setting for the subscriber using helper function of > > views_savedsearches > > > > $view_name = db_result(db_query("SELECT name FROM {views_view} WHERE > > vid = %d", $vs->vid)); > > > > $view = views_get_view($view_name); > > > > if (is_object($view) && is_object($vs)) { if ($view instanceof view) > > { > > > > // Apply $vs->filters $view->set_exposed_input($vs->filters); > > > > // The original code limits this value to 10 which is not much useful > > as new data at any point of time is anytime more than 10 > > $view->pager['items_per_page'] = 0; > > > > // Run the query // $view at this point in both functions is > > exactly same ( did a diff ) $view->execute('default'); > > > > $view->result is empty for my batch process but has values for the > > old cron function. I am pretty sure(?), that I am not making a silly > > variable in scope mistake. > > > > > > Thanks in Advance > > > > > > > > ---------------------------------- Dipen Chaudhary QED42 : We build > > beautiful and scalable web strategies ( www.qed42.com > > <http://www.qed42.com> ) Blog: dipenchaudhary.com > > <http://dipenchaudhary.com> Twitter: http://twitter.com/dipench > > > >
