70d4208efa11f262ba5591198214c9ccdc6b54ae angie Mon Aug 22 22:24:05 2011 -0700 Feature #3707 (VCF+tabix support in hgTables):Basic hgTables support for VCF, modeled after BAM code. Tested all fields, selected fields, bed output; filter, intersection, schema on 3 flavors of vcfTabix: ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/release/20101123/interim_phase1_release/ALL.chr17.phase1.projectConsensus.genotypes.vcf.gz ftp://ftp-trace.ncbi.nlm.nih.gov/1000genomes/ftp/release/20100804/AFR.dindel.20100804.sites.vcf.gz ftp://ftp.ncbi.nih.gov/snp/organisms/human_9606/VCF/v4.0/ByChromosomeNoGeno/00-All.vcf.gz diff --git src/hg/hgTables/asObj.c src/hg/hgTables/asObj.c index ac3f730..3acffb3 100644 --- src/hg/hgTables/asObj.c +++ src/hg/hgTables/asObj.c @@ -1,113 +1,111 @@ /* asObj - get and use parsed autoSQL objects describing table. */ #include "common.h" #include "linefile.h" #include "jksql.h" #include "asParse.h" #include "errCatch.h" #include "hgTables.h" static char const rcsid[] = "$Id: asObj.c,v 1.4 2009/05/20 20:59:55 mikep Exp $"; static struct asObject *asForTableOrDie(struct sqlConnection *conn, char *table) /* Get autoSQL description if any associated with table. Abort if * there's a problem*/ { struct asObject *asObj = NULL; if (isBigBed(database, table, curTrack, ctLookupName)) - { asObj = bigBedAsForTable(table, conn); - } else if (isBamTable(table)) - { asObj = bamAsObj(); - } +else if (isVcfTable(table)) + asObj = vcfAsObj(); else { if (sqlTableExists(conn, "tableDescriptions")) { char query[256]; char *asText = NULL; /* Try split table first. */ safef(query, sizeof(query), "select autoSqlDef from tableDescriptions where tableName='chrN_%s'", table); asText = sqlQuickString(conn, query); /* If no result try unsplit table. */ if (asText == NULL) { safef(query, sizeof(query), "select autoSqlDef from tableDescriptions where tableName='%s'", table); asText = sqlQuickString(conn, query); } if (asText != NULL && asText[0] != 0) { asObj = asParseText(asText); } freez(&asText); } } return asObj; } struct asObject *asForTable(struct sqlConnection *conn, char *table) /* Get autoSQL description if any associated with table. */ /* Wrap some error catching around asForTable. */ { struct errCatch *errCatch = errCatchNew(); struct asObject *asObj = NULL; if (errCatchStart(errCatch)) { asObj = asForTableOrDie(conn, table); } errCatchEnd(errCatch); errCatchFree(&errCatch); return asObj; } struct asColumn *asColumnFind(struct asObject *asObj, char *name) /* Return named column. */ { struct asColumn *asCol = NULL; if (asObj!= NULL) { for (asCol = asObj->columnList; asCol != NULL; asCol = asCol->next) if (sameString(asCol->name, name)) break; } return asCol; } struct slName *asColNames(struct asObject *as) /* Get list of column names. */ { struct slName *list = NULL, *el; struct asColumn *col; for (col = as->columnList; col != NULL; col = col->next) { el = slNameNew(col->name); slAddHead(&list, el); } slReverse(&list); return list; } struct sqlFieldType *sqlFieldTypesFromAs(struct asObject *as) /* Convert asObject to list of sqlFieldTypes */ { struct sqlFieldType *ft, *list = NULL; struct asColumn *col; for (col = as->columnList; col != NULL; col = col->next) { struct dyString *type = asColumnToSqlType(col); ft = sqlFieldTypeNew(col->name, type->string); slAddHead(&list, ft); dyStringFree(&type); } slReverse(&list); return list; }