[ 
https://issues.apache.org/jira/browse/IGNITE-25403?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Eduard Rakhmankulov updated IGNITE-25403:
-----------------------------------------
    Component/s: tables ai3

> 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
>          Time Spent: 1h 50m
>  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)
> org.apache.ignite.table.KeyValueView#removeAsync(org.apache.ignite.tx.Transaction,
>  K, V)
> org.apache.ignite.table.KeyValueView#replace(org.apache.ignite.tx.Transaction,
>  K, V, V)
> org.apache.ignite.table.KeyValueView#replaceAsync(org.apache.ignite.tx.Transaction,
>  K, V, V)
> org.apache.ignite.table.RecordView#replace(org.apache.ignite.tx.Transaction, 
> R, R)
> org.apache.ignite.table.RecordView#replaceAsync(org.apache.ignite.tx.Transaction,
>  R, R){code}
>  
> Compilation time conflict because of adding new overloads:
> {code:java}
> KeyValueView.java:
> 1. remove[Async](K,V) == remove[Async](Transaction, K) | example: 
> remove(/*Transaction*/null, /*K*/key) | unlikely | in case when typeof(K) == 
> typeof(V)
> 2. removeAll[Async](Collection<K>) == removeAll[Async](Transaction) | 
> example: removeAll(/*Transaction*/ null) | CONFLICT |
> 3. replace[Async](K,V,V) == replace[Async](Transaction, K, V) | example: 
> replace(/*Transaction*/ null, key, newVal) | unlikely | in case when 
> typeof(K) == typeof(V)
> RecordView.java:
> 1. deleteAll[Async](Collection<R>) == deleteAll[Async](Transaction) | example 
> deleteAll(/*Transaction*/ null) | CONFLICT
> 2. relpace[Async](R,R) == replace[Async](Transaction, R) | example 
> replace(/*Transaction*/ null, record) | CONFLICT
> CriteriaQuerySource.java
> 1. query[Async](Criteria, String) == query[Async](Transaction, Criteria) | 
> example query(/*Transaction*/ null, /*Criteria*/) | CONFLICT
> 2. query[Async](Criteria, String, CriteriaOptions) == 
> query[Async](Transaction, Criteria, String) | example query(/*Transaction*/ 
> null, /*Criteria*/ null, /*String*/ null) | CONFLICT
> IgniteSql.java
> 01. execute[Async](CancellationToken, String, Object...) == 
> execute[Async](Transaction, String, Object...) | example 
> execute[Async](/*Transaction*/ null, qry, args) | CONFLICT
> 02. execute[Async](CancellationToken, Statement, Object...) == 
> execute[Async](Transaction, Statement, Object...) | example 
> execute[Async](/*Transaction*/ null, stmt, args) | CONFLICT
> 03. execute[Async](CancellationToken, Mapper<T>, String, Object...) == 
> execute[Async](Transaction, Mapper<T>, String, Object...) | example 
> execute[Async](/*Transaction*/ null, mapper, qry, args) | CONFLICT
> 04. execute[Async](CancellationToken, Mapper<T>, Statement, Object...) == 
> execute[Async](Transaction, Mapper<T>, Statement, Object...) | example 
> execute[Async](/*Transaction*/ null, mapper, stmt, args) | CONFLICT
> 05. execute[Async](Mapper<T>, String, Object...) == 
> execute[Async](Transaction, String, Object...) | example 
> execute[Async](/*Transaction*/ null, qry, args) | CONFLICT
> 06. execute[Async](Mapper<T>, Statement, Object...) == 
> execute[Async](Transaction, Statement, Object...) | example 
> execute[Async](/*Transaction*/ null, stmt, args) | CONFLICT
> 07. execute[Async](String, Object...) == execute[Async](Transaction, String, 
> Object...) | example execute[Async](/*Transaction*/ null, qry, arg0, arg1) | 
> CONFLICT
> 08. execute[Async](Statement, Object...) == execute[Async](Transaction, 
> String, Object...) | example execute[Async](/*Transaction*/ null, qry, arg0, 
> arg1) | CONFLICT
> 09. execute[Async](String, Object...) == execute[Async](Transaction, 
> Statement, Object...) | example execute[Async](/*Transaction*/ null, stmt, 
> arg0, arg1) | CONFLICT
> 10. execute[Async](Statement, Object...) == execute[Async](Transaction, 
> Statement, Object...) | example execute[Async](/*Transaction*/ null, stmt, 
> arg0, arg1) | CONFLICT
> -------AND MORE with execute[Async]------
> 20. executeBatch[Async](CancellationToken, String, BatchedArguments) == 
> execute[Async](Transaction, String, BatchedArguments) | example 
> executeBatch[Async](/*Transaction*/ null, qry, args) | CONFLICT
> 21. executeBatch[Async](CancellationToken, Statement, BatchedArguments) == 
> execute[Async](Transaction, Statement, BatchedArguments) | example 
> executeBatch[Async](/*Transaction*/ null, stmt, args) | CONFLICT{code}
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to