#pragma once
#include <memory>
#include <string>
#include <vector>
#include "common/arrow/arrow.h"
#include "main/connection.h"
namespace lbug {
struct ArrowTableCreationResult {
std::unique_ptr<main::QueryResult> queryResult;
std::string arrowId;
};
class ArrowTableSupport {
public:
static std::string registerArrowData(ArrowSchemaWrapper schema,
std::vector<ArrowArrayWrapper> arrays);
static bool getArrowData(const std::string& id, ArrowSchemaWrapper*& schema,
std::vector<ArrowArrayWrapper>*& arrays);
static void unregisterArrowData(const std::string& id);
static ArrowTableCreationResult createViewFromArrowTable(main::Connection& connection,
const std::string& viewName, ArrowSchemaWrapper schema,
std::vector<ArrowArrayWrapper> arrays);
static ArrowTableCreationResult createRelTableFromArrowTable(main::Connection& connection,
const std::string& tableName, const std::string& srcTableName,
const std::string& dstTableName, ArrowSchemaWrapper schema,
std::vector<ArrowArrayWrapper> arrays, const std::string& srcColumnName = "from",
const std::string& dstColumnName = "to");
static std::unique_ptr<main::QueryResult> unregisterArrowTable(main::Connection& connection,
const std::string& tableName);
};
}