| <!DOCTYPE html> |
| |
| |
| |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <!-- Bugyard widget embed --> |
| <script type="text/javascript"> |
| !function(){ |
| if("function" != typeof window.bugyard){ |
| var a = function(){ a.c(arguments) }; |
| a.q = [], a.c = function(b){ a.q.push(b) }; |
| window.bugyard = a; |
| |
| var b = document.createElement("script"); |
| b.setAttribute("data-bugyard", "610961912c35ff001493163a"); |
| b.setAttribute("async", "async"); |
| b.setAttribute("defer", "defer"); |
| b.setAttribute("src", "/assets/js/bugyard.min.js"); |
| document.getElementsByTagName("head")[0].appendChild(b); |
| } |
| }(); |
| window.bugyard("hideButton"); |
| </script> |
| <!-- Bugyard widget embed --> |
| |
| <link rel="preload" href='/assets/js/code-tabs.js?1' as="script" crossorigin> |
| <link rel="preload" href='/assets/js/page-nav.js' as="script" crossorigin> |
| <link rel="preload" href='/assets/js/docs-menu.js?20201005' as="script" crossorigin> |
| |
| <style>:root{--gg-red:#ec1c24;--gg-orange:#ec1c24;--gg-orange-dark:#bc440b;--gg-orange-filter:invert(47%) sepia(61%) saturate(1950%) hue-rotate(345deg) brightness(100%) contrast(95%);--gg-dark-gray:#333333;--orange-line-thickness:3px;--block-code-background:rgba(241, 241, 241, 20%);--inline-code-background:rgba(241, 241, 241, 90%);--padding-top:25px;--link-color:#ec1c24;--body-background:#fcfcfc}header{min-height:var(--header-height);background:#fff;box-shadow:0 4px 10px 0 #eee,0 0 4px 0 #d5d5d5;z-index:1}header>.container{display:grid;grid-template-columns:auto auto 1fr auto auto auto;grid-template-areas:'left-toggle home nav ver api search lang';grid-template-rows:40px;flex-direction:row;align-items:center;justify-content:flex-start;padding:12px 20px;max-width:1400px;margin:0 auto}header nav>ul{padding:0;margin:0;list-style:none;display:inherit}header .dropdown{display:none;position:fixed;top:calc(var(--header-height) - 12px);width:auto;background:#fff;box-shadow:0 4px 4px 0 rgba(0,0,0,.24),0 0 4px 0 rgba(0,0,0,.12);border-radius:4px;padding-top:10px;padding-bottom:12px;z-index:2}header .dropdown li{display:flex}header .dropdown a{color:grey!important;font-size:16px;padding-top:5px;padding-bottom:4px}header .menu{border:none;background:0 0;width:40px;height:40px;margin-right:12px;grid-area:left-toggle}header .menu img{width:18px;height:12px}header .search-close,header .top-nav-toggle{background:0 0;border:none;padding:0;width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;color:var(--gg-dark-gray);font-size:26px}header .search-toggle{grid-area:search}header .top-nav-toggle{grid-area:top-toggle}header .home{grid-area:home;margin-right:auto}header .home img{height:36px}header #api-docs{grid-area:api;margin:0;display:flex}header #api-docs .dropdown{padding:.5em 0}header #api-docs a{padding:9px 14px;color:var(--gg-dark-gray)!important;text-decoration:none;white-space:nowrap}header #api-docs .dropdown-item a{font-weight:400;display:block;width:100%;min-width:150px}header #lang-selector li{list-style:none;display:flex;padding:9px 14px}header #lang-selector li a{display:flex;color:#000;align-items:center}header #lang-selector li a span{font-size:10px;margin-left:5px}header #lang-selector li a img{width:25px}header #lang-selector li .dropdown{margin-left:-70px}header #lang-selector li .dropdown .dropdown-item{padding:0 1em;margin-bottom:8px}header #lang-selector li .dropdown .dropdown-item a span{font-size:14px}header .search{margin-left:auto;margin-right:20px;grid-area:search}header .search input[type=search]{color:var(--gg-dark-gray);background:rgba(255,255,255,.8);border:1px solid #ccc;padding:10px 15px;font-family:inherit;max-width:148px;height:37px;font-size:14px;-webkit-appearance:unset;appearance:unset}header #version-selector{list-style:none;grid-area:ver;line-height:28px;border-radius:0;margin-right:10px;border:none;color:var(--gg-dark-gray);padding:5px 16px 5px 10px;white-space:nowrap;font-size:14px;width:auto;text-align:right;box-sizing:border-box;text-align-last:right;-moz-appearance:none;-webkit-appearance:none;appearance:none;direction:rtl}header #version-selector option{direction:ltr}header>nav{grid-area:nav;font-size:18px;display:flex;flex-direction:row;margin:0 20px}header #lang-selector{grid-area:lang}header .search-close{margin-right:10px}@media (max-width:600px){header .search{margin-right:5px}header .search input[type=search]{max-width:110px}}header:not(.narrow-header) .search-close,header:not(.narrow-header) .top-nav-toggle{display:none}@media (max-width:670px){header>.container{grid-template-columns:auto 1fr auto;grid-template-areas:'left-toggle home search' 'ver api lang'}header #lang-selector li{justify-content:flex-end}}pre,pre.rouge{padding:8px 15px;background:var(--block-code-background)!important;border-radius:5px;border:1px solid #e5e5e5;overflow-x:auto;min-height:36px;line-height:18px;color:#545454}code{color:#545454}pre.rouge code{background:0 0!important}:not(pre)>code{background:var(--inline-code-background);padding:.1em .5em;background-clip:padding-box;border-radius:3px;color:#545454;font-size:90%}.listingblock .content{position:relative}.highlight{color:#586e75}.highlight .c1{color:#657b83}.highlight .nt{color:#b58900}.highlight .o{color:#93a1a1}.highlight .k{color:#6c71c4}.highlight .kt{color:#cb4b16}.highlight .s,.highlight .s1{color:#859900}.highlight .nc{color:#b58900}.highlight .na{color:#268bd2}body{font-family:'Open Sans',sans-serif}h1,h2{color:#000;font-weight:400;font-family:'Open Sans'}h1{font-size:36px;line-height:40px}a{text-decoration:none;color:var(--link-color)}section{color:#545454}.admonitionblock .icon .title{display:none}body{--header-height:64px;--promotion-bar-height:35px;--footer-height:104px;--footer-gap:60px;padding:0;margin:0;display:flex;flex-direction:column;min-height:100vh;background-color:var(--body-background);font-family:'Open Sans',sans-serif}body>section{flex:1}header{position:-webkit-sticky;position:sticky;top:0;z-index:2}*{box-sizing:border-box}@media (max-width:670px){body{--header-height:97px}}.left-nav{padding:10px 20px;width:289px;overflow-y:auto;top:calc(var(--header-height) + var(--promotion-bar-height));height:calc(100vh - var(--header-height) - var(--promotion-bar-height));font-family:'Open Sans';padding-top:var(--padding-top);background-color:var(--body-background)}.left-nav li{list-style:none}.left-nav a,.left-nav button{text-decoration:none;color:#757575;font-size:16px;display:inline-flex;width:100%;margin:2px 0;padding:.25em .375em;background:0 0;border:none;font:inherit;text-align:left}.left-nav a.active{color:var(--link-color)}.left-nav .nav-group{margin-left:6px;font-size:14px}.left-nav nav{border-left:2px solid #ddd;margin-bottom:5px}.left-nav nav.collapsed{display:none}.left-nav nav>li>a,.left-nav nav>li>button{padding-left:20px;text-align:left}.left-nav nav>li>a.active{border-left:var(--orange-line-thickness) solid var(--active-color);padding-left:calc(20px - var(--orange-line-thickness))}.left-nav nav.sub_pages{border:none}.left-nav nav.sub_pages a{padding-left:32px}.left-nav .state-indicator{margin-left:auto;margin-top:5px;width:6.2px;height:10px;flex:0 0 auto;filter:invert(49%) sepia(4%) saturate(5%) hue-rotate(23deg) brightness(92%) contrast(90%)}.left-nav button.expanded .state-indicator{transform:rotate(90deg)}.right-nav{width:289px;padding:12px 26px;overflow-y:auto;height:calc(100vh - var(--header-height));top:0;position:-webkit-sticky;position:sticky;display:flex;flex-direction:column;font-family:'Open sans';padding-top:var(--padding-top);background-color:#fff}.right-nav ul{list-style:none;padding:0;margin:0}.right-nav li{padding:0}.right-nav a{--border-width:0px;font-size:14px;color:#757575;padding-left:calc(15px * var(--nesting-level) + 8px - var(--border-width));margin:.3em 0;display:inline-block}.right-nav .sectlevel1{border-left:2px solid #ddd}.right-nav .sectlevel1{--nesting-level:0}.right-nav .sectlevel2{--nesting-level:1}.right-nav .sectlevel3{--nesting-level:2}@media (max-width:1200px){.right-nav{width:230px}}.right-nav footer{font-size:12px;padding:calc(var(--footer-gap) * .3) 0 5px;text-align:left;margin:auto 0 0}section.page-docs{display:grid;grid-template-columns:auto 1fr auto;grid-template-rows:100%;grid-template-areas:'left-nav content right-nav';line-height:20px;max-width:1440px;margin:auto;width:100%}section.page-docs>article{border-left:1px solid #eee;background-color:#fff;padding:0 50px 30px;grid-area:content;overflow:hidden;font-family:sans-serif;font-size:16px;color:#545454;line-height:1.6em}section.page-docs>article h1,section.page-docs>article h2{font-family:'Open Sans'}@media (max-width:800px){section.page-docs>article{padding-left:15px;padding-right:15px}}section.page-docs .edit-link{position:relative;top:10px;right:10px;float:right;padding-top:calc(var(--header-height) + var(--padding-top));margin-top:calc((-1 * var(--header-height)))}section.page-docs h1,section.page-docs h2{margin-bottom:0}section.page-docs h2[id]{margin-top:var(--margin-top);margin-bottom:calc(var(--margin-top) * .5);z-index:-1}section.page-docs .title{font-style:italic}section.page-docs h2[id]{--margin-top:1.2em}.left-nav{bottom:0;position:-webkit-sticky;position:sticky}.left-nav{grid-area:left-nav}.right-nav{grid-area:right-nav}.left-nav__overlay{display:none;background:rgba(0,0,0,.5);z-index:1;position:fixed;top:var(--header-height);bottom:0;left:0;right:0}@media (max-width:990px){body:not(.hide-left-nav) .left-nav__overlay{display:block}nav.left-nav{background:#fafafa;grid-area:left-nav;box-shadow:0 4px 4px 0 rgba(0,0,0,.24),0 0 4px 0 rgba(0,0,0,.12);min-height:calc(100vh - var(--header-height));max-height:calc(100vh - var(--header-height));position:fixed;bottom:0;top:var(--header-height);z-index:2}section.page-docs>article{grid-column-start:left-nav;grid-column-end:content;grid-row:content}}@media (max-width:800px){nav.right-nav{display:none}}:target:before{content:"";display:block;margin-top:calc(var(--header-height) * -1);height:var(--header-height);width:1px}@media (min-width:600px) and (max-width:900px){:target:before{content:"";display:block;width:1px;margin-top:-150px;height:150px}} |
| #header #promotion-bar { background-color: #333333; padding: 8px; } |
| #header #promotion-bar p { font-size: 14px; line-height: 1.4em; font-weight: 600; padding: 0; margin: 0; color: #f0f0f0; text-align: center;} |
| #header #promotion-bar p a { color: #FCB903; } </style> |
| |
| |
| |
| |
| <meta name="ignite-version" content="3.1.0" /> |
| <title>C++ Client | Ignite Documentation</title> |
| |
| <link rel="canonical" href="/docs/latest/developers-guide/clients/cpp" /> |
| |
| |
| <link rel="shortcut icon" href="/favicon.ico"> |
| <meta name='viewport' content='width=device-width, height=device-height, initial-scale=1.0, minimum-scale=1.0'> |
| |
| <link rel="preload" as="style" href="/assets/css/fonts.css" /> |
| <link rel="stylesheet" href="/assets/css/fonts.css" media="print" onload="this.media='all'"> |
| <noscript> |
| <link rel="stylesheet" href="/assets/css/fonts.css"> |
| </noscript> |
| <link href="/docs/pagefind/pagefind-ui.css" rel="stylesheet"> |
| <script src="/docs/pagefind/pagefind-ui.js"></script> |
| <script> |
| window.addEventListener('DOMContentLoaded', () => { |
| new PagefindUI({ |
| element: "#search", |
| showSubResults: true, |
| showImages: false, |
| }); |
| }); |
| </script> |
| <script src="/assets/js/mermaid.min.js"></script> |
| <script> |
| document.addEventListener('DOMContentLoaded', function () { |
| const blocks = document.querySelectorAll('.mermaid'); |
| if (blocks.length) { |
| mermaid.initialize({ startOnLoad: false }); |
| mermaid.run(); |
| } |
| }); |
| </script> |
| |
| <script> |
| // AnchorJS - v4.2.0 - 2019-01-01 |
| // https://github.com/bryanbraun/anchorjs |
| // Copyright (c) 2019 Bryan Braun; Licensed MIT |
| !function(A,e){"use strict";"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():(A.AnchorJS=e(),A.anchors=new A.AnchorJS)}(this,function(){"use strict";return function(A){function f(A){A.icon=A.hasOwnProperty("icon")?A.icon:"",A.visible=A.hasOwnProperty("visible")?A.visible:"hover",A.placement=A.hasOwnProperty("placement")?A.placement:"right",A.ariaLabel=A.hasOwnProperty("ariaLabel")?A.ariaLabel:"Anchor",A.class=A.hasOwnProperty("class")?A.class:"",A.base=A.hasOwnProperty("base")?A.base:"",A.truncate=A.hasOwnProperty("truncate")?Math.floor(A.truncate):64,A.titleText=A.hasOwnProperty("titleText")?A.titleText:""}function p(A){var e;if("string"==typeof A||A instanceof String)e=[].slice.call(document.querySelectorAll(A));else{if(!(Array.isArray(A)||A instanceof NodeList))throw new Error("The selector provided to AnchorJS was invalid.");e=[].slice.call(A)}return e}this.options=A||{},this.elements=[],f(this.options),this.isTouchDevice=function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)},this.add=function(A){var e,t,i,n,o,s,a,r,c,h,l,u,d=[];if(f(this.options),"touch"===(l=this.options.visible)&&(l=this.isTouchDevice()?"always":"hover"),A||(A="h2, h3, h4, h5, h6"),0===(e=p(A)).length)return this;for(function(){if(null===document.head.querySelector("style.anchorjs")){var A,e=document.createElement("style");e.className="anchorjs",e.appendChild(document.createTextNode("")),void 0===(A=document.head.querySelector('[rel="stylesheet"], style'))?document.head.appendChild(e):document.head.insertBefore(e,A),e.sheet.insertRule(" .anchorjs-link { opacity: 0; text-decoration: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }",e.sheet.cssRules.length),e.sheet.insertRule(" *:hover > .anchorjs-link, .anchorjs-link:focus { opacity: 1; }",e.sheet.cssRules.length),e.sheet.insertRule(" [data-anchorjs-icon]::after { content: attr(data-anchorjs-icon); }",e.sheet.cssRules.length),e.sheet.insertRule(' @font-face { font-family: "anchorjs-icons"; src: url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype"); }',e.sheet.cssRules.length)}}(),t=document.querySelectorAll("[id]"),i=[].map.call(t,function(A){return A.id}),o=0;o<e.length;o++)if(this.hasAnchorJSLink(e[o]))d.push(o);else{if(e[o].hasAttribute("id"))n=e[o].getAttribute("id");else if(e[o].hasAttribute("data-anchor-id"))n=e[o].getAttribute("data-anchor-id");else{for(c=r=this.urlify(e[o].textContent),a=0;void 0!==s&&(c=r+"-"+a),a+=1,-1!==(s=i.indexOf(c)););s=void 0,i.push(c),e[o].setAttribute("id",c),n=c}n.replace(/-/g," "),(h=document.createElement("a")).className="anchorjs-link "+this.options.class,h.setAttribute("aria-label",this.options.ariaLabel),h.setAttribute("data-anchorjs-icon",this.options.icon),this.options.titleText&&(h.title=this.options.titleText),u=document.querySelector("base")?window.location.pathname+window.location.search:"",u=this.options.base||u,h.href=u+"#"+n,"always"===l&&(h.style.opacity="1"),""===this.options.icon&&(h.style.font="1em/1 anchorjs-icons","left"===this.options.placement&&(h.style.lineHeight="inherit")),"left"===this.options.placement?(h.style.position="absolute",h.style.marginLeft="-1em",h.style.paddingRight="0.5em",e[o].insertBefore(h,e[o].firstChild)):(h.style.paddingLeft="0.375em",e[o].appendChild(h))}for(o=0;o<d.length;o++)e.splice(d[o]-o,1);return this.elements=this.elements.concat(e),this},this.remove=function(A){for(var e,t,i=p(A),n=0;n<i.length;n++)(t=i[n].querySelector(".anchorjs-link"))&&(-1!==(e=this.elements.indexOf(i[n]))&&this.elements.splice(e,1),i[n].removeChild(t));return this},this.removeAll=function(){this.remove(this.elements)},this.urlify=function(A){return this.options.truncate||f(this.options),A.trim().replace(/\'/gi,"").replace(/[& +$,:;=?@"#{}|^~[`%!'<>\]\.\/\(\)\*\\\n\t\b\v]/g,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(A){var e=A.firstChild&&-1<(" "+A.firstChild.className+" ").indexOf(" anchorjs-link "),t=A.lastChild&&-1<(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ");return e||t||!1}}}); |
| </script> |
| |
| </head> |
| <body> |
| <header> |
| <!--#include virtual="/includes/promotion_banner.html" --> |
| <div class="container"> |
| <button type='button' class='menu' title='Docs menu'> |
| <img src="/assets/images/menu-icon.svg" width="18" height="12" alt="menu icon" /> |
| </button> |
| <div class='home'> |
| <a href="/" class='home' title='Apache Ignite home'> |
| <img src="/assets/images/apache_ignite_logo.svg" alt="Apache Ignite logo" width="103" height="36" > |
| </a> |
| </div> |
| |
| |
| |
| <select id="product-selector"> |
| <option value="/docs/ignite2/latest" >Ignite 2</option> |
| <option value="/docs/ignite3/latest"selected>Ignite 3</option> |
| </select> |
| |
| <select id="version-selector"> |
| <option value="3.1.0">3.1.0</option> |
| </select> |
| |
| |
| <nav id="api-docs"><ul> |
| <li><a href="#">APIs</a> |
| <nav class='dropdown'> |
| <ul> |
| |
| <li class="dropdown-item"><a href="/releases/ignite3/3.1.0/javadoc/">Java</a></li> |
| <li class="dropdown-item"><a href="/releases/ignite3/3.1.0/dotnetdoc/">C#/.NET</a></li> |
| <li class="dropdown-item"><a href="/releases/ignite3/3.1.0/cppdoc/">C++</a></li> |
| <li class="dropdown-item"><a href="/releases/ignite3/3.1.0/openapi.yaml">OpenAPI</a></li> |
| |
| </ul> |
| </nav> |
| </li> |
| |
| <li><a href="#">Examples</a> |
| <nav class="dropdown"> |
| <ul> |
| <li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/examples" target="_blank" rel="noopener" title="Apache Ignite Java examples">Java</a></li> |
| |
| <li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/dotnet/examples" target="_blank" rel="noopener" title="Apache Ignite C#/.NET examples">C#/.NET</a></li> |
| |
| <li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/cpp/examples" target="_blank" rel="noopener" title="Apache Ignite C++ examples">C++</a></li> |
| |
| <li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/python/examples" target="_blank" rel="noopener" title="Apache Ignite Python examples">Python</a></li> |
| |
| <li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/nodejs/examples" target="_blank" rel="noopener" title="Apache Ignite NodeJS examples">NodeJS</a></li> |
| |
| <li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/php/examples" target="_blank" rel="noopener" title="Apache Ignite PHP examples">PHP</a></li> |
| </ul> |
| </nav> |
| </li></ul> |
| </nav> |
| |
| |
| |
| <div id="search-button"></div> |
| |
| <nav id="lang-selector"><ul> |
| <li><a href="#"><img src="/assets/images/icon_lang_en_75x75.jpg" alt="English language icon" width="25" height="25" /><span>▼</span></a> |
| <nav class="dropdown"> |
| <li class="dropdown-item"><a href="/docs/latest/" ><img src="/assets/images/icon_lang_en_75x75.jpg" alt="English language icon" width="25" height="25" /><span>English</span></a></li> |
| <li class="dropdown-item"><a href="https://www.ignite-service.cn/doc/java/" target="_blank" rel="noopener"><img src="/assets/images/icon_lang_cn_75x75.jpg" width="25" height="25" alt="Chinese language icon" /><span>Chinese</span></a></li> |
| </nav> |
| </li></ul> |
| </nav> |
| |
| <button type='button' class='top-nav-toggle'>⋮</button> |
| |
| </div> |
| <div id="search-wrapper"> |
| <div id="search"></div> |
| </div> |
| </header> |
| |
| <link rel="stylesheet" href="/assets/css/docs.css"> |
| <section class='page-docs'> |
| |
| |
| |
| |
| |
| |
| <nav class='left-nav' data-swiftype-index='false'> |
| |
| |
| <li> |
| |
| |
| <a href="/docs/ignite3/latest/index" class='' >About Apache Ignite 3</a> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Installation<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/installation/installing-using-zip" |
| class='' |
| >Installing Using ZIP Archive</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/installation/deb-rpm" |
| class='' |
| >Installing DEB or RPM package</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/installation/installing-using-docker" |
| class='' |
| >Installing Docker</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/installation/migration-from-ai3-1" |
| class='' |
| >Migration From Ignite 3.0</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Migration From Ignite 2<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/installation/migration-from-ai2/config" class=''>Configuration Migration</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/installation/migration-from-ai2/persistent-migration" class=''>Persistent Data Migration</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/installation/migration-from-ai2/ai2-functions" class=''>SQL Function Comparison</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Getting Started<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/quick-start/getting-started-guide" |
| class='' |
| >Quick Start</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/quick-start/start-cluster" |
| class='' |
| >Start Ignite 3 Cluster</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/quick-start/explore-sql" |
| class='' |
| >Explore SQL Capabilities</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/quick-start/persist-data" |
| class='' |
| >Persist Your Data</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/quick-start/java-api" |
| class='' |
| >Use Java API</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| <a href="/docs/ignite3/latest/quick-start/embedded-mode" class='' >Embedded Mode</a> |
| |
| </li> |
| |
| <li> |
| |
| |
| <a href="/docs/ignite3/latest/ignite-cli-tool" class='' >Ignite CLI Tool</a> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle expanded '>Developers Guide<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group expanded'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/developers-guide/table-api" |
| class='' |
| >Table API</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='expanded parent '>Clients<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages expanded parent"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/clients/overview" class=''>Overview</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/clients/java" class=''>Java Clients</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/clients/dotnet" class=''>.NET Clients</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/clients/cpp" class='active'>C++ Clients</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/clients/python" class=''>Python Clients</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/clients/ado" class=''>ADO.NET Integration</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/clients/linq" class=''>.NET LINQ Queries</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/clients/jdbc-driver" class=''>JDBC Driver</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Working with SQL<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/sql/calcite-based-sql-engine" class=''>Introduction</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/sql/sql-api" class=''>SQL API</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/sql/jdbc-driver" class=''>JDBC Driver</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/sql/odbc/odbc-driver" class=''>ODBC Driver</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/sql/odbc/connection-string" class=''>ODBC Connection String</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/sql/odbc/querying-modifying-data" class=''>Querying and Modifying Data</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/sql/odbc/specification" class=''>Standard Conformance</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/developers-guide/java-to-tables" |
| class='' |
| >Tables from Java Classes</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Distributed Computing<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/compute/compute" class=''>Compute API</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/compute/serialization" class=''>Serialization</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/developers-guide/transactions" |
| class='' |
| >Transactions</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/developers-guide/data-streamer" |
| class='' |
| >Data Streaming</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/developers-guide/code-deployment/code-deployment" |
| class='' |
| >Code Deployment</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Events<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/events/overview" class=''>Overview</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/events/events-list" class=''>Events List</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/developers-guide/rest/rest-api" |
| class='' |
| >REST API</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Administrator's Guide<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Ignite Configuration<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/config/node-config" class=''>Node Configuration Parameters</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/config/cluster-config" class=''>Cluster Configuration Parameters</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/config/cli-config" class=''>CLI Configuration</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Distributed Storage<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/storage/storage-overview" class=''>Storage Overview</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/storage/storage-profiles" class=''>Storage Profiles</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/storage/data-partitions" class=''>Data Partitions</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/storage/distribution-zones" class=''>Distribution Zones</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Storage Engines<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/storage/engines/storage-engines" class=''>Storage Engines Overview</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/storage/engines/aipersist" class=''>AIPersist Engine</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/storage/engines/rocksdb" class=''>RocksDB Engine</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/storage/engines/aimem" class=''>AIMem Engine</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/administrators-guide/lifecycle" |
| class='' |
| >Cluster Lifecycle</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/administrators-guide/colocation" |
| class='' |
| >Data Colocation</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/administrators-guide/disaster-recovery" |
| class='' |
| >Disaster Recovery for Partitions</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/administrators-guide/system-groups-recovery" |
| class='' |
| >Disaster Recovery for System Groups</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/administrators-guide/cluster-security" |
| class='' |
| >Cluster Security</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Security and Authentication<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/security/ssl-tls" class=''>SSL/TLS</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/security/authentication" class=''>Authentication</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Metrics and Monitoring<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/metrics/configuring-metrics" class=''>Configuring Metrics</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/metrics/metrics-list" class=''>Metrics List</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/metrics/system-views" class=''>System Views</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/administrators-guide/handling-exceptions" |
| class='' |
| >Handling Exceptions</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>SQL Reference<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/sql-reference/ddl" |
| class='' |
| >Data Definition Language (DDL)</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/sql-reference/dml" |
| class='' |
| >Data Manipulation Language (DML)</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/sql-reference/transactions" |
| class='' |
| >Transactions</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/sql-reference/distribution-zones" |
| class='' |
| >Distribution Zones</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/sql-reference/data-types" |
| class='' |
| >Data Types</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/sql-reference/operators-and-functions" |
| class='' |
| >Supported Operators and Functions</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/sql-reference/operational-commands" |
| class='' |
| >Operational Commands</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/sql-reference/grammar-reference" |
| class='' |
| >Grammar Reference</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/sql-reference/keywords" |
| class='' |
| >Keywords</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/sql-reference/sql-conformance" |
| class='' |
| >SQL Conformance</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Explain Statement<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/sql-reference/explain-statement" class=''>Explain Statement</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/sql-reference/explain-operators-list" class=''>List Of Operators</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>SQL Performance Tuning<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/sql-tuning/sql-tuning" |
| class='' |
| >SQL Performance Tuning</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/sql-tuning/using-explain" |
| class='' |
| >Improving Queries</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| <a href="/docs/ignite3/latest/general-tips" class='' >General Configuration Tips</a> |
| |
| </li> |
| |
| <li> |
| |
| |
| <a href="/docs/ignite3/latest/glossary/glossary" class='' >Glossary</a> |
| |
| </li> |
| |
| </nav> |
| <div class="left-nav__overlay"></div> |
| |
| |
| <article data-swiftype-index='true'> |
| <a class='edit-link' href="https://github.com/apache/ignite-3/tree/main/docs/_docs/developers-guide/clients/cpp.adoc" target="_blank">Edit</a> |
| |
| <h1>C++ Client</h1> |
| |
| <div id="preamble"> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>Ignite 3 clients connect to the cluster via a standard socket connection. Unlike Ignite 2.x, there is no separate Thin and Thick clients in Ignite 3. All clients are 'thin'.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Clients do not become a part of the cluster topology, never hold any data, and are not used as a destination for compute calculations.</p> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="getting-started">Getting Started</h2> |
| <div class="sectionbody"> |
| <div class="sect2"> |
| <h3 id="prerequisites">Prerequisites</h3> |
| <div class="paragraph"> |
| <p>To run C++ client, you need a C++ build environment to run the <code>cmake</code> command:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>C++ compiler supporting C++ 17;</p> |
| </li> |
| <li> |
| <p>CMake 3.10+;</p> |
| </li> |
| <li> |
| <p>One of build systems: make, ninja, MS Visual Studio, or other.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="installation"><a id="build-ref"></a>Installation</h3> |
| <div class="paragraph"> |
| <p>The source code of the C++ client comes with the Ignite 3 distribution. To build it, use the following commands:</p> |
| </div> |
| <code-tabs><code-tab data-tab='Windows'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="bat"><span class="nb">mkdir</span> <span class="kd">cmake</span><span class="na">-build-release |
| </span><span class="nb">cd</span> <span class="kd">cmake</span><span class="na">-build-release |
| </span><span class="kd">cmake</span> .. |
| <span class="kd">cmake</span> <span class="na">--build </span>. <span class="na">-j</span><span class="m">8</span></code></pre> |
| </div> |
| </div></code-tab><code-tab data-tab='Linux'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="bash"><span class="nb">mkdir </span>cmake-build-release |
| <span class="nb">cd </span>cmake-build-release |
| cmake .. <span class="nt">-DCMAKE_BUILD_TYPE</span><span class="o">=</span>Release |
| cmake <span class="nt">--build</span> <span class="nb">.</span> <span class="nt">-j8</span></code></pre> |
| </div> |
| </div></code-tab><code-tab data-tab='MacOS'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="bash"><span class="nb">mkdir </span>cmake-build-release |
| <span class="nb">cd </span>cmake-build-release |
| cmake .. <span class="nt">-DCMAKE_BUILD_TYPE</span><span class="o">=</span>Release |
| cmake <span class="nt">--build</span> <span class="nb">.</span> <span class="nt">-j8</span></code></pre> |
| </div> |
| </div></code-tab></code-tabs> |
| </div> |
| <div class="sect2"> |
| <h3 id="building-c-client-on-centos-7-and-rhel-7">Building C++ Client on CentOS 7 and RHEL 7</h3> |
| <div class="paragraph"> |
| <p>If you are running on older systems, you need to set up the environment in the following way:</p> |
| </div> |
| <div class="olist arabic"> |
| <ol class="arabic"> |
| <li> |
| <p>Install <code>epel-release</code> and <code>centos-release-scl</code>:</p> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="bash">yum <span class="nb">install </span>epel-release centos-release-scl</code></pre> |
| </div> |
| </div> |
| </li> |
| <li> |
| <p>Update yum and accept <code>epel-release</code> keys:</p> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="bash">yum update</code></pre> |
| </div> |
| </div> |
| </li> |
| <li> |
| <p>Install the build tools from the main repository and <code>devtoolset-11</code>:</p> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="bash">yum <span class="nb">install </span>devtoolset-11-gcc devtoolset-11-gcc-c++ cmake3 git java-11-openjdk-devel gtest-devel gmock-devel</code></pre> |
| </div> |
| </div> |
| </li> |
| <li> |
| <p>Create and update alternatives for <code>cmake</code> to force the use of <code>cmake3</code>:</p> |
| <div class="olist loweralpha"> |
| <ol class="loweralpha" type="a"> |
| <li> |
| <p>Create an alternative for <code>cmake2</code> with priority 10:</p> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="bash"><span class="nb">sudo </span>alternatives <span class="nt">--install</span> /usr/local/bin/cmake cmake /usr/bin/cmake 10 <span class="se">\</span> |
| <span class="nt">--slave</span> /usr/local/bin/ctest ctest /usr/bin/ctest <span class="se">\</span> |
| <span class="nt">--slave</span> /usr/local/bin/cpack cpack /usr/bin/cpack <span class="se">\</span> |
| <span class="nt">--slave</span> /usr/local/bin/ccmake ccmake /usr/bin/ccmake <span class="se">\</span> |
| <span class="nt">--family</span> cmake</code></pre> |
| </div> |
| </div> |
| </li> |
| <li> |
| <p>Create an alternative for <code>cmake3</code> with priority 20:</p> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="bash"><span class="nb">sudo </span>alternatives <span class="nt">--install</span> /usr/local/bin/cmake cmake /usr/bin/cmake3 20 <span class="se">\</span> |
| <span class="nt">--slave</span> /usr/local/bin/ctest ctest /usr/bin/ctest3 <span class="se">\</span> |
| <span class="nt">--slave</span> /usr/local/bin/cpack cpack /usr/bin/cpack3 <span class="se">\</span> |
| <span class="nt">--slave</span> /usr/local/bin/ccmake ccmake /usr/bin/ccmake3 <span class="se">\</span> |
| <span class="nt">--family</span> cmake</code></pre> |
| </div> |
| </div> |
| </li> |
| <li> |
| <p>Check that the default alternative points to <code>cmake3</code>:</p> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="bash"><span class="nb">sudo </span>alternatives <span class="nt">--config</span> cmake</code></pre> |
| </div> |
| </div> |
| </li> |
| </ol> |
| </div> |
| </li> |
| <li> |
| <p>Enable the <code>devtoolset-11</code> compiler and start bash with the updated PATH:</p> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="bash">scl <span class="nb">enable </span>devtoolset-11 bash</code></pre> |
| </div> |
| </div> |
| </li> |
| <li> |
| <p>Start the <a href="/docs/ignite3/latest/developers-guide/clients/overview#build-ref">build</a> in the shell you have established.</p> |
| </li> |
| </ol> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="client-connector-configuration">Client Connector Configuration</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>Client connection parameters are controlled by the client connector configuration. By default, Ignite accepts client connections on port 10800. You can change the configuration for the node by using the <a href="/docs/ignite3/latest/ignite-cli-tool">CLI tool</a> at any time.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Here is how the client connector configuration looks like in the JSON format.</p> |
| </div> |
| <div class="admonitionblock note"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <div class="title">Note</div> |
| </td> |
| <td class="content"> |
| In Ignite 3, you can create and maintain the configuration in either JSON or HOCON format. |
| </td> |
| </tr> |
| </table> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="json"><span class="nl">"ignite"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> |
| </span><span class="nl">"clientConnector"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> |
| </span><span class="nl">"port"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="mi">10800</span><span class="p">,</span><span class="w"> |
| </span><span class="nl">"idleTimeoutMillis"</span><span class="w"> </span><span class="p">:</span><span class="mi">3000</span><span class="p">,</span><span class="w"> |
| </span><span class="nl">"sendServerExceptionStackTraceToClient"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w"> |
| </span><span class="nl">"ssl"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> |
| </span><span class="nl">"enabled"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w"> |
| </span><span class="nl">"clientAuth"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="s2">"require"</span><span class="p">,</span><span class="w"> |
| </span><span class="nl">"keyStore"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> |
| </span><span class="nl">"path"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="s2">"KEYSTORE_PATH"</span><span class="p">,</span><span class="w"> |
| </span><span class="nl">"password"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="s2">"SSL_STORE_PASS"</span><span class="w"> |
| </span><span class="p">},</span><span class="w"> |
| </span><span class="nl">"trustStore"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> |
| </span><span class="nl">"path"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="s2">"TRUSTSTORE_PATH"</span><span class="p">,</span><span class="w"> |
| </span><span class="nl">"password"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="s2">"SSL_STORE_PASS"</span><span class="w"> |
| </span><span class="p">},</span><span class="w"> |
| </span><span class="p">},</span><span class="w"> |
| </span><span class="p">},</span><span class="w"> |
| </span><span class="p">}</span></code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>The table below covers the configuration for client connector:</p> |
| </div> |
| <table class="tableblock frame-all grid-all stripes-none stretch"> |
| <colgroup> |
| <col style="width: 20%;"> |
| <col style="width: 20%;"> |
| <col style="width: 60%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Property</th> |
| <th class="tableblock halign-left valign-top">Default</th> |
| <th class="tableblock halign-left valign-top">Description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">connectTimeoutMillis</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">5000</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Connection attempt timeout, in milliseconds.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">idleTimeoutMillis</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">How long the client can be idle before the connection is dropped, in milliseconds. By default, there is no limit.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">metricsEnabled</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Defines if client metrics are collected.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">port</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">10800</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">The port the client connector will be listening to.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">sendServerExceptionStackTraceToClient</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Defines if cluster exceptions are sent to the client.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">ssl.ciphers</p></td> |
| <td class="tableblock halign-left valign-top"></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">The cipher used for SSL communication.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">ssl.clientAuth</p></td> |
| <td class="tableblock halign-left valign-top"></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Type of client authentication used by clients. For more information, see <a href="/docs/ignite3/latest/administrators-guide/security/ssl-tls">SSL/TLS</a>.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">ssl.enabled</p></td> |
| <td class="tableblock halign-left valign-top"></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Defines if SSL is enabled.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">ssl.keyStore.password</p></td> |
| <td class="tableblock halign-left valign-top"></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">SSL keystore password.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">ssl.keyStore.path</p></td> |
| <td class="tableblock halign-left valign-top"></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Path to the SSL keystore.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">ssl.keyStore.type</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>PKCS12</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">The type of SSL keystore used.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">ssl.trustStore.password</p></td> |
| <td class="tableblock halign-left valign-top"></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">SSL keystore password.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">ssl.trustStore.path</p></td> |
| <td class="tableblock halign-left valign-top"></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Path to the SSL keystore.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">ssl.trustStore.type</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>PKCS12</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">The type of SSL keystore used.</p></td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="paragraph"> |
| <p>Here is how you can change the parameters:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre>node config update clientConnector.port=10469</pre> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="connecting-to-cluster">Connecting to Cluster</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>To initialize a client, use the <code>IgniteClient</code> class, and provide it with the configuration:</p> |
| </div> |
| <code-tabs><code-tab data-tab='C++'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="cpp"><span class="k">using</span> <span class="k">namespace</span> <span class="n">ignite</span><span class="p">;</span> |
| |
| <span class="n">ignite_client_configuration</span> <span class="n">cfg</span><span class="p">{</span><span class="s">"127.0.0.1"</span><span class="p">};</span> |
| <span class="k">auto</span> <span class="n">client</span> <span class="o">=</span> <span class="n">ignite_client</span><span class="o">::</span><span class="n">start</span><span class="p">(</span><span class="n">cfg</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">seconds</span><span class="p">(</span><span class="mi">5</span><span class="p">));</span></code></pre> |
| </div> |
| </div></code-tab></code-tabs> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="authentication">Authentication</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>To pass authentication information, pass it to <code>IgniteClient</code> builder:</p> |
| </div> |
| <code-tabs></code-tabs> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="user-object-serialization">User Object Serialization</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>Ignite supports mapping user objects to table tuples. This ensures that objects created in any programming language can be used for key-value operations directly.</p> |
| </div> |
| <div class="sect2"> |
| <h3 id="limitations">Limitations</h3> |
| <div class="paragraph"> |
| <p>There are limitations to user types that can be used for such a mapping. Some limitations are common, and others are platform-specific due to the programming language used.</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Only flat field structure is supported, meaning no nesting user objects. This is because Ignite tables, and therefore tuples have flat structure themselves;</p> |
| </li> |
| <li> |
| <p>Fields should be mapped to Ignite types;</p> |
| </li> |
| <li> |
| <p>All fields in user type should either be mapped to Table column or explicitly excluded;</p> |
| </li> |
| <li> |
| <p>All columns from Table should be mapped to some field in the user type;</p> |
| </li> |
| <li> |
| <p><strong>C++ only</strong>: User has to provide marshalling functions explicitly as there is no reflection to generate them based on user type structure.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="usage-examples">Usage Examples</h3> |
| <code-tabs><code-tab data-tab='C++'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="cpp"><span class="k">struct</span> <span class="nc">account</span> <span class="p">{</span> |
| <span class="n">account</span><span class="p">()</span> <span class="o">=</span> <span class="k">default</span><span class="p">;</span> |
| <span class="n">account</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="kt">int64_t</span> <span class="n">id</span><span class="p">)</span> <span class="o">:</span> <span class="n">id</span><span class="p">(</span><span class="n">id</span><span class="p">)</span> <span class="p">{}</span> |
| <span class="n">account</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="kt">int64_t</span> <span class="n">id</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="kt">int64_t</span> <span class="n">balance</span><span class="p">)</span> <span class="o">:</span> <span class="n">id</span><span class="p">(</span><span class="n">id</span><span class="p">),</span> <span class="n">balance</span><span class="p">(</span><span class="n">balance</span><span class="p">)</span> <span class="p">{}</span> |
| |
| <span class="n">std</span><span class="o">::</span><span class="kt">int64_t</span> <span class="n">id</span><span class="p">{</span><span class="mi">0</span><span class="p">};</span> |
| <span class="n">std</span><span class="o">::</span><span class="kt">int64_t</span> <span class="n">balance</span><span class="p">{</span><span class="mi">0</span><span class="p">};</span> |
| <span class="p">};</span> |
| |
| <span class="k">namespace</span> <span class="n">ignite</span> <span class="p">{</span> |
| |
| <span class="k">template</span><span class="o"><</span><span class="p">></span> |
| <span class="n">ignite_tuple</span> <span class="n">convert_to_tuple</span><span class="p">(</span><span class="n">account</span> <span class="o">&&</span><span class="n">value</span><span class="p">)</span> <span class="p">{</span> |
| <span class="n">ignite_tuple</span> <span class="n">tuple</span><span class="p">;</span> |
| |
| <span class="n">tuple</span><span class="p">.</span><span class="n">set</span><span class="p">(</span><span class="s">"id"</span><span class="p">,</span> <span class="n">value</span><span class="p">.</span><span class="n">id</span><span class="p">);</span> |
| <span class="n">tuple</span><span class="p">.</span><span class="n">set</span><span class="p">(</span><span class="s">"balance"</span><span class="p">,</span> <span class="n">value</span><span class="p">.</span><span class="n">balance</span><span class="p">);</span> |
| |
| <span class="k">return</span> <span class="n">tuple</span><span class="p">;</span> |
| <span class="p">}</span> |
| |
| <span class="k">template</span><span class="o"><</span><span class="p">></span> |
| <span class="n">account</span> <span class="nf">convert_from_tuple</span><span class="p">(</span><span class="n">ignite_tuple</span><span class="o">&&</span> <span class="n">value</span><span class="p">)</span> <span class="p">{</span> |
| <span class="n">account</span> <span class="n">res</span><span class="p">;</span> |
| |
| <span class="n">res</span><span class="p">.</span><span class="n">id</span> <span class="o">=</span> <span class="n">value</span><span class="p">.</span><span class="n">get</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="kt">int64_t</span><span class="o">></span><span class="p">(</span><span class="s">"id"</span><span class="p">);</span> |
| |
| <span class="c1">// Sometimes only key columns are returned, i.e. "id",</span> |
| <span class="c1">// so we have to check whether there are any other columns.</span> |
| <span class="k">if</span> <span class="p">(</span><span class="n">value</span><span class="p">.</span><span class="n">column_count</span><span class="p">()</span> <span class="o">></span> <span class="mi">1</span><span class="p">)</span> |
| <span class="n">res</span><span class="p">.</span><span class="n">balance</span> <span class="o">=</span> <span class="n">value</span><span class="p">.</span><span class="n">get</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="kt">int64_t</span><span class="o">></span><span class="p">(</span><span class="s">"balance"</span><span class="p">);</span> |
| |
| <span class="k">return</span> <span class="n">res</span><span class="p">;</span> |
| <span class="p">}</span> |
| |
| <span class="p">}</span> <span class="c1">// namespace ignite</span></code></pre> |
| </div> |
| </div></code-tab></code-tabs> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="sql-api">SQL API</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>Ignite 3 is focused on SQL, and SQL API is the primary way to work with the data. You can read more about supported SQL statements in the <a href="/docs/ignite3/latest/sql-reference/ddl">SQL Reference</a> section. Here is how you can send SQL requests:</p> |
| </div> |
| <code-tabs><code-tab data-tab='C++'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="cpp"><span class="n">result_set</span> <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="p">.</span><span class="n">get_sql</span><span class="p">().</span><span class="n">execute</span><span class="p">(</span><span class="nb">nullptr</span><span class="p">,</span> <span class="p">{</span><span class="s">"select name from tbl where id = ?"</span><span class="p">},</span> <span class="p">{</span><span class="n">std</span><span class="o">::</span><span class="kt">int64_t</span><span class="p">{</span><span class="mi">42</span><span class="p">}});</span> |
| <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">ignite_tuple</span><span class="o">></span> <span class="n">page</span> <span class="o">=</span> <span class="n">result_set</span><span class="p">.</span><span class="n">current_page</span><span class="p">();</span> |
| <span class="n">ignite_tuple</span><span class="o">&</span> <span class="n">row</span> <span class="o">=</span> <span class="n">page</span><span class="p">.</span><span class="n">front</span><span class="p">();</span></code></pre> |
| </div> |
| </div></code-tab></code-tabs> |
| <div class="sect2"> |
| <h3 id="sql-scripts">SQL Scripts</h3> |
| <div class="paragraph"> |
| <p>The default API executes SQL statements one at a time. If you want to execute large SQL statements, pass them to the <code>executeScript()</code> method. These statements will be executed in order.</p> |
| </div> |
| <code-tabs><code-tab data-tab='C++'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="cpp"><span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">script</span> <span class="o">=</span> <span class="s">""</span> |
| <span class="o">+</span> <span class="s">"CREATE TABLE IF NOT EXISTS Person (id int primary key, city_id int, name varchar, age int, company varchar);"</span> |
| <span class="o">+</span> <span class="s">"INSERT INTO Person (1,3, 'John', 43, 'Sample')"</span><span class="p">;</span> |
| |
| <span class="n">client</span><span class="p">.</span><span class="n">get_sql</span><span class="p">().</span><span class="n">execute_script</span><span class="p">(</span><span class="n">script</span><span class="p">);</span></code></pre> |
| </div> |
| </div></code-tab></code-tabs> |
| <div class="admonitionblock note"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <div class="title">Note</div> |
| </td> |
| <td class="content"> |
| Execution of each statement is considered complete when the first page is ready to be returned. As a result, when working with large data sets, SELECT statement may be affected by later statements in the same script. |
| </td> |
| </tr> |
| </table> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="transactions">Transactions</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>All table operations in Ignite 3 are transactional. You can provide an explicit transaction as a first argument of any Table and SQL API call. If you do not provide an explicit transaction, an implicit one will be created for every call.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Here is how you can provide a transaction explicitly:</p> |
| </div> |
| <code-tabs><code-tab data-tab='C++'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="cpp"><span class="k">auto</span> <span class="n">accounts</span> <span class="o">=</span> <span class="n">table</span><span class="p">.</span><span class="n">get_key_value_view</span><span class="o"><</span><span class="n">account</span><span class="p">,</span> <span class="n">account</span><span class="o">></span><span class="p">();</span> |
| |
| <span class="n">account</span> <span class="nf">init_value</span><span class="p">(</span><span class="mi">42</span><span class="p">,</span> <span class="mi">16'000</span><span class="p">);</span> |
| <span class="n">accounts</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="nb">nullptr</span><span class="p">,</span> <span class="p">{</span><span class="mi">42</span><span class="p">},</span> <span class="n">init_value</span><span class="p">);</span> |
| |
| <span class="k">auto</span> <span class="n">tx</span> <span class="o">=</span> <span class="n">client</span><span class="p">.</span><span class="n">get_transactions</span><span class="p">().</span><span class="n">begin</span><span class="p">();</span> |
| |
| <span class="n">std</span><span class="o">::</span><span class="n">optional</span><span class="o"><</span><span class="n">account</span><span class="o">></span> <span class="n">res_account</span> <span class="o">=</span> <span class="n">accounts</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="o">&</span><span class="n">tx</span><span class="p">,</span> <span class="p">{</span><span class="mi">42</span><span class="p">});</span> |
| <span class="n">res_account</span><span class="o">-></span><span class="n">balance</span> <span class="o">+=</span> <span class="mi">500</span><span class="p">;</span> |
| <span class="n">accounts</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="o">&</span><span class="n">tx</span><span class="p">,</span> <span class="p">{</span><span class="mi">42</span><span class="p">},</span> <span class="n">res_account</span><span class="p">);</span> |
| |
| <span class="n">assert</span><span class="p">(</span><span class="n">accounts</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="o">&</span><span class="n">tx</span><span class="p">,</span> <span class="p">{</span><span class="mi">42</span><span class="p">})</span><span class="o">-></span><span class="n">balance</span> <span class="o">==</span> <span class="mi">16'500</span><span class="p">);</span> |
| |
| <span class="n">tx</span><span class="p">.</span><span class="n">rollback</span><span class="p">();</span> |
| |
| <span class="n">assert</span><span class="p">(</span><span class="n">accounts</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="o">&</span><span class="n">tx</span><span class="p">,</span> <span class="p">{</span><span class="mi">42</span><span class="p">})</span><span class="o">-></span><span class="n">balance</span> <span class="o">==</span> <span class="mi">16'000</span><span class="p">);</span></code></pre> |
| </div> |
| </div></code-tab></code-tabs> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="table-api">Table API</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>To execute table operations on a specific table, you need to get a specific view of the table and use one of its methods. You can only create new tables by using SQL API.</p> |
| </div> |
| <div class="paragraph"> |
| <p>When working with tables, you can use built-in Tuple type, which is a set of key-value pairs underneath, or map the data to your own types for a strongly-typed access. Here is how you can work with tables:</p> |
| </div> |
| <div class="sect2"> |
| <h3 id="getting-a-table-instance">Getting a Table Instance</h3> |
| <div class="paragraph"> |
| <p>First, get an instance of the table. To obtain an instance of table, use the <code>IgniteTables.table(String)</code> method. You can also use <code>IgniteTables.tables()</code> method to list all existing tables.</p> |
| </div> |
| <code-tabs><code-tab data-tab='C++'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="cpp"><span class="k">using</span> <span class="k">namespace</span> <span class="n">ignite</span><span class="p">;</span> |
| |
| <span class="k">auto</span> <span class="n">table_api</span> <span class="o">=</span> <span class="n">client</span><span class="p">.</span><span class="n">get_tables</span><span class="p">();</span> |
| <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">table</span><span class="o">></span> <span class="n">existing_tables</span> <span class="o">=</span> <span class="n">table_api</span><span class="p">.</span><span class="n">get_tables</span><span class="p">();</span> |
| <span class="n">table</span> <span class="n">first_table</span> <span class="o">=</span> <span class="n">existing_tables</span><span class="p">.</span><span class="n">front</span><span class="p">();</span> |
| |
| <span class="n">std</span><span class="o">::</span><span class="n">optional</span><span class="o"><</span><span class="n">table</span><span class="o">></span> <span class="n">my_table</span> <span class="o">=</span> <span class="n">table_api</span><span class="p">.</span><span class="n">get_table</span><span class="p">(</span><span class="s">"MY_TABLE"</span><span class="p">);</span></code></pre> |
| </div> |
| </div></code-tab></code-tabs> |
| </div> |
| <div class="sect2"> |
| <h3 id="basic-table-operations">Basic Table Operations</h3> |
| <div class="paragraph"> |
| <p>Once you’ve got a table you need to get a specific view to choose how you want to operate table records.</p> |
| </div> |
| <div class="sect3"> |
| <h4 id="binary-record-view">Binary Record View</h4> |
| <div class="paragraph"> |
| <p>A binary record view. It can be used to operate table tuples directly.</p> |
| </div> |
| <code-tabs><code-tab data-tab='C++'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="cpp"><span class="n">record_view</span><span class="o"><</span><span class="n">ignite_tuple</span><span class="o">></span> <span class="n">view</span> <span class="o">=</span> <span class="n">table</span><span class="p">.</span><span class="n">get_record_binary_view</span><span class="p">();</span> |
| |
| <span class="n">ignite_tuple</span> <span class="n">record</span><span class="p">{</span> |
| <span class="p">{</span><span class="s">"id"</span><span class="p">,</span> <span class="mi">42</span><span class="p">},</span> |
| <span class="p">{</span><span class="s">"name"</span><span class="p">,</span> <span class="s">"John Doe"</span><span class="p">}</span> |
| <span class="p">};</span> |
| |
| <span class="n">view</span><span class="p">.</span><span class="n">upsert</span><span class="p">(</span><span class="nb">nullptr</span><span class="p">,</span> <span class="n">record</span><span class="p">);</span> |
| <span class="n">std</span><span class="o">::</span><span class="n">optional</span><span class="o"><</span><span class="n">ignite_tuple</span><span class="o">></span> <span class="n">res_record</span> <span class="o">=</span> <span class="n">view</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="nb">nullptr</span><span class="p">,</span> <span class="p">{</span><span class="s">"id"</span><span class="p">,</span> <span class="mi">42</span><span class="p">});</span> |
| |
| <span class="n">assert</span><span class="p">(</span><span class="n">res_record</span><span class="p">.</span><span class="n">has_value</span><span class="p">());</span> |
| <span class="n">assert</span><span class="p">(</span><span class="n">res_record</span><span class="o">-></span><span class="n">column_count</span><span class="p">()</span> <span class="o">==</span> <span class="mi">2</span><span class="p">);</span> |
| <span class="n">assert</span><span class="p">(</span><span class="n">res_record</span><span class="o">-></span><span class="n">get</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="kt">int64_t</span><span class="o">></span><span class="p">(</span><span class="s">"id"</span><span class="p">)</span> <span class="o">==</span> <span class="mi">42</span><span class="p">);</span> |
| <span class="n">assert</span><span class="p">(</span><span class="n">res_record</span><span class="o">-></span><span class="n">get</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span><span class="p">(</span><span class="s">"name"</span><span class="p">)</span> <span class="o">==</span> <span class="s">"John Doe"</span><span class="p">);</span></code></pre> |
| </div> |
| </div></code-tab></code-tabs> |
| </div> |
| <div class="sect3"> |
| <h4 id="record-view">Record View</h4> |
| <div class="paragraph"> |
| <p>A record view mapped to a user type. It can be used to operate table using user objects which are mapped to table tuples.</p> |
| </div> |
| <code-tabs><code-tab data-tab='C++'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="cpp"><span class="n">record_view</span><span class="o"><</span><span class="n">person</span><span class="o">></span> <span class="n">view</span> <span class="o">=</span> <span class="n">table</span><span class="p">.</span><span class="n">get_record_view</span><span class="o"><</span><span class="n">person</span><span class="o">></span><span class="p">();</span> |
| |
| <span class="n">person</span> <span class="nf">record</span><span class="p">(</span><span class="mi">42</span><span class="p">,</span> <span class="s">"John Doe"</span><span class="p">);</span> |
| |
| <span class="n">view</span><span class="p">.</span><span class="n">upsert</span><span class="p">(</span><span class="nb">nullptr</span><span class="p">,</span> <span class="n">record</span><span class="p">);</span> |
| <span class="n">std</span><span class="o">::</span><span class="n">optional</span><span class="o"><</span><span class="n">person</span><span class="o">></span> <span class="n">res_record</span> <span class="o">=</span> <span class="n">view</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="nb">nullptr</span><span class="p">,</span> <span class="n">person</span><span class="p">{</span><span class="mi">42</span><span class="p">});</span> |
| |
| <span class="n">assert</span><span class="p">(</span><span class="n">res</span><span class="p">.</span><span class="n">has_value</span><span class="p">());</span> |
| <span class="n">assert</span><span class="p">(</span><span class="n">res</span><span class="o">-></span><span class="n">id</span> <span class="o">==</span> <span class="mi">42</span><span class="p">);</span> |
| <span class="n">assert</span><span class="p">(</span><span class="n">res</span><span class="o">-></span><span class="n">name</span> <span class="o">==</span> <span class="s">"John Doe"</span><span class="p">);</span></code></pre> |
| </div> |
| </div></code-tab></code-tabs> |
| </div> |
| <div class="sect3"> |
| <h4 id="key-value-binary-view">Key-Value Binary View</h4> |
| <div class="paragraph"> |
| <p>A binary key-value view. It can be used to operate table using key and value tuples separately.</p> |
| </div> |
| <code-tabs><code-tab data-tab='C++'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="cpp"><span class="n">key_value_view</span><span class="o"><</span><span class="n">ignite_tuple</span><span class="p">,</span> <span class="n">ignite_tuple</span><span class="o">></span> <span class="n">kv_view</span> <span class="o">=</span> <span class="n">table</span><span class="p">.</span><span class="n">get_key_value_binary_view</span><span class="p">();</span> |
| |
| <span class="n">ignite_tuple</span> <span class="n">key_tuple</span><span class="p">{{</span><span class="s">"id"</span><span class="p">,</span> <span class="mi">42</span><span class="p">}};</span> |
| <span class="n">ignite_tuple</span> <span class="n">val_tuple</span><span class="p">{{</span><span class="s">"name"</span><span class="p">,</span> <span class="s">"John Doe"</span><span class="p">}};</span> |
| |
| <span class="n">kv_view</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="nb">nullptr</span><span class="p">,</span> <span class="n">key_tuple</span><span class="p">,</span> <span class="n">val_tuple</span><span class="p">);</span> |
| <span class="n">std</span><span class="o">::</span><span class="n">optional</span><span class="o"><</span><span class="n">ignite_tuple</span><span class="o">></span> <span class="n">res_tuple</span> <span class="o">=</span> <span class="n">kv_view</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="nb">nullptr</span><span class="p">,</span> <span class="n">key_tuple</span><span class="p">);</span> |
| |
| <span class="n">assert</span><span class="p">(</span><span class="n">res_tuple</span><span class="p">.</span><span class="n">has_value</span><span class="p">());</span> |
| <span class="n">assert</span><span class="p">(</span><span class="n">res_tuple</span><span class="o">-></span><span class="n">column_count</span><span class="p">()</span> <span class="o">==</span> <span class="mi">2</span><span class="p">);</span> |
| <span class="n">assert</span><span class="p">(</span><span class="n">res_tuple</span><span class="o">-></span><span class="n">get</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="kt">int64_t</span><span class="o">></span><span class="p">(</span><span class="s">"id"</span><span class="p">)</span> <span class="o">==</span> <span class="mi">42</span><span class="p">);</span> |
| <span class="n">assert</span><span class="p">(</span><span class="n">res_tuple</span><span class="o">-></span><span class="n">get</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span><span class="p">(</span><span class="s">"name"</span><span class="p">)</span> <span class="o">==</span> <span class="s">"John Doe"</span><span class="p">);</span></code></pre> |
| </div> |
| </div></code-tab></code-tabs> |
| </div> |
| <div class="sect3"> |
| <h4 id="key-value-view">Key-Value View</h4> |
| <div class="paragraph"> |
| <p>A key-value view with user objects. It can be used to operate table using key and value user objects mapped to table tuples.</p> |
| </div> |
| <code-tabs><code-tab data-tab='C++'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="cpp"><span class="n">key_value_view</span><span class="o"><</span><span class="n">person</span><span class="p">,</span> <span class="n">person</span><span class="o">></span> <span class="n">kv_view</span> <span class="o">=</span> <span class="n">table</span><span class="p">.</span><span class="n">get_key_value_view</span><span class="o"><</span><span class="n">person</span><span class="p">,</span> <span class="n">person</span><span class="o">></span><span class="p">();</span> |
| |
| <span class="n">kv_view</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="nb">nullptr</span><span class="p">,</span> <span class="p">{</span><span class="mi">42</span><span class="p">},</span> <span class="p">{</span><span class="s">"John Doe"</span><span class="p">});</span> |
| <span class="n">std</span><span class="o">::</span><span class="n">optional</span><span class="o"><</span><span class="n">person</span><span class="o">></span> <span class="n">res</span> <span class="o">=</span> <span class="n">kv_view</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="nb">nullptr</span><span class="p">,</span> <span class="p">{</span><span class="mi">42</span><span class="p">});</span> |
| |
| <span class="n">assert</span><span class="p">(</span><span class="n">res</span><span class="p">.</span><span class="n">has_value</span><span class="p">());</span> |
| <span class="n">assert</span><span class="p">(</span><span class="n">res</span><span class="o">-></span><span class="n">id</span> <span class="o">==</span> <span class="mi">42</span><span class="p">);</span> |
| <span class="n">assert</span><span class="p">(</span><span class="n">res</span><span class="o">-></span><span class="n">name</span> <span class="o">==</span> <span class="s">"John Doe"</span><span class="p">);</span></code></pre> |
| </div> |
| </div></code-tab></code-tabs> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="copyright"> |
| © 2025 The Apache Software Foundation.<br/> |
| Apache, Apache Ignite, the Apache feather and the Apache Ignite logo are either registered trademarks or trademarks of The Apache Software Foundation. |
| |
| </div> |
| |
| </article> |
| <nav class="right-nav" data-swiftype-index='false'> |
| <div class="toc-wrapper"> |
| <ul class="sectlevel1"> |
| <li><a href="#getting-started">Getting Started</a> |
| <ul class="sectlevel2"> |
| <li><a href="#prerequisites">Prerequisites</a></li> |
| <li><a href="#installation">Installation</a></li> |
| <li><a href="#building-c-client-on-centos-7-and-rhel-7">Building C++ Client on CentOS 7 and RHEL 7</a></li> |
| </ul> |
| </li> |
| <li><a href="#client-connector-configuration">Client Connector Configuration</a></li> |
| <li><a href="#connecting-to-cluster">Connecting to Cluster</a></li> |
| <li><a href="#authentication">Authentication</a></li> |
| <li><a href="#user-object-serialization">User Object Serialization</a> |
| <ul class="sectlevel2"> |
| <li><a href="#limitations">Limitations</a></li> |
| <li><a href="#usage-examples">Usage Examples</a></li> |
| </ul> |
| </li> |
| <li><a href="#sql-api">SQL API</a> |
| <ul class="sectlevel2"> |
| <li><a href="#sql-scripts">SQL Scripts</a></li> |
| </ul> |
| </li> |
| <li><a href="#transactions">Transactions</a></li> |
| <li><a href="#table-api">Table API</a> |
| <ul class="sectlevel2"> |
| <li><a href="#getting-a-table-instance">Getting a Table Instance</a></li> |
| <li><a href="#basic-table-operations">Basic Table Operations</a> |
| <ul class="sectlevel3"> |
| <li><a href="#binary-record-view">Binary Record View</a></li> |
| <li><a href="#record-view">Record View</a></li> |
| <li><a href="#key-value-binary-view">Key-Value Binary View</a></li> |
| <li><a href="#key-value-view">Key-Value View</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </div> |
| |
| |
| <nav class="promo-nav"> |
| <!--#include virtual="/includes/docs_rightnav_promotion.html" --> |
| <!--a href="#" data-trigger-bugyard-feedback="true" id="doc-feedback-btn">Docs Feedback</a--> |
| </nav> |
| |
| </nav> |
| |
| </section> |
| <script type='module' src='/assets/js/code-copy-to-clipboard.js' async crossorigin></script> |
| |
| <script> |
| // inits deep anchors -- needs to be done here because of https://www.bryanbraun.com/anchorjs/#dont-run-it-too-late |
| anchors.add('.page-docs h1, .page-docs h2, .page-docs h3:not(.discrete), .page-docs h4, .page-docs h5'); |
| anchors.options = { |
| placement: 'right', |
| visible: 'always' |
| }; |
| </script> |
| |
| <script type='module' src='/assets/js/index.js?1763137387' async crossorigin></script> |
| <script type='module' src='/assets/js/versioning.js?1763137387' async crossorigin></script> |
| <script type='module' src='/assets/js/railroad-diagram.js?1763137387' async></script> |
| <script type='module' src='/assets/js/search.js?1763137387' defer crossorigin></script> |
| |
| <link rel="stylesheet" href="/assets/css/styles.css?1763137387" media="print" onload="this.media='all'"> |
| <noscript><link media="all" rel="stylesheet" href="/assets/css/styles.css?1763137387"></noscript> |
| |
| <link rel="stylesheet" href="/assets/css/docsearch.min.css" media="print" onload="this.media='all'"> |
| <noscript><link media="all" rel="stylesheet" href="/assets/css/docsearch.min.css"></noscript> |
| |
| |
| </body> |
| |
| </html> |