package org.basex.query.up.primitives; import static org.basex.query.util.Err.*; import org.basex.data.Data; import org.basex.query.QueryException; import org.basex.util.InputInfo; import org.basex.util.Util; /** * Replace value primitive. * * @author BaseX Team 2005-12, BSD License * @author Lukas Kircher */ public final class ReplaceValue extends ValueUpdate { /** New value. */ private final byte[] value; /** * Constructor. * @param p pre * @param d data * @param i input info * @param v new value */ public ReplaceValue(final int p, final Data d, final InputInfo i, final byte[] v) { super(PrimitiveType.REPLACEVALUE, p, d, i); value = v; } @Override public void apply() { final int kind = data.kind(pre); if(kind == Data.TEXT && value.length == 0) { // empty text nodes must be removed data.delete(pre); } else { data.update(pre, kind, value); } } @Override public void merge(final UpdatePrimitive p) throws QueryException { UPMULTREPV.thrw(input, targetNode()); } @Override public int size() { return 1; } @Override public String toString() { return Util.info("%[%, %]", Util.name(this), targetNode(), value); } }