in source/hack_parallel/hack_parallel/heap/hh_shared.c [2613:2659]
query_result_t get_dep_sqlite_blob(
sqlite3* const db,
const uint64_t key64,
sqlite3_stmt** select_stmt) {
// Extract the 32-bit key from the 64 bits.
const uint32_t key = (uint32_t)key64;
assert((key & 0x7FFFFFFF) == key64);
if (*select_stmt == NULL) {
const char* sql = "SELECT VALUE_VERTEX FROM DEPTABLE WHERE KEY_VERTEX=?;";
assert_sql(sqlite3_prepare_v2(db, sql, -1, select_stmt, NULL), SQLITE_OK);
assert(*select_stmt != NULL);
} else {
assert_sql(sqlite3_clear_bindings(*select_stmt), SQLITE_OK);
assert_sql(sqlite3_reset(*select_stmt), SQLITE_OK);
}
assert_sql(sqlite3_bind_int(*select_stmt, 1, key), SQLITE_OK);
int err_num = sqlite3_step(*select_stmt);
// err_num is SQLITE_ROW if there is a row to look at,
// SQLITE_DONE if no results
if (err_num == SQLITE_ROW) {
// Means we found it in the table
// Columns are 0 indexed
uint32_t* values = (uint32_t*)sqlite3_column_blob(*select_stmt, 0);
size_t size = (size_t)sqlite3_column_bytes(*select_stmt, 0);
query_result_t result = {0};
result.size = size;
result.blob = values;
return result;
} else if (err_num == SQLITE_DONE) {
// No row found, return "None".
query_result_t null_result = {0};
return null_result;
} else {
// Remaining cases are SQLITE_BUSY, SQLITE_ERROR, or SQLITE_MISUSE.
// The first should never happen since we are reading here.
// Regardless, something went wrong in sqlite3_step, lets crash.
assert_sql(err_num, SQLITE_ROW);
}
// Unreachable.
assert(0);
// Return something to satisfy compiler.
query_result_t null_result = {0};
return null_result;
}