51 lines
1.3 KiB
C
51 lines
1.3 KiB
C
|
|
/**
|
||
|
|
* @file mix_cc/sql/select.h
|
||
|
|
* @brief 查询语句
|
||
|
|
* @author Cat (null.null.null@qq.com)
|
||
|
|
* @version 0.1
|
||
|
|
* @date 2021-09-17
|
||
|
|
*
|
||
|
|
* Copyright: Baosight Co. Ltd.
|
||
|
|
* DO NOT COPY/USE WITHOUT PERMISSION
|
||
|
|
*
|
||
|
|
*/
|
||
|
|
#pragma once
|
||
|
|
#include <mix_cc/sql/public.h>
|
||
|
|
#include <mix_cc/sql/from.h>
|
||
|
|
#include <mix_cc/sql/column.h>
|
||
|
|
#include <mix_cc/sql/statement.h>
|
||
|
|
#include <algorithm>
|
||
|
|
|
||
|
|
namespace mix_cc {
|
||
|
|
namespace sql {
|
||
|
|
template <typename... Columns>
|
||
|
|
struct select_t : public prev_statement_t<void>, public statement_t {
|
||
|
|
static constexpr auto s_text = op::cmd_t::select;
|
||
|
|
constexpr explicit select_t(Columns... columns)
|
||
|
|
: prev_statement_t<void>(), cols_(hana::make_tuple(columns...)) {}
|
||
|
|
|
||
|
|
template <typename Tab>
|
||
|
|
constexpr auto from(Tab tab) {
|
||
|
|
return from_t(*this, tab);
|
||
|
|
}
|
||
|
|
|
||
|
|
constexpr auto get_command() {
|
||
|
|
auto sel_str_c = s_text + " "_s;
|
||
|
|
auto col_names =
|
||
|
|
hana::transform(cols_, [](auto col) { return col.col_name; });
|
||
|
|
auto r_str_c = hana::fold_left(
|
||
|
|
col_names, [](auto col1, auto col2) { return col1 + ","_s + col2; });
|
||
|
|
return sel_str_c + r_str_c;
|
||
|
|
}
|
||
|
|
|
||
|
|
public:
|
||
|
|
hana::tuple<Columns...> cols_;
|
||
|
|
};
|
||
|
|
|
||
|
|
template <typename... Columns>
|
||
|
|
auto select(Columns... columns) {
|
||
|
|
return select_t<Columns...>(columns...);
|
||
|
|
}
|
||
|
|
} // namespace sql
|
||
|
|
} // namespace mix_cc
|