📄 exampledatabase.cpp
字号:
values.push_back(id); id.setModified(false); fields.push_back(type.name()); values.push_back(type); type.setModified(false); fieldRecs.push_back(fields); valueRecs.push_back(values); return litesql::Persistent::insert(tables, fieldRecs, valueRecs, sequence__);}void Role::create() { litesql::Record tables; litesql::Records fieldRecs; litesql::Records valueRecs; type = type__; std::string newID = insert(tables, fieldRecs, valueRecs); if (id == 0) id = newID;}void Role::addUpdates(Updates& updates) { prepareUpdate(updates, table__); updateField(updates, table__, id); updateField(updates, table__, type);}void Role::addIDUpdates(Updates& updates) {}void Role::getFieldTypes(std::vector<litesql::FieldType>& ftypes) { ftypes.push_back(Id); ftypes.push_back(Type);}void Role::delRecord() { deleteFromTable(table__, id);}void Role::delRelations() { RoleRelation::del(*db, (RoleRelation::Role == id));}void Role::update() { if (!inDatabase) { create(); return; } Updates updates; addUpdates(updates); if (id != oldKey) { if (!typeIsCorrect()) upcastCopy()->addIDUpdates(updates); } litesql::Persistent::update(updates); oldKey = id;}void Role::del() { if (typeIsCorrect() == false) { std::auto_ptr<Role> p(upcastCopy()); p->delRelations(); p->onDelete(); p->delRecord(); } else { onDelete(); delRecord(); } inDatabase = false;}bool Role::typeIsCorrect() { return type == type__;}std::auto_ptr<Role> Role::upcast() { if (type == Student::type__) return auto_ptr<Role>(new Student(select<Student>(*db, Id == id).one())); if (type == Employee::type__) return auto_ptr<Role>(new Employee(select<Employee>(*db, Id == id).one())); return auto_ptr<Role>(new Role(*this));}std::auto_ptr<Role> Role::upcastCopy() { Role* np = NULL; if (type == "Student") np = new Student(*db); if (type == "Employee") np = new Employee(*db); np->id = id; np->type = type; np->inDatabase = inDatabase; if (!np) np = new Role(*this); return auto_ptr<Role>(np);}std::ostream & operator<<(std::ostream& os, Role o) { os << "-------------------------------------" << std::endl; os << o.id.name() << " = " << o.id << std::endl; os << o.type.name() << " = " << o.type << std::endl; os << "-------------------------------------" << std::endl; return os;}Student::SchoolHandle::SchoolHandle(const Student& owner) : litesql::RelationHandle<Student>(owner) {}void Student::SchoolHandle::link(const School& o0) { SchoolStudentRelation::link(owner->getDatabase(), o0, *owner);}void Student::SchoolHandle::unlink(const School& o0) { SchoolStudentRelation::unlink(owner->getDatabase(), o0, *owner);}void Student::SchoolHandle::del(const litesql::Expr& expr) { SchoolStudentRelation::del(owner->getDatabase(), expr);}litesql::DataSource<School> Student::SchoolHandle::get(const litesql::Expr& expr, const litesql::Expr& srcExpr) { return SchoolStudentRelation::get<School>(owner->getDatabase(), expr, (SchoolStudentRelation::Student == owner->id) && srcExpr);}litesql::DataSource<SchoolStudentRelation::Row> Student::SchoolHandle::getRows(const litesql::Expr& expr) { return SchoolStudentRelation::getRows(owner->getDatabase(), expr && (SchoolStudentRelation::Student == owner->id));}const std::string Student::type__("Student");const std::string Student::table__("Student_");Student::Student(const litesql::Database& db) : Role(db) {}Student::Student(const litesql::Database& db, const litesql::Record& rec) : Role(db, rec) {}Student::Student(const Student& obj) : Role(obj) {}const Student& Student::operator=(const Student& obj) { Role::operator=(obj); return *this;}Student::SchoolHandle Student::school() { return Student::SchoolHandle(*this);}std::string Student::insert(litesql::Record& tables, litesql::Records& fieldRecs, litesql::Records& valueRecs) { tables.push_back(table__); litesql::Record fields; litesql::Record values; fields.push_back("id_"); values.push_back(id); fieldRecs.push_back(fields); valueRecs.push_back(values); return Role::insert(tables, fieldRecs, valueRecs);}void Student::create() { litesql::Record tables; litesql::Records fieldRecs; litesql::Records valueRecs; type = type__; std::string newID = insert(tables, fieldRecs, valueRecs); if (id == 0) id = newID;}void Student::addUpdates(Updates& updates) { prepareUpdate(updates, table__); Role::addUpdates(updates);}void Student::addIDUpdates(Updates& updates) { prepareUpdate(updates, table__); updateField(updates, table__, id);}void Student::getFieldTypes(std::vector<litesql::FieldType>& ftypes) { Role::getFieldTypes(ftypes);}void Student::delRecord() { deleteFromTable(table__, id); Role::delRecord();}void Student::delRelations() { SchoolStudentRelation::del(*db, (SchoolStudentRelation::Student == id));}void Student::update() { if (!inDatabase) { create(); return; } Updates updates; addUpdates(updates); if (id != oldKey) { if (!typeIsCorrect()) upcastCopy()->addIDUpdates(updates); else addIDUpdates(updates); } litesql::Persistent::update(updates); oldKey = id;}void Student::del() { if (typeIsCorrect() == false) { std::auto_ptr<Student> p(upcastCopy()); p->delRelations(); p->onDelete(); p->delRecord(); } else { onDelete(); delRecord(); } inDatabase = false;}bool Student::typeIsCorrect() { return type == type__;}std::auto_ptr<Student> Student::upcast() { return auto_ptr<Student>(new Student(*this));}std::auto_ptr<Student> Student::upcastCopy() { Student* np = NULL; np->inDatabase = inDatabase; if (!np) np = new Student(*this); return auto_ptr<Student>(np);}std::ostream & operator<<(std::ostream& os, Student o) { os << "-------------------------------------" << std::endl; os << o.id.name() << " = " << o.id << std::endl; os << o.type.name() << " = " << o.type << std::endl; os << "-------------------------------------" << std::endl; return os;}Employee::OfficeHandle::OfficeHandle(const Employee& owner) : litesql::RelationHandle<Employee>(owner) {}void Employee::OfficeHandle::link(const Office& o0) { EmployeeOfficeRelation::link(owner->getDatabase(), *owner, o0);}void Employee::OfficeHandle::unlink(const Office& o0) { EmployeeOfficeRelation::unlink(owner->getDatabase(), *owner, o0);}void Employee::OfficeHandle::del(const litesql::Expr& expr) { EmployeeOfficeRelation::del(owner->getDatabase(), expr);}litesql::DataSource<Office> Employee::OfficeHandle::get(const litesql::Expr& expr, const litesql::Expr& srcExpr) { return EmployeeOfficeRelation::get<Office>(owner->getDatabase(), expr, (EmployeeOfficeRelation::Employee == owner->id) && srcExpr);}litesql::DataSource<EmployeeOfficeRelation::Row> Employee::OfficeHandle::getRows(const litesql::Expr& expr) { return EmployeeOfficeRelation::getRows(owner->getDatabase(), expr && (EmployeeOfficeRelation::Employee == owner->id));}const std::string Employee::type__("Employee");const std::string Employee::table__("Employee_");Employee::Employee(const litesql::Database& db) : Role(db) {}Employee::Employee(const litesql::Database& db, const litesql::Record& rec) : Role(db, rec) {}Employee::Employee(const Employee& obj) : Role(obj) {}const Employee& Employee::operator=(const Employee& obj) { Role::operator=(obj); return *this;}Employee::OfficeHandle Employee::office() { return Employee::OfficeHandle(*this);}std::string Employee::insert(litesql::Record& tables, litesql::Records& fieldRecs, litesql::Records& valueRecs) { tables.push_back(table__); litesql::Record fields; litesql::Record values; fields.push_back("id_"); values.push_back(id); fieldRecs.push_back(fields); valueRecs.push_back(values); return Role::insert(tables, fieldRecs, valueRecs);}void Employee::create() { litesql::Record tables; litesql::Records fieldRecs; litesql::Records valueRecs; type = type__; std::string newID = insert(tables, fieldRecs, valueRecs); if (id == 0) id = newID;}void Employee::addUpdates(Updates& updates) { prepareUpdate(updates, table__); Role::addUpdates(updates);}void Employee::addIDUpdates(Updates& updates) { prepareUpdate(updates, table__); updateField(updates, table__, id);}void Employee::getFieldTypes(std::vector<litesql::FieldType>& ftypes) { Role::getFieldTypes(ftypes);}void Employee::delRecord() { deleteFromTable(table__, id); Role::delRecord();}void Employee::delRelations() { EmployeeOfficeRelation::del(*db, (EmployeeOfficeRelation::Employee == id));}void Employee::update() { if (!inDatabase) { create(); return; } Updates updates; addUpdates(updates); if (id != oldKey) { if (!typeIsCorrect()) upcastCopy()->addIDUpdates(updates); else addIDUpdates(updates); } litesql::Persistent::update(updates); oldKey = id;}void Employee::del() { if (typeIsCorrect() == false) { std::auto_ptr<Employee> p(upcastCopy()); p->delRelations(); p->onDelete(); p->delRecord(); } else { onDelete(); delRecord(); } inDatabase = false;}bool Employee::typeIsCorrect() { return type == type__;}std::auto_ptr<Employee> Employee::upcast() { return auto_ptr<Employee>(new Employee(*this));}std::auto_ptr<Employee> Employee::upcastCopy() { Employee* np = NULL; np->inDatabase = inDatabase; if (!np) np = new Employee(*this); return auto_ptr<Employee>(np);}std::ostream & operator<<(std::ostream& os, Employee o) { os << "-------------------------------------" << std::endl; os << o.id.name() << " = " << o.id << std::endl; os << o.type.name() << " = " << o.type << std::endl; os << "-------------------------------------" << std::endl; return os;}School::StudentsHandle::StudentsHandle(const School& owner) : litesql::RelationHandle<School>(owner) {}void School::StudentsHandle::link(const Student& o0) { SchoolStudentRelation::link(owner->getDatabase(), *owner, o0);}void School::StudentsHandle::unlink(const Student& o0) { SchoolStudentRelation::unlink(owner->getDatabase(), *owner, o0);}void School::StudentsHandle::del(const litesql::Expr& expr) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -