/** * Executes the command, prints the result to the specified output stream and returns a success * flag. * * @param ctx database context * @param os output stream * @return success flag. The {@link #info()} method returns information on a potential exception */ private boolean exec(final Context ctx, final OutputStream os) { // check if data reference is available final Data dt = ctx.data(); if (dt == null && data) return error(NO_DB_OPENED); // check permissions if (!ctx.perm(perm, dt != null ? dt.meta : null)) return error(PERM_REQUIRED_X, perm); // set updating flag updating = updating(ctx); try { // register process ctx.register(this); // run command and return success flag return run(ctx, os); } finally { // guarantee that process will be unregistered ctx.unregister(this); } }
/** * Closes the specified database if it is currently opened and only pinned once. * * @param ctx database context * @param db database to be closed * @return closed flag */ protected static boolean close(final Context ctx, final String db) { final boolean close = ctx.data() != null && db.equals(ctx.data().meta.name) && ctx.dbs.pins(db) == 1; return close && new Close().run(ctx); }