[aur-dev] [RFC] aurjson: add result count to JSON result

Lukas Fleischer archlinux at cryptocrack.de
Thu Nov 3 03:43:35 EDT 2011


On Wed, Nov 02, 2011 at 04:52:02PM -0400, Dave Reisner wrote:
> On Wed, Nov 02, 2011 at 09:17:47PM +0100, Lukas Fleischer wrote:
> > On Tue, Oct 25, 2011 at 06:39:52PM -0400, Dave Reisner wrote:
> > > We already ask for the result count, but only use it as a basis for testing
> > > query success or failure. Add the value to the JSON reply.
> > > 
> > > Signed-off-by: Dave Reisner <dreisner at archlinux.org>
> > > ---
> > > I call this an RFC because:
> > > 
> > > a) I don't have a test environment setup
> > > b) I don't know PHP
> > > 
> > > ...but I really like the idea of knowing ahead of time how many results you're
> > > about to receive.
> > 
> > Just tested it, seems to work! Looks fine to me, also :)
> > 
> > Is there any use case for this yet? Just out of curiosity...
> > 
> 
> Not yet. I guess I had 2 thoughts:
> 
> 1) folks like me who enjoy pain (C) can use this for a little
> optimization and "plan head" in terms of memory allocation.

Agreed, looks like we can speed up memory allocation here (O(1) instead
of O(n) or so)... Hopefully, this won't be the basis for another couple
of buffer overflows in some AUR helpers (I'm not talking about cower).

> 2) I think its a bit strange that 0 results is considered an error. If
> we had a result count in the JSON reply, we'd be able to change this.

Oh, I wasn't aware of this. Makes sense. Thanks!

> 
> d
> 
> > > 
> > >  web/lib/aurjson.class.php |   11 ++++++-----
> > >  1 files changed, 6 insertions(+), 5 deletions(-)
> > > 
> > > diff --git a/web/lib/aurjson.class.php b/web/lib/aurjson.class.php
> > > index 234a3c4..23eb854 100644
> > > --- a/web/lib/aurjson.class.php
> > > +++ b/web/lib/aurjson.class.php
> > > @@ -103,7 +103,7 @@ class AurJSON {
> > >      private function json_error($msg) {
> > >          // set content type header to app/json
> > >          header('content-type: application/json');
> > > -        return $this->json_results('error', $msg);
> > > +        return $this->json_results('error', 0, $msg);
> > >      }
> > >  
> > >      /**
> > > @@ -112,8 +112,8 @@ class AurJSON {
> > >       * @param $data The result data to return
> > >       * @return mixed A json formatted result response.
> > >       **/
> > > -    private function json_results($type, $data) {
> > > -        return json_encode( array('type' => $type, 'results' => $data) );
> > > +    private function json_results($type, $count, $data) {
> > > +        return json_encode( array('type' => $type, 'resultcount' => $count, 'results' => $data) );
> > >      }
> > >  
> > >      private function process_query($type, $where_condition) {
> > > @@ -124,7 +124,8 @@ class AurJSON {
> > >              "WHERE ${where_condition}";
> > >          $result = db_query($query, $this->dbh);
> > >  
> > > -        if ( $result && (mysql_num_rows($result) > 0) ) {
> > > +        $resultcount = mysql_num_rows($result);
> > > +        if ( $result && $resultcount > 0 ) {
> > >              $search_data = array();
> > >              while ( $row = mysql_fetch_assoc($result) ) {
> > >                  $name = $row['Name'];
> > > @@ -148,7 +149,7 @@ class AurJSON {
> > >              }
> > >  
> > >              mysql_free_result($result);
> > > -            return $this->json_results($type, $search_data);
> > > +            return $this->json_results($type, $resultcount, $search_data);
> > >          }
> > >          else {
> > >              return $this->json_error('No results found');
> > > -- 
> > > 1.7.7.1




More information about the aur-dev mailing list