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

📄 exampledatabase.cpp

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