Hi Niels,

> The timing was/is meant for overall query performance, ie sending query + 
> query execution + receiving the result (or part of it) in non interactive
setups.

ok, clear.  

So, would people agree then that in *interactive* mclient mode, timing only the
query would be an improvement of the functionality?

best,

Peter


> -----Original Message-----
> From: Niels Nes [mailto:[EMAIL PROTECTED] 
> Sent: Friday, December 21, 2007 12:31 PM
> To: Peter Boncz
> Cc: [email protected]; [EMAIL PROTECTED]
> Subject: Re: [Monetdb-developers] [Monetdb-checkins] 
> clients/src/mapiclientMapiClient.mx, Clients_1-20, 1.88.2.4, 1.88.2.5
> 
> 
> On Fri, Dec 21, 2007 at 11:55:34AM +0100, Peter Boncz wrote:
> > Hi Sjoerd,
> > 
> > Thanks for fixing some things I was unaware of (empty lines 
> in other languages?)
> > 
> > > The timer is again started when the first line of a query 
> is typed.
> > > This is the case for *all* languages.
> > 
> > I cannot image cases where it is useful for mclient to 
> keeps stays on someone's
> > typing speed, while I can image cases where one would like 
> to have information
> > about query performance. Do others agree?
> > 
> > (I maybe unjustly assumed that timing query performance was 
> the intended
> > behavior)
> The timing was/is meant for overall query performance, ie 
>       sending query + query execution + receiving the result 
> (or part of it)
> in non interactive setups.
> 
> Niels
> > 
> > Peter
> > 
> > 
> > 
> > > -----Original Message-----
> > > From: [EMAIL PROTECTED] 
> > > [mailto:[EMAIL PROTECTED] On 
> > > Behalf Of Sjoerd Mullender
> > > Sent: Wednesday, December 19, 2007 3:04 PM
> > > To: [EMAIL PROTECTED]
> > > Subject: [Monetdb-checkins] clients/src/mapiclient 
> > > MapiClient.mx,Clients_1-20, 1.88.2.4, 1.88.2.5
> > > 
> > > 
> > > Update of /cvsroot/monetdb/clients/src/mapiclient
> > > In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv6918
> > > 
> > > Modified Files:
> > >       Tag: Clients_1-20
> > >   MapiClient.mx 
> > > Log Message:
> > > Did Peter's checkin and Niels' fix correctly: In XQuery mode, when
> > > typing <> when there is no query yet will result in just 
> asking for
> > > more data, and empty lines in other modes will not end 
> the session.
> > > Also fixed \f processing in that the new value is now 
> remembered for a
> > > subsequent bare \f.
> > > The timer is again started when the first line of a query 
> is typed.
> > > This is the case for *all* languages.
> > > 
> > > 
> > > Index: MapiClient.mx
> > > 
> ===================================================================
> > > RCS file: /cvsroot/monetdb/clients/src/mapiclient/MapiClient.mx,v
> > > retrieving revision 1.88.2.4
> > > retrieving revision 1.88.2.5
> > > diff -u -d -r1.88.2.4 -r1.88.2.5
> > > --- MapiClient.mx 19 Dec 2007 08:35:21 -0000      1.88.2.4
> > > +++ MapiClient.mx 19 Dec 2007 14:04:09 -0000      1.88.2.5
> > > @@ -152,6 +152,7 @@
> > >   XMLformatter
> > >  };
> > >  static enum formatters formatter = NOformatter;
> > > +char *output = NULL;             /* output format as string */
> > >  
> > >  #define DEFWIDTH 80
> > >  
> > > @@ -247,8 +248,6 @@
> > >   }
> > >  }
> > >  
> > > -char *output = NULL; /* output format is a global variable */
> > > -
> > >  static void
> > >  SQLsetSpecial(const char *command)
> > >  {
> > > @@ -796,9 +795,14 @@
> > >  }
> > >  
> > >  static void
> > > -setFormatter(char *s)
> > > +setFormatter(Mapi mid, char *s)
> > >  {
> > > - if (strcmp(s, "sql") == 0)
> > > + if (mode == XQUERY) {
> > > +         mapi_output(mid, s);
> > > +         if (output != NULL)
> > > +                 free(output);
> > > +         output = strdup(s);
> > > + } else if (strcmp(s, "sql") == 0)
> > >           formatter = TABLEformatter;
> > >   else if (strcmp(s, "csv") == 0)
> > >           formatter = CSVformatter;
> > > @@ -1123,13 +1127,13 @@
> > >           fprintf(toConsole, "\\a      - disable auto commit\n");
> > >   }
> > >   if (mode == XQUERY) {
> > > -         fprintf(toConsole, "\\f      - result format: 
> > > dm or xml[-noheader][-typed|-noroot|-root-FOOBAR] \n");
> > > -        } else {
> > > +         fprintf(toConsole, "\\f      - result format: 
> > > dm or xml[-noheader][-typed|-noroot|-root-FOOBAR]\n");
> > > + } else {
> > >           fprintf(toConsole, "\\e      - echo the query 
> > > in sql formatting mode\n");
> > > -         fprintf(toConsole, "\\f      - format using a 
> > > built-in renderer {csv,tab,raw,sql,xml} \n");
> > > +         fprintf(toConsole, "\\f      - format using a 
> > > built-in renderer {csv,tab,raw,sql,xml}\n");
> > >           fprintf(toConsole, "\\w#     - set maximal page 
> > > width (-1=raw,0=no limit, >0 max char)\n");
> > > -         fprintf(toConsole, "\\r#     - set maximum rows 
> > > per page (-1=raw)\n       ");
> > > -        }
> > > +         fprintf(toConsole, "\\r#     - set maximum rows 
> > > per page (-1=raw)\n");
> > > + }
> > >   fprintf(toConsole, "\\L file - save client/server 
> > > interaction\n");
> > >   fprintf(toConsole, "\\X      - trace mclient code\n");
> > >   fprintf(toConsole, "\\q      - terminate session\n");
> > > @@ -1140,9 +1144,10 @@
> > >  {
> > >   char *line = NULL;
> > >   char *buf = NULL;
> > > - ssize_t length;
> > > + size_t length;
> > >   MapiHdl hdl = mapi_get_active(mid);
> > >   MapiMsg rc = MOK;
> > > + int sent = 0;           /* whether we sent any data to 
> > > the server */
> > >  
> > >  #ifdef HAVE_LIBREADLINE
> > >   if (prompt == NULL)
> > > @@ -1185,13 +1190,17 @@
> > >                   line = fgets(buf, BUFSIZ, fp);
> > >           }
> > >           if (line == NULL || (mode == XQUERY && line[0] 
> > > == '<' && line[1] == '>')) {
> > > -                 length = 0;
> > > -                 if (line) 
> > > -                                length = -1;
> > > -                 else if (hdl == NULL) 
> > > -                         return 0; /* EOF: nothing more to do */
> > > +                 /* end of file */
> > > +                 if (hdl == NULL) {
> > > +                         if (line != NULL)
> > > +                                 continue;
> > > +                         /* nothing more to do */
> > > +                         return 0;
> > > +                 }
> > > +
> > >                   /* hdl != NULL, we should finish the 
> > > current query */
> > >                   line = NULL;
> > > +                 length = 0;
> > >           } else
> > >                   length = strlen(line);
> > >           if (hdl == NULL && length > 0 && line[length - 
> > > 1] == '\n') {
> > > @@ -1217,7 +1226,7 @@
> > >                                   if (mark2)
> > >                                           free(mark2);
> > >                                   mark2 = strdup(line + 2);
> > > -                                        if (mode == XQUERY)
> > > +                                 if (mode == XQUERY)
> > >                                           
> > > mapi_profile(mid, mark != NULL);
> > >                                   continue;
> > >                           case 'X':
> > > @@ -1378,31 +1387,31 @@
> > >                                   if (*line == 0) {
> > >                                           
> > > fprintf(toConsole, "Current formatter: ");
> > >                                           if (mode == XQUERY)
> > > -                                                 
> > > fprintf(toConsole, "%s\n", output);
> > > -                                                else switch 
> > > (formatter) {
> > > -                                         case RAWformatter:
> > > -                                                 
> > > fprintf(toConsole, "raw\n");
> > > -                                                 break;
> > > -                                         case TABLEformatter:
> > > -                                                 
> > > fprintf(toConsole, "sql\n");
> > > -                                                 break;
> > > -                                         case CSVformatter:
> > > -                                                 
> > > fprintf(toConsole, "csv\n");
> > > -                                                 break;
> > > -                                         case TABformatter:
> > > -                                                 
> > > fprintf(toConsole, "tab\n");
> > > -                                                 break;
> > > -                                         case XMLformatter:
> > > -                                                 
> > > fprintf(toConsole, "xml\n");
> > > -                                                 break;
> > > -                                         default:
> > > -                                                 
> > > fprintf(toConsole, "none\n");
> > > -                                                 break;
> > > +                                                 
> > > fprintf(toConsole, "%s\n", output == NULL ? "dm" : output);
> > > +                                         else {
> > > +                                                 switch 
> > > (formatter) {
> > > +                                                 case 
> > > RAWformatter:
> > > +                                                         
> > > fprintf(toConsole, "raw\n");
> > > +                                                         break;
> > > +                                                 case 
> > > TABLEformatter:
> > > +                                                         
> > > fprintf(toConsole, "sql\n");
> > > +                                                         break;
> > > +                                                 case 
> > > CSVformatter:
> > > +                                                         
> > > fprintf(toConsole, "csv\n");
> > > +                                                         break;
> > > +                                                 case 
> > > TABformatter:
> > > +                                                         
> > > fprintf(toConsole, "tab\n");
> > > +                                                         break;
> > > +                                                 case 
> > > XMLformatter:
> > > +                                                         
> > > fprintf(toConsole, "xml\n");
> > > +                                                         break;
> > > +                                                 default:
> > > +                                                         
> > > fprintf(toConsole, "none\n");
> > > +                                                         break;
> > > +                                                 }
> > >                                           }
> > > -                                 } else if (mode == XQUERY) 
> > > -                                         mapi_output(mid, line);
> > > -                                 else
> > > -                                         setFormatter(line);
> > > +                                 } else
> > > +                                         setFormatter(mid, line);
> > >                                   continue;
> > >                           default:
> > >                                   showCommands();
> > > @@ -1412,34 +1421,37 @@
> > >           }
> > >  
> > >           if (hdl == NULL) {
> > > +                 timerStart();
> > >                   hdl = mapi_query_prep(mid);
> > >                   CHECK_RESULT(mid, hdl, buf, continue);
> > >           }
> > >           assert(hdl != NULL);
> > >  
> > >           if (length > 0) {
> > > +                 sent = 1;
> > >                   SQLsetSpecial(line);
> > >                   mapi_query_part(hdl, line, length);
> > >                   CHECK_RESULT(mid, hdl, buf, continue);
> > >           }
> > >  
> > > -         if (mode == XQUERY && line)
> > > -                 continue; /* XQuery always wants more data */
> > > -
> > >           /* If the server wants more but we're at the
> > >              end of file (line == NULL), notify the
> > >              server that we don't have anything more.
> > >              If the server still wants more (shouldn't
> > >              happen according to the protocol) we break
> > >              out of the loop (via the continue).  The
> > > -            assertion at the end will then go off.  
> > > -            */
> > > -         timerStart();
> > > -         if (mapi_query_done(hdl) == MMORE) {
> > > -                 assert(mode != XQUERY); /* XQuery never 
> > > sends MMORE */
> > > -                 if (line != NULL) continue; /* get more data */
> > > -                 timerStart();
> > > -                        if (mapi_query_done(hdl) == MMORE) {
> > > +            assertion at the end will then go off.
> > > +
> > > +            Note that XQuery is weird: we continue
> > > +            sending more until we reach end-of-file,
> > > +            and *then* we send the mapi_query_done.  To
> > > +            exit, you need to send an end-of-file
> > > +            again. */
> > > +         if (mode == XQUERY || mapi_query_done(hdl) == MMORE) {
> > > +                 if (line != NULL) {
> > > +                         continue;       /* get more data */
> > > +                 } else if (mapi_query_done(hdl) == MMORE) {
> > > +                         assert(mode != XQUERY); /* 
> > > XQuery never sends MMORE */
> > >                           hdl = NULL;
> > >                           continue;       /* done */
> > >                   }
> > > @@ -1459,7 +1471,7 @@
> > >  
> > >           /* for XQuery, only exit when end-of-file and we
> > >              didn't send any data */
> > > - } while (hdl != NULL);
> > > + } while (line != NULL || (mode == XQUERY && sent));
> > >   /* reached on end of file */
> > >   assert(hdl == NULL);
> > >   return 0;
> > > @@ -1603,7 +1615,6 @@
> > >                              strcmp(optarg, "x") == 0) {
> > >                           language = "xquery";
> > >                           mode = XQUERY;
> > > -                         if (!output) output = "dm";
> > >                   } else {
> > >                           fprintf(stderr, "language 
> > > option needs to be one of sql, mil, mal, or xquery\n");
> > >                           exit(-1);
> > > @@ -1618,7 +1629,7 @@
> > >                   passwd = optarg;        /* can be NULL */
> > >                   break;
> > >           case 'f':
> > > -                 output = optarg;  /* output format */
> > > +                 output = strdup(optarg); /* output format */
> > >                   break;
> > >           case 'I':
> > >                   input = optarg;
> > > @@ -1726,13 +1737,8 @@
> > >  
> > >   mapi_profile(mid, mark != NULL);
> > >   mapi_trace(mid, trace);
> > > -
> > > - if (output) {
> > > -         if (mode == XQUERY)
> > > -                 mapi_output(mid, output);
> > > -         else
> > > -                 setFormatter(output);
> > > - }
> > > + if (output)
> > > +         setFormatter(mid, output);
> > >  
> > >   c = 0;
> > >  
> > > 
> > > 
> > > --------------------------------------------------------------
> > > -----------
> > > SF.Net email is sponsored by:
> > > Check out the new SourceForge.net Marketplace.
> > > It's the best place to buy or sell services
> > > for just about anything Open Source.
> > > http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.n
> > et/marketplace
> > _______________________________________________
> > Monetdb-checkins mailing list
> > [EMAIL PROTECTED]
> > https://lists.sourceforge.net/lists/listinfo/monetdb-checkins
> > 
> > 
> > 
> --------------------------------------------------------------
> -----------
> > This SF.net email is sponsored by: Microsoft
> > Defy all challenges. Microsoft(R) Visual Studio 2005.
> > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> > _______________________________________________
> > Monetdb-developers mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/monetdb-developers
> 
> -- 
> 
> Niels Nes, Centre for Mathematics and Computer Science (CWI)
> Kruislaan 413, 1098 SJ Amsterdam, The Netherlands
> room C0.02,  phone ++31 20 592-4098, fax ++31 20 592-4312
> url: http://www.cwi.nl/~niels   e-mail: [EMAIL PROTECTED]


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Monetdb-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-developers

Reply via email to