d51422da1797f4b482f2a122123aed55cb60e0e5
kent
  Fri Apr 19 16:20:53 2013 -0700
Added -addBin option at Angie's request.
diff --git src/lib/asParse.c src/lib/asParse.c
index 6c867cb..867bd79 100644
--- src/lib/asParse.c
+++ src/lib/asParse.c
@@ -21,45 +21,53 @@
     {t_uint,    "uint",    TRUE,  FALSE, "int unsigned",      "unsigned",      "Unsigned", "Unsigned", "%u",   "PositiveIntegerField"},
     {t_short,   "short",   FALSE, FALSE, "smallint",          "short",         "Short",    "Signed",   "%d",   "SmallIntegerField"},
     {t_ushort,  "ushort",  TRUE,  FALSE, "smallint unsigned", "unsigned short","Ushort",   "Unsigned", "%u",   "SmallPositiveIntegerField"},
     {t_byte,    "byte",    FALSE, FALSE, "tinyint",           "signed char",   "Byte",     "Signed",   "%d",   "SmallIntegerField"},
     {t_ubyte,   "ubyte",   TRUE,  FALSE, "tinyint unsigned",  "unsigned char", "Ubyte",    "Unsigned", "%u",   "SmallPositiveIntegerField"},
     {t_off,     "bigint",  FALSE, FALSE, "bigint",            "long long",     "LongLong", "LongLong", "%lld", "BigIntegerField"},
     {t_string,  "string",  FALSE, TRUE,  "varchar(255)",      "char *",        "String",   "String",   "%s",   "CharField"},
     {t_lstring, "lstring", FALSE, TRUE,  "longblob",          "char *",        "String",   "String",   "%s",   "TextField"},
     {t_enum,    "enum",    FALSE, FALSE, "enum",              "!error!",       "Enum",     "Enum",     NULL,   "CharField"},
     {t_set,     "set",     FALSE, FALSE, "set",               "unsigned",      "Set",      "Set",      NULL,   NULL},
     {t_object,  "object",  FALSE, FALSE, "longblob",          "!error!",       "Object",   "Object",   NULL,   "TextField"},
     {t_object,  "table",   FALSE, FALSE, "longblob",          "!error!",       "Object",   "Object",   NULL,   "TextField"},
     {t_simple,  "simple",  FALSE, FALSE, "longblob",          "!error!",       "Simple",   "Simple",   NULL,   "TextField"},
 };
 
-static struct asTypeInfo *findLowType(struct tokenizer *tkz)
-/* Return low type info.  Squawk and die if s doesn't
- * correspond to one. */
+struct asTypeInfo *asTypeFindLow(char *name)
+/* Return asType for a low level type of given name.  (Low level because may be decorated 
+ * with array or pointer  stuff at a higher level).  Returns NULL if not found. */
 {
-char *s = tkz->string;
 int i;
 for (i=0; i<ArraySize(asTypes); ++i)
     {
-    if (sameWord(asTypes[i].name, s))
+    if (sameWord(asTypes[i].name, name))
 	return &asTypes[i];
     }
-tokenizerErrAbort(tkz, "Unknown type '%s'", s);
 return NULL;
 }
 
+static struct asTypeInfo *findLowType(struct tokenizer *tkz)
+/* Return low type info.  Squawk and die if s doesn't
+ * correspond to one. */
+{
+struct asTypeInfo *type = asTypeFindLow(tkz->string);
+if (type == NULL)
+    tokenizerErrAbort(tkz, "Unknown type '%s'", tkz->string);
+return type;
+}
+
 static void sqlSymDef(struct asColumn *col, struct dyString *dy)
 /* print symbolic column definition for sql */
 {
 dyStringPrintf(dy, "%s(", col->lowType->sqlName);
 struct slName *val;
 for (val = col->values; val != NULL; val = val->next)
     {
     dyStringPrintf(dy, "\"%s\"", val->name);
     if (val->next != NULL)
         dyStringAppend(dy, ", ");
     }
 dyStringPrintf(dy, ")");
 }
 
 struct dyString *asColumnToSqlType(struct asColumn *col)