static void esql_mysac_row_init(Esql_Row *r, MYSAC_ROW *row) { MYSAC_RES *res; MYSAC_ROWS *rows; struct mysac_list_head *l; Eina_Value *sval; unsigned int i, cols; res = r->res->backend.res; rows = res->cr; l = res->data.next; cols = res->nb_cols; sval = &(r->value); eina_value_struct_setup(sval, r->res->desc); for (i = 0; i < cols; i++, l = l->next, rows = mysac_container_of(l, MYSAC_ROWS, link)) { Eina_Value val; const Eina_Value_Struct_Member *m = r->res->desc->members + i; switch (res->cols[i].type) { case MYSQL_TYPE_TIME: eina_value_setup(&val, EINA_VALUE_TYPE_DOUBLE); eina_value_set(&val, (double)row[i].tv.tv_sec + (double)((double)row[i].tv.tv_usec / (double) 1000000)); break; case MYSQL_TYPE_YEAR: case MYSQL_TYPE_TIMESTAMP: case MYSQL_TYPE_DATETIME: case MYSQL_TYPE_DATE: eina_value_setup(&val, EINA_VALUE_TYPE_TIMESTAMP); eina_value_set(&val, (long)mktime(row[i].tm)); break; case MYSQL_TYPE_STRING: case MYSQL_TYPE_VARCHAR: case MYSQL_TYPE_VAR_STRING: eina_value_setup(&val, EINA_VALUE_TYPE_STRING); eina_value_set(&val, row[i].string); //cell->len = rows->lengths[i]; break; case MYSQL_TYPE_TINY_BLOB: case MYSQL_TYPE_MEDIUM_BLOB: case MYSQL_TYPE_LONG_BLOB: case MYSQL_TYPE_BLOB: { Eina_Value_Blob blob; blob.ops = NULL; blob.memory = row[i].string; blob.size = rows->lengths[i]; eina_value_setup(&val, EINA_VALUE_TYPE_BLOB); eina_value_set(&val, blob); break; } case MYSQL_TYPE_TINY: eina_value_setup(&val, EINA_VALUE_TYPE_CHAR); eina_value_set(&val, row[i].stiny); break; case MYSQL_TYPE_SHORT: eina_value_setup(&val, EINA_VALUE_TYPE_SHORT); eina_value_set(&val, row[i].ssmall); break; case MYSQL_TYPE_LONG: case MYSQL_TYPE_INT24: eina_value_setup(&val, EINA_VALUE_TYPE_LONG); eina_value_set(&val, row[i].sint); break; case MYSQL_TYPE_DECIMAL: case MYSQL_TYPE_NEWDECIMAL: case MYSQL_TYPE_LONGLONG: eina_value_setup(&val, EINA_VALUE_TYPE_INT64); eina_value_set(&val, row[i].sbigint); break; case MYSQL_TYPE_FLOAT: eina_value_setup(&val, EINA_VALUE_TYPE_FLOAT); eina_value_set(&val, row[i].mfloat); break; case MYSQL_TYPE_DOUBLE: eina_value_setup(&val, EINA_VALUE_TYPE_DOUBLE); eina_value_set(&val, row[i].mdouble); break; default: ERR("FIXME: Got unknown column type %u!", res->cols[i].type); break; } eina_value_struct_member_value_set(sval, m, &val); eina_value_flush(&val); } }
static void esql_mysac_row_init(Esql_Row *r) { MYSAC_RES *res; MYSAC_ROW *row; MYSAC_ROWS *rows; struct mysac_list_head *l; Esql_Cell *cell; int i, cols; res = r->res->backend.res; rows = res->cr; l = res->data.next; row = r->backend.row; cols = res->nb_cols; for (i = 0; i < cols; i++, l = l->next, rows = mysac_container_of(l, MYSAC_ROWS, link)) { cell = calloc(1, sizeof(Esql_Cell)); EINA_SAFETY_ON_NULL_RETURN(cell); cell->row = r; cell->colname = res->cols[i].name; switch (res->cols[i].type) { case MYSQL_TYPE_TIME: cell->type = ESQL_CELL_TYPE_TIME; memcpy(&cell->value.tv, &row[i].tv, sizeof(struct timeval)); break; case MYSQL_TYPE_YEAR: case MYSQL_TYPE_TIMESTAMP: case MYSQL_TYPE_DATETIME: case MYSQL_TYPE_DATE: cell->type = ESQL_CELL_TYPE_TIMESTAMP; memcpy(&cell->value.tm, row[i].tm, sizeof(struct tm)); break; case MYSQL_TYPE_STRING: case MYSQL_TYPE_VARCHAR: case MYSQL_TYPE_VAR_STRING: cell->type = ESQL_CELL_TYPE_STRING; cell->value.string = row[i].string; cell->len = rows->lengths[i]; break; case MYSQL_TYPE_TINY_BLOB: case MYSQL_TYPE_MEDIUM_BLOB: case MYSQL_TYPE_LONG_BLOB: case MYSQL_TYPE_BLOB: cell->type = ESQL_CELL_TYPE_BLOB; cell->value.blob = (unsigned char*)row[i].string; cell->len = rows->lengths[i]; break; case MYSQL_TYPE_TINY: cell->type = ESQL_CELL_TYPE_TINYINT; cell->value.c = row[i].stiny; break; case MYSQL_TYPE_SHORT: cell->type = ESQL_CELL_TYPE_SHORT; cell->value.s = row[i].ssmall; break; case MYSQL_TYPE_LONG: case MYSQL_TYPE_INT24: cell->type = ESQL_CELL_TYPE_LONG; cell->value.i = row[i].sint; break; case MYSQL_TYPE_LONGLONG: cell->type = ESQL_CELL_TYPE_LONGLONG; cell->value.l = row[i].sbigint; break; case MYSQL_TYPE_FLOAT: cell->type = ESQL_CELL_TYPE_FLOAT; cell->value.f = row[i].mfloat; break; case MYSQL_TYPE_DOUBLE: cell->type = ESQL_CELL_TYPE_DOUBLE; cell->value.d = row[i].mdouble; break; default: ERR("FIXME: Got unknown column type %u!", res->cols[i].type); break; } r->cells = eina_inlist_append(r->cells, EINA_INLIST_GET(cell)); } }