src/jdk.incubator.adba/share/classes/jdk/incubator/sql2/SqlBlob.java
author lancea
Sat, 20 Oct 2018 08:17:38 -0400
branchJDK-8188051-branch
changeset 56997 c9cbac2979fb
parent 56824 62e92191354d
permissions -rw-r--r--
JDK-8188051-branch October 20 ABDA updates
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
     1
/*
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents: 56380
diff changeset
     2
 * Copyright (c)  2017, 2018, Oracle and/or its affiliates. All rights reserved.
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
     4
 *
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    10
 *
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    15
 * accompanied this code).
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    16
 *
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    20
 *
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    23
 * questions.
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    24
 */
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    25
package jdk.incubator.sql2;
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    26
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    27
import java.nio.channels.AsynchronousByteChannel;
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    28
import java.util.concurrent.CompletionStage;
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    29
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    30
/**
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    31
 * A reference to a BINARY LARGE OBJECT in the attached database.
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    32
 *
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    33
 */
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    34
public interface SqlBlob extends AutoCloseable {
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    35
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    36
  /**
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    37
   * Return an {@link Operation} that will release the temporary resources
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
    38
   * associated with this {@code SqlBlob}.
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    39
   *
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    40
   * @return an {@link Operation} that will release the temporary resources
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
    41
   * associated with this {@code SqlBlob}.
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    42
   */
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    43
  public Operation<Void> closeOperation();
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    44
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
    45
  /**
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
    46
   * {@inheritDoc}
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
    47
   */
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    48
  @Override
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    49
  public default void close() {
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    50
    this.closeOperation().submit();
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    51
  }
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    52
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    53
  /**
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
    54
   * Return a {@link Operation} that fetches the position of this {@code SqlBlob}.
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    55
   * The position is 1-based. Position 0 is immediately before the first byte in
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
    56
   * the {@code SqlBlob}. Position 1 is the first byte in the {@code SqlBlob}, etc.
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
    57
   * Position {@link length()} is the last byte in the {@code SqlBlob}.
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    58
   *
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    59
   * Position is between 0 and length + 1.
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    60
   *
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
    61
   * @return a {@link Operation} that returns the position of this {@code SqlBlob}
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
    62
   * @throws IllegalStateException if the {@link Session} that created this
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
    63
   * {@code SqlBlob} is closed.
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    64
   */
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    65
  public Operation<Long> getPositionOperation();
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    66
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    67
  /**
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
    68
   * Get the position of this {@code SqlBlob}. The position is 1-based. Position 0
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
    69
   * is immediately before the first byte in the {@code SqlBlob}. Position 1 is the
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
    70
   * first byte in the {@code SqlBlob}, etc. Position {@link length()} is the last
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
    71
   * byte in the {@code SqlBlob}.
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    72
   *
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    73
   * Position is between 0 and length + 1.
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    74
   *
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    75
   * ISSUE: Should position be 1-based as SQL seems to do or 0-based as Java
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    76
   * does?
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    77
   *
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
    78
   * @return a future which value is the 1-based position of this {@code SqlBlob}
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
    79
   * @throws IllegalStateException if the {@link Session} that created this
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
    80
   * {@code SqlBlob} is closed.
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    81
   */
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    82
  public default CompletionStage<Long> getPosition() {
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    83
    return getPositionOperation().submit().getCompletionStage();
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    84
  }
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    85
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    86
  /**
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
    87
   * Return a {@link Operation} that fetches the length of this {@code SqlBlob}.
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    88
   *
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
    89
   * @return a {@link Operation} that returns the length of this {@code SqlBlob}
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
    90
   * @throws IllegalStateException if the {@link Session} that created this
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
    91
   * {@code SqlBlob} is closed.
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    92
   */
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    93
  public Operation<Long> lengthOperation();
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    94
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    95
  /**
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
    96
   * Get the length of this {@code SqlBlob}.
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
    97
   *
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
    98
   * @return a future which value is the number of bytes in this {@code SqlBlob}
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
    99
   * @throws IllegalStateException if the {@link Session} that created this
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   100
   * {@code SqlBlob} is closed.
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   101
   */
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   102
  public default CompletionStage<Long> length() {
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   103
    return lengthOperation().submit().getCompletionStage();
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   104
  }
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   105
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   106
  /**
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   107
   * Return a {@link Operation} that sets the position of this {@code SqlBlob}. If
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   108
   * offset exceeds the length of this {@code SqlBlob} set position to the length +
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   109
   * 1 of this {@code SqlBlob}, ie one past the last byte.
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   110
   *
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   111
   * @param offset a non-negative number
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   112
   * @return a {@link Operation} that sets the position of this {@code SqlBlob}
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   113
   * @throws IllegalArgumentException if {@code offset} is less than 0
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   114
   * @throws IllegalStateException if the {@link Session} that created this
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   115
   * {@code SqlBlob} is closed.
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   116
   */
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   117
  public Operation<Long> setPositionOperation(long offset);
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   118
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   119
  /**
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   120
   * Set the position of this {@code SqlBlob}. If offset exceeds the length of this
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   121
   * {@code SqlBlob} set position to the length + 1 of this {@code SqlBlob}, ie one
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   122
   * past the last byte.
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   123
   *
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   124
   * @param offset the 1-based position to set
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   125
   * @return this {@code SqlBlob}
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   126
   * @throws IllegalArgumentException if offset is less than 0
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   127
   * @throws IllegalStateException if the {@link Session} that created this
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   128
   * {@code SqlBlob} is closed.
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   129
   */
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   130
  public default SqlBlob setPosition(long offset) {
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   131
    setPositionOperation(offset).submit();
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   132
    return this;
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   133
  }
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   134
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   135
  /**
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   136
   * Return a {@link Operation} to set the position to the beginning of the next
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   137
   * occurrence of the target after the position. If there is no such occurrence
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   138
   * set the position to 0.
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   139
   *
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   140
   * @param target a {@code SqlBlob} created by the same {@link Session}
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   141
   * containing the byte sequence to search for
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   142
   * @return a {@link Operation} that locates {@code target} in this
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   143
   * {@code SqlBlob}
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   144
   * @throws IllegalArgumentException if {@code target} was created by some
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   145
   * other {@link Session}
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   146
   * @throws IllegalStateException if the {@link Session} that created this
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   147
   * {@code SqlBlob} is closed.
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   148
   */
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   149
  public Operation<Long> locateOperation(SqlBlob target);
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   150
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   151
  /**
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   152
   * Set the position to the beginning of the next occurrence of the target
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   153
   * after the position. If there is no such occurrence set the position to 0.
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   154
   *
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   155
   * @param target the byte sequence to search for
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   156
   * @return this {@code SqlBlob}
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   157
   * @throws IllegalArgumentException if {@code target} was created by some
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   158
   * other {@link Session}
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   159
   * @throws IllegalStateException if the {@link Session} that created this
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   160
   * {@code SqlBlob} is closed
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   161
   */
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   162
  public default SqlBlob locate(SqlBlob target) {
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   163
    locateOperation(target).submit();
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   164
    return this;
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   165
  }
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   166
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   167
  /**
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   168
   * Return an {@link Operation} to set the position to the beginning of the
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   169
   * next occurrence of the target after the position. If there is no such
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   170
   * occurrence set the position to 0.
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   171
   *
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   172
   * @param target the byte sequence to search for. Not {@code null}. Captured.
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   173
   * @return a {@link Operation} that locates {@code target} in this
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   174
   * {@code SqlBlob}
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   175
   * @throws IllegalStateException if the {@link Session} that created this
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   176
   * {@code SqlBlob} is closed.
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   177
   */
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   178
  public Operation<Long> locateOperation(byte[] target);
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   179
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   180
  /**
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   181
   * Set the position to the beginning of the next occurrence of the target
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   182
   * after the position. If there is no such occurrence set the position to 0.
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   183
   *
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   184
   * @param target the byte sequence to search for
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   185
   * @return this {@code SqlBlob}
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   186
   * @throws IllegalStateException if the {@link Session} that created this
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   187
   * {@code SqlBlob} is closed.
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   188
   */
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   189
  public default SqlBlob locate(byte[] target) {
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   190
    locateOperation(target).submit();
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   191
    return this;
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   192
  }
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   193
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   194
  /**
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   195
   * Return a {@link Operation} that truncates this {@code SqlBlob} so that the
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   196
   * current position is the end of the {@code SqlBlob}. If the position is N, then
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   197
   * after {@link trim()} the length is N - 1. The position is still N. This
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   198
   * will fail if position is 0.
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   199
   *
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   200
   * @return a {@link Operation} that trims the length of this {@code SqlBlob}
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   201
   * @throws IllegalStateException if the {@link Session} that created this
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   202
   * {@code SqlBlob} is closed or position is 0.
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   203
   */
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   204
  public Operation<Long> trimOperation();
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   205
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   206
  /**
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   207
   * Truncate this {@code SqlBlob} so that the current position is the end of the
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   208
   * {@code SqlBlob}. If the position is N, then after {@link trim()} the length is
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   209
   * N - 1. The position is still N. This will fail if position is 0.
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   210
   *
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   211
   * @return this SqlBlob
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   212
   * @throws IllegalStateException if the {@link Session} that created this
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   213
   * {@code SqlBlob} is closed or position is 0.
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   214
   */
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   215
  public default SqlBlob trim() {
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   216
    trimOperation().submit();
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   217
    return this;
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   218
  }
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   219
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   220
  /**
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   221
   * Return a {@link java.nio.channels.Channel} that can be used to read bytes from the
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   222
   * {@code SqlBlob} beginning at the position. Reading bytes from the returned
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   223
   * {@link java.nio.channels.Channel} advances the position.
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   224
   *
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   225
   * Each call to a read method that fetches bytes from the server creates and
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   226
   * submits a virtual {@link Operation} to fetch those bytes. This virtual
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   227
   * {@link Operation} is executed in sequence with other {@link Operation}s and
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   228
   * may be skipped if an error occurs.
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   229
   *
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   230
   * @return a read-only byte {@link java.nio.channels.Channel} beginning at the position.
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   231
   * @throws IllegalStateException if the {@link Session} that created this
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   232
 SqlBlob is closed.
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   233
   */
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   234
  public AsynchronousByteChannel getReadChannel();
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   235
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   236
  /**
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   237
   * Return a {@link java.nio.channels.Channel} that can be used to write bytes
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   238
   * to this {@code SqlBlob} beginning at the position. Bytes written overwrite
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   239
   * bytes already in the {@code SqlBlob}. Writing bytes to the returned
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   240
   * {@link java.nio.channels.Channel} advances the position.
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   241
   *
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   242
   * Each call to a write method that flushes bytes to the server creates and
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   243
   * submits a virtual {@link Operation} to flush those bytes. This virtual
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   244
   * {@link Operation} is executed in sequence with other {@link Operation}s and
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   245
   * may be skipped if an error occurs.
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   246
   *
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   247
   * ISSUE: Can the app read bytes from a write
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   248
   * {@link java.nio.channels.Channel}? If so then maybe remove
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   249
   * {@link getReadChannel} and add a read-only flag to this method, renamed
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   250
   * {@code getChannel}.
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   251
   *
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   252
   * @return a writable byte {@link java.nio.channels.Channel} beginning at the
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   253
   * position.
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   254
   * @throws IllegalStateException if the {@link Session} that created this
56997
c9cbac2979fb JDK-8188051-branch October 20 ABDA updates
lancea
parents: 56824
diff changeset
   255
   * {@code SqlBlob} is closed.
56380
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   256
   */
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   257
  public AsynchronousByteChannel getWriteChannel();
f06946e00a26 JDK-8188051-branch: add jdk.incubator.adba
lancea
parents:
diff changeset
   258
}