Exemple #1
0
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;
}
Exemple #2
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);
}
Exemple #3
0
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;
}
Exemple #4
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;
}