Explorar o código

- unify common rows and row allocation functionality in the DB API core

git-svn-id: https://openser.svn.sourceforge.net/svnroot/openser/trunk@5362 689a6050-402a-0410-94f2-e92a70836424
Henning Westerholt %!s(int64=16) %!d(string=hai) anos
pai
achega
3d7f4c1e96
Modificáronse 4 ficheiros con 62 adicións e 0 borrados
  1. 20 0
      lib/srdb1/db_res.c
  2. 8 0
      lib/srdb1/db_res.h
  3. 24 0
      lib/srdb1/db_row.c
  4. 10 0
      lib/srdb1/db_row.h

+ 20 - 0
lib/srdb1/db_res.c

@@ -162,3 +162,23 @@ inline int db_allocate_columns(db_res_t* _r, const unsigned int cols)
 
 	return 0;
 }
+
+
+/**
+ * Allocate memory for rows.
+ * \param _res result set
+ * \return zero on success, negative on errors
+ */
+inline int db_allocate_rows(db_res_t* _res)
+{
+	int len = sizeof(db_row_t) * RES_ROW_N(_res);
+	RES_ROWS(_res) = (struct db_row*)pkg_malloc(len);
+	if (!RES_ROWS(_res)) {
+		LM_ERR("no private memory left\n");
+		return -1;
+	}
+	LM_DBG("allocate %d bytes for rows at %p\n", len, RES_ROWS(_res));
+	memset(RES_ROWS(_res), 0, len);
+	
+	return 0;
+}

+ 8 - 0
lib/srdb1/db_res.h

@@ -120,4 +120,12 @@ inline int db_free_result(db_res_t* _r);
  */
 inline int db_allocate_columns(db_res_t* _r, const unsigned int cols);
 
+
+/**
+ * Allocate memory for rows.
+ * \param _res result set
+ * \return zero on success, negative on errors
+ */
+inline int db_allocate_rows(db_res_t* _res);
+
 #endif /* DB_RES_H */

+ 24 - 0
lib/srdb1/db_row.c

@@ -98,3 +98,27 @@ inline int db_free_row(db_row_t* _r)
 	}
 	return 0;
 }
+
+
+/**
+ * Allocate memory for row value.
+ * \param _res result set
+ * \param _row filled row
+ * \return zero on success, negative on errors
+ */
+inline int db_allocate_row(const db_res_t* _res, db_row_t* _row)
+{
+	int len = sizeof(db_val_t) * RES_COL_N(_res);
+	ROW_VALUES(_row) = (db_val_t*)pkg_malloc(len);
+	if (!ROW_VALUES(_row)) {
+		LM_ERR("no private memory left\n");
+		return -1;
+	}
+	LM_DBG("allocate %d bytes for row values at %p\n", len, ROW_VALUES(_row));
+
+	memset(ROW_VALUES(_row), 0, len);
+	/* Save the number of columns in the ROW structure */
+	ROW_N(_row) = RES_COL_N(_res);
+
+	return 0;
+}

+ 10 - 0
lib/srdb1/db_row.h

@@ -35,6 +35,7 @@
 #define DB_ROW_H
 
 #include "db_val.h"
+#include "db_res.h"
 
 
 /**
@@ -63,4 +64,13 @@ typedef struct db_row {
  */
 inline int db_free_row(db_row_t* _r);
 
+
+/**
+ * Allocate memory for row value.
+ * \param _res result set
+ * \param _row filled row
+ * \return zero on success, negative on errors
+ */
+inline int db_allocate_row(const db_res_t* _res, db_row_t* _row);
+
 #endif /* DB_ROW_H */