Wait a sec, I have already posted an example, but for some reasons it was not
send properly.

Here are we go:


class Program
{
    private static IContinuousQueryHandle _continuousQuery;
    const string CacheName = "sample";
    const string TableName = "entity";

    static void Main(string[] args)
    {
        var ignite = Ignition.Start();

        var cache = ignite.GetOrCreateCache<object, object>(new
CacheConfiguration(CacheName) { SqlSchema = "PUBLIC" });

        var createTalbeSql =
            $"create table if not exists {TableName} (id int, field varchar,
primary key (Id)) " +
            $"with \"key_type=int, value_type={typeof(MyEnity).FullName}\"";

        cache.Query(new SqlFieldsQuery(createTalbeSql)).GetAll();

        ICache<int, MyEnity> entityCache = ignite.GetCache<int,
MyEnity>($"SQL_PUBLIC_{TableName.ToUpper()}");

        StartContinuousQuery(entityCache);


        var entity0 = new MyEnity { Id = 2, Field = "NEW" };
        entityCache.Put(entity0.Id, entity0);

        var entity = entityCache.Get(entity0.Id);
        Console.WriteLine(entity);

        var sql = $"update {TableName} set field = 'updated' where Id =
{entity.Id}";
        var res = entityCache.Query(new SqlFieldsQuery(sql)).GetAll();
        Console.WriteLine(res.First()[0]);

        sql = $"insert into {TableName} (_key, field) VALUES(7, 'new
value')";
        res = entityCache.Query(new SqlFieldsQuery(sql)).GetAll();
        Console.WriteLine(res.First()[0]);

        Console.ReadLine();

        _continuousQuery.Dispose();
        Ignition.Stop(null, true);
    }

    public static void StartContinuousQuery(ICache<int, MyEnity> cache)
    {
        var query = new ContinuousQuery<int, MyEnity>(new
ClrCacheSyncEventListener());
        _continuousQuery = cache.QueryContinuous(query);
    }

    public class ClrCacheSyncEventListener : ICacheEntryEventListener<int,
MyEnity>
    {
        public void OnEvent(IEnumerable<ICacheEntryEvent&lt;int, MyEnity>>
evts)
        {
            foreach (ICacheEntryEvent<int, MyEnity> cacheEntryEvent in evts)
            {
                Console.WriteLine($"Action happened
{cacheEntryEvent.EventType}");
            }
        }
    }


    public class MyEnity
    {
        public MyEnity()
        {
        }

        public int Id { get; set; }
        [QuerySqlField]
        public string Field { get; set; }

        public override string ToString()
        {
            return $"Id = {this.Id}; TextField = {this.Field};";
        }
    }
}



--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/

Reply via email to