// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package io.v.syncbase.v23.services.syncbase.nosql;

import java.lang.reflect.Type;

import io.v.v23.context.VContext;
import io.v.v23.verror.VException;

/**
 * A handle for a single row in a {@link Table}.
 */
public interface Row {
    /**
     * Returns the primary key for this row.
     */
    String key();

    /**
     * Returns the full (i.e., object) name of this row.
     */
    String fullName();

    /**
     * Returns {@code true} iff this row exists and the caller has permissions
     * to access it.
     *
     * @param  ctx        Vanadium context
     * @throws VException if the row's existence couldn't be determined
     */
    boolean exists(VContext ctx) throws VException;

    /**
     * Deletes this row.
     *
     * @param  ctx        Vanadium context
     * @throws VException if the row couldn't be deleted
     */
    void delete(VContext ctx) throws VException;

    /**
     * Returns the value for this row.
     *
     * @param  ctx        Vanadium context
     * @throws VException if the value couldn't be retrieved
     */
    Object get(VContext ctx, Type type) throws VException;

    /**
     * Writes the given value for this row.
     *
     * @param  ctx        Vanadium context
     * @param  value      value to write
     * @throws VException if the value couldn't be written
     */
    void put(VContext ctx, Object value, Type type) throws VException;
}