d983323cd2570af1cf3971763d14ef2d88c06fe4 jcasper Wed Feb 19 17:00:19 2025 -0800 sqlTableSize needs to support tables with more than 2B rows (rarely, but it does), refs #35262 diff --git src/hg/oneShot/testSqlDbDotTable/testSqlDbDotTable.c src/hg/oneShot/testSqlDbDotTable/testSqlDbDotTable.c index 397be278684..3be597735ed 100644 --- src/hg/oneShot/testSqlDbDotTable/testSqlDbDotTable.c +++ src/hg/oneShot/testSqlDbDotTable/testSqlDbDotTable.c @@ -1,134 +1,134 @@ /* testSqlDbDotTable - Invoke various jksql functions with db.table as table to make sure db.table notation is supported. */ #include "common.h" #include "hdb.h" #include "options.h" #include "jksql.h" void usage() /* Explain usage and exit. */ { errAbort( "testSqlDbDotTable - Invoke various jksql functions with db.table as table to make sure db.table notation is supported.\n" "usage:\n" " testSqlDbDotTable db db.table\n" ); } /* Command line validation table. */ static struct optionSpec options[] = { {NULL, 0}, }; void testSqlDbDotTable(char *db, char *dbDotTable) /* testSqlDbDotTable - Invoke various jksql functions with db.table as table to make sure db.table notation is supported. */ { struct sqlConnection *conn = hAllocConn(db); printf("%s %s.\n", dbDotTable, (sqlTableExists(conn, dbDotTable) ? "exists" : "does not exist.")); printf("%s wild %s.\n", dbDotTable, (sqlTableWildExists(conn, dbDotTable) ? "exists" : "does not exist.")); struct slName *list = sqlListFields(conn, dbDotTable); printf("%s has %d items from sqlListFields.\n", dbDotTable, slCount(list)); list = sqlFieldNames(conn, dbDotTable); printf("%s has %d items from sqlFieldNames.\n", dbDotTable, slCount(list)); char *column = "chrom"; if (list) { if (sameString(list->name, "bin") && list->next) column = list->next->name; else column = list->name; } printf("%s %s a %s column.\n", dbDotTable, (sqlColumnExists(conn, dbDotTable, column) ? "has" : "does not have"), column); struct sqlResult *sr = sqlDescribe(conn, dbDotTable); printf("%s returned %d columns from sqlDescribe.\n", dbDotTable, sqlCountColumns(sr)); sqlFreeResult(&sr); printf("%s %s a row where %s = 'chr1'\n", dbDotTable, (sqlRowExists(conn, dbDotTable, column, "chr1") ? "has" : "does not have"), column); printf("%s has %d columns.\n", dbDotTable, sqlCountColumnsInTable(conn, dbDotTable)); -printf("%s has %d rows IfExists.\n", dbDotTable, sqlTableSizeIfExists(conn, dbDotTable)); -printf("%s has %d rows.\n", dbDotTable, sqlTableSize(conn, dbDotTable)); +printf("%s has %ld rows IfExists.\n", dbDotTable, sqlTableSizeIfExists(conn, dbDotTable)); +printf("%s has %ld rows.\n", dbDotTable, sqlTableSize(conn, dbDotTable)); printf("%s data size is %lu.\n", dbDotTable, sqlTableDataSizeFromSchema(conn, db, dbDotTable)); printf("%s index size is %lu.\n", dbDotTable, sqlTableIndexSizeFromSchema(conn, db, dbDotTable)); printf("%s created like '%s'.\n", dbDotTable, sqlGetCreateTable(conn, dbDotTable)); printf("%s index of '%s' is %d.\n", dbDotTable, column, sqlFieldIndex(conn, dbDotTable, column)); printf("%s last updated %s (%lu).\n", dbDotTable, sqlTableUpdate(conn, dbDotTable), sqlTableUpdateTime(conn, dbDotTable)); printf("%s primary key is %s.\n", dbDotTable, sqlGetPrimaryKey(conn, dbDotTable)); struct slName *sample = sqlRandomSampleConn(conn, dbDotTable, column, 1); printf("%s.%s random sample: '%s' .\n", dbDotTable, column, sample ? sample->name : "NULL"); struct sqlFieldInfo *fiList = sqlFieldInfoGet(conn, dbDotTable); printf("%s sqlFieldInfoGet returned %d items.\n", dbDotTable, slCount(fiList)); char *enumColumn = NULL; struct sqlFieldInfo *fi; for (fi = fiList; fi != NULL; fi = fi->next) { if (startsWith("enum", fi->type)) { enumColumn = fi->field; break; } } if (enumColumn) { char **enumRows = sqlGetEnumDef(conn, dbDotTable, enumColumn); printf("%s sqlGetEnumDef(%s) returned %s rows.\n", dbDotTable, enumColumn, (enumRows ? "some" : "no")); } else printf("%s does not have an enum column, can't test sqlGetEnumDef.\n", dbDotTable); //#*** Need write privileges... be careful! if (0) { char dbTableCopyName[strlen(dbDotTable)+64]; safef(dbTableCopyName, sizeof dbTableCopyName, "%sUnlikelySuffix", dbDotTable); sqlCopyTable(conn, dbDotTable, dbTableCopyName); printf("%s copied to %s.\n", dbDotTable, dbTableCopyName); char dbTableRenameName[strlen(dbDotTable)+64]; safef(dbTableRenameName, sizeof dbTableRenameName, "%sRenamedSuffix", dbDotTable); sqlRenameTable(conn, dbTableCopyName, dbTableRenameName); printf("%s renamed to %s.\n", dbTableCopyName, dbTableRenameName); sqlDropTable(conn, dbTableRenameName); printf("%s dropped.\n", dbTableRenameName); char query[1024]; sqlSafef(query, sizeof query, "select * from %s limit 1", dbDotTable); printf("%s%s made.\n", dbTableRenameName, (sqlMaybeMakeTable(conn, dbTableRenameName, query) ? "" : " not")); sqlDropTable(conn, dbTableRenameName); printf("%s dropped.\n", dbTableRenameName); } char *connDb = sqlGetDatabase(conn); if (differentStringNullOk(db, connDb)) errAbort("Connection db changed from '%s' to '%s'!", db, connDb); printf("Done.\n"); hFreeConn(&conn); } int main(int argc, char *argv[]) /* Process command line. */ { optionInit(&argc, argv, options); if (argc != 3) usage(); testSqlDbDotTable(argv[1], argv[2]); return 0; }