2017-06-28 1 views
0

Wir verwenden Apache Ignite SqlFieldQuery. Unterstützt die kontinuierliche Abfrage SqlFieldQuery? Ich suche ein Beispiel dafür.Apache entzünden kontinuierliche Abfrage für sqlfieldQuery in C++

Abfrage wie folgt aussieht:

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); 

Wie Benachrichtigung für obige Abfrage unter Verwendung einer kontinuierlichen Abfrage bekommen?

Vielen Dank im Voraus.

+0

Kontinuierliche Abfrage-Implementierung garantiert genau einmal die Übermittlung eines Ereignisses an den lokalen Listener des Clients. Benachrichtigung kann durch diese 3 Methoden erhalten werden. https://apacheignite-cpp.readme.io/docs/continuous-queries#section-local-listener Beispiel kann an diesem Ort gefunden werden. https://github.com/apache/ignite/blob/master/modules/platforms/cpp/examples/continuous-query-example/src/continuous_query_example.cpp SqlFieldQuery-Beispiel finden Sie unter https: // apacheignite- cpp.readme.io/docs/sql-queries#section-field-queries. – nevihs

Antwort

1

Sie können einfach ContinuousQuery dafür verwenden. Etwas wie dieses:

// 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; 
} 

Ich habe einige vorformulierten Code übersprungen. Sie finden möglicherweise voll funktionsfähiges Codebeispiel here

+0

Danke für die Antwort. Was wir eigentlich suchen, ist, dass wir mehrere Tabellen wie TestList, EmployeeData, Organization usw. haben. Wir suchen nach einem generischen Code, um Benachrichtigungen zu erhalten, wenn Änderungen an den obigen Tabellen vorgenommen werden (Update, Einfügen oder Löschen). Wie übergeben Sie die Schlüssel- und Wertfelder an continuous :: ContinuousQuery und CacheEntryEvent generisch. Gibt es eine Möglichkeit, dies durch kontinuierliche Abfrage zu erreichen? – sony

Verwandte Themen