int dbiw_res_get_double_ndx(db_wrap_result * self, unsigned int ndx, double * val) { RES_DECL(DB_WRAP_E_BAD_ARG); if (! val) return DB_WRAP_E_BAD_ARG; unsigned int const realIdx = ndx+1; *val = 0.0; unsigned int const a = dbi_result_get_field_attrib_idx (dbires, realIdx, 0, 0xff); /* i can't find one bit of useful docs/examples for this function, so i'm kind of guessing here. */ ; if (DBI_ATTRIBUTE_ERROR == a) { return DB_WRAP_E_CHECK_DB_ERROR; } else if (DBI_DECIMAL_SIZE4 & a) { /* MARKER("SIZE4\n"); */ *val = dbi_result_get_float_idx(dbires, realIdx); } else if (DBI_DECIMAL_SIZE8 & a) { /* MARKER("SIZE8\n"); */ *val = dbi_result_get_double_idx(dbires, realIdx); } return 0; }
unsigned int dbi_result_get_field_attrib(dbi_result Result, const char *fieldname, unsigned int attribmin, unsigned int attribmax) { unsigned int fieldidx = 0; dbi_error_flag errflag; if (!RESULT) { _error_handler(/*RESULT->conn*/ NULL, DBI_ERROR_BADPTR); return DBI_ATTRIBUTE_ERROR; } fieldidx = _find_field(RESULT, fieldname, &errflag); if (errflag != DBI_ERROR_NONE) { _error_handler(RESULT->conn, errflag); return DBI_ATTRIBUTE_ERROR; } return dbi_result_get_field_attrib_idx(Result, fieldidx+1, attribmin, attribmax); }
int dbiw_res_get_int64_ndx(db_wrap_result * self, unsigned int ndx, int64_t * val) { RES_DECL(DB_WRAP_E_BAD_ARG); if (! val) return DB_WRAP_E_BAD_ARG; unsigned int const realIdx = ndx+1; //FIXME("Consolidate the duplicate code in get_int32_ndx() and here."); #if 1 /** See this thread: http://www.mail-archive.com/[email protected]/msg00126.html */ unsigned int const a = dbi_result_get_field_attrib_idx (dbires, realIdx, 0, 0xff) /* i can't find one bit of useful docs/examples for this function, so i'm kind of guessing here. */ ; /* MARKER("Attribute return=0x%x/%u\n",a, a); */ /*assert(0);*/ if (DBI_ATTRIBUTE_ERROR == a) { return DB_WRAP_E_CHECK_DB_ERROR; } else if (DBI_INTEGER_SIZE1 & a) { /* MARKER("SIZE1\n"); */ *val = (a & DBI_DECIMAL_UNSIGNED) ? dbi_result_get_uchar_idx(dbires, realIdx) : dbi_result_get_char_idx(dbires, realIdx) ; } else if (DBI_INTEGER_SIZE2 & a) { /* MARKER("SIZE2\n"); */ *val = (a & DBI_DECIMAL_UNSIGNED) ? dbi_result_get_ushort_idx(dbires, realIdx) : dbi_result_get_short_idx(dbires, realIdx) ; } else if (DBI_INTEGER_SIZE4 & a) { /*MARKER("SIZE4\n");*/ *val = (a & DBI_DECIMAL_UNSIGNED) ? dbi_result_get_uint_idx(dbires, realIdx) : dbi_result_get_int_idx(dbires, realIdx) ; } else if (DBI_INTEGER_SIZE8 & a) { /* MARKER("SIZE8\n"); */ *val = (a & DBI_DECIMAL_UNSIGNED) ? dbi_result_get_ulonglong_idx(dbires, realIdx) : dbi_result_get_longlong_idx(dbires, realIdx) ; } else { /** libdbi Sqlite driver returns 0 for attributes for the case of SELECT COUNT(*). i have no workaround for this :(. */ return DB_WRAP_E_UNKNOWN_ERROR; } #else //*val = dbi_result_get_int_idx(dbires, realIdx); //MARKER("val as int=%"PRIi64"\n",*val); //if (!*val) *val = dbi_result_get_longlong_idx(dbires, realIdx); //MARKER("val as longlong=%"PRIi64"\n",*val); #endif return 0; }
int dbiw_res_get_int32_ndx(db_wrap_result * self, unsigned int ndx, int32_t * val) { RES_DECL(DB_WRAP_E_BAD_ARG); if (! val) return DB_WRAP_E_BAD_ARG; unsigned int const realIdx = ndx+1; #if 1 /** See this thread: http://www.mail-archive.com/[email protected]/msg00126.html */ unsigned int const a = dbi_result_get_field_attrib_idx (dbires, realIdx, 0/*DBI_INTEGER_UNSIGNED*/, 0xff/*DBI_INTEGER_SIZE8*/) /* i can't find one bit of useful docs/examples for this function, so i'm kind of guessing here. */ ; //MARKER("Attribute return=0x%x/%u\n",a, a); /*assert(0);*/ /** See this thread: http://www.mail-archive.com/[email protected]/msg00126.html */ if (DBI_ATTRIBUTE_ERROR == a) { return DB_WRAP_E_CHECK_DB_ERROR; } #if 0 else if (0 == a) { /* HORRIBLE KLUDGE for sqlite driver! But after testing, NONE of these return the value i'm expecting! */ *val = dbi_result_get_short_idx(dbires, realIdx); if (!*val) *val = dbi_result_get_ushort_idx( dbires, realIdx ); if (!*val) *val = dbi_result_get_int_idx( dbires, realIdx ); if (!*val) *val = dbi_result_get_uint_idx( dbires, realIdx ); if (!*val) *val = dbi_result_get_longlong_idx( dbires, realIdx ); if (!*val) *val = dbi_result_get_ulonglong_idx( dbires, realIdx ); //if (!*val) *val = dbi_result_get_double_idx( dbires, realIdx ); } #endif else if (DBI_INTEGER_SIZE1 & a) { /* MARKER("SIZE1\n"); */ *val = (a & DBI_DECIMAL_UNSIGNED) ? dbi_result_get_uchar_idx(dbires, realIdx) : dbi_result_get_char_idx(dbires, realIdx) ; } else if (DBI_INTEGER_SIZE2 & a) { /* MARKER("SIZE2\n"); */ *val = (a & DBI_DECIMAL_UNSIGNED) ? dbi_result_get_ushort_idx(dbires, realIdx) : dbi_result_get_short_idx(dbires, realIdx) ; } else if (DBI_INTEGER_SIZE4 & a) { /* MARKER("SIZE4\n"); */ *val = (a & DBI_DECIMAL_UNSIGNED) ? dbi_result_get_uint_idx(dbires, realIdx) : dbi_result_get_int_idx(dbires, realIdx) ; } else if (DBI_INTEGER_SIZE8 & a) { /* MARKER("SIZE8\n"); */ *val = (a & DBI_DECIMAL_UNSIGNED) ? dbi_result_get_ulonglong_idx(dbires, realIdx) : dbi_result_get_longlong_idx(dbires, realIdx) ; } else { /** libdbi Sqlite driver returns 0 for attributes for the case of SELECT COUNT(*). i have no workaround for this :(. */ return DB_WRAP_E_UNKNOWN_ERROR; } #else *val = dbi_result_get_int_idx(dbires, realIdx); #endif return 0; }