16313e67e6b0d8ab72b914a352a8cca2d81c4fa1
kent
  Thu Jun 8 23:28:49 2017 -0700
Allowing '.' in a field name.

diff --git src/lib/rqlParse.c src/lib/rqlParse.c
index 79082b6..a8c67b2 100644
--- src/lib/rqlParse.c
+++ src/lib/rqlParse.c
@@ -134,31 +134,46 @@
 char *tok = tokenizerMustHaveNext(tkz);
 struct rqlParse *p;
 AllocVar(p);
 char c = tok[0];
 if (c == '\'' || c == '"')
     {
     p->op = rqlOpLiteral;
     p->type = rqlTypeString;
     int len = strlen(tok+1);
     p->val.s = cloneStringZ(tok+1, len-1);
     }
 else if (isalpha(c) || c == '_')
     {
     p->op = rqlOpSymbol;
     p->type = rqlTypeString;	/* String until promoted at least. */
-    p->val.s = cloneString(tok);
+    struct dyString *dy = dyStringNew(64);
+    for (;;)
+	{
+	dyStringAppend(dy, tok);
+	if ((tok = tokenizerNext(tkz)) == NULL)
+	    break;
+	if (tok[0] != '.')
+	    {
+	    tokenizerReuse(tkz);
+	    break;
+	    }
+	dyStringAppend(dy, tok);
+	if ((tok = tokenizerNext(tkz)) == NULL)
+	    break;
+	}
+    p->val.s = dyStringCannibalize(&dy);
     }
 else if (isdigit(c))
     {
     p->op = rqlOpLiteral;
     p->type = rqlTypeInt;
     p->val.i = sqlUnsigned(tok);
     if ((tok = tokenizerNext(tkz)) != NULL)
 	{
 	if (tok[0] == '.')
 	    {
 	    char buf[32];
 	    tok = tokenizerMustHaveNext(tkz);
 	    safef(buf, sizeof(buf), "%lld.%s", p->val.i, tok);
 	    p->type = rqlTypeDouble;
 	    p->val.x = sqlDouble(buf);