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/oneShot/testTableExists/testTableExists.c src/hg/oneShot/testTableExists/testTableExists.c index b2d282b..0d2a32e 100644 --- src/hg/oneShot/testTableExists/testTableExists.c +++ src/hg/oneShot/testTableExists/testTableExists.c @@ -1,242 +1,242 @@ /* testTableExists - Experiments with ways to test for table existence ... */ /* 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 <stdio.h> #include <stdlib.h> #include "common.h" #include "options.h" #include "jksql.h" #include "hgConfig.h" #include "obscure.h" #include "portable.h" char *database = NULL; char *host = NULL; char *user = NULL; char *password = NULL; struct sqlConnection *conn = NULL; char *existingMyIsamDb = NULL; char *existingMyIsamTable = NULL; char *existingInnodbDb = NULL; char *existingInnodbTable = NULL; char *nonExistingTableDb = NULL; char *nonExistingTable = NULL; int numReps=1000; void usage() /* Explain usage and exit. */ { errAbort( "testTableExists - Experiments with various ways to test for table existence.\n" "usage:\n" " testTableExists loginProfile existingMyIsamTable existingInnodbTable nonExistingTable\n" "options:\n" " -xxx=XXX\n" ); } static struct optionSpec options[] = { {NULL, 0}, }; void testSqlTableExists(struct sqlConnection *sc, char *sql, char *table, int *resultRows, unsigned int *errorNo) /* Use sql to test if a table exists. Return number of rows in resultset and whether it had an error. */ { char query[256]; struct sqlResult *sr; int count=0; sqlSafef(query, sizeof(query), sql, table); sr=sqlGetResultExt(sc,query, errorNo, NULL); if (sr) { while (sqlNextRow(sr)) count++; sqlFreeResult(&sr); } *resultRows=count; } void useDb(char *db) /* Use db changes default db. */ { char query[256]; sqlSafef(query, sizeof(query), "use %s", db); sqlUpdate(conn,query); } char *getCfgOption(char *config, char *setting) /* get setting for specified config */ { char temp[256]; safef(temp, sizeof(temp), "%s.%s", config, setting); char *value = cfgOption(temp); if (!value) errAbort("setting %s not found!",temp); return value; } void testTableExistsRepeatedly(char *sql, int kind) /* testTableExistsRepeatedly - Experiments with ways to test for table existence ... */ { int i=0; int rows=0; unsigned int errorNo=0; //verbose(1, "got here 2 %s\n", existingMyIsamDb); //debug verbose(1, "\nQuery: [%s]\n", sql); useDb(existingMyIsamDb); //verbose(1, "got here 3\n"); //debug long time = clock1000(); for(i=0; i<numReps; ++i) { //verbose(1, "got here 3.1 [%s] %s\n", sql, existingMyIsamTable); //debug testSqlTableExists(conn, sql, existingMyIsamTable, &rows, &errorNo); //verbose(1, "got here 3.2 kind=%d rows=%d\n", kind, rows); fflush(stderr); //debug if ((kind==0 && errorNo!=0) || (kind==1 && rows==0)) errAbort("Unexpected error: table should exist: %s", existingMyIsamTable); //verbose(1, "got here 3.3\n"); //debug } verbose(1, "MyISAM time: %.2f seconds\n", (clock1000() - time) / 1000.0); //verbose(1, "got here 4\n"); //debug if (!sameString(existingInnodbDb, "NULL")) { useDb(existingInnodbDb); time = clock1000(); for(i=0; i<numReps; ++i) { testSqlTableExists(conn, sql, existingInnodbTable, &rows, &errorNo); if ((kind==0 && errorNo!=0) || (kind==1 && rows==0)) errAbort("Unexpected error: innodb table should exist: %s", existingInnodbTable); } verbose(1, "InnoDb time: %.2f seconds\n", (clock1000() - time) / 1000.0); } //verbose(1, "got here 5\n"); //debug useDb(nonExistingTableDb); time = clock1000(); for(i=0; i<numReps; ++i) { testSqlTableExists(conn, sql, nonExistingTable, &rows, &errorNo); if ((kind==0 && errorNo==0) || (kind==1 && rows!=0)) errAbort("Unexpected success: table not existing should not exist: %s", nonExistingTable); } verbose(1, "notExist time: %.2f seconds\n", (clock1000() - time) / 1000.0); //verbose(1, "got here 5\n"); //debug } void testTableExists(char *config) /* testTableExists - Experiments with ways to test for table existence ... */ { /* get connection info */ database = "hg18"; host = getCfgOption(config, "host" ); user = getCfgOption(config, "user" ); password = getCfgOption(config, "password"); verbose(1, "running on %s\n", getenv("HOST")); verbose(1, "connecting to host %s\n", host); conn = sqlConnectRemote(host, user, password, database); verbose(1, "sqlVersion=%s\n", sqlVersion(conn)); verbose(1, "numReps=%d\n", numReps); verbose(1, "MyISAM exists: %s.%s\n", existingMyIsamDb, existingMyIsamTable); verbose(1, "InnoDb exists: %s.%s\n", existingInnodbDb, existingInnodbTable); verbose(1, "does not exist: %s.%s\n", nonExistingTableDb, nonExistingTable); //verbose(1, "got here 1\n"); // kinds: // 0 means not exists when hadError==TRUE // 1 means not exists when rowCount==0 //good testTableExistsRepeatedly("select count(*) from %s", 0); //good testTableExistsRepeatedly("describe %s", 0); //testTableExistsRepeatedly("CHECK TABLE %s FAST QUICK;"); //need to grep for "doesn't exist" in all output fields. //good testTableExistsRepeatedly("SELECT 1 FROM %s LIMIT 0", 0); //good //testTableExistsRepeatedly("show tables like '%s'", 1); verbose(1, "\nskipping this too slow: show tables like '%%s'\n"); // need to check if output rowcount is 1 or 0 //testTableExistsRepeatedly("SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'hg18' AND table_name = '%s'"); // need to check if output rowcount is 1 or 0 // need to patch in the bloody database too // only works on mysql 5 //good testTableExistsRepeatedly("show columns from %s", 0); //flush table DOES NOT WORK!: it doesn't return any failure at all: testTableExistsRepeatedly("flush table %s", 0); //testTableExistsRepeatedly("analyze table %s"); //need to grep for "doesn't exist" in all output fields. //good testTableExistsRepeatedly("show index from %s", 0); //good testTableExistsRepeatedly("explain SELECT 1 FROM %s LIMIT 0", 0); //good //testTableExistsRepeatedly("show table status like '%s'", 1); verbose(1, "\nskipping this too slow: show table status like '%%s'\n"); // need to check if output rowcount is 0 //verbose(1, "got here 99\n"); sqlDisconnect(&conn); } int main(int argc, char *argv[]) /* Process command line. */ { optionInit(&argc, argv, options); if (argc != 8) usage(); existingMyIsamDb = argv[2]; existingMyIsamTable = argv[3]; existingInnodbDb = argv[4]; existingInnodbTable = argv[5]; nonExistingTableDb = argv[6]; nonExistingTable = argv[7]; testTableExists(argv[1]); return 0; }