<?php
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: google/spanner/v1/transaction.proto

namespace Google\Cloud\Spanner\V1;

use Google\Protobuf\Internal\GPBType;
use Google\Protobuf\Internal\RepeatedField;
use Google\Protobuf\Internal\GPBUtil;

/**
 * Message type to initiate a read-only transaction.
 *
 * Generated from protobuf message <code>google.spanner.v1.TransactionOptions.ReadOnly</code>
 */
class TransactionOptions_ReadOnly extends \Google\Protobuf\Internal\Message
{
    /**
     * If true, the Cloud Spanner-selected read timestamp is included in
     * the [Transaction][google.spanner.v1.Transaction] message that describes the transaction.
     *
     * Generated from protobuf field <code>bool return_read_timestamp = 6;</code>
     */
    private $return_read_timestamp = false;
    protected $timestamp_bound;

    public function __construct() {
        \GPBMetadata\Google\Spanner\V1\Transaction::initOnce();
        parent::__construct();
    }

    /**
     * Read at a timestamp where all previously committed transactions
     * are visible.
     *
     * Generated from protobuf field <code>bool strong = 1;</code>
     * @return bool
     */
    public function getStrong()
    {
        return $this->readOneof(1);
    }

    /**
     * Read at a timestamp where all previously committed transactions
     * are visible.
     *
     * Generated from protobuf field <code>bool strong = 1;</code>
     * @param bool $var
     * @return $this
     */
    public function setStrong($var)
    {
        GPBUtil::checkBool($var);
        $this->writeOneof(1, $var);

        return $this;
    }

    /**
     * Executes all reads at a timestamp >= `min_read_timestamp`.
     * This is useful for requesting fresher data than some previous
     * read, or data that is fresh enough to observe the effects of some
     * previously committed transaction whose timestamp is known.
     * Note that this option can only be used in single-use transactions.
     * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
     * Example: `"2014-10-02T15:01:23.045123456Z"`.
     *
     * Generated from protobuf field <code>.google.protobuf.Timestamp min_read_timestamp = 2;</code>
     * @return \Google\Protobuf\Timestamp
     */
    public function getMinReadTimestamp()
    {
        return $this->readOneof(2);
    }

    /**
     * Executes all reads at a timestamp >= `min_read_timestamp`.
     * This is useful for requesting fresher data than some previous
     * read, or data that is fresh enough to observe the effects of some
     * previously committed transaction whose timestamp is known.
     * Note that this option can only be used in single-use transactions.
     * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
     * Example: `"2014-10-02T15:01:23.045123456Z"`.
     *
     * Generated from protobuf field <code>.google.protobuf.Timestamp min_read_timestamp = 2;</code>
     * @param \Google\Protobuf\Timestamp $var
     * @return $this
     */
    public function setMinReadTimestamp($var)
    {
        GPBUtil::checkMessage($var, \Google\Protobuf\Timestamp::class);
        $this->writeOneof(2, $var);

        return $this;
    }

    /**
     * Read data at a timestamp >= `NOW - max_staleness`
     * seconds. Guarantees that all writes that have committed more
     * than the specified number of seconds ago are visible. Because
     * Cloud Spanner chooses the exact timestamp, this mode works even if
     * the client's local clock is substantially skewed from Cloud Spanner
     * commit timestamps.
     * Useful for reading the freshest data available at a nearby
     * replica, while bounding the possible staleness if the local
     * replica has fallen behind.
     * Note that this option can only be used in single-use
     * transactions.
     *
     * Generated from protobuf field <code>.google.protobuf.Duration max_staleness = 3;</code>
     * @return \Google\Protobuf\Duration
     */
    public function getMaxStaleness()
    {
        return $this->readOneof(3);
    }

    /**
     * Read data at a timestamp >= `NOW - max_staleness`
     * seconds. Guarantees that all writes that have committed more
     * than the specified number of seconds ago are visible. Because
     * Cloud Spanner chooses the exact timestamp, this mode works even if
     * the client's local clock is substantially skewed from Cloud Spanner
     * commit timestamps.
     * Useful for reading the freshest data available at a nearby
     * replica, while bounding the possible staleness if the local
     * replica has fallen behind.
     * Note that this option can only be used in single-use
     * transactions.
     *
     * Generated from protobuf field <code>.google.protobuf.Duration max_staleness = 3;</code>
     * @param \Google\Protobuf\Duration $var
     * @return $this
     */
    public function setMaxStaleness($var)
    {
        GPBUtil::checkMessage($var, \Google\Protobuf\Duration::class);
        $this->writeOneof(3, $var);

        return $this;
    }

    /**
     * Executes all reads at the given timestamp. Unlike other modes,
     * reads at a specific timestamp are repeatable; the same read at
     * the same timestamp always returns the same data. If the
     * timestamp is in the future, the read will block until the
     * specified timestamp, modulo the read's deadline.
     * Useful for large scale consistent reads such as mapreduces, or
     * for coordinating many reads against a consistent snapshot of the
     * data.
     * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
     * Example: `"2014-10-02T15:01:23.045123456Z"`.
     *
     * Generated from protobuf field <code>.google.protobuf.Timestamp read_timestamp = 4;</code>
     * @return \Google\Protobuf\Timestamp
     */
    public function getReadTimestamp()
    {
        return $this->readOneof(4);
    }

    /**
     * Executes all reads at the given timestamp. Unlike other modes,
     * reads at a specific timestamp are repeatable; the same read at
     * the same timestamp always returns the same data. If the
     * timestamp is in the future, the read will block until the
     * specified timestamp, modulo the read's deadline.
     * Useful for large scale consistent reads such as mapreduces, or
     * for coordinating many reads against a consistent snapshot of the
     * data.
     * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
     * Example: `"2014-10-02T15:01:23.045123456Z"`.
     *
     * Generated from protobuf field <code>.google.protobuf.Timestamp read_timestamp = 4;</code>
     * @param \Google\Protobuf\Timestamp $var
     * @return $this
     */
    public function setReadTimestamp($var)
    {
        GPBUtil::checkMessage($var, \Google\Protobuf\Timestamp::class);
        $this->writeOneof(4, $var);

        return $this;
    }

    /**
     * Executes all reads at a timestamp that is `exact_staleness`
     * old. The timestamp is chosen soon after the read is started.
     * Guarantees that all writes that have committed more than the
     * specified number of seconds ago are visible. Because Cloud Spanner
     * chooses the exact timestamp, this mode works even if the client's
     * local clock is substantially skewed from Cloud Spanner commit
     * timestamps.
     * Useful for reading at nearby replicas without the distributed
     * timestamp negotiation overhead of `max_staleness`.
     *
     * Generated from protobuf field <code>.google.protobuf.Duration exact_staleness = 5;</code>
     * @return \Google\Protobuf\Duration
     */
    public function getExactStaleness()
    {
        return $this->readOneof(5);
    }

    /**
     * Executes all reads at a timestamp that is `exact_staleness`
     * old. The timestamp is chosen soon after the read is started.
     * Guarantees that all writes that have committed more than the
     * specified number of seconds ago are visible. Because Cloud Spanner
     * chooses the exact timestamp, this mode works even if the client's
     * local clock is substantially skewed from Cloud Spanner commit
     * timestamps.
     * Useful for reading at nearby replicas without the distributed
     * timestamp negotiation overhead of `max_staleness`.
     *
     * Generated from protobuf field <code>.google.protobuf.Duration exact_staleness = 5;</code>
     * @param \Google\Protobuf\Duration $var
     * @return $this
     */
    public function setExactStaleness($var)
    {
        GPBUtil::checkMessage($var, \Google\Protobuf\Duration::class);
        $this->writeOneof(5, $var);

        return $this;
    }

    /**
     * If true, the Cloud Spanner-selected read timestamp is included in
     * the [Transaction][google.spanner.v1.Transaction] message that describes the transaction.
     *
     * Generated from protobuf field <code>bool return_read_timestamp = 6;</code>
     * @return bool
     */
    public function getReturnReadTimestamp()
    {
        return $this->return_read_timestamp;
    }

    /**
     * If true, the Cloud Spanner-selected read timestamp is included in
     * the [Transaction][google.spanner.v1.Transaction] message that describes the transaction.
     *
     * Generated from protobuf field <code>bool return_read_timestamp = 6;</code>
     * @param bool $var
     * @return $this
     */
    public function setReturnReadTimestamp($var)
    {
        GPBUtil::checkBool($var);
        $this->return_read_timestamp = $var;

        return $this;
    }

    /**
     * @return string
     */
    public function getTimestampBound()
    {
        return $this->whichOneof("timestamp_bound");
    }

}

