/* grid = ediMakeGrid("[ \ { id: '1', country: 'Australia' }, \ { id: '2', country: 'China' }, \ ]"); */ EdiGrid *ediMakeGrid(cchar *json) { MprHash *obj, *row; MprKey *kp; EdiGrid *grid; EdiRec *rec; int r, nrows, nfields; if ((obj = mprDeserialize(json)) == 0) { return 0; } nrows = mprGetHashLength(obj); if ((grid = ediCreateBareGrid(NULL, "", nrows)) == 0) { return 0; } for (r = 0, ITERATE_KEYS(obj, kp)) { if (kp->type != MPR_JSON_OBJ) { continue; } row = (MprHash*) kp->data; nfields = mprGetHashLength(row); if ((rec = ediCreateBareRec(NULL, "", nfields)) == 0) { return 0; } if (ediSetFields(rec, row) == 0) { return 0; } grid->records[r++] = rec; } return 0; }
static EdiGrid *mdbReadWhere(Edi *edi, cchar *tableName, cchar *columnName, cchar *operation, cchar *value) { Mdb *mdb; EdiGrid *grid; MdbTable *table; MdbCol *col; MdbRow *row; int nrows, next, op, r, count; assert(edi); assert(tableName && *tableName); mdb = (Mdb*) edi; lock(mdb); if ((table = lookupTable(mdb, tableName)) == 0) { unlock(mdb); return 0; } nrows = mprGetListLength(table->rows); if ((grid = ediCreateBareGrid(edi, tableName, nrows)) == 0) { unlock(mdb); return 0; } grid->flags = EDI_GRID_READ_ONLY; if (columnName) { if ((col = lookupColumn(table, columnName)) == 0) { unlock(mdb); return 0; } if ((op = parseOperation(operation)) < 0) { unlock(mdb); return 0; } if (col->flags & EDI_INDEX && (op & OP_EQ)) { if ((r = lookupRow(table, value)) != 0) { row = getRow(table, r); grid->records[0] = createRecFromRow(edi, row); grid->nrecords = 1; } } else { grid->nrecords = count = 0; for (ITERATE_ITEMS(table->rows, row, next)) { if (!matchRow(col, row->fields[col->cid], op, value)) { continue; } grid->records[count++] = createRecFromRow(edi, row); grid->nrecords = count; } } } else { for (ITERATE_ITEMS(table->rows, row, next)) {
static EdiGrid *hashToGrid(MprHash *hash) { EdiGrid *grid; EdiRec *rec; cchar *data; char key[8]; int i, len; len = mprGetHashLength(hash); grid = ediCreateBareGrid(NULL, "grid", len); for (i = 0; i < len; i++) { data = mprLookupKey(hash, itosbuf(key, sizeof(key), i, 10)); grid->records[i] = rec = ediCreateBareRec(NULL, "grid", 1); rec->fields[0].name = sclone("value"); rec->fields[0].type = EDI_TYPE_STRING; rec->fields[0].value = data; } return grid; }