2017-06-28 3 views
0

Apache Ignite SqlFieldQueryを使用しています。連続クエリはSqlFieldQueryをサポートしていますか?これに関連するいくつかの例を探しています。連続問合せを使用して上記のクエリのための通知を取得する方法ApacheはC++でsqlfieldQueryの連続問合せを起動します

Cache<int32_t, std::string> cache = 
    ignite.GetOrCreateCache<int32_t, std::string>(CACHE_NAME); 

std::string sql("INSERT INTO \"DG\".TestList (empid,name) values(11, 'name')"); 

SqlFieldsQuery orgQry(sql); 
cache.Query(orgQry); 

クエリは次のようになりますか?

ありがとうございます。

+0

継続的なクエリ実装では、クライアントのローカルリスナーへのイベントの配信が一度だけ保証されます。これらの3つの方法で通知を得ることができます。 https://apacheignite-cpp.readme.io/docs/continuous-queries#section-local-listener 例はこの場所にあります。 https://github.com/apache/ignite/blob/master/modules/platforms/cpp/examples/continuous-query-example/src/continuous_query_example.cpp この例ではSqlFieldQueryが見つかりません。https:// apacheignite- cpp.readme.io/docs/sql-queries#section-field-queries。 – nevihs

答えて

1

簡易ContinuousQueryを使用できます。このようなもの:

// Assuming your key type is int32_t 
class Listener : public event::CacheEntryEventListener<int32_t, TestList> 
{ 
public: 
    virtual void OnEvent(const CacheEntryEvent<int32_t, TestList>* evts, uint32_t num) 
    { 
     // Simply printing events here. You can put your processing code here. 
     for (uint32_t i = 0; i < num; ++i) 
     { 
      std::cout << "Queried entry [key=" << evts[i].GetKey() 
         << ", val=" << (evts[i].HasValue() ? evts[i].GetValue() : "<none>") 
         << ']' << std::endl; 
     } 
    } 
}; 

int main() 
{ 
    Ignite ignite = Ignition::Start(cfg); 

    Cache<int32_t, TestList> cache = 
     ignite.GetOrCreateCache<int32_t, TestList>(CACHE_NAME); 

    // Declaring listener. 
    Listener<int32_t, TestList> listener; 

    // Declaring continuous query. 
    continuous::ContinuousQuery<int32_t, TestList> qry(MakeReference(listener)); 

    continuous::ContinuousQueryHandle<int32_t, TestList> handle = 
     cache.QueryContinuous(qry); 

    std::string sql("INSERT INTO \"DG\".TestList (empid,name) values(11, 'name')"); 

    SqlFieldsQuery orgQry(sql); 
    cache.Query(orgQry); 

    // Waiting here to get notifications. 
    std::cin.get(); 

    return 0; 
} 

私はいくつかのボイラープレートコードをスキップしました。完全に機能するコード例が見つかりますhere

+0

お返事ありがとうございます。私たちが実際に探しているのは、TestList、EmployeeData、Organizationなどの複数のテーブルがあるということです。上記のテーブル(更新、挿入、または削除)に何らかの変更があったときに通知を受け取る汎用コードを探しています。どのようにしてキーと値のフィールドを連続的に:: ContinuousQuery とCacheEntryEvent に渡すか連続クエリを使用してこれを実現する方法はありますか? – sony

関連する問題