* Convert a row from result into db API representation */
| 39 | * Convert a row from result into db API representation |
| 40 | */ |
| 41 | int db_sqlite_convert_row(const db_con_t* _h, db_res_t* _res, db_row_t* _r) |
| 42 | { |
| 43 | int col,len; |
| 44 | db_val_t* _v; |
| 45 | const char* db_value; |
| 46 | |
| 47 | if ((!_h) || (!_res) || (!_r)) { |
| 48 | LM_ERR("invalid parameter value\n"); |
| 49 | return -1; |
| 50 | } |
| 51 | |
| 52 | if (!CON_SQLITE_PS(_h)) { |
| 53 | LM_ERR("conn has no prepared statement! sqlite requires one\n"); |
| 54 | return -1; |
| 55 | } |
| 56 | |
| 57 | /* Save the number of columns in the ROW structure */ |
| 58 | ROW_N(_r) = RES_COL_N(_res); |
| 59 | |
| 60 | for(col=0; col < RES_COL_N(_res); col++) { |
| 61 | _v = &(ROW_VALUES(_r)[col]); |
| 62 | |
| 63 | if (sqlite3_column_type(CON_SQLITE_PS(_h), col) == SQLITE_NULL) { |
| 64 | VAL_NULL(_v) = 1; |
| 65 | VAL_TYPE(_v) = RES_TYPES(_res)[col]; |
| 66 | continue; |
| 67 | } |
| 68 | |
| 69 | switch (RES_TYPES(_res)[col]) { |
| 70 | case DB_BITMAP: |
| 71 | /* value considered to be int; but stored as bigint; |
| 72 | * can be used as VAL_INT() to be called |
| 73 | * also can be used as VAL_BIGINT() */ |
| 74 | VAL_BIGINT(_v) = sqlite3_column_int64(CON_SQLITE_PS(_h), col); |
| 75 | VAL_TYPE(_v) = DB_INT; |
| 76 | |
| 77 | break; |
| 78 | case DB_INT: |
| 79 | VAL_BIGINT(_v) =sqlite3_column_int64(CON_SQLITE_PS(_h), col); |
| 80 | VAL_TYPE(_v) = DB_INT; |
| 81 | |
| 82 | break; |
| 83 | case DB_BIGINT: |
| 84 | VAL_BIGINT(_v) = sqlite3_column_int64(CON_SQLITE_PS(_h), col); |
| 85 | VAL_TYPE(_v) = DB_BIGINT; |
| 86 | |
| 87 | break; |
| 88 | case DB_DATETIME: |
| 89 | db_value = (char *)sqlite3_column_text(CON_SQLITE_PS(_h), col); |
| 90 | if (db_str2time(db_value, &VAL_TIME(_v)) < 0) { |
| 91 | LM_ERR("error while converting datetime value from string\n"); |
| 92 | return -1; |
| 93 | } |
| 94 | VAL_TYPE(_v) = DB_DATETIME; |
| 95 | break; |
| 96 | case DB_DOUBLE: |
| 97 | VAL_DOUBLE(_v) = sqlite3_column_double(CON_SQLITE_PS(_h), col); |
| 98 | VAL_TYPE(_v) = DB_DOUBLE; |
no test coverage detected