Skip to content

Commit 7477c5c

Browse files
committed
Added C, C++ and Rust 'from_conf' examples and wired up manifest
1 parent 11f7945 commit 7477c5c

File tree

5 files changed

+181
-0
lines changed

5 files changed

+181
-0
lines changed

CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,9 @@ if (QUESTDB_TESTS_AND_EXAMPLES)
108108
line_sender_c_example_http
109109
examples/concat.c
110110
examples/line_sender_c_example_http.c)
111+
compile_example(
112+
line_sender_c_example_from_conf
113+
examples/line_sender_c_example_from_conf.c)
111114
compile_example(
112115
line_sender_c_example_from_env
113116
examples/line_sender_c_example_from_env.c)
@@ -126,6 +129,9 @@ if (QUESTDB_TESTS_AND_EXAMPLES)
126129
compile_example(
127130
line_sender_cpp_example_http
128131
examples/line_sender_cpp_example_http.cpp)
132+
compile_example(
133+
line_sender_cpp_example_from_conf
134+
examples/line_sender_cpp_example_from_conf.cpp)
129135
compile_example(
130136
line_sender_cpp_example_from_env
131137
examples/line_sender_cpp_example_from_env.cpp)

examples.manifest.yaml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,3 +102,24 @@
102102
addr:
103103
host: localhost
104104
port: 9009
105+
106+
- name: ilp-from-conf
107+
lang: c
108+
path: examples/line_sender_c_example_from_conf.c
109+
header: |-
110+
[C client library docs](https://github.com/questdb/c-questdb-client/blob/main/doc/C.md)
111+
conf: tcp::addr=localhost:9009;
112+
113+
- name: ilp-from-conf
114+
lang: cpp
115+
path: examples/line_sender_cpp_example_from_conf.cpp
116+
header: |-
117+
[C client library docs](https://github.com/questdb/c-questdb-client/blob/main/doc/CPP.md)
118+
conf: tcp::addr=localhost:9009;
119+
120+
- name: ilp-from-conf
121+
lang: rust
122+
path: questdb-rs/examples/from_conf.rs
123+
header: |-
124+
[Rust client library docs](https://docs.rs/crate/questdb-rs/latest)
125+
conf: tcp::addr=localhost:9009;
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
#include <questdb/ingress/line_sender.h>
2+
#include <stdio.h>
3+
#include <stdbool.h>
4+
#include <string.h>
5+
6+
int main(int argc, const char* argv[])
7+
{
8+
line_sender_error* err = NULL;
9+
line_sender_buffer* buffer = NULL;
10+
11+
line_sender_utf8 conf = QDB_UTF8_LITERAL(
12+
"tcp::addr=localhost:9009;");
13+
line_sender* sender = line_sender_from_conf(conf, &err);
14+
if (!sender)
15+
goto on_error;
16+
17+
buffer = line_sender_buffer_new();
18+
line_sender_buffer_reserve(buffer, 64 * 1024); // 64KB buffer initial size.
19+
20+
// We prepare all our table names and column names in advance.
21+
// If we're inserting multiple rows, this allows us to avoid
22+
// re-validating the same strings over and over again.
23+
line_sender_table_name table_name = QDB_TABLE_NAME_LITERAL("c_cars_from_conf");
24+
line_sender_column_name id_name = QDB_COLUMN_NAME_LITERAL("id");
25+
line_sender_column_name x_name = QDB_COLUMN_NAME_LITERAL("x");
26+
line_sender_column_name y_name = QDB_COLUMN_NAME_LITERAL("y");
27+
line_sender_column_name booked_name = QDB_COLUMN_NAME_LITERAL("booked");
28+
line_sender_column_name passengers_name = QDB_COLUMN_NAME_LITERAL(
29+
"passengers");
30+
line_sender_column_name driver_name = QDB_COLUMN_NAME_LITERAL("driver");
31+
32+
if (!line_sender_buffer_table(buffer, table_name, &err))
33+
goto on_error;
34+
35+
line_sender_utf8 id_value = QDB_UTF8_LITERAL(
36+
"d6e5fe92-d19f-482a-a97a-c105f547f721");
37+
if (!line_sender_buffer_symbol(buffer, id_name, id_value, &err))
38+
goto on_error;
39+
40+
if (!line_sender_buffer_column_f64(buffer, x_name, 30.5, &err))
41+
goto on_error;
42+
43+
if (!line_sender_buffer_column_f64(buffer, y_name, -150.25, &err))
44+
goto on_error;
45+
46+
if (!line_sender_buffer_column_bool(buffer, booked_name, true, &err))
47+
goto on_error;
48+
49+
if (!line_sender_buffer_column_i64(buffer, passengers_name, 3, &err))
50+
goto on_error;
51+
52+
line_sender_utf8 driver_value = QDB_UTF8_LITERAL("John Doe");
53+
if (!line_sender_buffer_column_str(buffer, driver_name, driver_value, &err))
54+
goto on_error;
55+
56+
// 1997-07-04 04:56:55 UTC
57+
int64_t designated_timestamp = 867992215000000000;
58+
if (!line_sender_buffer_at_nanos(buffer, designated_timestamp, &err))
59+
goto on_error;
60+
61+
//// If you want to get the current system timestamp as nanos, call:
62+
// if (!line_sender_buffer_at_nanos(buffer, line_sender_now_nanos(), &err))
63+
// goto on_error;
64+
65+
// To insert more records, call `line_sender_buffer_table(..)...` again.
66+
// It's recommended to keep a timer and/or maximum buffer size to flush
67+
// the buffer periodically with any accumulated records.
68+
if (!line_sender_flush(sender, buffer, &err))
69+
goto on_error;
70+
71+
line_sender_close(sender);
72+
73+
return 0;
74+
75+
on_error: ;
76+
size_t err_len = 0;
77+
const char* err_msg = line_sender_error_msg(err, &err_len);
78+
fprintf(stderr, "Error running example: %.*s\n", (int)err_len, err_msg);
79+
line_sender_error_free(err);
80+
line_sender_buffer_free(buffer);
81+
line_sender_close(sender);
82+
return 1;
83+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#include <questdb/ingress/line_sender.hpp>
2+
#include <iostream>
3+
4+
using namespace std::literals::string_view_literals;
5+
using namespace questdb::ingress::literals;
6+
7+
int main(int argc, const char* argv[])
8+
{
9+
try
10+
{
11+
auto sender = questdb::ingress::line_sender::from_conf(
12+
"tcp::addr=localhost:9009;");
13+
14+
// We prepare all our table names and column names in advance.
15+
// If we're inserting multiple rows, this allows us to avoid
16+
// re-validating the same strings over and over again.
17+
const auto table_name = "cpp_cars_from_conf"_tn;
18+
const auto id_name = "id"_cn;
19+
const auto x_name = "x"_cn;
20+
const auto y_name = "y"_cn;
21+
const auto booked_name = "booked"_cn;
22+
const auto passengers_name = "passengers"_cn;
23+
const auto driver_name = "driver"_cn;
24+
25+
questdb::ingress::line_sender_buffer buffer;
26+
buffer
27+
.table(table_name)
28+
.symbol(id_name, "d6e5fe92-d19f-482a-a97a-c105f547f721"_utf8)
29+
.column(x_name, 30.5)
30+
.column(y_name, -150.25)
31+
.column(booked_name, true)
32+
.column(passengers_name, int64_t{3})
33+
.column(driver_name, "John Doe"_utf8)
34+
.at(questdb::ingress::timestamp_nanos::now());
35+
36+
// To insert more records, call `buffer.table(..)...` again.
37+
38+
sender.flush(buffer);
39+
40+
// It's recommended to keep a timer and/or maximum buffer size to flush
41+
// the buffer periodically with any accumulated records.
42+
43+
return 0;
44+
}
45+
catch (const questdb::ingress::line_sender_error& err)
46+
{
47+
std::cerr
48+
<< "Error running example: "
49+
<< err.what()
50+
<< std::endl;
51+
52+
return 1;
53+
}
54+
}

questdb-rs/examples/from_conf.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
use questdb::{
2+
ingress::{Buffer, Sender, TimestampNanos},
3+
Result,
4+
};
5+
6+
fn main() -> Result<()> {
7+
let mut sender = Sender::from_conf("tcp::addr=localhost:9009;")?;
8+
let mut buffer = Buffer::new();
9+
buffer
10+
.table("sensors")?
11+
.symbol("id", "toronto1")?
12+
.column_f64("temperature", 20.0)?
13+
.column_i64("humidity", 50)?
14+
.at(TimestampNanos::now())?;
15+
sender.flush(&mut buffer)?;
16+
Ok(())
17+
}

0 commit comments

Comments
 (0)