|
#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;
|
|
}
|