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)

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
Monetdb-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/monetdb-developers

Reply via email to