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 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; }
if (col->flags & EDI_INDEX && (op & OP_EQ)) { if ((r = lookupRow(table, value)) != 0) { row = getRow(table, r); grid->records[0] = createRecFromRow(edi, row); } } else { for (ITERATE_ITEMS(table->rows, row, next)) { if (!matchRow(col, row->fields[col->cid], op, value)) { continue; } grid->records[next - 1] = createRecFromRow(edi, row); } } } else { for (ITERATE_ITEMS(table->rows, row, next)) { grid->records[next - 1] = createRecFromRow(edi, row); } } unlock(mdb); return grid; } static int mdbRemoveColumn(Edi *edi, cchar *tableName, cchar *columnName) { Mdb *mdb; MdbTable *table; MdbSchema *schema; MdbCol *col; int c;