#ifndef _CTSQL_HPP
#define _CTSQL_HPP
#include <cstdlib>
#include <string>
// -------------------------------------------------------------------------
// fixed_string
template<std::size_t N>
struct fixed_string;
// operator==(fixed_string, fixed_string) - to be implemented
// -------------------------------------------------------------------------
// column
template<fixed_string Name, typename T>
struct column;
// -------------------------------------------------------------------------
// table
template<typename... Columns>
struct table;
// -------------------------------------------------------------------------
// Predicates
template<fixed_string Name, auto Value>
struct greater;
template<fixed_string Name, auto Value>
struct equals;
// -------------------------------------------------------------------------
// column_type_t
template<typename Table, fixed_string Name>
using column_type_t = ... // to be implemented
// -------------------------------------------------------------------------
// query
template<typename Table>
struct query {
// select
template<fixed_string... Names>
using select = ... // to be implemented
// where
template<typename Predicate>
using where = ... // to be implemented
};
// -------------------------------------------------------------------------
// basic test
using Users = table<
column<"id", int>,
column<"name", std::string>,
column<"age", int>
>;
using Q =
query<Users>
::select<"name", "age">
::where<greater<"age", 18>>;
#endif // _CTSQL_HPP