To be honest, that was surprising to me too. Not documented anywhere.
I've filed a ticket to rectify this [1]
> how would I get the update count for this type of SQL queries?
Update count is returned as the only value in the only row:
SqlFieldsQuery query = new SqlFieldsQuery("UPDATE Person SET
age=age+1");
long updatedCount = (long)
personCache.query(query).getAll().get(0).get(0);
System.out.println("Updated " + updatedCount + " rows");
[1] https://issues.apache.org/jira/browse/IGNITE-17153
On Fri, Jun 10, 2022 at 12:15 PM <[email protected]> wrote:
> Great, that solved it, thank you! Is this by design? I'm asking because
> it's not that clearly documented, or did I miss this?
>
> Btw, how would I get the update count for this type of SQL queries?
>
>
>
> On 10.06.22 10:22, Pavel Tupitsyn wrote:
>
> Client query cursor is lazy, it does not perform a query until you iterate
> or call getAll.
> The code works as expected when I do this:
> *personCache.query(query).getAll()*
>
> On Fri, Jun 10, 2022 at 1:35 AM <[email protected]> wrote:
>
>> Hi Igniters,
>>
>> I'm wondering if a SQL update statement must be different when used from
>> a ThinClient? It doesn't seem to have any effect for me, nor does it output
>> an error.
>>
>> For the below code I get this output:
>>
>> Row: [1, Foo, 2]
>> Row: [2, Bar, 4]
>> Row: [1, Foo, 3]
>> Row: [2, Bar, 5]
>> Row: [1, Foo, 3]
>> Row: [2, Bar, 5]
>> Row: [1, Foo, 3]
>> Row: [2, Bar, 5]
>>
>> But expected should be (difference marked in red):
>>
>> Row: [1, Foo, 2]
>> Row: [2, Bar, 4]
>> Row: [1, Foo, 3]
>> Row: [2, Bar, 5]
>> Row: [1, Foo, 3]
>> Row: [2, Bar, 5]
>> Row: [1, Foo, 4]
>> Row: [2, Bar, 6]
>>
>> Code:
>>
>> public class TestThinClientSQL
>> {
>> static class Person implements Serializable
>> {
>> @QuerySqlField
>> private String name;
>>
>> @QuerySqlField
>> private int age;
>>
>> public Person withName(String name)
>> {
>> this.name = name;
>> return this;
>> }
>>
>> public Person withAge(int age)
>> {
>> this.age = age;
>> return this;
>> }
>> }
>>
>> public static void main(String[] args)
>> {
>> try (Ignite igniteServer = Ignition.start())
>> {
>> CacheConfiguration<Long, Person> cacheCfg = new
>> CacheConfiguration<Long, Person>().setName("Person");
>> cacheCfg.setIndexedTypes(Long.class, Person.class);
>> IgniteCache<Long, Person> personCache =
>> igniteServer.createCache(cacheCfg);
>> personCache.put(1L, new Person().withName("Foo").withAge(2));
>> personCache.put(2L, new Person().withName("Bar").withAge(4));
>>
>> showContent(personCache);
>>
>> updateAge(personCache);
>>
>> showContent(personCache);
>>
>> IgniteClient thinClient =
>> Ignition.startClient(new ClientConfiguration().setAddresses("127.0.0.1"));
>> ClientCache<Long, Person> personCacheThin =
>> thinClient.cache("Person");
>>
>> showContent(personCacheThin);
>>
>> updateAge(personCacheThin);
>>
>> showContent(personCacheThin);
>> }
>> }
>>
>> private static void updateAge(IgniteCache<Long, Person> personCache)
>> {
>> SqlFieldsQuery query = new SqlFieldsQuery("UPDATE Person SET
>> age=age+1");
>> personCache.query(query);
>> }
>>
>> private static void showContent(IgniteCache<Long, Person> personCache)
>> {
>> SqlFieldsQuery query = new SqlFieldsQuery("SELECT
>> _key, name, age FROM Person");
>> FieldsQueryCursor<List<?>> cursor = personCache.query(query);
>> cursor.getAll().forEach(ROW -> System.out.println("Row: " + ROW));
>> }
>>
>> private static void updateAge(ClientCache<Long, Person> personCache)
>> {
>> SqlFieldsQuery query = new SqlFieldsQuery("UPDATE Person SET
>> age=age+1");
>> personCache.query(query);
>> }
>>
>> private static void showContent(ClientCache<Long, Person> personCache)
>> {
>> SqlFieldsQuery query = new SqlFieldsQuery("SELECT
>> _key, name, age FROM Person");
>> FieldsQueryCursor<List<?>> cursor = personCache.query(query);
>> cursor.getAll().forEach(ROW -> System.out.println("Row: " + ROW));
>> }
>> }
>>
>>