This class is used for fetching data from single row. It receives the result from [`dbixx::session`](/wikipp/en/page/ref_dbixx_session) or [`dbixx::result`](/wikipp/en/page/ref_dbixx_result). | 
	
	
	
		 | 
	
	
	
		- [General Functions](#gen) | 
	
	
	
		- [Retrieving information about fields](#finfo) | 
	
	
	
		- [Retrieving actual data](#data) | 
	
	
	
		- [Automatic Casting](#cast) | 
	
	
	
		 | 
	
	
	
		## <span id="gen"></span>General Functions | 
	
	
	
		 | 
	
	
	
		    bool isempty(); | 
	
	
	
		    dbi_result get_dbi_result() | 
	
	
	
		 | 
	
	
	
		`isempty()` checks if the output set of the query was empty. | 
	
	
	
		 | 
	
	
	
		    dbixx::row r | 
	
	
	
		    sql<<"SELECT id FROM users WHERE name='nobody'",r; | 
	
	
	
		    if(!r.isempty()) { // there is nobody in list!!! | 
	
	
	
		 | 
	
	
	
		`get_dbi_result()` returns underlying `dbi_result` that | 
	
	
	
		allows accessing libdbi features that are not available | 
	
	
	
		from DbiXX Library | 
	
	
	
		 | 
	
	
	
		## <span id="finfo"></span>Retrieving information about fields | 
	
	
	
		 | 
	
	
	
		    unsigned int cols(); | 
	
	
	
		    bool isnull(int inx);  | 
	
	
	
		    bool isnull(std::string const &id); | 
	
	
	
		    bool operator[](int ind); | 
	
	
	
		    bool operator[](std::string const & id) ; | 
	
	
	
		 | 
	
	
	
		Function `cols()` returns number of columns in the row. `isnull()` returns if specific filed is null, using it's column number (starting from 1) or column name; | 
	
	
	
		 | 
	
	
	
		`bool operator[]` is just syntactic sugar for `isnull()`. | 
	
	
	
		 | 
	
	
	
		For example: | 
	
	
	
		 | 
	
	
	
		    row r; | 
	
	
	
		    sql<<"SELECT password " | 
	
	
	
		         "FROM users WHERE username=?",name,r; | 
	
	
	
		    if(!r.isempty() && r.isnull("password")) { | 
	
	
	
		      // login without password | 
	
	
	
		 | 
	
	
	
		## <span id="data"></id>Retrieving actual data | 
	
	
	
		## <span id="data"></span>Retrieving actual data | 
	
	
	
		 | 
	
	
	
		The operation for retrieving the data are following: | 
	
	
	
		 | 
	
	
	
		    bool fetch(int idx,int &value); | 
	
	
	
		    bool fetch(int idx,unsigned &value); | 
	
	
	
		    bool fetch(int idx,long long &value); | 
	
	
	
		    bool fetch(int idx,unsigned long long &value); | 
	
	
	
		    bool fetch(int idx,double &value); | 
	
	
	
		    bool fetch(int idx,std::string &value); | 
	
	
	
		    bool fetch(int idx,std::tm &value); | 
	
	
	
		     | 
	
	
	
		    template<typename T> | 
	
	
	
		    row &operator>>(T &v); | 
	
	
	
		 | 
	
	
	
		Function `fetch`, retrieves the value from column `idx` into value. And returns `true` if the value is **not** null. | 
	
	
	
		 | 
	
	
	
		Operator `>>` allows fetch data from all columns sequentially starting from column number 1. | 
	
	
	
		 | 
	
	
	
		For example: | 
	
	
	
		 | 
	
	
	
		    dbixx::row r; | 
	
	
	
		    sql<<"SELECT name,age,birthday " | 
	
	
	
		         "FROM person WHERE id=?",id; | 
	
	
	
		    if(sql.single(r)) { | 
	
	
	
		       int age; | 
	
	
	
		       string name; | 
	
	
	
		       std::tm birth; | 
	
	
	
		       r >> name >> age >>birth; | 
	
	
	
		       // Do something  | 
	
	
	
		    } | 
	
	
	
		 | 
	
	
	
		## <span id="cast"></span>Automatic Casting | 
	
	
	
		 | 
	
	
	
		If data type does not mutch, DbiXX tries to cast data | 
	
	
	
		to appropriate type, thus you can retrieve double with | 
	
	
	
		integer or even string. This is done mostly for  | 
	
	
	
		"typeless" backends like sqlite3 where strict casting | 
	
	
	
		may cause unexpected errors. | 
	
	
	
		 | 
	
	
	
		If casting fails, `dbixx::dbixx_error` is thrown. |