📄 exampledatabase.cpp
字号:
sel.result(Employee.fullName()); sel.where(srcExpr); return DataSource<example::Employee>(db, example::Employee::Id.in(sel) && expr);}template <> litesql::DataSource<example::Office> EmployeeOfficeRelation::get(const litesql::Database& db, const litesql::Expr& expr, const litesql::Expr& srcExpr) { SelectQuery sel; sel.source(table__); sel.result(Office.fullName()); sel.where(srcExpr); return DataSource<example::Office>(db, example::Office::Id.in(sel) && expr);}const int Person::SexType::Male(0);const int Person::SexType::Female(1);Person::SexType::SexType(const std::string& n, const std::string& t, const std::string& tbl, const litesql::FieldType::Values& vals) : litesql::FieldType(n,t,tbl,vals) {}const int Person::Sex::Male(0);const int Person::Sex::Female(1);Person::MotherHandle::MotherHandle(const Person& owner) : litesql::RelationHandle<Person>(owner) {}void Person::MotherHandle::link(const Person& o0) { PersonPersonRelationMother::link(owner->getDatabase(), *owner, o0);}void Person::MotherHandle::unlink(const Person& o0) { PersonPersonRelationMother::unlink(owner->getDatabase(), *owner, o0);}void Person::MotherHandle::del(const litesql::Expr& expr) { PersonPersonRelationMother::del(owner->getDatabase(), expr);}litesql::DataSource<Person> Person::MotherHandle::get(const litesql::Expr& expr, const litesql::Expr& srcExpr) { return PersonPersonRelationMother::getPerson2(owner->getDatabase(), expr, (PersonPersonRelationMother::Person1 == owner->id) && srcExpr);}litesql::DataSource<PersonPersonRelationMother::Row> Person::MotherHandle::getRows(const litesql::Expr& expr) { return PersonPersonRelationMother::getRows(owner->getDatabase(), expr && (PersonPersonRelationMother::Person1 == owner->id));}Person::FatherHandle::FatherHandle(const Person& owner) : litesql::RelationHandle<Person>(owner) {}void Person::FatherHandle::link(const Person& o0) { PersonPersonRelationFather::link(owner->getDatabase(), *owner, o0);}void Person::FatherHandle::unlink(const Person& o0) { PersonPersonRelationFather::unlink(owner->getDatabase(), *owner, o0);}void Person::FatherHandle::del(const litesql::Expr& expr) { PersonPersonRelationFather::del(owner->getDatabase(), expr);}litesql::DataSource<Person> Person::FatherHandle::get(const litesql::Expr& expr, const litesql::Expr& srcExpr) { return PersonPersonRelationFather::getPerson2(owner->getDatabase(), expr, (PersonPersonRelationFather::Person1 == owner->id) && srcExpr);}litesql::DataSource<PersonPersonRelationFather::Row> Person::FatherHandle::getRows(const litesql::Expr& expr) { return PersonPersonRelationFather::getRows(owner->getDatabase(), expr && (PersonPersonRelationFather::Person1 == owner->id));}Person::SiblingsHandle::SiblingsHandle(const Person& owner) : litesql::RelationHandle<Person>(owner) {}void Person::SiblingsHandle::link(const Person& o0) { PersonPersonRelationSiblings::link(owner->getDatabase(), *owner, o0);}void Person::SiblingsHandle::unlink(const Person& o0) { PersonPersonRelationSiblings::unlink(owner->getDatabase(), *owner, o0);}void Person::SiblingsHandle::del(const litesql::Expr& expr) { PersonPersonRelationSiblings::del(owner->getDatabase(), expr);}litesql::DataSource<Person> Person::SiblingsHandle::get(const litesql::Expr& expr, const litesql::Expr& srcExpr) { return PersonPersonRelationSiblings::getPerson2(owner->getDatabase(), expr, (PersonPersonRelationSiblings::Person1 == owner->id) && srcExpr);}litesql::DataSource<PersonPersonRelationSiblings::Row> Person::SiblingsHandle::getRows(const litesql::Expr& expr) { return PersonPersonRelationSiblings::getRows(owner->getDatabase(), expr && (PersonPersonRelationSiblings::Person1 == owner->id));}Person::ChildrenHandle::ChildrenHandle(const Person& owner) : litesql::RelationHandle<Person>(owner) {}void Person::ChildrenHandle::link(const Person& o0) { PersonPersonRelationChildren::link(owner->getDatabase(), *owner, o0);}void Person::ChildrenHandle::unlink(const Person& o0) { PersonPersonRelationChildren::unlink(owner->getDatabase(), *owner, o0);}void Person::ChildrenHandle::del(const litesql::Expr& expr) { PersonPersonRelationChildren::del(owner->getDatabase(), expr);}litesql::DataSource<Person> Person::ChildrenHandle::get(const litesql::Expr& expr, const litesql::Expr& srcExpr) { return PersonPersonRelationChildren::getPerson2(owner->getDatabase(), expr, (PersonPersonRelationChildren::Person1 == owner->id) && srcExpr);}litesql::DataSource<PersonPersonRelationChildren::Row> Person::ChildrenHandle::getRows(const litesql::Expr& expr) { return PersonPersonRelationChildren::getRows(owner->getDatabase(), expr && (PersonPersonRelationChildren::Person1 == owner->id));}Person::RolesHandle::RolesHandle(const Person& owner) : litesql::RelationHandle<Person>(owner) {}void Person::RolesHandle::link(const Role& o0) { RoleRelation::link(owner->getDatabase(), *owner, o0);}void Person::RolesHandle::unlink(const Role& o0) { RoleRelation::unlink(owner->getDatabase(), *owner, o0);}void Person::RolesHandle::del(const litesql::Expr& expr) { RoleRelation::del(owner->getDatabase(), expr);}litesql::DataSource<Role> Person::RolesHandle::get(const litesql::Expr& expr, const litesql::Expr& srcExpr) { return RoleRelation::get<Role>(owner->getDatabase(), expr, (RoleRelation::Person == owner->id) && srcExpr);}litesql::DataSource<RoleRelation::Row> Person::RolesHandle::getRows(const litesql::Expr& expr) { return RoleRelation::getRows(owner->getDatabase(), expr && (RoleRelation::Person == owner->id));}const std::string Person::type__("Person");const std::string Person::table__("Person_");const std::string Person::sequence__("Person_seq");const litesql::FieldType Person::Id("id_","INTEGER",table__);const litesql::FieldType Person::Type("type_","TEXT",table__);const litesql::FieldType Person::Name("name_","TEXT",table__);const litesql::FieldType Person::Age("age_","INTEGER",table__);std::vector < std::pair< std::string, std::string > > Person::sex_values;Person::SexType Person::Sex("sex_","INTEGER",table__,sex_values);void Person::initValues() { sex_values.clear(); sex_values.push_back(make_pair("Male","0")); sex_values.push_back(make_pair("Female","1"));}void Person::defaults() { id = 0; age = 15; sex = 0;}Person::Person(const litesql::Database& db) : litesql::Persistent(db), id(Id), type(Type), name(Name), age(Age), sex(Sex) { defaults();}Person::Person(const litesql::Database& db, const litesql::Record& rec) : litesql::Persistent(db, rec), id(Id), type(Type), name(Name), age(Age), sex(Sex) { defaults(); size_t size = (rec.size() > 5) ? 5 : rec.size(); switch(size) { case 5: sex = rec[4]; case 4: age = rec[3]; case 3: name = rec[2]; case 2: type = rec[1]; case 1: id = rec[0]; }}Person::Person(const Person& obj) : litesql::Persistent(obj), id(obj.id), type(obj.type), name(obj.name), age(obj.age), sex(obj.sex) {}const Person& Person::operator=(const Person& obj) { if (this != &obj) { id = obj.id; type = obj.type; name = obj.name; age = obj.age; sex = obj.sex; } litesql::Persistent::operator=(obj); return *this;}Person::MotherHandle Person::mother() { return Person::MotherHandle(*this);}Person::FatherHandle Person::father() { return Person::FatherHandle(*this);}Person::SiblingsHandle Person::siblings() { return Person::SiblingsHandle(*this);}Person::ChildrenHandle Person::children() { return Person::ChildrenHandle(*this);}Person::RolesHandle Person::roles() { return Person::RolesHandle(*this);}std::string Person::insert(litesql::Record& tables, litesql::Records& fieldRecs, litesql::Records& valueRecs) { tables.push_back(table__); litesql::Record fields; litesql::Record values; fields.push_back(id.name()); values.push_back(id); id.setModified(false); fields.push_back(type.name()); values.push_back(type); type.setModified(false); fields.push_back(name.name()); values.push_back(name); name.setModified(false); fields.push_back(age.name()); values.push_back(age); age.setModified(false); fields.push_back(sex.name()); values.push_back(sex); sex.setModified(false); fieldRecs.push_back(fields); valueRecs.push_back(values); return litesql::Persistent::insert(tables, fieldRecs, valueRecs, sequence__);}void Person::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 Person::addUpdates(Updates& updates) { prepareUpdate(updates, table__); updateField(updates, table__, id); updateField(updates, table__, type); updateField(updates, table__, name); updateField(updates, table__, age); updateField(updates, table__, sex);}void Person::addIDUpdates(Updates& updates) {}void Person::getFieldTypes(std::vector<litesql::FieldType>& ftypes) { ftypes.push_back(Id); ftypes.push_back(Type); ftypes.push_back(Name); ftypes.push_back(Age); ftypes.push_back(Sex);}void Person::delRecord() { deleteFromTable(table__, id);}void Person::delRelations() { PersonPersonRelationMother::del(*db, (PersonPersonRelationMother::Person1 == id) || (PersonPersonRelationMother::Person2 == id)); PersonPersonRelationFather::del(*db, (PersonPersonRelationFather::Person1 == id) || (PersonPersonRelationFather::Person2 == id)); PersonPersonRelationSiblings::del(*db, (PersonPersonRelationSiblings::Person1 == id) || (PersonPersonRelationSiblings::Person2 == id)); PersonPersonRelationChildren::del(*db, (PersonPersonRelationChildren::Person1 == id) || (PersonPersonRelationChildren::Person2 == id)); RoleRelation::del(*db, (RoleRelation::Person == id));}void Person::update() { if (!inDatabase) { create(); return; } Updates updates; addUpdates(updates); if (id != oldKey) { if (!typeIsCorrect()) upcastCopy()->addIDUpdates(updates); } litesql::Persistent::update(updates); oldKey = id;}void Person::del() { if (typeIsCorrect() == false) { std::auto_ptr<Person> p(upcastCopy()); p->delRelations(); p->onDelete(); p->delRecord(); } else { onDelete(); delRecord(); } inDatabase = false;}bool Person::typeIsCorrect() { return type == type__;}std::auto_ptr<Person> Person::upcast() { return auto_ptr<Person>(new Person(*this));}std::auto_ptr<Person> Person::upcastCopy() { Person* np = NULL; np->id = id; np->type = type; np->name = name; np->age = age; np->sex = sex; np->inDatabase = inDatabase; if (!np) np = new Person(*this); return auto_ptr<Person>(np);}std::ostream & operator<<(std::ostream& os, Person o) { os << "-------------------------------------" << std::endl; os << o.id.name() << " = " << o.id << std::endl; os << o.type.name() << " = " << o.type << std::endl; os << o.name.name() << " = " << o.name << std::endl; os << o.age.name() << " = " << o.age << std::endl; os << o.sex.name() << " = " << o.sex << std::endl; os << "-------------------------------------" << std::endl; return os;}Role::PersonHandle::PersonHandle(const Role& owner) : litesql::RelationHandle<Role>(owner) {}void Role::PersonHandle::link(const Person& o0) { RoleRelation::link(owner->getDatabase(), o0, *owner);}void Role::PersonHandle::unlink(const Person& o0) { RoleRelation::unlink(owner->getDatabase(), o0, *owner);}void Role::PersonHandle::del(const litesql::Expr& expr) { RoleRelation::del(owner->getDatabase(), expr);}litesql::DataSource<Person> Role::PersonHandle::get(const litesql::Expr& expr, const litesql::Expr& srcExpr) { return RoleRelation::get<Person>(owner->getDatabase(), expr, (RoleRelation::Role == owner->id) && srcExpr);}litesql::DataSource<RoleRelation::Row> Role::PersonHandle::getRows(const litesql::Expr& expr) { return RoleRelation::getRows(owner->getDatabase(), expr && (RoleRelation::Role == owner->id));}const std::string Role::type__("Role");const std::string Role::table__("Role_");const std::string Role::sequence__("Role_seq");const litesql::FieldType Role::Id("id_","INTEGER",table__);const litesql::FieldType Role::Type("type_","TEXT",table__);void Role::defaults() { id = 0;}Role::Role(const litesql::Database& db) : litesql::Persistent(db), id(Id), type(Type) { defaults();}Role::Role(const litesql::Database& db, const litesql::Record& rec) : litesql::Persistent(db, rec), id(Id), type(Type) { defaults(); size_t size = (rec.size() > 2) ? 2 : rec.size(); switch(size) { case 2: type = rec[1]; case 1: id = rec[0]; }}Role::Role(const Role& obj) : litesql::Persistent(obj), id(obj.id), type(obj.type) {}const Role& Role::operator=(const Role& obj) { if (this != &obj) { id = obj.id; type = obj.type; } litesql::Persistent::operator=(obj); return *this;}Role::PersonHandle Role::person() { return Role::PersonHandle(*this);}std::string Role::insert(litesql::Record& tables, litesql::Records& fieldRecs, litesql::Records& valueRecs) { tables.push_back(table__); litesql::Record fields; litesql::Record values; fields.push_back(id.name());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -