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