Hello, Following, I have a function my_dbi_get_value. I use dbi_result_get and tranform the value received in a char *buf to return.
char *my_dbi_getvalue(dbi_result *result, int row_number, unsigned int column_number) { char *buf = NULL; const char *errmsg; const char *field_name; unsigned short dbitype; int32_t field_length = 0; int64_t num; /* correct the index for dbi interface * dbi index begins 1 * I prefer do not change others functions */ column_number++; if(row_number == 0) { row_number++; } if(dbi_result_seek_row(result, row_number)) { field_name = dbi_result_get_field_name(result, column_number); field_length = dbi_result_get_field_length(result, field_name); dbitype = dbi_result_get_field_type_idx(result,column_number); if(field_length) { buf = (char *)malloc(sizeof(char *) * field_length + 1); } else { /* if numbers */ buf = (char *)malloc(sizeof(char *) * 50); } switch (dbitype) { case DBI_TYPE_INTEGER: num = dbi_result_get_longlong(result, field_name); edit_int64(num, buf); field_length = strlen(buf); break; case DBI_TYPE_STRING: if(field_length) { field_length = bsnprintf(buf, field_length + 1, "%s", dbi_result_get_string(result, field_name)); } else { buf[0] = 0; } break; case DBI_TYPE_BINARY: /* dbi_result_get_binary return a NULL pointer if value is empty * following, change this to what Bacula espected */ if(field_length) { field_length = bsnprintf(buf, field_length + 1, "%s", dbi_result_get_binary(result, field_name)); } else { buf[0] = 0; } break; case DBI_TYPE_DATETIME: time_t last; struct tm tm; last = dbi_result_get_datetime(result, field_name); if(last == -1) { field_length = bsnprintf(buf, 20, "0000-00-00 00:00:00"); } else { (void)localtime_r(&last, &tm); field_length = bsnprintf(buf, 20, "%04d-%02d-%02d %02d:%02d:%02d", (tm.tm_year + 1900), (tm.tm_mon + 1), tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); } break; } } else { dbi_conn_error(dbi_result_get_conn(result), &errmsg); Dmsg1(500, "my_dbi_getvalue error: %s\n", errmsg); } return buf; } How I can use dbi_result_bind_* and not need to allocate a char *buf? One possibility is change the function to: char *my_dbi_getvalue(dbi_result *result, int row_number, unsigned int column_number, char *value) and char *value will be bind in dbi_result_bind_* functions. It's possible? Thanks -- ----------------------------------------------------------- João Henrique Freitas - joaohf_at_gmail.com Campinas-SP-Brasil BSD051283 LPI 1 http://joaohf.pbwiki.com http://www.livejournal.com/users/joaohf/ ------------------------------------------------------------------------- This SF.net email is sponsored by the 2008 JavaOne(SM) Conference Don't miss this year's exciting event. There's still time to save $100. Use priority code J8TL2D2. http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone _______________________________________________ libdbi-users mailing list libdbi-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libdbi-users