4898794edd81be5285ea6e544acbedeaeb31bf78 max Tue Nov 23 08:10:57 2021 -0800 Fixing pointers to README file for license in all source code files. refs #27614 diff --git src/hg/makeDb/schema/dbFindFieldsWith/dbFindFieldsWith.c src/hg/makeDb/schema/dbFindFieldsWith/dbFindFieldsWith.c index 2edf15a..9dddaed 100644 --- src/hg/makeDb/schema/dbFindFieldsWith/dbFindFieldsWith.c +++ src/hg/makeDb/schema/dbFindFieldsWith/dbFindFieldsWith.c @@ -1,113 +1,113 @@ /* dbFindFieldsWith - Look through database and find fields that have elements matching a certain pattern in the first N rows.. */ /* Copyright (C) 2013 The Regents of the University of California - * See README in this or parent directory for licensing information. */ + * See kent/LICENSE or http://genome.ucsc.edu/license/ for licensing information. */ #include "common.h" #include <regex.h> #include "linefile.h" #include "jksql.h" #include "hash.h" #include "options.h" int maxRows = 100; void usage() /* Explain usage and exit. */ { errAbort( "dbFindFieldsWith - Look through database and find fields that have elements matching a certain " "regular expression in the first N rows.\n" "usage:\n" " dbFindFieldsWith db regExp outputFile\n" "options:\n" " -maxRows=%d\n" "Example - to find tables in go that contain _exactly_ the word 'kinase'\n" " dbFindFieldsWith go '^kinase$' outputFile\n" "Example - to find tables in hg18 that contain a known gene id\n" " dbFindFieldsWith hg18 '^uc[0-9][0-9][0-9][a-z][a-z][a-z].[0-9]+$' output\n" , maxRows ); } static struct optionSpec options[] = { {"maxRows", OPTION_INT}, {NULL, 0}, }; char *sqlColumnName(struct sqlResult *sr, int colIx) /* REturn name of column of given index. You can only use this once per result! */ { int i; for (i=0; i<colIx; ++i) sqlFieldName(sr); return sqlFieldName(sr); } void dbFindFieldsWith(char *database, char *regExp, char *output) /* dbFindFieldsWith - Look through database and find fields that have elements matching a certain pattern in the first N rows.. */ { regex_t re; int err = regcomp(&re, regExp, REG_NOSUB|REG_EXTENDED); if (err < 0) errAbort("regcomp failed code %d", err); struct sqlConnection *conn = sqlConnect(database); struct slName *table, *tableList = sqlQuickList(conn, NOSQLINJ "show tables"); FILE *f = mustOpen(output, "w"); for (table = tableList; table != NULL; table = table->next) { char query[256]; sqlSafef(query, sizeof(query), "select * from %s limit %d", table->name, maxRows); verbose(2, "%s.%s\n", database, table->name); struct sqlResult *sr = sqlGetResult(conn, query); if (sr != NULL) { int colCount = sqlCountColumns(sr); /* Get labels for columns */ char **labels; AllocArray(labels, colCount); int i; for (i=0; i<colCount; ++i) labels[i] = sqlFieldName(sr); /* Get flags that say which fields we've reported. */ bool *flags; AllocArray(flags, colCount); char **row; while ((row = sqlNextRow(sr)) != NULL) { int i; for (i=0; i<colCount; ++i) { char *field = row[i]; if (field != NULL && field[0] != 0) { if (regexec(&re, row[i], 0, NULL, 0) == 0) { if (!flags[i]) { flags[i] = TRUE; fprintf(f, "%s\t%s\t%s\n", table->name, labels[i], row[i]); } } } } } sqlFreeResult(&sr); freez(&flags); freez(&labels); } } carefulClose(&f); } int main(int argc, char *argv[]) /* Process command line. */ { optionInit(&argc, argv, options); if (argc != 4) usage(); dbFindFieldsWith(argv[1], argv[2], argv[3]); return 0; }