static EdiField mdbReadField(Edi *edi, cchar *tableName, cchar *key, cchar *fieldName) { Mdb *mdb; MdbTable *table; MdbCol *col; MdbRow *row; EdiField field, err; int r; mdb = (Mdb*) edi; lock(mdb); err.valid = 0; if ((table = lookupTable(mdb, tableName)) == 0) { unlock(mdb); return err; } if ((col = lookupColumn(table, fieldName)) == 0) { unlock(mdb); return err; } if ((r = lookupRow(table, key)) < 0) { unlock(mdb); return err; } row = mprGetItem(table->rows, r); field = makeFieldFromRow(row, col); unlock(mdb); return field; }
static int mdbDeleteRow(Edi *edi, cchar *tableName, cchar *key) { Mdb *mdb; MdbTable *table; int r, rc; mprAssert(edi); mprAssert(tableName && *tableName); mprAssert(key && *key); mdb = (Mdb*) edi; lock(mdb); if ((table = lookupTable(mdb, tableName)) == 0) { unlock(mdb); return MPR_ERR_CANT_FIND; } if ((r = lookupRow(table, key)) < 0) { unlock(mdb); return MPR_ERR_CANT_FIND; } rc = mprRemoveItemAtPos(table->rows, r); if (table->index) { mprRemoveKey(table->index, key); } autoSave(mdb, table); unlock(mdb); return rc; }
static EdiRec *mdbReadRec(Edi *edi, cchar *tableName, cchar *key) { Mdb *mdb; MdbTable *table; MdbRow *row; EdiRec *rec; int r; mdb = (Mdb*) edi; rec = 0; lock(mdb); if ((table = lookupTable(mdb, tableName)) == 0) { unlock(mdb); return 0; } if ((r = lookupRow(table, key)) < 0) { unlock(mdb); return 0; } if ((row = mprGetItem(table->rows, r)) != 0) { rec = createRecFromRow(edi, row); } unlock(mdb); return rec; }
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)) {