11# tntcxx — Tarantool C++ Connector
22
3- This repository contains the tntcxx Tarantool C++ connector code. tntcxx is an
4- open-source Tarantool C++ connector (compliant to C++17) designed with high
3+ This repository contains the tntcxx Tarantool C++ connector code. tntcxx is an
4+ open-source Tarantool C++ connector (compliant to C++17) designed with high
55efficiency in mind.
66
77## Building tntcxx
@@ -25,21 +25,21 @@ subdirectory of your project or as an embedded dependency.
2525
26261 . Make tntcxx's source code available to the main build. This can be done a few
2727different ways:
28- * Download the tntcxx source code manually and place it at a known location.
28+ * Download the tntcxx source code manually and place it at a known location.
2929 This is the least flexible approach and can make it more difficult to use
3030 with continuous integration systems, etc.
3131 * Embed the tntcxx source code as a direct copy in the main project's source
32- tree. This is often the simplest approach, but is also the hardest to keep
32+ tree. This is often the simplest approach, but is also the hardest to keep
3333 up to date. Some organizations may not permit this method.
3434 * Add tntcxx as a [ git submodule] ( https://git-scm.com/docs/git-submodule ) or
3535 equivalent. This may not always be possible or appropriate. Git submodules,
3636 for example, have their own set of advantages and drawbacks.
3737 * Use the CMake [ ` FetchContent ` ] ( https://cmake.org/cmake/help/latest/module/FetchContent.html )
38- commands to download tntcxx as part of the build's configure step. This
38+ commands to download tntcxx as part of the build's configure step. This
3939 approach doesn't have the limitations of the other methods.
4040
41- The last of the above methods is implemented with a small piece of CMake code
42- that downloads and pulls the tntcxx code into the main build. Just add the
41+ The last of the above methods is implemented with a small piece of CMake code
42+ that downloads and pulls the tntcxx code into the main build. Just add the
4343following snippet to your CMakeLists.txt:
4444``` cmake
4545include(FetchContent)
@@ -50,7 +50,7 @@ FetchContent_Declare(
5050FetchContent_MakeAvailable(tntcxx)
5151```
5252
53- After obtaining tntcxx sources using the rest of the methods, you can use the
53+ After obtaining tntcxx sources using the rest of the methods, you can use the
5454following CMake command to incorporate tntcxx into your CMake project:
5555``` cmake
5656add_subdirectory(${TNTCXX_SOURCE_DIR})
@@ -64,8 +64,8 @@ target_link_libraries(example tntcxx::tntcxx)
6464
6565##### Running tntcxx Tests with CMake
6666
67- Use the ` -DTNTCXX_BUILD_TESTING=ON ` option to run the tntcxx tests. This option
68- is enabled by default if the tntcxx project is determined to be the top level
67+ Use the ` -DTNTCXX_BUILD_TESTING=ON ` option to run the tntcxx tests. This option
68+ is enabled by default if the tntcxx project is determined to be the top level
6969project. Note that ` BUILD_TESTING ` must also be on (the default).
7070
7171For example, to run the tntcxx tests, you could use this script:
8080
8181### CMake Option Synopsis
8282
83- - ` -DTNTCXX_BUILD_TESTING=ON ` must be set to enable testing. This option is
84- enabled by default if the tntcxx project is determined to be the top level
83+ - ` -DTNTCXX_BUILD_TESTING=ON ` must be set to enable testing. This option is
84+ enabled by default if the tntcxx project is determined to be the top level
8585project.
8686
8787## Internals
@@ -107,7 +107,7 @@ as template parameter of buffer.
107107Connector can be embedded in any C++ application with including main header:
108108` #include "<path-to-cloned-repo>/src/Client/Connector.hpp" `
109109
110- ### Objects instantiation
110+ ### Objects Instantiation
111111
112112To create client one should specify buffer's and network provider's implementations
113113as template parameters. Connector's main class has the following signature:
@@ -139,12 +139,12 @@ Connection<Buf_t, Net_t> conn(client);
139139
140140Now assume Tarantool instance is listening `3301` port on localhost. To connect
141141to the server we should invoke `Connector::connect()` method of client object and
142- pass three arguments: connection instance, address and port.
142+ pass three arguments: connection instance, address and port.
143143```c++
144144int rc = client.connect(conn, address, port);
145145```
146146
147- ### Error handling
147+ ### Error Handling
148148
149149Implementation of connector is exception
150150free, so we rely on return codes: in case of fail, ` connect() ` will return ` rc < 0 ` .
@@ -159,18 +159,18 @@ if (rc != 0) {
159159To reset connection after errors (clean up error message and connection status),
160160one can use ` Connection::reset() ` .
161161
162- ### Preparing requests
162+ ### Preparing Requests
163163
164164To execute simplest request (i.e. ping), one can invoke corresponding method of
165165connection object:
166166``` c++
167167rid_t ping = conn.ping();
168- ```
168+ ```
169169Each request method returns request id, which is sort of future. It can be used
170170to get the result of request execution once it is ready (i.e. response). Requests
171171are queued in the input buffer of connection until ` Connector::wait() ` is called.
172172
173- ### Sending requests
173+ ### Sending Requests
174174
175175That said, to send requests to the server side, we should invoke ` client.wait() ` :
176176``` c++
@@ -182,7 +182,7 @@ request is ready, `wait()` terminates. It also provides negative return code in
182182case of system related fails (e.g. broken or time outed connection). If ` wait() `
183183returns 0, then response is received and expected to be parsed.
184184
185- ### Receiving responses
185+ ### Receiving Responses
186186
187187To get the response when it is ready, we can use ` Connection::getResponse() ` .
188188It takes request id and returns optional object containing response (` nullptr `
@@ -200,11 +200,11 @@ either runtime error(s) (accessible by `response.body.error_stack`) or data
200200tuples are not decoded and come in form of pointers to the start and end of
201201msgpacks. See section below to understand how to decode tuples.
202202
203- ### Data manipulation
203+ ### Data Manipulation
204204
205205Now let's consider a bit more sophisticated requests.
206206Assume we have space with ` id = 512 ` and following format on the server:
207- ` CREATE TABLE t(id INT PRIMARY KEY, a TEXT, b DOUBLE); `
207+ ` CREATE TABLE t(id INT PRIMARY KEY, a TEXT, b DOUBLE); `
208208Preparing analogue of ` t:replace(1, "111", 1.01); ` request can be done this way:
209209
210210``` c++
@@ -218,7 +218,7 @@ auto i = conn.space[512].index[1];
218218rid_t select = i.select(std::make_tuple(1 ), 1 , 0 /* offset*/ , IteratorType::EQ);
219219```
220220
221- ### Data readers
221+ ### Data Readers
222222
223223Responses from server contain raw data (i.e. encoded into MsgPack tuples).
224224Let's define structure describing data stored in space ` t ` :
0 commit comments