blob: d85c8bdaf83aec46c5d1f3907e16bc3600ca3abc [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.ignite.table;
import java.io.Serializable;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import org.apache.ignite.tx.Transaction;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* Table view interface provides methods to access table records.
*
* @param <R> Mapped record type.
* @apiNote Some methods require a record with the only key columns set. This is not mandatory requirement
* and value columns will be just ignored.
*/
public interface TableView<R> {
/**
* Gets a record with same key columns values as given one from the table.
*
* @param keyRec A record with key columns set.
* The record cannot be {@code null}.
* @return A record with all columns filled from the table.
*/
R get(@NotNull R keyRec);
/**
* Asynchronously gets a record with same key columns values as given one from the table.
*
* @param keyRec A record with key columns set.
* The record cannot be {@code null}.
* @return Future representing pending completion of the operation.
*/
@NotNull CompletableFuture<R> getAsync(@NotNull R keyRec);
/**
* Get records from the table.
*
* @param keyRecs Records with key columns set.
* The records cannot be {@code null}.
* @return Records with all columns filled from the table.
*/
Collection<R> getAll(@NotNull Collection<R> keyRecs);
/**
* Asynchronously get records from the table.
*
* @param keyRecs Records with key columns set.
* The records cannot be {@code null}.
* @return Future representing pending completion of the operation.
*/
@NotNull CompletableFuture<Collection<R>> getAllAsync(@NotNull Collection<R> keyRecs);
/**
* Inserts a record into the table if does not exist or replaces the existed one.
*
* @param rec A record to insert into the table.
* The record cannot be {@code null}.
*/
void upsert(@NotNull R rec);
/**
* Asynchronously inserts a record into the table if does not exist or replaces the existed one.
*
* @param rec A record to insert into the table.
* The record cannot be {@code null}.
* @return Future representing pending completion of the operation.
*/
@NotNull CompletableFuture<Void> upsertAsync(@NotNull R rec);
/**
* Insert records into the table if does not exist or replaces the existed one.
*
* @param recs Records to insert into the table.
* The records cannot be {@code null}.
*/
void upsertAll(@NotNull Collection<R> recs);
/**
* Asynchronously inserts a record into the table if does not exist or replaces the existed one.
*
* @param recs Records to insert into the table.
* The records cannot be {@code null}.
* @return Future representing pending completion of the operation.
*/
@NotNull CompletableFuture<Void> upsertAllAsync(@NotNull Collection<R> recs);
/**
* Inserts a record into the table or replaces if exists and return replaced previous record.
*
* @param rec A record to insert into the table.
* The record cannot be {@code null}.
* @return Replaced record or {@code null} if not existed.
*/
R getAndUpsert(@NotNull R rec);
/**
* Asynchronously inserts a record into the table or replaces if exists and return replaced previous record.
*
* @param rec A record to insert into the table.
* The record cannot be {@code null}.
* @return Future representing pending completion of the operation.
*/
@NotNull CompletableFuture<R> getAndUpsertAsync(@NotNull R rec);
/**
* Inserts a record into the table if not exists.
*
* @param rec A record to insert into the table.
* The record cannot be {@code null}.
* @return {@code True} if successful, {@code false} otherwise.
*/
boolean insert(@NotNull R rec);
/**
* Asynchronously inserts a record into the table if not exists.
*
* @param rec A record to insert into the table.
* The record cannot be {@code null}.
* @return Future representing pending completion of the operation.
*/
@NotNull CompletableFuture<Boolean> insertAsync(@NotNull R rec);
/**
* Insert records into the table which do not exist, skipping existed ones.
*
* @param recs Records to insert into the table.
* The records cannot be {@code null}.
* @return Skipped records.
*/
Collection<R> insertAll(@NotNull Collection<R> recs);
/**
* Asynchronously insert records into the table which do not exist, skipping existed ones.
*
* @param recs Records to insert into the table.
* The records cannot be {@code null}.
* @return Future representing pending completion of the operation.
*/
@NotNull CompletableFuture<Collection<R>> insertAllAsync(@NotNull Collection<R> recs);
/**
* Replaces an existed record associated with the same key columns values as the given one has.
*
* @param rec A record to replace with.
* The record cannot be {@code null}.
* @return {@code True} if old record was found and replaced successfully, {@code false} otherwise.
*/
boolean replace(@NotNull R rec);
/**
* Asynchronously replaces an existed record associated with the same key columns values as the given one has.
*
* @param rec A record to replace with.
* The record cannot be {@code null}.
* @return Future representing pending completion of the operation.
*/
@NotNull CompletableFuture<Boolean> replaceAsync(@NotNull R rec);
/**
* Replaces an expected record in the table with the given new one.
*
* @param oldRec A record to replace.
* The record cannot be {@code null}.
* @param newRec A record to replace with.
* The record cannot be {@code null}.
* @return {@code True} if the old record replaced successfully, {@code false} otherwise.
*/
boolean replace(@NotNull R oldRec, @NotNull R newRec);
/**
* Asynchronously replaces an expected record in the table with the given new one.
*
* @param oldRec A record to replace.
* The record cannot be {@code null}.
* @param newRec A record to replace with.
* The record cannot be {@code null}.
* @return Future representing pending completion of the operation.
*/
@NotNull CompletableFuture<Boolean> replaceAsync(@NotNull R oldRec, @NotNull R newRec);
/**
* Gets an existed record associated with the same key columns values as the given one has,
* then replaces with the given one.
*
* @param rec A record to replace with.
* The record cannot be {@code null}.
* @return Replaced record or {@code null} if not existed.
*/
R getAndReplace(@NotNull R rec);
/**
* Asynchronously gets an existed record associated with the same key columns values as the given one has,
* then replaces with the given one.
*
* @param rec A record to replace with.
* The record cannot be {@code null}.
* @return Future representing pending completion of the operation.
*/
@NotNull CompletableFuture<R> getAndReplaceAsync(@NotNull R rec);
/**
* Deletes a record with the same key columns values as the given one from the table.
*
* @param keyRec A record with key columns set.
* The record cannot be {@code null}.
* @return {@code True} if removed successfully, {@code false} otherwise.
*/
boolean delete(@NotNull R keyRec);
/**
* Asynchronously deletes a record with the same key columns values as the given one from the table.
*
* @param keyRec A record with key columns set.
* The record cannot be {@code null}.
* @return Future representing pending completion of the operation.
*/
@NotNull CompletableFuture<Boolean> deleteAsync(@NotNull R keyRec);
/**
* Deletes the given record from the table.
*
* @param rec A record to delete.
* The record cannot be {@code null}.
* @return {@code True} if removed successfully, {@code false} otherwise.
*/
boolean deleteExact(@NotNull R rec);
/**
* Asynchronously deletes given record from the table.
*
* @param rec A record to delete.
* The record cannot be {@code null}.
* @return Future representing pending completion of the operation.
*/
@NotNull CompletableFuture<Boolean> deleteExactAsync(@NotNull R rec);
/**
* Gets then deletes a record with the same key columns values from the table.
*
* @param rec A record with key columns set.
* The record cannot be {@code null}.
* @return Removed record or {@code null} if not existed.
*/
R getAndDelete(@NotNull R rec);
/**
* Asynchronously gets then deletes a record with the same key columns values from the table.
*
* @param rec A record with key columns set.
* The record cannot be {@code null}.
* @return Future representing pending completion of the operation.
*/
@NotNull CompletableFuture<R> getAndDeleteAsync(@NotNull R rec);
/**
* Remove records with the same key columns values as the given one has from the table.
*
* @param recs Records with key columns set.
* The records cannot be {@code null}.
* @return Records with key columns set that did not exist.
*/
Collection<R> deleteAll(@NotNull Collection<R> recs);
/**
* Asynchronously remove records with the same key columns values as the given one has from the table.
*
* @param recs Records with key columns set.
* The records cannot be {@code null}.
* @return Future representing pending completion of the operation.
*/
@NotNull CompletableFuture<Collection<R>> deleteAllAsync(@NotNull Collection<R> recs);
/**
* Remove given records from the table.
*
* @param recs Records to delete.
* The records cannot be {@code null}.
* @return Records that were not deleted.
*/
Collection<R> deleteAllExact(@NotNull Collection<R> recs);
/**
* Asynchronously remove given records from the table.
*
* @param recs Records to delete.
* The records cannot be {@code null}.
* @return Future representing pending completion of the operation.
*/
@NotNull CompletableFuture<Collection<R>> deleteAllExactAsync(@NotNull Collection<R> recs);
/**
* Executes an InvokeProcessor code against a record with the same key columns values as the given one has.
*
* @param keyRec A record with key columns set.
* The record cannot be {@code null}.
* @param proc Invoke processor.
* @param <T> InvokeProcessor result type.
* @return Results of the processing.
*/
<T extends Serializable> T invoke(@NotNull R keyRec, InvokeProcessor<R, R, T> proc);
/**
* Asynchronously executes an InvokeProcessor code against a record
* with the same key columns values as the given one has.
*
* @param keyRec A record with key columns set.
* The record cannot be {@code null}.
* @param proc Invoke processor.
* @param <T> InvokeProcessor result type.
* @return Future representing pending completion of the operation.
*/
@NotNull <T extends Serializable> CompletableFuture<T> invokeAsync(@NotNull R keyRec, InvokeProcessor<R, R, T> proc);
/**
* Executes an InvokeProcessor code against records with the same key columns values as the given ones has.
*
* @param keyRecs Records with key columns set.
* The records cannot be {@code null}.
* @param proc Invoke processor.
* @param <T> InvokeProcessor result type.
* @return Results of the processing.
*/
<T extends Serializable> Map<R, T> invokeAll(@NotNull Collection<R> keyRecs, InvokeProcessor<R, R, T> proc);
/**
* Asynchronously executes an InvokeProcessor against records with the same key columns values as the given ones
* has.
*
* @param keyRecs Records with key columns set.
* The records cannot be {@code null}.
* @param proc Invoke processor.
* @param <T> InvokeProcessor result type.
* @return Results of the processing.
*/
@NotNull <T extends Serializable> CompletableFuture<Map<R, T>> invokeAllAsync(@NotNull Collection<R> keyRecs,
InvokeProcessor<R, R, T> proc);
/**
* Returns current transaction.
*
* @return Current transaction or null if a table is not enlisted in a transaction.
*/
@Nullable Transaction transaction();
/**
* Enslists a view into the transaction.
*
* @param tx The transaction.
* @return Transactional view.
*/
TableView<R> withTransaction(Transaction tx);
}