{"id":15002464,"url":"https://github.com/hamedmasafi/nut","last_synced_at":"2025-04-06T01:08:17.989Z","repository":{"id":8677854,"uuid":"53477758","full_name":"HamedMasafi/Nut","owner":"HamedMasafi","description":"Advanced, Powerful and easy to use ORM for Qt","archived":false,"fork":false,"pushed_at":"2023-07-13T08:22:32.000Z","size":5099,"stargazers_count":297,"open_issues_count":15,"forks_count":75,"subscribers_count":30,"default_branch":"master","last_synced_at":"2025-04-06T01:08:12.466Z","etag":null,"topics":["database","mysql","orm","orm-library","postgresql","qt","sql","sql-server","sqlite"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HamedMasafi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2016-03-09T07:35:49.000Z","updated_at":"2025-02-26T13:24:06.000Z","dependencies_parsed_at":"2023-02-10T15:01:42.930Z","dependency_job_id":"baccf4e8-fc41-4a62-8cdc-0b8e81929cd8","html_url":"https://github.com/HamedMasafi/Nut","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HamedMasafi%2FNut","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HamedMasafi%2FNut/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HamedMasafi%2FNut/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HamedMasafi%2FNut/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HamedMasafi","download_url":"https://codeload.github.com/HamedMasafi/Nut/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247419860,"owners_count":20936012,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["database","mysql","orm","orm-library","postgresql","qt","sql","sql-server","sqlite"],"created_at":"2024-09-24T18:50:28.805Z","updated_at":"2025-04-06T01:08:17.963Z","avatar_url":"https://github.com/HamedMasafi.png","language":"C++","readme":"# Nut\n\n\n[![CI build](https://github.com/HamedMasafi/Nut/workflows/CI%20build/badge.svg)](https://github.com/HamedMasafi/Nut/actions)\n[![GitLicense](https://gitlicense.com/badge/hamedmasafi/nut)](https://gitlicense.com/license/hamedmasafi/nut)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/f3802610beb946068f6cd2c2b6608a8b)](https://www.codacy.com/app/HamedMasafi/Nut?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=HamedMasafi/Nut\u0026amp;utm_campaign=Badge_Grade)\n\n## Advanced, Powerful and easy to use ORM for Qt5\n\n## Features\n- Easy to use\n- Support PosgtreSQL, MySQL, SQLite and Microsoft Sql Server\n- Automatically create and update database\n- Support for IDE autocomplete. No hard-coding is needed\n- Detecting table joins\n- Support common C++ and Qt-specific types ([Full list](doc/datatypes.md))\n- Bulk insertation\n\n## Qick start\n### Create table\n\n#### sampletable.h\n```cpp\n#ifndef SAMPLETABLE_H\n#define SAMPLETABLE_H\n\n#include \u003cQtNut/table.h\u003e\n\nclass SampleTable : public Nut::Table\n{\n    Q_OBJECT\n    Q_PROPERTY(int id READ id WRITE setId NOTIFY idChanged)\n    Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)\n\n    int m_id;\n    QString m_name;\n\n    // BEGIN OF NUT MACROS\n    NUT_PRIMARY_KEY(id)\n    NUT_FIELD(int, id)\n    NUT_FIELD(QString, name)\n    //END OF NUT MACROS\n\npublic:\n    explicit SampleTable(QObject *parent = nullptr);\n\n    int id() const;\n    QString name() const;\n\npublic Q_SLOTS:\n    void setId(int id);\n    void setName(QString name);\n\nQ_SIGNALS:\n    void idChanged(int id);\n    void nameChanged(QString name);\n};\n\n#endif // SAMPLETABLE_H\n```\n\n#### sampletable.cpp:\n```cpp\n#include \"sampletable.h\"\n\nSampleTable::SampleTable(QObject *parent) : Nut::Table(parent)\n{\n    init();\n}\n\nint SampleTable::id() const\n{\n    return m_id;\n}\n\nQString SampleTable::name() const\n{\n    return m_name;\n}\n\nQString SampleTable::lastName() const\n{\n    return m_lastName;\n}\n\nvoid SampleTable::setId(int id)\n{\n    if (m_id == id)\n        return;\n\n    m_id = id;\n    Q_EMIT idChanged(m_id);\n}\n\nvoid SampleTable::setName(QString name)\n{\n    if (m_name == name)\n        return;\n\n    m_name = name;\n    Q_EMIT nameChanged(m_name);\n}\n```\n\n### Create database\n#### sampledatabase.h\n```cpp\n#ifndef SAMPLEDATABASE_H\n#define SAMPLEDATABASE_H\n\n#include \u003cQtNut/Database\u003e\n\nclass SampleTable;\nclass SampleDataBase : public NUT_WRAP_NAMESPACE(Database)\n{\n    Q_OBJECT\n    NUT_DB_VERSION(1)\n    NUT_DECLARE_TABLE(SampleTable, items)\n\npublic:\n    SampleDataBase();\n};\n\n#endif // SAMPLEDATABASE_H\n```\n\nsampledatabase.cpp\n```cpp\n#include \"sampledatabase.h\"\n#include \"sampletable.h\"\n\nSampleDataBase::SampleDataBase() : Nut::Database()\n  , m_items(new Nut::TableSet\u003cSampleTable\u003e(this))\n{\n\n}\n\n```\n\n#### Sample codes:\n```cpp\nqRegisterMetaType\u003cSampleTable*\u003e();\nqRegisterMetaType\u003cSampleDataBase*\u003e();\n\ndb.setDriver(\"QSQLITE\");\ndb.setDatabaseName(\"data.sb\");\n\nif (db.open()) {\n    qFatal() \u003c\u003c \"Unable to open the database\";\n}\n\n\n// Read add rows from database\nauto list = db.items()-\u003equery().toList();\n// list is QList\u003cQSharedPointer\u003cSampleTable\u003e\u003e\n    \n//Select all the people named David.\nauto onlyDavids = db.items()-\u003equery().where(SampleTable::nameField() == \"David\").toList();\nonlyDavids.at(0)-\u003esetName(\"John\"); // change him name to John\ndb.saveChanges(); // save changed to the database\n\n// Remove all Johns from the database\ndb.items()-\u003equery().where(SampleTable::nameField() == \"John\").remove();\n\n// Select rows with folowwing ids: 1, 4, 5, 6\ndb.items()-\u003equery().where(SampleTable::idField().in({1, 4, 5, 6}));\n\n// Select from id 10 to 20\ndb.items()-\u003equery().where(SampleTable::idField().between(10, 20));\n\n// Some other samples\ndb.items()-\u003equery().where(SampleTable::idField() \u003c= 7);\ndb.items()-\u003equery().where(SampleTable::idField() \u003e 0 || SampleTable::idField() == -3);\ndb.items()-\u003equery().where(SampleTable::idField() \u003e 10 \u0026\u0026 (SampleTable::nameField() == \"John\" || SampleTable::nameField() == \"Jim\"));\n\n// Select biggest id\nauto biggestId = db.items()-\u003equery().max(SampleTable::idField());\n```\n\n## Getting started\n- [Sample codes](doc/start.md)\n- [Shared pointer and regular mode](doc/sharedpointer.md)\n- [Create database class](doc/database.md)\n- [Create table class](doc/table.md)\n- [Using queries](doc/query.md)\n- [Supported data types](doc/datatypes.md)\n\n## Help needed!\nWe need more documentation or wiki. If you can help to improve docs please fork now!\n\n### Technology sponsership\nThanks to [JetBrains](http://https://www.jetbrains.com/) to their useful IDEs.\n\n\n\u003cimg alt=\"JetBrains Logo (Main) logo\" src=\"https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.png\" width=\"100\" /\u003e\u003cimg alt=\"CLion logo\" src=\"https://resources.jetbrains.com/storage/products/company/brand/logos/CLion_icon.png\" width=\"100\" /\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhamedmasafi%2Fnut","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhamedmasafi%2Fnut","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhamedmasafi%2Fnut/lists"}