package org.basex.query.up.primitives;
import static org.basex.query.util.Err.*;
import org.basex.core.Context;
import org.basex.core.cmd.Optimize;
import org.basex.core.cmd.OptimizeAll;
import org.basex.data.Data;
import org.basex.query.QueryException;
import org.basex.util.InputInfo;
/**
* Update primitive for the optimize function.
*
* @author BaseX Team 2005-12, BSD License
* @author Dimitar Popov
*/
public final class DBOptimize extends UpdatePrimitive {
/** Database context. */
private final Context ctx;
/** Flag to optimize all database structures. */
private boolean all;
/**
* Constructor.
* @param d data
* @param c database context
* @param a optimize all database structures flag
* @param info input info
*/
public DBOptimize(final Data d, final Context c, final boolean a,
final InputInfo info) {
super(PrimitiveType.DBOPTIMIZE, -1, d, info);
ctx = c;
all = a;
}
@Override
public void merge(final UpdatePrimitive p) {
final DBOptimize o = (DBOptimize) p;
if(o.all) all = o.all;
}
@Override
public void apply() throws QueryException {
try {
if(all) OptimizeAll.optimizeAll(data, ctx, null);
else Optimize.optimize(data);
} catch(final Exception ex) {
DBERR.thrw(input, ex);
}
}
@Override
public int size() {
return 1;
}
}