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 <don.tequ...@gmx.de> 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));
>     }
> }
>
>

Reply via email to