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 <http://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));
}
}