Quick actions

cmd+k|ctrl+k

Navigation

Languages

Composer

Snippet info

Language

Cpp

Visibility

public

Author

ovidiugabriel

Created

2019-04-12T15:26:44Z

Updated

2019-06-18T20:09:01Z

#include <iostream>
#include <string>

using namespace std;

// ***
// Types are according to: https://dev.mysql.com/doc/refman/8.0/en/select.html
// ***
//
// Other documentation:
// https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_10002.htm#SQLRF01702

struct select_expr {};
struct table_references {};
struct where_condition {};

namespace dbo {
    struct ALL {
        static inline const char* field() {
            return "*";
        }
    };
    
    struct rp_Clienti {
        static inline const char* table() {
            return "rp_Clienti";
        }

        struct ID {
            static inline const char* field() {
                return "ID";
            }
        };
    };
}

template <typename S, typename T, typename W>
class Select {};

template <>
class Select<select_expr, table_references, where_condition> 
{
public:

    template<typename S, typename T, typename W>
    void bind() {
        mExpr  = S::field();   
        mRef   = T::table();
        mWhere = W::field();
    }

    std::string toString() {
        return std::string(" SELECT ") + mExpr + " FROM " + mRef + " WHERE " + mWhere;
    }

private:
    std::string mExpr;
    std::string mRef;
    std::string mWhere;
};

int main() {

    Select<select_expr, table_references, where_condition> query;
    query.bind<dbo::ALL, dbo::rp_Clienti, dbo::rp_Clienti::ID>();

    cout << query.toString();
    
    return 0;
}
INFO