userver: External SQL/YQL files
Loading...
Searching...
No Matches
External SQL/YQL files

You may generate SQL queries or YQL queries (for YDB) from external .sql/.yql files. To do this, call the following cmake function in your CMakeLists.txt:

userver_add_sql_library(
${PROJECT_NAME}_sql
NAMESPACE samples_postgres_service
OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}
SQL_FILES *.sql
)
target_link_libraries(${PROJECT_NAME} ${PROJECT_NAME}_sql)

It will generate the samples_postgres_service/sql_queries.hpp file with following variable:

namespace samples_postgres_service {
extern const USERVER_NAMESPACE::storages::Query kCreateTable;
}

And the definition in samples_postgres_service/sql_queries.cpp looks something like that:

const USERVER_NAMESPACE::storages::Query kCreateTable = {
R"-(
CREATE TABLE IF NOT EXISTS key_value_table (
key VARCHAR PRIMARY KEY,
value VARCHAR
)
)-",
USERVER_NAMESPACE::storages::Query::Name("create_table"),
USERVER_NAMESPACE::storages::Query::LogMode::kFull,
};

You may use it as usual by passing to storages::postgres::Cluster::Execute() for SQL files or ydb::TableClient::ExecuteDataQuery() for YQL files:

#include <samples_postgres_service/sql_queries.hpp>
namespace samples_postgres_service {
...
auto result = trx->Execute(sql::kCreateTable);
...
}