Skip to content

Commit

Permalink
src/sqlite: Use a proper namespace for this project
Browse files Browse the repository at this point in the history
  • Loading branch information
felipecrv committed Jul 18, 2024
1 parent a4ca088 commit 750a76e
Show file tree
Hide file tree
Showing 13 changed files with 617 additions and 577 deletions.
8 changes: 3 additions & 5 deletions src/library/flight_sql_library.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -105,11 +105,9 @@ FlightSQLServerBuilder(const BackendType backend, const fs::path &database_filen
std::string db_type = "";
if (backend == BackendType::sqlite) {
db_type = "SQLite";
std::shared_ptr<arrow::flight::sql::sqlite::SQLiteFlightSqlServer> sqlite_server =
nullptr;
ARROW_ASSIGN_OR_RAISE(
sqlite_server,
arrow::flight::sql::sqlite::SQLiteFlightSqlServer::Create(database_filename))
std::shared_ptr<sqlflite::sqlite::SQLiteFlightSqlServer> sqlite_server = nullptr;
ARROW_ASSIGN_OR_RAISE(sqlite_server, sqlflite::sqlite::SQLiteFlightSqlServer::Create(
database_filename));
RUN_INIT_COMMANDS(sqlite_server, init_sql_commands);
server = sqlite_server;
} else if (backend == BackendType::duckdb) {
Expand Down
535 changes: 296 additions & 239 deletions src/sqlite/sqlite_server.cc

Large diffs are not rendered by default.

209 changes: 112 additions & 97 deletions src/sqlite/sqlite_server.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,17 +26,16 @@
#include "sqlite_statement.h"
#include "sqlite_statement_batch_reader.h"
#include "arrow/flight/sql/server.h"
#include "arrow/flight/types.h"
#include "arrow/result.h"
#include "flight_sql_fwd.h"

namespace arrow {
namespace flight {
namespace sql {
namespace sqlite {
namespace sqlflite::sqlite {

/// \brief Convert a column type to a ArrowType.
/// \param sqlite_type the sqlite type.
/// \return The equivalent ArrowType.
arrow::Result<std::shared_ptr<DataType>> GetArrowType(const char* sqlite_type);
arrow::Result<std::shared_ptr<arrow::DataType>> GetArrowType(const char* sqlite_type);

/// \brief Convert a column type name to SQLite type.
/// \param type_name the type name.
Expand All @@ -45,108 +44,127 @@ int32_t GetSqlTypeFromTypeName(const char* type_name);

/// \brief Get the DataType used when parameter type is not known.
/// \return DataType used when parameter type is not known.
inline std::shared_ptr<DataType> GetUnknownColumnDataType() {
return dense_union({
field("string", utf8()),
field("bytes", binary()),
field("bigint", int64()),
field("double", float64()),
inline std::shared_ptr<arrow::DataType> GetUnknownColumnDataType() {
return arrow::dense_union({
field("string", arrow::utf8()),
field("bytes", arrow::binary()),
field("bigint", arrow::int64()),
field("double", arrow::float64()),
});
}

/// \brief Example implementation of FlightSqlServerBase backed by an in-memory SQLite3
/// database.
class SQLiteFlightSqlServer : public FlightSqlServerBase {
class SQLiteFlightSqlServer : public flight::sql::FlightSqlServerBase {
public:
~SQLiteFlightSqlServer() override;

static arrow::Result<std::shared_ptr<SQLiteFlightSqlServer>> Create(std::string path);

/// \brief Auxiliary method used to execute an arbitrary SQL statement on the underlying
/// SQLite database.
Status ExecuteSql(const std::string& sql);

arrow::Result<std::unique_ptr<FlightInfo>> GetFlightInfoStatement(
const ServerCallContext& context, const StatementQuery& command,
const FlightDescriptor& descriptor) override;

arrow::Result<std::unique_ptr<FlightDataStream>> DoGetStatement(
const ServerCallContext& context, const StatementQueryTicket& command) override;
arrow::Result<std::unique_ptr<FlightInfo>> GetFlightInfoCatalogs(
const ServerCallContext& context, const FlightDescriptor& descriptor) override;
arrow::Result<std::unique_ptr<FlightDataStream>> DoGetCatalogs(
const ServerCallContext& context) override;
arrow::Result<std::unique_ptr<FlightInfo>> GetFlightInfoSchemas(
const ServerCallContext& context, const GetDbSchemas& command,
const FlightDescriptor& descriptor) override;
arrow::Result<std::unique_ptr<FlightDataStream>> DoGetDbSchemas(
const ServerCallContext& context, const GetDbSchemas& command) override;
arrow::Status ExecuteSql(const std::string& sql);

arrow::Result<std::unique_ptr<flight::FlightInfo>> GetFlightInfoStatement(
const flight::ServerCallContext& context,
const flight::sql::StatementQuery& command,
const flight::FlightDescriptor& descriptor) override;

arrow::Result<std::unique_ptr<flight::FlightDataStream>> DoGetStatement(
const flight::ServerCallContext& context,
const flight::sql::StatementQueryTicket& command) override;
arrow::Result<std::unique_ptr<flight::FlightInfo>> GetFlightInfoCatalogs(
const flight::ServerCallContext& context,
const flight::FlightDescriptor& descriptor) override;
arrow::Result<std::unique_ptr<flight::FlightDataStream>> DoGetCatalogs(
const flight::ServerCallContext& context) override;
arrow::Result<std::unique_ptr<flight::FlightInfo>> GetFlightInfoSchemas(
const flight::ServerCallContext& context, const flight::sql::GetDbSchemas& command,
const flight::FlightDescriptor& descriptor) override;
arrow::Result<std::unique_ptr<flight::FlightDataStream>> DoGetDbSchemas(
const flight::ServerCallContext& context,
const flight::sql::GetDbSchemas& command) override;
arrow::Result<int64_t> DoPutCommandStatementUpdate(
const ServerCallContext& context, const StatementUpdate& update) override;
arrow::Result<ActionCreatePreparedStatementResult> CreatePreparedStatement(
const ServerCallContext& context,
const ActionCreatePreparedStatementRequest& request) override;
Status ClosePreparedStatement(
const ServerCallContext& context,
const ActionClosePreparedStatementRequest& request) override;
arrow::Result<std::unique_ptr<FlightInfo>> GetFlightInfoPreparedStatement(
const ServerCallContext& context, const PreparedStatementQuery& command,
const FlightDescriptor& descriptor) override;
arrow::Result<std::unique_ptr<FlightDataStream>> DoGetPreparedStatement(
const ServerCallContext& context, const PreparedStatementQuery& command) override;
Status DoPutPreparedStatementQuery(const ServerCallContext& context,
const PreparedStatementQuery& command,
FlightMessageReader* reader,
FlightMetadataWriter* writer) override;
const flight::ServerCallContext& context,
const flight::sql::StatementUpdate& update) override;
arrow::Result<flight::sql::ActionCreatePreparedStatementResult> CreatePreparedStatement(
const flight::ServerCallContext& context,
const flight::sql::ActionCreatePreparedStatementRequest& request) override;
arrow::Status ClosePreparedStatement(
const flight::ServerCallContext& context,
const flight::sql::ActionClosePreparedStatementRequest& request) override;
arrow::Result<std::unique_ptr<flight::FlightInfo>> GetFlightInfoPreparedStatement(
const flight::ServerCallContext& context,
const flight::sql::PreparedStatementQuery& command,
const flight::FlightDescriptor& descriptor) override;
arrow::Result<std::unique_ptr<flight::FlightDataStream>> DoGetPreparedStatement(
const flight::ServerCallContext& context,
const flight::sql::PreparedStatementQuery& command) override;
arrow::Status DoPutPreparedStatementQuery(
const flight::ServerCallContext& context,
const flight::sql::PreparedStatementQuery& command,
flight::FlightMessageReader* reader, flight::FlightMetadataWriter* writer) override;
arrow::Result<int64_t> DoPutPreparedStatementUpdate(
const ServerCallContext& context, const PreparedStatementUpdate& command,
FlightMessageReader* reader) override;

arrow::Result<std::unique_ptr<FlightInfo>> GetFlightInfoTables(
const ServerCallContext& context, const GetTables& command,
const FlightDescriptor& descriptor) override;

arrow::Result<std::unique_ptr<FlightDataStream>> DoGetTables(
const ServerCallContext& context, const GetTables& command) override;
arrow::Result<std::unique_ptr<FlightInfo>> GetFlightInfoXdbcTypeInfo(
const ServerCallContext& context,
const arrow::flight::sql::GetXdbcTypeInfo& command,
const FlightDescriptor& descriptor) override;
arrow::Result<std::unique_ptr<FlightDataStream>> DoGetXdbcTypeInfo(
const ServerCallContext& context,
const arrow::flight::sql::GetXdbcTypeInfo& command) override;
arrow::Result<std::unique_ptr<FlightInfo>> GetFlightInfoTableTypes(
const ServerCallContext& context, const FlightDescriptor& descriptor) override;
arrow::Result<std::unique_ptr<FlightDataStream>> DoGetTableTypes(
const ServerCallContext& context) override;
arrow::Result<std::unique_ptr<FlightInfo>> GetFlightInfoImportedKeys(
const ServerCallContext& context, const GetImportedKeys& command,
const FlightDescriptor& descriptor) override;
arrow::Result<std::unique_ptr<FlightDataStream>> DoGetImportedKeys(
const ServerCallContext& context, const GetImportedKeys& command) override;
arrow::Result<std::unique_ptr<FlightInfo>> GetFlightInfoExportedKeys(
const ServerCallContext& context, const GetExportedKeys& command,
const FlightDescriptor& descriptor) override;
arrow::Result<std::unique_ptr<FlightDataStream>> DoGetExportedKeys(
const ServerCallContext& context, const GetExportedKeys& command) override;
arrow::Result<std::unique_ptr<FlightInfo>> GetFlightInfoCrossReference(
const ServerCallContext& context, const GetCrossReference& command,
const FlightDescriptor& descriptor) override;
arrow::Result<std::unique_ptr<FlightDataStream>> DoGetCrossReference(
const ServerCallContext& context, const GetCrossReference& command) override;

arrow::Result<std::unique_ptr<FlightInfo>> GetFlightInfoPrimaryKeys(
const ServerCallContext& context, const GetPrimaryKeys& command,
const FlightDescriptor& descriptor) override;

arrow::Result<std::unique_ptr<FlightDataStream>> DoGetPrimaryKeys(
const ServerCallContext& context, const GetPrimaryKeys& command) override;

arrow::Result<ActionBeginTransactionResult> BeginTransaction(
const ServerCallContext& context,
const ActionBeginTransactionRequest& request) override;
Status EndTransaction(const ServerCallContext& context,
const ActionEndTransactionRequest& request) override;
const flight::ServerCallContext& context,
const flight::sql::PreparedStatementUpdate& command,
flight::FlightMessageReader* reader) override;

arrow::Result<std::unique_ptr<flight::FlightInfo>> GetFlightInfoTables(
const flight::ServerCallContext& context, const flight::sql::GetTables& command,
const flight::FlightDescriptor& descriptor) override;

arrow::Result<std::unique_ptr<flight::FlightDataStream>> DoGetTables(
const flight::ServerCallContext& context,
const flight::sql::GetTables& command) override;
arrow::Result<std::unique_ptr<flight::FlightInfo>> GetFlightInfoXdbcTypeInfo(
const flight::ServerCallContext& context,
const flight::sql::GetXdbcTypeInfo& command,
const flight::FlightDescriptor& descriptor) override;
arrow::Result<std::unique_ptr<flight::FlightDataStream>> DoGetXdbcTypeInfo(
const flight::ServerCallContext& context,
const flight::sql::GetXdbcTypeInfo& command) override;
arrow::Result<std::unique_ptr<flight::FlightInfo>> GetFlightInfoTableTypes(
const flight::ServerCallContext& context,
const flight::FlightDescriptor& descriptor) override;
arrow::Result<std::unique_ptr<flight::FlightDataStream>> DoGetTableTypes(
const flight::ServerCallContext& context) override;
arrow::Result<std::unique_ptr<flight::FlightInfo>> GetFlightInfoImportedKeys(
const flight::ServerCallContext& context,
const flight::sql::GetImportedKeys& command,
const flight::FlightDescriptor& descriptor) override;
arrow::Result<std::unique_ptr<flight::FlightDataStream>> DoGetImportedKeys(
const flight::ServerCallContext& context,
const flight::sql::GetImportedKeys& command) override;
arrow::Result<std::unique_ptr<flight::FlightInfo>> GetFlightInfoExportedKeys(
const flight::ServerCallContext& context,
const flight::sql::GetExportedKeys& command,
const flight::FlightDescriptor& descriptor) override;
arrow::Result<std::unique_ptr<flight::FlightDataStream>> DoGetExportedKeys(
const flight::ServerCallContext& context,
const flight::sql::GetExportedKeys& command) override;
arrow::Result<std::unique_ptr<flight::FlightInfo>> GetFlightInfoCrossReference(
const flight::ServerCallContext& context,
const flight::sql::GetCrossReference& command,
const flight::FlightDescriptor& descriptor) override;
arrow::Result<std::unique_ptr<flight::FlightDataStream>> DoGetCrossReference(
const flight::ServerCallContext& context,
const flight::sql::GetCrossReference& command) override;

arrow::Result<std::unique_ptr<flight::FlightInfo>> GetFlightInfoPrimaryKeys(
const flight::ServerCallContext& context,
const flight::sql::GetPrimaryKeys& command,
const flight::FlightDescriptor& descriptor) override;

arrow::Result<std::unique_ptr<flight::FlightDataStream>> DoGetPrimaryKeys(
const flight::ServerCallContext& context,
const flight::sql::GetPrimaryKeys& command) override;

arrow::Result<flight::sql::ActionBeginTransactionResult> BeginTransaction(
const flight::ServerCallContext& context,
const flight::sql::ActionBeginTransactionRequest& request) override;
arrow::Status EndTransaction(
const flight::ServerCallContext& context,
const flight::sql::ActionEndTransactionRequest& request) override;

private:
class Impl;
Expand All @@ -155,7 +173,4 @@ class SQLiteFlightSqlServer : public FlightSqlServerBase {
explicit SQLiteFlightSqlServer(std::shared_ptr<Impl> impl);
};

} // namespace sqlite
} // namespace sql
} // namespace flight
} // namespace arrow
} // namespace sqlflite::sqlite
27 changes: 12 additions & 15 deletions src/sqlite/sqlite_sql_info.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,15 @@

#include "arrow/flight/sql/types.h"
#include "arrow/util/config.h"
#include "flight_sql_fwd.h"

namespace arrow {
namespace flight {
namespace sql {
namespace sqlite {
namespace sqlflite::sqlite {

/// \brief Gets the mapping from SQL info ids to SqlInfoResult instances.
/// \return the cache.
SqlInfoResultMap GetSqlInfoResultMap() {
flight::sql::SqlInfoResultMap GetSqlInfoResultMap() {
using SqlInfoOptions = flight::sql::SqlInfoOptions;
using SqlInfoResult = flight::sql::SqlInfoResult;
return {
{SqlInfoOptions::SqlInfo::FLIGHT_SQL_SERVER_NAME,
SqlInfoResult(std::string("db_name"))},
Expand All @@ -48,17 +48,17 @@ SqlInfoResultMap GetSqlInfoResultMap() {
SqlInfoResult(false /* SQLite 3 does not support schemas */)},
{SqlInfoOptions::SqlInfo::SQL_DDL_TABLE, SqlInfoResult(true)},
{SqlInfoOptions::SqlInfo::SQL_IDENTIFIER_CASE,
SqlInfoResult(int64_t(SqlInfoOptions::SqlSupportedCaseSensitivity::
SQL_CASE_SENSITIVITY_CASE_INSENSITIVE))},
SqlInfoResult(static_cast<int64_t>(SqlInfoOptions::SqlSupportedCaseSensitivity::
SQL_CASE_SENSITIVITY_CASE_INSENSITIVE))},
{SqlInfoOptions::SqlInfo::SQL_IDENTIFIER_QUOTE_CHAR,
SqlInfoResult(std::string("\""))},
{SqlInfoOptions::SqlInfo::SQL_QUOTED_IDENTIFIER_CASE,
SqlInfoResult(int64_t(SqlInfoOptions::SqlSupportedCaseSensitivity::
SQL_CASE_SENSITIVITY_CASE_INSENSITIVE))},
SqlInfoResult(static_cast<int64_t>(SqlInfoOptions::SqlSupportedCaseSensitivity::
SQL_CASE_SENSITIVITY_CASE_INSENSITIVE))},
{SqlInfoOptions::SqlInfo::SQL_ALL_TABLES_ARE_SELECTABLE, SqlInfoResult(true)},
{SqlInfoOptions::SqlInfo::SQL_NULL_ORDERING,
SqlInfoResult(
int64_t(SqlInfoOptions::SqlNullOrdering::SQL_NULLS_SORTED_AT_START))},
SqlInfoResult(static_cast<int64_t>(
SqlInfoOptions::SqlNullOrdering::SQL_NULLS_SORTED_AT_START))},
{SqlInfoOptions::SqlInfo::SQL_KEYWORDS,
SqlInfoResult(std::vector<std::string>({"ABORT",
"ACTION",
Expand Down Expand Up @@ -224,7 +224,4 @@ SqlInfoResultMap GetSqlInfoResultMap() {
{SqlInfoOptions::SqlSupportsConvert::SQL_CONVERT_INTEGER})}}))}};
}

} // namespace sqlite
} // namespace sql
} // namespace flight
} // namespace arrow
} // namespace sqlflite::sqlite
12 changes: 3 additions & 9 deletions src/sqlite/sqlite_sql_info.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,10 @@

#include "arrow/flight/sql/types.h"

namespace arrow {
namespace flight {
namespace sql {
namespace sqlite {
namespace sqlflite::sqlite {

/// \brief Gets the mapping from SQL info ids to SqlInfoResult instances.
/// \return the cache.
SqlInfoResultMap GetSqlInfoResultMap();
arrow::flight::sql::SqlInfoResultMap GetSqlInfoResultMap();

} // namespace sqlite
} // namespace sql
} // namespace flight
} // namespace arrow
} // namespace sqlflite::sqlite
Loading

0 comments on commit 750a76e

Please sign in to comment.