浏览代码

- handling of DB_BITMAP added

Jan Janak 22 年之前
父节点
当前提交
c5e59559d6
共有 2 个文件被更改,包括 32 次插入9 次删除
  1. 4 0
      modules/db_mysql/db_res.c
  2. 28 9
      modules/db_mysql/db_val.c

+ 4 - 0
modules/db_mysql/db_res.c

@@ -98,6 +98,10 @@ static inline int get_columns(db_con_t* _h, db_res_t* _r)
 			RES_TYPES(_r)[i] = DB_BLOB;
 			break;
 
+		case FIELD_TYPE_SET:
+			RES_TYPES(_r)[i] = DB_BITMAP;
+			break;
+
 		default:
 			RES_TYPES(_r)[i] = DB_STRING;
 			break;

+ 28 - 9
modules/db_mysql/db_val.c

@@ -163,11 +163,21 @@ int str2val(db_type_t _t, db_val_t* _v, const char* _s, int _l)
 			return 0;
 		}
 		break;
+
+	case DB_BITMAP:
+		if (str2int(_s, &VAL_INT(_v)) < 0) {
+			LOG(L_ERR, "str2val(): Error while converting bitmap value from string\n");
+			return -3;
+		} else {
+			VAL_TYPE(_v) = DB_BITMAP;
+			return 0;
+		}
+		break;
 	
 	case DB_DOUBLE:
 		if (str2double(_s, &VAL_DOUBLE(_v)) < 0) {
 			LOG(L_ERR, "str2val(): Error while converting double value from string\n");
-			return -3;
+			return -4;
 		} else {
 			VAL_TYPE(_v) = DB_DOUBLE;
 			return 0;
@@ -188,7 +198,7 @@ int str2val(db_type_t _t, db_val_t* _v, const char* _s, int _l)
 	case DB_DATETIME:
 		if (str2time(_s, &VAL_TIME(_v)) < 0) {
 			LOG(L_ERR, "str2val(): Error while converting datetime value from string\n");
-			return -4;
+			return -5;
 		} else {
 			VAL_TYPE(_v) = DB_DATETIME;
 			return 0;
@@ -201,7 +211,7 @@ int str2val(db_type_t _t, db_val_t* _v, const char* _s, int _l)
 		VAL_TYPE(_v) = DB_BLOB;
 		return 0;
 	}
-	return -5;
+	return -6;
 }
 
 
@@ -234,10 +244,19 @@ int val2str(db_val_t* _v, char* _s, int* _len)
 		}
 		break;
 
+	case DB_BITMAP:
+		if (int2str(VAL_BITMAP(_v), _s, _len) < 0) {
+			LOG(L_ERR, "val2str(): Error while converting string to int\n");
+			return -3;
+		} else {
+			return 0;
+		}
+		break;
+
 	case DB_DOUBLE:
 		if (double2str(VAL_DOUBLE(_v), _s, _len) < 0) {
 			LOG(L_ERR, "val2str(): Error while converting string to double\n");
-			return -3;
+			return -4;
 		} else {
 			return 0;
 		}
@@ -247,7 +266,7 @@ int val2str(db_val_t* _v, char* _s, int* _len)
 		l = strlen(VAL_STRING(_v));
 		if (*_len < (l + 3)) {
 			LOG(L_ERR, "val2str(): Destination buffer too short\n");
-			return -4;
+			return -5;
 		} else {
 			*_s++ = '\'';
 			memcpy(_s, VAL_STRING(_v), l);
@@ -262,7 +281,7 @@ int val2str(db_val_t* _v, char* _s, int* _len)
 		l = VAL_STR(_v).len;
 		if (*_len < (l + 3)) {
 			LOG(L_ERR, "val2str(): Destination buffer too short\n");
-			return -5;
+			return -6;
 		} else {
 			*_s++ = '\'';
 			memcpy(_s, VAL_STR(_v).s, l);
@@ -276,7 +295,7 @@ int val2str(db_val_t* _v, char* _s, int* _len)
 	case DB_DATETIME:
 		if (time2str(VAL_TIME(_v), _s, _len) < 0) {
 			LOG(L_ERR, "val2str(): Error while converting string to time_t\n");
-			return -6;
+			return -7;
 		} else {
 			return 0;
 		}
@@ -286,7 +305,7 @@ int val2str(db_val_t* _v, char* _s, int* _len)
 		l = VAL_BLOB(_v).len;
 		if (*_len < (l * 2 + 3)) {
 			LOG(L_ERR, "val2str(): Destination buffer too short\n");
-			return -7;
+			return -8;
 		} else {
 			old_s = _s;
 			*_s++ = '\'';
@@ -300,7 +319,7 @@ int val2str(db_val_t* _v, char* _s, int* _len)
 
 	default:
 		DBG("val2str(): Unknow data type\n");
-		return -7;
+		return -9;
 	}
 	/*return -8; --not reached*/
 }