modules/db_mysql/km_row.c
4f778298
 /* 
  * MySQL module row related functions
  *
  * Copyright (C) 2001-2003 FhG Fokus
  * Copyright (C) 2008 1&1 Internet AG
  *
31f52f1d
  * This file is part of Kamailio, a free SIP server.
4f778298
  *
31f52f1d
  * Kamailio is free software; you can redistribute it and/or modify
4f778298
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version
  *
31f52f1d
  * Kamailio is distributed in the hope that it will be useful,
4f778298
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License 
  * along with this program; if not, write to the Free Software 
9e1ff448
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
4f778298
  */
 
083502f8
 /*! \file
  *  \brief DB_MYSQL :: Row related functions
  *  \ingroup db_mysql
  *  Module: \ref db_mysql
  */
4f778298
 
 #include "../../dprint.h"
 #include "../../mem/mem.h"
96121273
 #include "../../lib/srdb1/db_row.h"
 #include "../../lib/srdb1/db_val.h"
 #include "km_my_con.h"
 #include "km_val.h"
 #include "km_row.h"
94ce2b1d
 #include "km_res.h"
4f778298
 
5ffb6c9e
 /*!
  * \brief Convert a row from result into DB API representation
  * \param _h database connection
  * \param _res database result in the DB API representation
  * \param _r database result row
  * \return 0 on success, -1 on failure
4f778298
  */
f1fc20c7
 int db_mysql_convert_row(const db1_con_t* _h, db1_res_t* _res, db_row_t* _r)
4f778298
 {
 	unsigned long* lengths;
7b7e4369
 	int i;
4f778298
 
 	if ((!_h) || (!_res) || (!_r)) {
 		LM_ERR("invalid parameter value\n");
 		return -1;
 	}
 
7b7e4369
 	if (db_allocate_row(_res, _r) != 0) {
 		LM_ERR("could not allocate row");
 		return -2;
4f778298
 	}
7b7e4369
 	
94ce2b1d
 	lengths = mysql_fetch_lengths(RES_RESULT(_res));
4f778298
 
 	for(i = 0; i < RES_COL_N(_res); i++) {
f828dad0
 		if (db_str2val(RES_TYPES(_res)[i], &(ROW_VALUES(_r)[i]),
94ce2b1d
 			    ((MYSQL_ROW)RES_ROW(_res))[i], lengths[i], 0) < 0) {
4f778298
 			LM_ERR("failed to convert value\n");
24d1af2a
 			LM_DBG("free row at %p\n", _r);
4f778298
 			db_free_row(_r);
 			return -3;
 		}
 	}
 	return 0;
 }