Changeset: ac856c80cbfa for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ac856c80cbfa
Modified Files:
clients/mapiclient/tachograph.c
Branch: default
Log Message:
Fix parsing argument lists
diffs (83 lines):
diff --git a/clients/mapiclient/tachograph.c b/clients/mapiclient/tachograph.c
--- a/clients/mapiclient/tachograph.c
+++ b/clients/mapiclient/tachograph.c
@@ -277,14 +277,14 @@ static struct{
{"language.pass(nil)", 18, "pass", 4, 0},
{"mat.packIncrement", 17, "pack",4, 0},
{"language.pass", 13, "pass", 4, 0},
- {"aggr.subcount", 13, "count", 3, 0},
+ {"aggr.subcount", 13, "count", 5, 0},
{"sql.subdelta", 12, "project",7, 0},
{"bat.append", 10, "append", 6, 0},
{"aggr.subavg", 11, "average", 7, 0},
{"aggr.subsum", 11, "sum", 3, 0},
{"aggr.submin", 11, "minimum", 7, 0},
{"aggr.submax", 11, "maximum", 7, 0},
- {"aggr.count", 10, "count", 3, 0},
+ {"aggr.count", 10, "count", 5, 0},
{"calc.lng", 8, "long", 4, 0},
{"sql.bind", 8, "bind", 4, 0},
{"batcalc.hge", 11, "hugeint", 7, 0},
@@ -306,8 +306,9 @@ renderArgs(char *c, int len, char *line
{
char varname[BUFSIZ], *v=0;
for(; *c && *c !=')' && l < limit-1; ){
+ if( *c == ',')*l++= *c++;
v= 0;
- if(isalpha((int)*c) ){
+ if(isalpha((int)*c) || *c == '_' ){
v= varname;
while(*c && (isalnum((int)*c) || *c=='_')) *v++ = *c++;
*v=0;
@@ -323,13 +324,17 @@ renderArgs(char *c, int len, char *line
free(v);
}
while(*c && *c !=']' && l < limit -2) *l++ = *c++;
- if( *c == ']' && l < limit) *l++ = *c++;
+ while(*c && *c != ']') c++;
+ if( *c == ']' ) *l++ = *c++;
}
if (*c == '"' ) {
*l++ = *c++;
while(*c && *c !='"' && *(c-1) !='\\' && l < limit-2 )
*l++ =*c++;
- } else
+ while(*c && *c !='"') c++;
+ } else{
while(*c && *c !=':' && *c !=',' && l < limit-2) *l++ =
*c++;
+ while(*c && *c !=':' && *c !=',' ) c++;
+ }
if (*c == ':'){
if( strncmp(c,":bat",4)== 0){
while(*c && *c !=']') c++;
@@ -340,7 +345,6 @@ renderArgs(char *c, int len, char *line
// literals
if( strcmp(varname,"nil") == 0 || strcmp(varname,"true")==0 ||
strcmp(varname,"false")==0)
for(v = varname; *v; ) *l++ = *v++;
- *l++= *c++;
}
if(*c) *l++ = *c;
*l=0;
@@ -354,19 +358,20 @@ renderCall(char *line, int len, char *st
(void) state;
// look for assignment
- c = strstr(c,":=");
+ c = strstr(c," :=");
if( c) {
if(state){
// for finished instructions show the result too
*c =0;
s = stmt;
- if( *s == '(') *l++ = *c++;
+ while(*s && isspace((int) *s)) s++;
+ if( *s == '(') *l++ = *s++;
renderArgs(s, len, line, limit, l);
while(*l) l++;
sprintf(l," := ");
while(*l) l++;
}
- c+=2;
+ c+=3;
} else c=stmt;
while ( *c && isspace((int) *c)) c++;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list