⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exampledatabase.cpp

📁 LiteSQL is a C++ library that integrates C++ objects tightly to relational database and thus provide
💻 CPP
📖 第 1 页 / 共 4 页
字号:
    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 + -