7c459941c1e589297e0014bf7957599f70836096
hiram
  Thu Apr 4 11:08:18 2019 -0700
moving some SQL functions to jksql.c from hgTables refs #18869 #23233

diff --git src/hg/hgTables/hgTables.c src/hg/hgTables/hgTables.c
index 2cf93db..c9db65a 100644
--- src/hg/hgTables/hgTables.c
+++ src/hg/hgTables/hgTables.c
@@ -684,86 +684,30 @@
 return startsWith("set", type);
 }
 
 boolean isSqlNumType(char *type)
 /* Return TRUE if it is a numerical SQL type. */
 {
 return strstr(type, "int") || strstr(type, "float") || strstr(type, "double");
 }
 
 boolean isSqlIntType(char *type)
 /* Return TRUE if it is an integer SQL type. */
 {
 return (strstr(type, "int") != NULL);
 }
 
-struct sqlFieldType *sqlFieldTypeNew(char *name, char *type)
-/* Create a new sqlFieldType */
-{
-struct sqlFieldType *ft;
-AllocVar(ft);
-ft->name = cloneString(name);
-ft->type = cloneString(type);
-return ft;
-}
-
-void sqlFieldTypeFree(struct sqlFieldType **pFt)
-/* Free resources used by sqlFieldType */
-{
-struct sqlFieldType *ft = *pFt;
-if (ft != NULL)
-    {
-    freeMem(ft->name);
-    freeMem(ft->type);
-    freez(pFt);
-    }
-}
-
-void sqlFieldTypeFreeList(struct sqlFieldType **pList)
-/* Free a list of dynamically allocated sqlFieldType's */
-{
-struct sqlFieldType *el, *next;
-
-for (el = *pList; el != NULL; el = next)
-    {
-    next = el->next;
-    sqlFieldTypeFree(&el);
-    }
-*pList = NULL;
-}
-
-struct sqlFieldType *sqlListFieldsAndTypes(struct sqlConnection *conn, char *table)
-/* Get list of fields including their names and types.  The type currently is just
- * a MySQL type string. */
-{
-struct sqlFieldType *ft, *list = NULL;
-char query[512];
-struct sqlResult *sr;
-char **row;
-sqlSafef(query, sizeof(query), "describe %s", table);
-sr = sqlGetResult(conn, query);
-while ((row = sqlNextRow(sr)) != NULL)
-    {
-    ft = sqlFieldTypeNew(row[0], row[1]);
-    slAddHead(&list, ft);
-    }
-sqlFreeResult(&sr);
-slReverse(&list);
-return list;
-}
-
-
 static struct trackDb *findTrackInGroup(char *name, struct trackDb *trackList,
 	struct grp *group)
 /* Find named track that is in group (NULL for any group).
  * Return NULL if can't find it. */
 {
 struct trackDb *track;
 if (group != NULL && sameString(group->name, "all"))
     group = NULL;
 for (track = trackList; track != NULL; track = track->next)
     {
     if (sameString(name, track->track) &&
        (group == NULL || sameString(group->name, track->grp)))
        return track;
     if (track->subtracks)
         {