Project

General

Profile

Support #3025 » mre.cpp

Minimal runnable example source code - Anonymous, 04/29/2014 05:25 AM

 
#include <Wt/Dbo/Dbo>
#include <Wt/Dbo/Session>
#include <Wt/Dbo/backend/Sqlite3>

#include <string>
#include <sstream>
#include <stdint.h>

std::string schema();

std::string schema()
{
std::ostringstream ss;

ss << "BEGIN TRANSACTION;\n";
ss << "CREATE TABLE MyResults (\n";
ss << "ResultID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,\n";
ss << "PageID INTEGER NOT NULL DEFAULT 0\n";
ss << ");\n";
ss << "COMMIT;\n";

return ss.str();
}

struct MyResult
{
typedef int64_t ResultID_t;
typedef int32_t PageID_t;

boost::optional<ResultID_t> ResultID;
PageID_t PageID;
};

namespace Wt
{
namespace Dbo
{
template <>
struct persist<MyResult,void>
{
template <class A>
static void apply(MyResult & obj, A & action)
{
Wt::Dbo::id(action, obj.ResultID,"ResultID");
Wt::Dbo::field(action, obj.PageID,"PageID",sizeof(int32_t));
}
};

template <>
struct dbo_traits <MyResult>
: public dbo_default_traits
{
typedef boost::optional<int64_t> IdType;

static IdType
invalidId()
{
return IdType();
}

static const char *
versionField()
{
return nullptr;
}

static const char *
surrogateIdField()
{
return nullptr;
}
};
}
}

int main(int argc, char**argv)
{
Wt::Dbo::Session session;
Wt::Dbo::backend::Sqlite3 connection(":memory:");
connection.setProperty("show-queries", "true");

session.setConnection(connection);

connection.executeSql(schema());

session.mapClass<MyResult>("MyResults");

Wt::Dbo::ptr<MyResult> ptr;
int64_t id = 0;

{
Wt::Dbo::Transaction trans(session);
ptr = session.add( new MyResult);
}

{
Wt::Dbo::Transaction trans(session);
id = session.query<int64_t>("SELECT last_insert_rowid() FROM MyResults LIMIT 1");
*ptr.modify()->ResultID = id;
}

std::cout << "ResultID: " << *ptr->ResultID << "\n";
std::cout << "PageID: " << ptr->PageID << "\n";

return 0;
}
(1-1/3)