static void getDatabaseList(PGconn *conn) { int database_count; int ii; PGresult *res; /* SQL Statement */ static const char *STMT_GET_DATABASE_LIST = "SELECT DATNAME FROM PG_DATABASE;"; /* * Get database list */ res = PQexec(conn, STMT_GET_DATABASE_LIST); if (res == NULL || PQresultStatus(res) != PGRES_TUPLES_OK) { fprintf(stderr, "Could not obtain database list.\n"); PQclear(res); exit (1); } database_count = PQntuples(res); for(ii = 0; ii < database_count; ii++) add_database_info(PQgetvalue(res, ii, 0)); PQclear(res); }
static txn_info * make_txn_info(char *dbname, TransactionId gxid, char *xid, char *owner) { database_info *dbinfo; txn_info *txn; if ((dbinfo = find_database_info(dbname)) == NULL) dbinfo = add_database_info(dbname); txn = (txn_info *)malloc(sizeof(txn_info)); if (txn == NULL) return NULL; memset(txn, 0, sizeof(txn_info)); txn->gxid = gxid; txn->xid = strdup(xid); if (txn->xid == NULL) { free(txn); return NULL; } txn->owner = strdup(owner); if (txn->owner == NULL) { free(txn); return NULL; } if (dbinfo->head_txn_info == NULL) { dbinfo->head_txn_info = dbinfo->last_txn_info = txn; } else { dbinfo->last_txn_info->next = txn; dbinfo->last_txn_info = txn; } txn->txn_stat = (TXN_STATUS *)malloc(sizeof(TXN_STATUS) * pgxc_clean_node_count); if (txn->txn_stat == NULL) return(NULL); memset(txn->txn_stat, 0, sizeof(TXN_STATUS) * pgxc_clean_node_count); return txn; }