Appearance
Agilor-DB-Client-CPP
介绍
以下是 Agilor-DB CPP客户端
Install
目前以静态库和相关头文件的方式提供使用 解压压缩包agilor_clie_cpp.tar.gz
tar -xvf agilor_client_cpp.tar.gz
- 解压后目录结构如下
- boost_1_83_0 // boost库
- include // agilor client头文件
- lib // 静态库
- build.sh // 编译test_main.cpp的脚本
- test_main.cpp // 示例代码
Compile
1)编译代码时,需要连接以下静态库:(位于lib目录) libagilor.a、 libboost_container.a、 libboost_json.a
2)需要将include和boost_1_83_0目录添加到头文件搜索路径
示例:g++ test_main.cpp -Llib -lagilor -lboost_container -lboost_json -Iinclude -Iboost_1_83_0 -o agilor_client
编译方法可参考测试程序test_main.cpp以及编译脚本build.sh
Get Started
所有对外接口都定义在ajdb_interface.h中(include/api/ajdb_interface.h)
可参考示例代码:test_main.cpp
使用步骤:(以QueryApi为例)
1.包含头文件 #include "api/ajdb_interface.h"
2.若使用到某个基础结构,需要添加对应的头文件。
- 如QueryApi提供的select接口需要返回SearchResponse结构,则应当包含common/SearchResponse.h
- 所有基础结构的头文件都位于include/common目录下
- 注意名字空间的使用
3.初始化连接信息(必须)
init("39.100.67.205", "8713", "MY_DB", "Token XXX");
4.调用接口
ajdb::common::SearchResponse rsp = select("select * from cpu_test;SHOW TAG KEYS from cpu_test");
5.从返回值中获取更多信息
示例代码
#include <iostream> #include <vector> #include "api/ajdb_interface.h" #include "common/ConnectionConfig.h" #include "common/SearchResponse.h" using namespace std; int main() { // 初始化连接信息 // 方式一 ajdb::common::ConnectionConfig cfg; cfg.host_ = "39.100.67.205"; cfg.port_ = "8713"; cfg.token_ = "Token XXX"; cfg.database_ = "MY_DB"; init(cfg); // 方式二 //init("39.100.67.205", "8713", "Token XXX"); // test query SearchResponse rsp = select("select * from cpu limit 10;select * from cpu limit 10", 3); ajdb::common::Result result = rsp.results_[1]; cout << "statement_id: " << result.statement_id_ << endl; cout << "partial: " << result.partial_ << endl; ajdb::common::Row tag = result.tagset_[0]; cout << "table: " << tag.table_ << endl; for (auto & t : tag.columns_) { cout << "column: " << t << endl; } cout << "print values begin" << endl; std::vector<std::vector<std::string>> values = tag.values_; for (auto & t : values) { for (auto & tt : t) { cout << tt << endl; } cout << endl; } return 0; }
接口汇总
- 以下是对外提供的所有接口
// init 用于初始化连接
void init(ajdb::common::ConnectionConfig config);
void init(const std::string& host, const std::string& port, const std::string& database, const std::string& token);
// EndpointApi 数据发布接口
std::pair<unsigned int, std::string> createEndpoint(ajdb::common::Endpoint endpoint);
std::pair<unsigned int, std::string> deleteEndpoint(const std::string& id);
std::pair<unsigned int, std::string> updateEndpoint(const std::string& id, ajdb::common::Endpoint endpoint);
std::pair<unsigned int, std::string> updatePutEndpoint(const std::string& id, ajdb::common::Endpoint endpoint);
std::vector<ajdb::common::EndpointPtrType> getAllEndpoint();
const std::string listEndpoints();
ajdb::common::EndpointPtrType getEndpointById(const std::string& id);
// QueryApi 查询
SearchResponse select(const std::string& sql);
SearchResponse select(const std::string& sql, const std::string& database);
SearchResponse select(const std::string& sql, bool pretty, const std::string& database);
SearchResponse select(const std::string& sql, int64_t chunkedSize);
SearchResponse select(const std::string& sql, int64_t chunkedSize, const std::string& database);
SearchResponse select(const std::string& sql, WritePrecision writePrecision);
SearchResponse select(const std::string& sql, WritePrecision writePrecision, const std::string& database);
SearchResponse select(const std::string& sql, bool pretty, WritePrecision writePrecision);
SearchResponse select(const std::string& sql, bool pretty, WritePrecision writePrecision, const std::string& database);
SearchResponse select(const std::string& sql, int64_t chunkedSize, bool pretty, WritePrecision writePrecision);
SearchResponse select(const std::string& sql, int64_t chunkedSize, bool pretty);
SearchResponse select(const std::string& sql, int64_t chunkedSize, bool pretty, const std::string& database);
SearchResponse select(const std::string& sql, int64_t chunkedSize, WritePrecision writePrecision);
SearchResponse select(const std::string& sql, int64_t chunkedSize, WritePrecision writePrecision, const std::string& database);
// DataBaseApi 数据库管理
std::vector<ajdb::common::DataBasePtrType> getDataBases();
std::pair<unsigned int, std::string> createDB(ajdb::common::DataBase dataBase);
ajdb::common::DataBasePtrType getDatabaseById(const std::string& id);
std::pair<unsigned int, std::string> deleteDBById(const std::string& id);
std::pair<unsigned int, std::string> updateDBById(ajdb::common::DataBase dataBase);
const std::string helloAgilor();
// RuleApi 订阅规则接口
std::vector<ajdb::common::RulePtrType> getRules();
std::pair<unsigned int, std::string> addRule(ajdb::common::Rule rule);
ajdb::common::RulePtrType getRuleById(const std::string& id);
std::pair<unsigned int, std::string> updateRuleById(ajdb::common::Rule rule);
std::pair<unsigned int, std::string> updatePutRule(ajdb::common::Rule rule);
std::pair<unsigned int, std::string> deleteRule(const std::string& id);
// WriteApi 写入数据
std::pair<unsigned int, std::string> writeRecord(const std::string& record);
std::pair<unsigned int, std::string> writeRecordByDB(const std::string& database, const std::string& record);
std::pair<unsigned int, std::string> writeListRecord(const std::vector<std::string>& records);
std::pair<unsigned int, std::string> writeListRecord(const std::string& database, const std::vector<std::string>& records);
std::pair<unsigned int, std::string> writePoint(const ajdb::common::Point& point);
std::pair<unsigned int, std::string> writePointByDB(const std::string& database, const ajdb::common::Point& point);
std::pair<unsigned int, std::string> writePoints(const std::vector<ajdb::common::Point>& points);
std::pair<unsigned int, std::string> writePoints(const std::string& database, const std::vector<ajdb::common::Point>& points);
参数/返回值说明
std::pair<unsigned int, std::string>类型返回值,包含执行结果信息。
- first:http响应码
- second:http响应信息描述
查询接口各个参数:
- pretty: bool类型,是否格式化
- chunkedSize:int64_t类型,指定该参数后,返回结果将分块显示,其数值代表分块大小。
- writePrecision:枚举类型,数据精度。支持的类型有WritePrecision::NS、WritePrecision::S、WritePrecision::MS
xxxPtrType代表将其封装为std::shared_ptr形式
类类型的参数/返回值:作为参数时,调用接口之前需要先构造该类的对象,再当作参数传入;作为返回值时,可获取其中的属性。详见下一章节“基础结构说明”
基础结构说明
SearchResponse:查询接口的返回结构。
ConnectionConfig:连接信息结构
Endpoint:数据发布的结构
DataBase:数据库结构
WritePrecision:写入精度
- 枚举类:enum class WritePrecision { UNDEFINED, NS, S, MS };