blob: ba17dc6a425fe8a540d726056184ee703e4a52e6 [file] [log] [blame]
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<!-- Always force latest IE rendering engine or request Chrome Frame -->
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
<link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,300italic,400italic,400,600' rel='stylesheet' type='text/css'>
<!-- Use title if it's in the page YAML frontmatter -->
<title>
Remote Queries |
Geode Native C++ Docs
</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="/stylesheets/all.css" rel="stylesheet" media="screen, print" />
<link href="/stylesheets/print.css" rel="stylesheet" media="print" />
<link href='/images/favicon.ico' rel='shortcut icon'>
<script src="/javascripts/all.js"></script>
</head>
<body class="docs docs_geode-native docs_geode-native_cpp docs_geode-native_cpp_113 docs_geode-native_cpp_113_remote-queries has-subnav">
<div class="viewport">
<div class='wrap'>
<script type="text/javascript">
document.domain = "apache.org";
</script>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<header class="header header-layout">
<h1 class="logo">
<a href="/">
<img src="/images/Apache_Geode_logo_symbol_white.png" style="width:30px;">
Apache Geode Native C++ Documentation
</a>
</h1>
<div class="header-links js-bar-links">
<div class="btn-menu" data-behavior="MenuMobile"></div>
<div class="header-item"><a href="http://geode.apache.org">Back to Product Page</a></div>
<div class="header-item">
<a href="http://geode.apache.org/community" target="_blank">Community</a>
</div>
</div>
</header>
<div class="container">
<!--googleoff: index-->
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<div id="sub-nav" class="js-sidenav nav-container" role="navigation">
<a class="sidenav-title" data-behavior="SubMenuMobile">Doc Index</a>
<div class="nav-content">
<ul>
<li>
<a href="/docs/geode-native/cpp/113/about-client-users-guide.html">Apache Geode Native Documentation</a>
</li>
<li class="has_submenu">
<a href="/docs/geode-native/cpp/113/getting-started/getting-started-nc-client.html">Getting Started with the Native Library</a>
<ul>
<li>
<a href="/docs/geode-native/cpp/113/getting-started/getting-started-nc-client.html#set_up_dev_environment">Set Up Your Development Environment</a>
</li>
<li>
<a href="/docs/geode-native/cpp/113/getting-started/getting-started-nc-client.html#establish_cluster_access">Establish Access to a Geode Cluster</a>
</li>
<li>
<a href="/docs/geode-native/cpp/113/getting-started/getting-started-nc-client.html#app_dev_walkthroughs">Application Development Walkthroughs</a>
</li>
<li>
<a href="/docs/geode-native/cpp/113/getting-started/getting-started-nc-client.html#programming_examples">Programming Examples</a>
</li>
<li>
<a href="/docs/geode-native/cpp/113/getting-started/put-get-example.html">Put/Get/Remove Examples</a>
</li>
</ul>
</li>
<li class="has_submenu">
<a href="/docs/geode-native/cpp/113/configuring/configuration.html">Configuring a Client Application</a>
<ul>
<li>
<a href="/docs/geode-native/cpp/113/configuring/system-level-configuration.html">System Level Configuration</a>
</li>
</ul>
</li>
<li>
<a href="/docs/geode-native/cpp/113/configuring/config-client-cache.html">Configuring the Client Cache</a>
</li>
<li class="has_submenu">
<a href="/docs/geode-native/cpp/113/regions/regions.html">Configuring Regions</a>
<ul>
<li>
<a href="/docs/geode-native/cpp/113/regions/registering-interest-for-entries.html">Registering Interest for Entries</a>
</li>
<li>
<a href="/docs/geode-native/cpp/113/regions/region-attributes.html">Region Attributes</a>
</li>
</ul>
</li>
<li class="has_submenu">
<a href="/docs/geode-native/cpp/113/connection-pools/configuring-pools.html">Configuring Pools</a>
<ul>
<li>
<a href="/docs/geode-native/cpp/113/connection-pools/client-pool-api.html">Native Client Pool API</a>
</li>
<li>
<a href="/docs/geode-native/cpp/113/connection-pools/configuring-pools-attributes-example.html">Pool Configuration Example and Settings</a>
</li>
<li>
<a href="/docs/geode-native/cpp/113/connection-pools/subscription-properties.html">Subscription Properties</a>
</li>
</ul>
</li>
<li>
<a href="/docs/geode-native/cpp/113/serialization/data-serialization.html">Serializing Data</a>
</li>
<li>
<a href="/docs/geode-native/cpp/113/remote-queries.html">Remote Queries</a>
</li>
<li>
<a href="/docs/geode-native/cpp/113/continuous-queries.html">Continuous Queries</a>
</li>
<li class="has_submenu">
<a href="/docs/geode-native/cpp/113/security/security.html">Security: Authentication and Encryption</a>
<ul>
<li>
<a href="/docs/geode-native/cpp/113/security/authentication.html">Authentication</a>
</li>
<li>
<a href="/docs/geode-native/cpp/113/security/sslclientserver.html">TLS/SSL Client-Server Communication Encryption</a>
</li>
</ul>
</li>
<li>
<a href="/docs/geode-native/cpp/113/function-execution.html">Function Execution</a>
</li>
<li>
<a href="/docs/geode-native/cpp/113/transactions.html">Transactions</a>
</li>
<li>
<a href="/docs/geode-native/cpp/113/configuring/sysprops.html">System Properties</a>
</li>
<li>
<a href="/docs/geode-native/cpp/113/client-cache-ref.html">Client Cache XML Reference</a>
</li>
</ul>
</div>
</div>
<!--googleon: index-->
<main class="content content-layout" id="js-content" role="main">
<a id="top"></a>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<span style="font-weight:200;font-size:31px;" style="float:left;">
<img src="/images/Apache_Geode_logo_symbol.png" style="height:26px;">
Apache Geode Native C++
</span>
<span class="local-header version-info" style="float:right;">
<a href="https://cwiki.apache.org/confluence/display/GEODE/Release+Notes">CHANGELOG</a>
</span>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<h1 class="title-container" >
Remote Queries
</h1>
<div id="js-quick-links" >
<div class="quick-links"><ul>
<li>
<a href="#RemoteQueryBasics">Remote Query Basics</a><ul>
<li><a href="#QueryLanguage">Query language: OQL</a></li>
<li><a href="#CreatingIndexes">Creating Indexes</a></li>
</ul>
</li>
<li>
<a href="#RemoteQueryAPI">Remote Query API</a><ul>
<li><a href="#Query">Query</a></li>
<li><a href="#ExecutingAQuery">Executing a Query from the Client</a></li>
<li><a href="#CppQueryExample">C++ Query Example</a></li>
</ul>
</li>
</ul></div>
</div>
<div class="to-top" id="js-to-top">
<a href="#top" title="back to top"></a>
</div>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>Use the remote query API to query your cached data stored on a cache server. </p>
<h2 id="remote-query-basics"><a id="RemoteQueryBasics"></a>Remote Query Basics</h2>
<p>Queries are evaluated and executed on the cache server, and the results are returned to the client.
You can optimize your queries by defining indexes on the cache server.</p>
<p>Querying and indexing operate only on remote cache server contents.</p>
<h3 id="query-language:-oql"><a id="QueryLanguage"></a>Query language: OQL</h3>
<p>Geode provides a SQL-like querying language called OQL that allows you to access data stored in Geode regions.
OQL is very similar to SQL, but OQL allows you to query complex objects, object attributes, and methods.</p>
<p>In the context of a query, specify the name of a region by its full path, starting with a slash (<code>/</code>).</p>
<p>The query language supports drilling down into nested object structures.
Nested data collections can be explicitly referenced in the FROM clause of a query.</p>
<p>A query execution returns its results as either a <code>ResultSet</code> or a <code>StructSet</code>. </p>
<p>Query language features and grammar are described in the Geode manual at
<a href="geodeman/developing/querying_basics/chapter_overview.html">Querying</a>.</p>
<h3 id="creating-indexes"><a id="CreatingIndexes"></a>Creating Indexes</h3>
<p>Indexes can provide significant performance gains for query execution. You create and maintain indexes on the cache server.
For detailed information about working with indexes configured on a cache server,
see <a href="geodeman/developing/query_index/query_index.html">Working with Indexes</a> in the server&rsquo;s documentation.</p>
<h2 id="remote-query-api"><a id="RemoteQueryAPI"></a>Remote Query API</h2>
<p>This section gives a general overview of the interfaces and classes that are provided by the query package API.</p>
<h3 id="query"><a id="Query"></a>Query</h3>
<p>You must create a <code>Query</code> object for each new query. The <code>Query</code> interface provides methods for
managing the compilation and execution of queries, and for retrieving an existing query string.</p>
<p>A <code>Query</code> is obtained from a <code>QueryService</code>, which is obtained from one of two sources:</p>
<ul>
<li><p>To create a <code>Query</code> that operates on the Geode server, use <code>apache::geode::client::Pool::getQueryService()</code> to instantiate a <code>QueryService</code> obtained from a <code>Pool</code>.</p></li>
<li><p>To create a <code>Query</code> that operates on your application&rsquo;s local cache, use <code>apache::geode::client::Cache::getQueryService()</code> to instantiate a <code>QueryService</code> obtained from a <code>Cache</code>.</p></li>
</ul>
<h3 id="executing-a-query-from-the-client"><a id="ExecutingAQuery"></a>Executing a Query from the Client</h3>
<p>The essential steps to create and execute a query are:</p>
<ol>
<li> Create an instance of the <code>QueryService</code> class. If you are using the pool API (recommended), you should obtain the <code>QueryService</code> from the pool.</li>
<li> Create a <code>Query</code> instance that is compatible with the OQL specification.</li>
<li> Use the <code>Query.execute()</code> method to submit the query string to the cache server. The server
remotely evaluates the query string and returns the results to the client.</li>
<li> Iterate through the returned objects.</li>
</ol>
<h3 id="c++-query-example"><a id="CppQueryExample"></a>C++ Query Example</h3>
<p>These C++ code excerpts are from the <code>examples/cpp/remotequery</code> example included in your client
distribution. See the example for full context.</p>
<p>Following the steps listed above,</p>
<ol>
<li><p>Obtain a <code>QueryService</code> object from the connection pool:</p>
<pre class="highlight plaintext"><code>std::shared_ptr&lt;QueryService&gt; queryService = nullptr;
queryService = pool-&gt;getQueryService();
</code></pre></li>
<li><p>Create a <code>Query</code> object by calling <code>QueryService.newQuery()</code>, specifying your OQL query as a string parameter:</p>
<pre class="highlight plaintext"><code>auto query = queryService-&gt;newQuery("SELECT * FROM /custom_orders WHERE quantity &gt; 30");
</code></pre></li>
<li><p>Execute the query. Collect the query output, returned as either a <code>ResultSet</code> or a <code>StructSet</code>, and iterate through the results:</p>
<pre class="highlight plaintext"><code>auto queryResults = query-&gt;execute();
for (auto&amp;&amp; value : *queryResults) {
auto&amp;&amp; order = std::dynamic_pointer_cast&lt;Order&gt;(value);
std::cout &lt;&lt; order-&gt;toString() &lt;&lt; std::endl;
}
</code></pre></li>
</ol>
</main>
</div>
</div>
</div>
<div id="scrim"></div>
<div class="container">
<footer class="site-footer-links">
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<div class="copyright">
<a href='/'>Apache Geode Documentation</a>
&copy; 2020 <a href='http://www.apache.org/'>The Apache Software Foundation</a>.
</div>
<div class="support">
Need help? <a href="http://geode.apache.org/community" target="_blank">Visit the Community</a>
</div>
</footer>
</div><!--end of container-->
</body>
</html>