[
https://issues.apache.org/jira/browse/IGNITE-25403?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Pavel Tupitsyn updated IGNITE-25403:
------------------------------------
Fix Version/s: 3.2
> Add overloads for common API methods that don't accept Transaction
> ------------------------------------------------------------------
>
> Key: IGNITE-25403
> URL: https://issues.apache.org/jira/browse/IGNITE-25403
> Project: Ignite
> Issue Type: Improvement
> Components: tables ai3
> Reporter: Eduard Rakhmankulov
> Assignee: Eduard Rakhmankulov
> Priority: Major
> Labels: ignite-3
> Fix For: 3.2
>
> Time Spent: 2h
> Remaining Estimate: 0h
>
> All transactional API methods accept a Transaction. In real use, most of the
> time that parameter is null making all API calls starting with (null, ...
> which doesn't look good and is generally confusing. While this was to done to
> make sure the user doesn't forget to pass the transaction to all methods, it
> looks like this makes the API safe but too inconvenient.
> It is better to add overloads for at least some of the API methods that don't
> need the Transaction. It's the same as passing null.
> It's OK not to add these overloads to every single method. For example, if
> foo an operation foo there are two methods now
>
> {{foo(tx, args, opts)
> foo(tx, args)}}
> it's OK to only add one additional convenience method
>
> {{foo(args)}}
> i.e. not to add another overload to the more detailed method that also
> accepts operation options.
> Changes to API:
> new methods:
> {code:java}
> org.apache.ignite.table.KeyValueView#get(K)
> org.apache.ignite.table.KeyValueView#getAsync(K)
> org.apache.ignite.table.KeyValueView#getNullable(K)
> org.apache.ignite.table.KeyValueView#getNullableAsync(K)
> org.apache.ignite.table.KeyValueView#getOrDefault(K, V)
> org.apache.ignite.table.KeyValueView#getOrDefaultAsync(K, V)
> org.apache.ignite.table.KeyValueView#getAll(java.util.Collection<K>)
> org.apache.ignite.table.KeyValueView#getAllAsync(java.util.Collection<K>)
> org.apache.ignite.table.KeyValueView#contains(K)
> org.apache.ignite.table.KeyValueView#containsAsync(K)
> org.apache.ignite.table.KeyValueView#containsAll(java.util.Collection<K>)
> org.apache.ignite.table.KeyValueView#containsAllAsync(java.util.Collection<K>)
> org.apache.ignite.table.KeyValueView#put(K, V)
> org.apache.ignite.table.KeyValueView#putAsync(K, V)
> org.apache.ignite.table.KeyValueView#putAll(java.util.Map<K,V>)
> org.apache.ignite.table.KeyValueView#putAllAsync(java.util.Map<K,V>)
> org.apache.ignite.table.KeyValueView#getAndPut(K, V)
> org.apache.ignite.table.KeyValueView#getAndPutAsync(K, V)
> org.apache.ignite.table.KeyValueView#getNullableAndPut(K, V)
> org.apache.ignite.table.KeyValueView#getNullableAndPutAsync(K, V)
> org.apache.ignite.table.KeyValueView#putIfAbsent(K, V)
> org.apache.ignite.table.KeyValueView#putIfAbsentAsync(K, V)
> org.apache.ignite.table.KeyValueView#remove(K)
> org.apache.ignite.table.KeyValueView#removeExact(org.apache.ignite.tx.Transaction,
> K, V)
> org.apache.ignite.table.KeyValueView#removeExact(K, V)
> org.apache.ignite.table.KeyValueView#removeAsync(K)
> org.apache.ignite.table.KeyValueView#removeExactAsync(org.apache.ignite.tx.Transaction,
> K, V)
> org.apache.ignite.table.KeyValueView#removeExactAsync(K, V)
> org.apache.ignite.table.KeyValueView#removeAll()
> org.apache.ignite.table.KeyValueView#removeAllAsync()
> org.apache.ignite.table.KeyValueView#getAndRemove(K)
> org.apache.ignite.table.KeyValueView#getAndRemoveAsync(K)
> org.apache.ignite.table.KeyValueView#getNullableAndRemove(K)
> org.apache.ignite.table.KeyValueView#getNullableAndRemoveAsync(K)
> org.apache.ignite.table.KeyValueView#replace(K, V)
> org.apache.ignite.table.KeyValueView#replaceExact(org.apache.ignite.tx.Transaction,
> K, V, V)
> org.apache.ignite.table.KeyValueView#replaceExact(K, V, V)
> org.apache.ignite.table.KeyValueView#replaceAsync(K, V)
> org.apache.ignite.table.KeyValueView#replaceExactAsync(org.apache.ignite.tx.Transaction,
> K, V, V)
> org.apache.ignite.table.KeyValueView#replaceExactAsync(K, V, V)
> org.apache.ignite.table.KeyValueView#getAndReplace(K, V)
> org.apache.ignite.table.KeyValueView#getAndReplaceAsync(K, V)
> org.apache.ignite.table.KeyValueView#getNullableAndReplace(K, V)
> org.apache.ignite.table.KeyValueView#getNullableAndReplaceAsync(K,
> V)org.apache.ignite.table.RecordView#get(R)
> org.apache.ignite.table.RecordView#getAsync(R)
> org.apache.ignite.table.RecordView#getAll(java.util.Collection<R>)
> org.apache.ignite.table.RecordView#getAllAsync(java.util.Collection<R>)
> org.apache.ignite.table.RecordView#contains(R)
> org.apache.ignite.table.RecordView#containsAsync(R)
> org.apache.ignite.table.RecordView#containsAll(java.util.Collection<R>)
> org.apache.ignite.table.RecordView#containsAllAsync(java.util.Collection<R>)
> org.apache.ignite.table.RecordView#upsert(R)
> org.apache.ignite.table.RecordView#upsertAsync(R)
> org.apache.ignite.table.RecordView#upsertAll(java.util.Collection<R>)
> org.apache.ignite.table.RecordView#upsertAllAsync(java.util.Collection<R>)
> org.apache.ignite.table.RecordView#getAndUpsert(R)
> org.apache.ignite.table.RecordView#getAndUpsertAsync(R)
> org.apache.ignite.table.RecordView#insert(R)
> org.apache.ignite.table.RecordView#insertAsync(R)
> org.apache.ignite.table.RecordView#insertAll(java.util.Collection<R>)
> org.apache.ignite.table.RecordView#insertAllAsync(java.util.Collection<R>)
> org.apache.ignite.table.RecordView#replace(R)
> org.apache.ignite.table.RecordView#replaceExact(org.apache.ignite.tx.Transaction,
> R, R)
> org.apache.ignite.table.RecordView#replaceExact(R, R)
> org.apache.ignite.table.RecordView#replaceAsync(R)
> org.apache.ignite.table.RecordView#replaceExactAsync(org.apache.ignite.tx.Transaction,
> R, R)
> org.apache.ignite.table.RecordView#replaceExactAsync(R, R)
> org.apache.ignite.table.RecordView#getAndReplace(R)
> org.apache.ignite.table.RecordView#getAndReplaceAsync(R)
> org.apache.ignite.table.RecordView#delete(R)
> org.apache.ignite.table.RecordView#deleteAsync(R)
> org.apache.ignite.table.RecordView#deleteExact(R)
> org.apache.ignite.table.RecordView#deleteExactAsync(R)
> org.apache.ignite.table.RecordView#getAndDelete(R)
> org.apache.ignite.table.RecordView#getAndDeleteAsync(R)
> org.apache.ignite.table.RecordView#deleteAll()
> org.apache.ignite.table.RecordView#deleteAllAsync()
> org.apache.ignite.table.RecordView#deleteAllExact(java.util.Collection<R>)
> org.apache.ignite.table.RecordView#deleteAllExactAsync(java.util.Collection<R>)org.apache.ignite.sql.IgniteSql#execute(java.lang.String,
> java.lang.Object...)
> org.apache.ignite.sql.IgniteSql#executeAsync(java.lang.String,
> java.lang.Object...)
> org.apache.ignite.sql.IgniteSql#executeBatch(java.lang.String,
> org.apache.ignite.sql.BatchedArguments)
> org.apache.ignite.sql.IgniteSql#executeBatchAsync(java.lang.String,
> org.apache.ignite.sql.BatchedArguments){code}
> Deprecated methods:
> {code:java}
> org.apache.ignite.table.KeyValueView#remove(org.apache.ignite.tx.Transaction,
> K, V) // If both key and oldValue are provided then should have '*Exact'
> suffix
> org.apache.ignite.table.KeyValueView#removeAsync(org.apache.ignite.tx.Transaction,
> K, V) // If both key and oldValue are provided then should have '*Exact'
> suffix
> org.apache.ignite.table.KeyValueView#replace(org.apache.ignite.tx.Transaction,
> K, V, V) // If both key and oldValue are provided then should have '*Exact'
> suffix
> org.apache.ignite.table.KeyValueView#replaceAsync(org.apache.ignite.tx.Transaction,
> K, V, V) // If both key and oldValue are provided then should have '*Exact'
> suffix
> org.apache.ignite.table.RecordView#replace(org.apache.ignite.tx.Transaction,
> R, R) // If both key and oldValue are provided then should have '*Exact'
> suffix
> org.apache.ignite.table.RecordView#replaceAsync(org.apache.ignite.tx.Transaction,
> R, R) // If both key and oldValue are provided then should have '*Exact'
> suffix {code}
> Compilation time conflict because of adding new overloads:
> {code:java}
> Two new method cause compilation conflicts:
> IgniteSql.java
> 01. execute(String, Object...); Example how old call is ambigious
> execute(/*Transaction*/ null, qry, arg0, arg1)
> 02. executeAsync(String, Object...); Example how old call is ambigious
> executeAsync(/*Transaction*/ null, qry, arg0, arg1){code}
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)