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: monetdb-checkins-bounces@lists.sourceforge.net [mailto:monetdb-checkins-bounces@lists.sourceforge.net] On Behalf Of Sjoerd Mullender Sent: Wednesday, December 19, 2007 3:04 PM To: monetdb-checkins@lists.sourceforge.net 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;
} else length = strlen(line); if (hdl == NULL && length > 0 && line[length -length = 0;
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 */
case 'I': input = optarg;output = strdup(optarg); /* output format */ break;
@@ -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 Monetdb-checkins@lists.sourceforge.net 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