So I'm looking for a SQL wrapper for C++ that completely hides any textual SQL statements. I just can't seem to find any, I'm wondering why all the wrappers out there seem at some point to want you to write a textual SQL statement such as:
SELECT * FROM stock WHERE item = 'Hotdog Buns'
here's MySQL++ for example:
mysqlpp::Query query = conn.query("select * from stock where item = 'Hotdog Buns'");
The most obvious way to do this for me is to create a class that contains properties (columns) with each instance of that class being a row. So to do the above query I would do something like:
// Class defined something like this...
class stock_item : public sql::row
{
public:
stock_item() : m_name( NULL ), m_amount( 0 ) {};
~stock_item() {};
// Statically define the table
static void CreateTable( void )
{
// Some C++ reflective mechanism
sql::column( "name", char[50] );
sql::column( "amount", u32 );
}
private:
const char* m_name;
u32 m_amount;
}
// Then a table defined like this
sql::table<stock_item> stock;
// Query function defined something like this...
stock GetHotDogBuns( const stock& shopStock )
{
stock hotDogBuns = shopStock.Select( stock_item::Name(), "Hotdog Buns" );
return hotDogBuns;
}
Now I'm no SQL expert and I haven't spent very long thinking about the above code but it just seems quite a logical way to deal with a database if your from a C++ background rather than having to be a database expert. What are the problems with this kind of approach?
Is there an open source library that allows you access to a database in a similar fashion?
EDIT The reason why I would like something like this is so that C++ programmers using our code don't have to learn SQL syntax and to provide a much more natural environment for them to code in. I've seen something like this in the SilverStripe CMS written in php.