Diff
checker
텍스트
텍스트
이미지
문서
Excel
폴더
Legal
Enterprise
데스크톱
요금제
로그인
데스크톱 앱 다운로드
텍스트 비교
두 텍스트 파일의 차이점을 찾아보세요
도구
기록
실시간 편집
변경 없는 행 숨기기
줄바꿈 비활성화
레이아웃
나란히 보기
합쳐 보기
비교 단위
스마트
단어
글자
구문 강조
언어 선택
제외
텍스트 변환
첫 변경으로
수정
Diffchecker Desktop
가장 안전하게 Diffchecker를 사용하는 방법. 데스크톱 앱을 사용하면 비교 데이터가 외부로 전송되지 않습니다!
데스크톱 앱 받기
Untitled diff
생성일
9년 전
비교 결과 만료 없음
초기화
내보내기
공유
설명
16 삭제
행
총
삭제
글자
총
삭제
이 기능을 계속 사용하려면 업그레이드해 주세요
Diff
checker
Pro
요금제 보기
70 행
복사
53 추가
행
총
추가
글자
총
추가
이 기능을 계속 사용하려면 업그레이드해 주세요
Diff
checker
Pro
요금제 보기
99 행
복사
#include <iostream>
#include <iostream>
#include <memory>
#include <memory>
#include <Wt/Dbo/Dbo.h>
#include <Wt/Dbo/Dbo.h>
#include <Wt/Dbo/backend/Sqlite3.h>
#include <Wt/Dbo/backend/Sqlite3.h>
using namespace std;
using namespace std;
namespace dbo = Wt::Dbo;
namespace dbo = Wt::Dbo;
class EntityA
class EntityA
{
{
public:
public:
string name {"Jef"};
string name {"Jef"};
template<class Action>
template<class Action>
void persist(Action& a)
void persist(Action& a)
{
{
dbo::field(a, name, "name");
dbo::field(a, name, "name");
}
}
};
};
class EntityB
class EntityB
{
{
public:
public:
string name {"Jef Jr."};
string name {"Jef Jr."};
복사
복사됨
복사
복사됨
dbo::
ptr<EntityA> parent;
static shared_ptr<
dbo::
Session> session;
static void setSession(shared_ptr<dbo::Session> s)
{
session = s;
}
template<class Action>
template<class Action>
void persist(Action& a)
void persist(Action& a)
{
{
dbo::field(a, name, "name");
dbo::field(a, name, "name");
dbo::belongsTo(a, parent, "parent");
dbo::belongsTo(a, parent, "parent");
}
}
복사
복사됨
복사
복사됨
unique_ptr<EntityA> getParent() const
{
dbo::Transaction t{*session};
return make_unique<EntityA>(*parent);
}
void setParent(dbo::ptr<EntityA> p)
{
parent = p;
}
void setParent(unique_ptr<EntityA> p)
{
parent.reset(move(p));
}
private:
dbo::ptr<EntityA> parent {nullptr};
};
};
복사
복사됨
복사
복사됨
dbo::ptr<EntityB> getAnyB(
dbo::Session
&
session)
shared_ptr<dbo::Session> EntityB::session = nullptr;
dbo::ptr<EntityB> getAnyB(
shared_ptr<
dbo::Session
>
session)
{
{
복사
복사됨
복사
복사됨
dbo::Transaction t{
session};
dbo::Transaction t{
*
session};
복사
복사됨
복사
복사됨
return session
.
find<EntityB>().limit(1);
return session
->
find<EntityB>().limit(1);
}
}
int main()
int main()
{
{
복사
복사됨
복사
복사됨
dbo::Session
session
;
auto session = make_shared<
dbo::Session
>()
;
복사
복사됨
복사
복사됨
session
.
setConnection([](){
session
->
setConnection([](){
auto sqlite3 = make_unique<dbo::backend::Sqlite3>(":memory:");
auto sqlite3 = make_unique<dbo::backend::Sqlite3>(":memory:");
sqlite3->setProperty("show-queries", "true");
sqlite3->setProperty("show-queries", "true");
return move(sqlite3);
return move(sqlite3);
}());
}());
복사
복사됨
복사
복사됨
session
.
mapClass<EntityA>("entity_a");
session
->
mapClass<EntityA>("entity_a");
session
.
mapClass<EntityB>("entity_b");
session
->
mapClass<EntityB>("entity_b");
복사
복사됨
복사
복사됨
session
.
createTables();
session
->
createTables();
EntityB::setSession(session);
{
{
복사
복사됨
복사
복사됨
dbo::Transaction t{
session};
dbo::Transaction t{
*
session};
auto b = make_unique<EntityB>();
auto b = make_unique<EntityB>();
복사
복사됨
복사
복사됨
b->
p
arent
=
session
.
add(make_unique<EntityA>())
;
b->
setP
arent
(
session
.
add(move(b));
session
->
add(make_unique<EntityA>())
)
;
session
->
add(move(b));
}
}
복사
복사됨
복사
복사됨
//dbo::Transaction t{session}; // This "fixes" the problem, but it's VERY inconvenient
cout << getAnyB(session)->
getP
arent
()
->name;
cout << getAnyB(session)->
p
arent
->name;
// Exception: Dbo load(): no active transaction
return 0;
return 0;
}
}
저장된 비교 결과
원본
파일 열기
#include <iostream> #include <memory> #include <Wt/Dbo/Dbo.h> #include <Wt/Dbo/backend/Sqlite3.h> using namespace std; namespace dbo = Wt::Dbo; class EntityA { public: string name {"Jef"}; template<class Action> void persist(Action& a) { dbo::field(a, name, "name"); } }; class EntityB { public: string name {"Jef Jr."}; dbo::ptr<EntityA> parent; template<class Action> void persist(Action& a) { dbo::field(a, name, "name"); dbo::belongsTo(a, parent, "parent"); } }; dbo::ptr<EntityB> getAnyB(dbo::Session& session) { dbo::Transaction t{session}; return session.find<EntityB>().limit(1); } int main() { dbo::Session session; session.setConnection([](){ auto sqlite3 = make_unique<dbo::backend::Sqlite3>(":memory:"); sqlite3->setProperty("show-queries", "true"); return move(sqlite3); }()); session.mapClass<EntityA>("entity_a"); session.mapClass<EntityB>("entity_b"); session.createTables(); { dbo::Transaction t{session}; auto b = make_unique<EntityB>(); b->parent = session.add(make_unique<EntityA>()); session.add(move(b)); } //dbo::Transaction t{session}; // This "fixes" the problem, but it's VERY inconvenient cout << getAnyB(session)->parent->name; // Exception: Dbo load(): no active transaction return 0; }
수정본
파일 열기
#include <iostream> #include <memory> #include <Wt/Dbo/Dbo.h> #include <Wt/Dbo/backend/Sqlite3.h> using namespace std; namespace dbo = Wt::Dbo; class EntityA { public: string name {"Jef"}; template<class Action> void persist(Action& a) { dbo::field(a, name, "name"); } }; class EntityB { public: string name {"Jef Jr."}; static shared_ptr<dbo::Session> session; static void setSession(shared_ptr<dbo::Session> s) { session = s; } template<class Action> void persist(Action& a) { dbo::field(a, name, "name"); dbo::belongsTo(a, parent, "parent"); } unique_ptr<EntityA> getParent() const { dbo::Transaction t{*session}; return make_unique<EntityA>(*parent); } void setParent(dbo::ptr<EntityA> p) { parent = p; } void setParent(unique_ptr<EntityA> p) { parent.reset(move(p)); } private: dbo::ptr<EntityA> parent {nullptr}; }; shared_ptr<dbo::Session> EntityB::session = nullptr; dbo::ptr<EntityB> getAnyB(shared_ptr<dbo::Session> session) { dbo::Transaction t{*session}; return session->find<EntityB>().limit(1); } int main() { auto session = make_shared<dbo::Session>(); session->setConnection([](){ auto sqlite3 = make_unique<dbo::backend::Sqlite3>(":memory:"); sqlite3->setProperty("show-queries", "true"); return move(sqlite3); }()); session->mapClass<EntityA>("entity_a"); session->mapClass<EntityB>("entity_b"); session->createTables(); EntityB::setSession(session); { dbo::Transaction t{*session}; auto b = make_unique<EntityB>(); b->setParent( session->add(make_unique<EntityA>()) ); session->add(move(b)); } cout << getAnyB(session)->getParent()->name; return 0; }
비교하기