a9b3f6390b742c276dd6df49e581d5a26b987168 hiram Fri Jul 24 10:09:59 2026 -0700 avoiding an existing situation with sqlUpdateRows() function refs #31811 diff --git src/hg/hubApi/apiUtils.c src/hg/hubApi/apiUtils.c index 3e0f02e1f20..a1c68258f60 100644 --- src/hg/hubApi/apiUtils.c +++ src/hg/hubApi/apiUtils.c @@ -922,31 +922,32 @@ status = "rateLimited"; else { /* Atomic insert with duplicate re-check, closing the race window * between the SELECT above and this INSERT. */ struct dyString *update = dyStringNew(0); sqlDyStringPrintf(update, "INSERT INTO %s (requestType, fromDb, toDb, email, comment, requestTime, status, buildDir) " "SELECT 'liftOver', '%s', '%s', '%s', '%s', now(), 0, '' " "WHERE NOT EXISTS (" " SELECT 1 FROM %s WHERE requestType='liftOver' AND " " ((fromDb='%s' AND toDb='%s') OR (fromDb='%s' AND toDb='%s'))" ")", ottoTable, fromDb, toDb, email, comment, ottoTable, fromDb, toDb, toDb, fromDb); - int rowsAffected = sqlUpdateRows(conn, dyStringCannibalize(&update), NULL); + sqlUpdate(conn, dyStringCannibalize(&update)); + int rowsAffected = sqlQuickNum(conn, "SELECT ROW_COUNT()"); status = (rowsAffected > 0) ? "accepted" : "duplicate"; } } } else if (sameString(requestType, "assembly")) { struct dyString *update = dyStringNew(0); sqlDyStringPrintf(update, "INSERT INTO %s (requestType, fromDb, toDb, email, comment, requestTime, status, buildDir) " "VALUES ('assembly', '%s', '%s', '%s', '%s', now(), 0, '')", ottoTable, fromDb, toDb, email, comment); sqlUpdate(conn, dyStringCannibalize(&update)); status = "accepted"; } hDisconnectCentral(&conn);