package org.basex.core.cmd;
import static org.basex.core.Text.*;
import java.io.IOException;
import org.basex.core.Context;
import org.basex.core.Command;
import org.basex.data.Data;
import org.basex.util.Util;
/**
* Evaluates the 'close' command and closes the current database.
*
* @author BaseX Team 2005-12, BSD License
* @author Christian Gruen
*/
public final class Close extends Command {
/**
* Default constructor.
*/
public Close() {
super(STANDARD);
}
@Override
protected boolean run() {
final Data data = context.data();
if(data == null) return true;
try {
close(data, context);
context.closeDB();
return info(DB_CLOSED_X, data.meta.name);
} catch(final IOException ex) {
Util.debug(ex);
return error(DB_NOT_CLOSED_X, data.meta.name);
}
}
/**
* Closes the specified database.
* @param data data reference
* @param ctx database context
* @throws IOException I/O exception
*/
public static synchronized void close(final Data data, final Context ctx)
throws IOException {
if(ctx.unpin(data)) data.close();
}
}