Public feed #890452

Miscellany

public text v1 · immutable
Raw Edit
·published 2008-02-03 19:26 UTC
rendered paste body
// The following are my MySQL wrapper functions to retrieve a null terminated string
// from a MySQL result set, given a row and index (i.e. a field)
// Usage i.e.: char* buf = db_gets(result, row, 0); free(buf);
// Usage i.e.: char** result_arr; db_gets_all(result, row, &result_arr, 3); db_gets_all_free(&result_arr, 4);
// Please advise: is this the most efficiency way to do this? I fear the strdup() is not efficient

// get null-terminated string from mysql result set at specified index
char* db_gets(MYSQL_RES* result, MYSQL_ROW row, int index)
{
	unsigned long* lengths = mysql_fetch_lengths(result);
	char p[lengths[index]+1]; // +1 for '\0'
	int i;
	for(i = 0;i < lengths[index];i++)
	{
		p[i] = row[index][i];
	}
	p[lengths[index]] = '\0';

	return strdup(p);
}

void db_gets_all(MYSQL_RES* result, MYSQL_ROW row, char*** result_arr, size_t nrows)
{
	int i;
	char** arr_local;

	if( (arr_local = calloc(nrows, sizeof *arr_local)) != NULL )
	{
		for(i = 0;i < nrows;i++)
		{
			arr_local[i] = db_gets(result, row, i);
		}
	}

	*result_arr = arr_local;
}

void db_gets_all_free(char*** result_arr, size_t nrows)
{
	int i;

	for(i = 0;i < nrows;i++) free((*result_arr)[i]);
	free(*result_arr);
}