<!--

    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.

-->

# IoTDB C++ client examples

[中文说明](README_zh.md)

Sample programs that link against the pre-built **IoTDB C++ Session SDK**
(`iotdb_session`). Thrift and Boost are **not** required at application compile
time; they are embedded inside the SDK shared library.

All examples connect to a running IoTDB instance (default `127.0.0.1:6667`,
user `root` / `root`).

| Example | Description |
|---------|-------------|
| `SessionExample` | Tree model: DDL, insert, query, delete |
| `AlignedTimeseriesSessionExample` | Aligned time series and templates |
| `MultiSvrNodeClient` | Multi-node insert/query loop |
| `tree_example` | C Session API (tree model) |

## Which SDK zip to use

Release CI ([client-cpp-package.yml](../../.github/workflows/client-cpp-package.yml))
publishes one zip per platform/toolchain:
`client-cpp-<version>-<classifier>.zip` (zip root contains `include/` and `lib/`).

| Deployment target | Classifier suffix |
|-------------------|-------------------|
| Linux x86_64, glibc ≥ 2.24, CXX11 ABI (**recommended**) | `linux-x86_64-glibc224` |
| Linux aarch64, glibc ≥ 2.24, CXX11 ABI (**recommended**) | `linux-aarch64-glibc224` |
| Linux x86_64, glibc ≥ 2.17, legacy ABI | `linux-x86_64-glibc217` |
| Linux aarch64, glibc ≥ 2.17, legacy ABI | `linux-aarch64-glibc217` |
| macOS x86_64 | `mac-x86_64` |
| macOS arm64 | `mac-aarch64` |
| Windows (match your Visual Studio version) | `windows-x86_64-vs2017` … `vs2026` |

The current build compiles Thrift 0.21 from source at CMake configure time.
Legacy `-Diotdb-tools-thrift.version=...` flags applied to the **old**
pre-built Thrift workflow only. On Linux, prefer **`glibc224`** when your host has
glibc ≥ 2.24 and you use the default `g++`. Use **`glibc217`** only for glibc 2.17
systems or legacy ABI; on Ubuntu 22/24 you may need `-D_GLIBCXX_USE_CXX11_ABI=0`
when linking against `glibc217`. See [client-cpp README](../../iotdb-client/client-cpp/README.md).

## SDK layout (after unpack)

The SDK zip produced by `client-cpp` contains **public headers only** and one
shared library:

```
client/
├── include/
│   ├── Session.h
│   ├── Export.h
│   └── ...          (17 public headers; no thrift/ or boost/)
└── lib/
    ├── iotdb_session.dll + iotdb_session.lib   (Windows)
    ├── libiotdb_session.so                     (Linux)
    └── libiotdb_session.dylib                  (macOS)
```

## Build the examples

### Option A – Maven (recommended in this repo)

From the repository root:

```bash
mvn clean package -DskipTests -P with-cpp -pl example/client-cpp-example -am
```

Maven unpacks the SDK zip into `example/client-cpp-example/target/client/` and
runs CMake in `target/`. Binaries are under `target/` (exact path depends on
the generator; on Windows with Visual Studio: `target/Release/`).

### Option B – CMake only (manual SDK)

1. Build or download the SDK and unpack it so `client/include` and
   `client/lib` exist (see layout above).
2. Copy `src/*.{cpp,c}` and `src/CMakeLists.txt` into one directory (or use
   `src/` as the source tree and place `client/` beside it).
3. Configure and build:

```bash
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
```

Windows (Visual Studio generator):

```powershell
cmake -S . -B build -A x64
cmake --build build --config Release
```

Each executable is built with the IoTDB runtime library copied **next to the
`.exe` / binary** (POST_BUILD step). Linux/macOS binaries use `$ORIGIN` rpath
so they resolve the `.so` / `.dylib` in the same directory.

Optional staging folder for deployment:

```bash
cmake --build build --target example-dist
# -> build/dist/ contains all example binaries + libiotdb_session.{so,dll,dylib}
```

## Run on a clean machine (no compiler, no IoTDB SDK headers)

You only need:

1. A running IoTDB server reachable from the machine.
2. The **example executable(s)** and the **IoTDB runtime library** in the
   **same directory** (or on the system library path).

Copy either from `build/.../Release/` (Windows) / `build/` (Ninja/Make) or from
`build/dist/` after `example-dist`.

### Windows

**Files to copy**

```
SessionExample.exe
iotdb_session.dll
```

(Repeat for the other example names if needed.)

**Prerequisites on the target PC**

- **64-bit Windows** (examples are built x64).
- **[Microsoft Visual C++ Redistributable for Visual Studio 2015–2022](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist)**  
  (x64). The SDK and examples are built with **`/MD`**; the redistributable
  supplies `vcruntime140.dll`, `msvcp140.dll`, etc.  
  Installing this package is enough—you do **not** need Visual Studio or the
  IoTDB SDK on the target machine.

**Run**

```powershell
.\SessionExample.exe
```

If you see “The code execution cannot proceed because VCRUNRuntime140.dll was
missing”, install the VC++ redistributable above.

You do **not** need a separate Thrift or Boost runtime; they are inside
`iotdb_session.dll`.

### Linux

**Files to copy**

```
SessionExample
libiotdb_session.so
chmod +x SessionExample
```

**Prerequisites on the target machine**

- **glibc** on the target must be **≥ the glibc version on the machine that
  built the SDK** (backward compatible only in that direction).

Check **build machine** (record in release notes):

```bash
ldd --version | head -1
# e.g. ldd (Ubuntu GLIBC 2.35-0ubuntu3) 2.35
```

Check **target machine**:

```bash
ldd --version | head -1
# must be >= build glibc (same major.minor or newer)
```

See which `GLIBC_` symbols the binary needs:

```bash
objdump -T SessionExample | grep GLIBC_ | sed 's/.*GLIBC_/GLIBC_/' | sort -Vu | tail -5
objdump -T libiotdb_session.so | grep GLIBC_ | sed 's/.*GLIBC_/GLIBC_/' | sort -Vu | tail -5
```

If the target glibc is too old, you'll get errors like
`version 'GLIBC_2.34' not found` at runtime. Rebuild the SDK on an older distro
(or in an older container) to widen compatibility.

**Run** (with `.so` beside the binary):

```bash
./SessionExample
```

If the shared library is not found:

```bash
export LD_LIBRARY_PATH=.
./SessionExample
```

No separate Thrift install is required.

### macOS

Copy the example binary and `libiotdb_session.dylib` together. The target macOS
version should be **≥ the deployment target used to build the SDK**. Check with:

```bash
otool -L SessionExample
```

## Development notes

- **Windows**: Application and SDK both use **`/MD`** (dynamic CRT). This
  matches a default Visual Studio project; link `iotdb_session.lib`, ship
  `iotdb_session.dll`.
- **Linux**: SDK is `libiotdb_session.so`; link it directly. Prefer shipping
  the `.so` next to your binary or setting `RPATH` to `$ORIGIN`.
- Examples assume IoTDB is listening on `127.0.0.1:6667`; change host/port in
  the source if needed.

## Project layout in this module

```
client-cpp-example/
├── pom.xml              # Maven: unpack SDK + invoke CMake
├── README.md
├── README_zh.md
└── src/
    ├── CMakeLists.txt
    ├── SessionExample.cpp
    ├── AlignedTimeseriesSessionExample.cpp
    ├── MultiSvrNodeClient.cpp
    └── tree_example.c
```

After `mvn package`, the runnable tree is under `target/` (sources, `client/`,
and CMake build output).
