My point is why do we need 3 methods to provide the status ? We can use one
method to provide the status (Returns a boolean if update operation a done or
not) and other to provide a list of affected rows/objects keys, this would be
less memory intensive.
And in case of deletion we can throw a custom exception stating " since this is
a delete operation we cannot provide affected rows".
>>>>> public interface UpdateStatus {
>>>>> public <List or Collection> getAffectedRowsKeys(); or use
>>>>> getRowsKeys(); or getKeys() throws MetaModelException;
public Boolean isDone();
>>>>> }
I see following remote branches in git repo:
remotes/origin/HEAD -> origin/master
remotes/origin/hbase-module
remotes/origin/master
Which is the current development branch as I couldn't find executeUpdate in
DataContext ?
On 11-Aug-2013, at 1:04 PM, Kasper Sørensen <[email protected]>
wrote:
> I agree on the reasoning here, but getting a list of affected rows may
> prove to be both quite difficult (from consistency point of view it
> needs to be created immediately after some update - how can that be
> implemented in an effecient manner (lazy, since you wouldn't always
> want to get this list, but then consistency is gone), and how to
> guarantee that those rows are even available (e.g. after a DELETE
> statement in a JDBC database, you cannot get the rows anymore)), and
> too memory intensive (updates can be anything from a single record to
> millions of records).
>
> That's why I think the three methods (maybe with an additional fourth
> method, returning the total num. of affected rows) is the best initial
> set of methods.
>
> 2013/8/11 Rohit <[email protected]>:
>> Having an abstraction for communicating status would be a cleaner approach.
>> As it allows us to extend the functionality if required in future.
>> For Example:
>> Lets say we are executing executeUpdate in multithreaded env. then we can
>> provide methods to check the status of the update. (running or done).
>>
>> Also rather than having methods returning int I think we should return a
>> collection of Affected Rows.
>> And rather than having multiple methods for insert/delete/update just have a
>> single method returning the affected rows.
>>
>> I think making so will make the API simpler yet functional.
>>
>>>>> public interface UpdateStatus {
>>>>> public <List or Collection> getAffectedRows(); or just use getRows()
>>>>> }
>>
>>
>> -RS
>>
>> On 10-Aug-2013, at 10:09 PM, Kasper Sørensen
>> <[email protected]> wrote:
>>
>>> My experience with returning something like an
>>> int/String/other-simple-type is that it seems to fit the purpose at
>>> first, but then someone asks "couldn't we also get the status of
>>> [something], too?" ... and then you regret not encapsulating the
>>> return value so that you could just add another getter on it.
>>>
>>> 2013/8/10 Henry Saputra <[email protected]>:
>>>> We could just make the executeUpdate just return number of elements
>>>> affected similar to relational databases.
>>>>
>>>> It would be simpler and serve similar purpose.
>>>>
>>>> - Henry
>>>>
>>>>
>>>> On Fri, Aug 9, 2013 at 12:15 AM, Kasper Sørensen <
>>>> [email protected]> wrote:
>>>>
>>>>> Allow me to also bump this issue.
>>>>>
>>>>> Since this would be a change that would not be compile-time
>>>>> incompatible with previous versions, I suggest we introduce at least
>>>>> the return type of the method now. Since everyone moving the Apache
>>>>> MetaModel from the old metamodel would anyways have to recompile, they
>>>>> would not feel the runtime incompatibility of void vs. SomeReturnType.
>>>>>
>>>>> By now I suggest we just keep a very simple returned interface which
>>>>> we can always choose to expand (implemented internally, not by
>>>>> consumers). For instance something like:
>>>>>
>>>>> public interface UpdateStatus {
>>>>> public int getInsertedRows();
>>>>> public int getUpdatedRows();
>>>>> public int getDeletedRows();
>>>>> }
>>>>>
>>>>> This should be quite easy to implement once and reuse for most of the
>>>>> modules. For some datastores it might not be information that we can
>>>>> retrieve, so the interface should also specify an extraordinary rule;
>>>>> e.g. "if -1 is returned it means that it is not known how many rows
>>>>> where inserted/updated/deleted"
>>>>>
>>>>> Kasper
>>>>>
>>>>> 2013/7/24 Kasper Sørensen <[email protected]>:
>>>>>> In the current API design of MetaModel, the
>>>>> DataContext.executeUpdate(...)
>>>>>> method is a void method. This was initially chosen because not all
>>>>>> implementations have the capability to report anything about a particular
>>>>>> update. But some do, for instance the no. of inserted, updated or deleted
>>>>>> records from a JDBC call. It would be nice to expose this information
>>>>> when
>>>>>> available.
>>>>>>
>>>>>> My suggestion for this would be to let the DataContext.executeUpdate(...)
>>>>>> method return an object with this information. All methods on the new
>>>>> object
>>>>>> type would be optionally returning null, if no information is available.
>>>>> But
>>>>>> when available, we can at least expose it this way.
>>>>>>
>>>>>> The change wouldn't have a major impact, since any project using
>>>>> MetaModel
>>>>>> would already need to recompile because of the namespace change to
>>>>>> org.apache.metamodel. And the change would be compile-time compatible
>>>>> with
>>>>>> having a void return type.
>>>>>
>>