Вынесение описание таблиц в model
This commit is contained in:
@@ -15,6 +15,7 @@ Project {
|
|||||||
|
|
||||||
"src/cpp-opds.qbs",
|
"src/cpp-opds.qbs",
|
||||||
"src/database/database.qbs",
|
"src/database/database.qbs",
|
||||||
|
"src/model/model.qbs",
|
||||||
"src/restapi/restapi.qbs",
|
"src/restapi/restapi.qbs",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ PSApplication {
|
|||||||
Depends { name: "restapi" }
|
Depends { name: "restapi" }
|
||||||
Depends { name: "redkit_gen" }
|
Depends { name: "redkit_gen" }
|
||||||
Depends { name: "rdbase" }
|
Depends { name: "rdbase" }
|
||||||
|
Depends { name: "model" }
|
||||||
|
|
||||||
cpp.cxxLanguageVersion: "c++20"
|
cpp.cxxLanguageVersion: "c++20"
|
||||||
|
|
||||||
|
|||||||
@@ -13,87 +13,9 @@
|
|||||||
#include <memory> // std::unique_ptr
|
#include <memory> // std::unique_ptr
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include <odb/database.hxx>
|
|
||||||
|
|
||||||
#if defined(DATABASE_MYSQL)
|
|
||||||
#include <odb/mysql/database.hxx>
|
|
||||||
#elif defined(DATABASE_SQLITE)
|
|
||||||
#include <odb/connection.hxx>
|
|
||||||
#include <odb/schema-catalog.hxx>
|
|
||||||
#include <odb/sqlite/database.hxx>
|
|
||||||
#include <odb/transaction.hxx>
|
|
||||||
#elif defined(DATABASE_PGSQL)
|
|
||||||
#include <odb/pgsql/database.hxx>
|
|
||||||
#elif defined(DATABASE_ORACLE)
|
|
||||||
#include <odb/oracle/database.hxx>
|
|
||||||
#elif defined(DATABASE_MSSQL)
|
|
||||||
#include <odb/mssql/database.hxx>
|
|
||||||
#else
|
|
||||||
#error unknown database; did you forget to define the DATABASE_* macros?
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#include <random>
|
|
||||||
#include <rcore/smarttypes.h>
|
|
||||||
|
|
||||||
using oDBase = odb::sqlite::database;
|
#include "database_utils.h"
|
||||||
using uDBase = U<oDBase>;
|
|
||||||
|
|
||||||
struct testData
|
|
||||||
{
|
|
||||||
QString first;
|
|
||||||
QString last;
|
|
||||||
int age;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Функция для генерации случайной строки (имени или фамилии)
|
|
||||||
QString generate_random_string(const QVector<QString>& pool)
|
|
||||||
{
|
|
||||||
static std::random_device rd;
|
|
||||||
static std::mt19937 gen(rd());
|
|
||||||
std::uniform_int_distribution<> dis(0, pool.size() - 1);
|
|
||||||
return pool[dis(gen)];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Функция для генерации случайного года
|
|
||||||
int generate_random_year(int min_year = 1900, int max_year = 2020)
|
|
||||||
{
|
|
||||||
static std::random_device rd;
|
|
||||||
static std::mt19937 gen(rd());
|
|
||||||
std::uniform_int_distribution<> dis(min_year, max_year);
|
|
||||||
return dis(gen);
|
|
||||||
}
|
|
||||||
|
|
||||||
QVector<testData> fillAuthorDB()
|
|
||||||
{
|
|
||||||
QVector<QString> first_names = {
|
|
||||||
"John", "Jane", "Alex", "Chris", "Robert", "Emily", "James", "Linda", "David", "Sarah",
|
|
||||||
"Michael", "Elizabeth", "Daniel", "Samantha", "William", "Olivia", "Ethan", "Sophia", "Joshua", "Charlotte",
|
|
||||||
"Daniel", "Grace", "Benjamin", "Isabella", "Matthew", "Victoria", "Henry", "Abigail", "Samuel", "Megan",
|
|
||||||
"Lucas", "Lily", "Andrew", "Madison", "Jackson", "Chloe", "Aiden", "Amelia", "Thomas", "Natalie",
|
|
||||||
"Ryan", "Zoe", "Jack", "Harper", "Elijah", "Ava", "Isaac", "Mia", "Caleb", "Ella"
|
|
||||||
};
|
|
||||||
QVector<QString> last_names = {
|
|
||||||
"Doe", "Smith", "Johnson", "Williams", "Jones", "Brown", "Davis", "Miller", "Wilson", "Moore",
|
|
||||||
"Taylor", "Anderson", "Thomas", "Jackson", "White", "Harris", "Martin", "Thompson", "Garcia", "Martinez",
|
|
||||||
"Roberts", "Clark", "Lewis", "Walker", "Young", "Allen", "King", "Wright", "Scott", "Adams",
|
|
||||||
"Baker", "Gonzalez", "Nelson", "Carter", "Mitchell", "Perez", "Robinson", "Hughes", "Flores", "Cook",
|
|
||||||
"Rogers", "Gutierrez", "Ramirez", "Diaz", "Perez", "Ross", "Sanders", "Price", "Howard", "Cooper"
|
|
||||||
};
|
|
||||||
|
|
||||||
QVector<testData> vecTest;
|
|
||||||
|
|
||||||
for (int i = 0; i < 50; ++i)
|
|
||||||
{
|
|
||||||
QString first_name = generate_random_string(first_names);
|
|
||||||
QString last_name = generate_random_string(last_names);
|
|
||||||
int birth_year = generate_random_year(1900, 2000);
|
|
||||||
|
|
||||||
vecTest.push_back({ first_name, last_name, birth_year });
|
|
||||||
}
|
|
||||||
|
|
||||||
return vecTest;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline uDBase openDB(const std::string path_db)
|
inline uDBase openDB(const std::string path_db)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,37 +13,22 @@ PSLibrary {
|
|||||||
]
|
]
|
||||||
consoleApplication: true
|
consoleApplication: true
|
||||||
|
|
||||||
Depends { name: "Qt"; submodules: [ "core", "sql", "network" ] }
|
Depends { name: "Qt"; submodules: [ "core", "network" ] }
|
||||||
Depends { name: "cpp" }
|
Depends { name: "cpp" }
|
||||||
|
|
||||||
Depends { name: "odb.gen" }
|
Depends { name: "odb.gen" }
|
||||||
Depends { name: "rdbase" }
|
Depends { name: "rdbase" }
|
||||||
|
|
||||||
Depends { name: "redkit_gen" }
|
|
||||||
redkit_gen.includeModules: ["JsonSerializer"]
|
|
||||||
|
|
||||||
odb.gen.databases: "sqlite"
|
odb.gen.databases: "sqlite"
|
||||||
cpp.cxxLanguageVersion: "c++17"
|
cpp.cxxLanguageVersion: "c++17"
|
||||||
|
|
||||||
Group {
|
Group {
|
||||||
name: "cpp"
|
name: "cpp"
|
||||||
files: [
|
files: [
|
||||||
"databasemanager.*",
|
"**/*.h",
|
||||||
"*.cpp",
|
"**/*.hxx",
|
||||||
"*.h",
|
"**/*.cpp",
|
||||||
"*.hxx",
|
|
||||||
]
|
]
|
||||||
excludeFiles: odbs.files
|
|
||||||
}
|
|
||||||
|
|
||||||
Group {
|
|
||||||
id: odbs
|
|
||||||
name: "odb"
|
|
||||||
files: [
|
|
||||||
"author_s.h",
|
|
||||||
"book_s.h",
|
|
||||||
]
|
|
||||||
fileTags: ["hpp", "odbxx"]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cpp.dynamicLibraries: [
|
cpp.dynamicLibraries: [
|
||||||
|
|||||||
57
src/database/database_utils.cpp
Normal file
57
src/database/database_utils.cpp
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
#include "database_utils.h"
|
||||||
|
|
||||||
|
#include <random>
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
|
||||||
|
// Функция для генерации случайной строки (имени или фамилии)
|
||||||
|
QString generate_random_string(const QVector<QString>& pool)
|
||||||
|
{
|
||||||
|
static std::random_device rd;
|
||||||
|
static std::mt19937 gen(rd());
|
||||||
|
std::uniform_int_distribution<> dis(0, pool.size() - 1);
|
||||||
|
return pool[dis(gen)];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Функция для генерации случайного года
|
||||||
|
int generate_random_year(int min_year = 1900, int max_year = 2020)
|
||||||
|
{
|
||||||
|
static std::random_device rd;
|
||||||
|
static std::mt19937 gen(rd());
|
||||||
|
std::uniform_int_distribution<> dis(min_year, max_year);
|
||||||
|
return dis(gen);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
QVector<testData> fillAuthorDB()
|
||||||
|
{
|
||||||
|
QVector<QString> first_names = {
|
||||||
|
"John", "Jane", "Alex", "Chris", "Robert", "Emily", "James", "Linda", "David", "Sarah",
|
||||||
|
"Michael", "Elizabeth", "Daniel", "Samantha", "William", "Olivia", "Ethan", "Sophia", "Joshua", "Charlotte",
|
||||||
|
"Daniel", "Grace", "Benjamin", "Isabella", "Matthew", "Victoria", "Henry", "Abigail", "Samuel", "Megan",
|
||||||
|
"Lucas", "Lily", "Andrew", "Madison", "Jackson", "Chloe", "Aiden", "Amelia", "Thomas", "Natalie",
|
||||||
|
"Ryan", "Zoe", "Jack", "Harper", "Elijah", "Ava", "Isaac", "Mia", "Caleb", "Ella"
|
||||||
|
};
|
||||||
|
QVector<QString> last_names = {
|
||||||
|
"Doe", "Smith", "Johnson", "Williams", "Jones", "Brown", "Davis", "Miller", "Wilson", "Moore",
|
||||||
|
"Taylor", "Anderson", "Thomas", "Jackson", "White", "Harris", "Martin", "Thompson", "Garcia", "Martinez",
|
||||||
|
"Roberts", "Clark", "Lewis", "Walker", "Young", "Allen", "King", "Wright", "Scott", "Adams",
|
||||||
|
"Baker", "Gonzalez", "Nelson", "Carter", "Mitchell", "Perez", "Robinson", "Hughes", "Flores", "Cook",
|
||||||
|
"Rogers", "Gutierrez", "Ramirez", "Diaz", "Perez", "Ross", "Sanders", "Price", "Howard", "Cooper"
|
||||||
|
};
|
||||||
|
|
||||||
|
QVector<testData> vecTest;
|
||||||
|
|
||||||
|
for (int i = 0; i < 50; ++i)
|
||||||
|
{
|
||||||
|
QString first_name = generate_random_string(first_names);
|
||||||
|
QString last_name = generate_random_string(last_names);
|
||||||
|
int birth_year = generate_random_year(1900, 2000);
|
||||||
|
|
||||||
|
vecTest.push_back({ first_name, last_name, birth_year });
|
||||||
|
}
|
||||||
|
|
||||||
|
return vecTest;
|
||||||
|
}
|
||||||
37
src/database/database_utils.h
Normal file
37
src/database/database_utils.h
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
#include <QString>
|
||||||
|
#include <QVector>
|
||||||
|
|
||||||
|
#include <odb/database.hxx>
|
||||||
|
|
||||||
|
#if defined(DATABASE_MYSQL)
|
||||||
|
#include <odb/mysql/database.hxx>
|
||||||
|
#elif defined(DATABASE_SQLITE)
|
||||||
|
#include <odb/connection.hxx>
|
||||||
|
#include <odb/schema-catalog.hxx>
|
||||||
|
#include <odb/sqlite/database.hxx>
|
||||||
|
#include <odb/transaction.hxx>
|
||||||
|
#elif defined(DATABASE_PGSQL)
|
||||||
|
#include <odb/pgsql/database.hxx>
|
||||||
|
#elif defined(DATABASE_ORACLE)
|
||||||
|
#include <odb/oracle/database.hxx>
|
||||||
|
#elif defined(DATABASE_MSSQL)
|
||||||
|
#include <odb/mssql/database.hxx>
|
||||||
|
#else
|
||||||
|
#error unknown database; did you forget to define the DATABASE_* macros?
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <rcore/smarttypes.h>
|
||||||
|
|
||||||
|
#include "database_global.h"
|
||||||
|
|
||||||
|
using oDBase = odb::sqlite::database;
|
||||||
|
using uDBase = U<oDBase>;
|
||||||
|
|
||||||
|
struct testData
|
||||||
|
{
|
||||||
|
QString first;
|
||||||
|
QString last;
|
||||||
|
int age;
|
||||||
|
};
|
||||||
|
|
||||||
|
QVector<testData> DATABASE_EXPORT fillAuthorDB();
|
||||||
@@ -8,10 +8,10 @@
|
|||||||
#include <restapi/restapiserver.h>
|
#include <restapi/restapiserver.h>
|
||||||
|
|
||||||
/* Опыты с odb */
|
/* Опыты с odb */
|
||||||
#include <database/author_s-odb.hxx> // Должен быть здесь
|
#include <model/author_s-odb.hxx> // Должен быть здесь
|
||||||
#include <database/author_s.h>
|
#include <model/author_s.h>
|
||||||
#include <database/book_s-odb.hxx> // Должен быть здесь
|
#include <model/book_s-odb.hxx> // Должен быть здесь
|
||||||
#include <database/book_s.h>
|
#include <model/book_s.h>
|
||||||
#include <database/database.hxx> // create_database
|
#include <database/database.hxx> // create_database
|
||||||
#include <odb/database.hxx>
|
#include <odb/database.hxx>
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
#ifndef AUTHOR_S_H
|
#ifndef AUTHOR_S_H
|
||||||
#define AUTHOR_S_H
|
#define AUTHOR_S_H
|
||||||
|
|
||||||
#include "database_global.h"
|
#include "model_global.h"
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
#include <odb/query.hxx>
|
#include <odb/query.hxx>
|
||||||
|
|
||||||
#pragma db object
|
#pragma db object
|
||||||
class DATABASE_EXPORT Author_S
|
class MODEL_EXPORT Author_S
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Author_S() = default;
|
Author_S() = default;
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
#ifndef BOOK_S_H
|
#ifndef BOOK_S_H
|
||||||
#define BOOK_S_H
|
#define BOOK_S_H
|
||||||
|
|
||||||
#include "database_global.h"
|
#include "model_global.h"
|
||||||
|
|
||||||
#include <QSharedPointer>
|
#include <QSharedPointer>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
#include "author_s.h"
|
#include "author_s.h"
|
||||||
|
|
||||||
#pragma db object
|
#pragma db object
|
||||||
class DATABASE_EXPORT Book_S
|
class MODEL_EXPORT Book_S
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Book_S() = default;
|
Book_S() = default;
|
||||||
43
src/model/model.qbs
Normal file
43
src/model/model.qbs
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
/*!
|
||||||
|
\qmltype cpp-opds
|
||||||
|
\inherits Project
|
||||||
|
\brief Описание
|
||||||
|
*/
|
||||||
|
PSLibrary {
|
||||||
|
cpp.defines: [
|
||||||
|
// You can make your code fail to compile if it uses deprecated APIs.
|
||||||
|
// In order to do so, uncomment the following line.
|
||||||
|
//"QT_DISABLE_DEPRECATED_BEFORE=0x060000" // disables all the APIs deprecated before Qt 6.0.0
|
||||||
|
"DATABASE_SQLITE",
|
||||||
|
"MODEL_LIBRARY"
|
||||||
|
]
|
||||||
|
consoleApplication: true
|
||||||
|
|
||||||
|
Depends { name: "Qt"; submodules: [ "core", "network" ] }
|
||||||
|
Depends { name: "cpp" }
|
||||||
|
|
||||||
|
Depends { name: "odb.gen" }
|
||||||
|
Depends { name: "rdbase" }
|
||||||
|
|
||||||
|
Depends { name: "redkit_gen" }
|
||||||
|
redkit_gen.includeModules: ["JsonSerializer"]
|
||||||
|
|
||||||
|
odb.gen.databases: "sqlite"
|
||||||
|
cpp.cxxLanguageVersion: "c++17"
|
||||||
|
|
||||||
|
Group {
|
||||||
|
id: odbs
|
||||||
|
name: "odb"
|
||||||
|
files: [
|
||||||
|
"**/*.h",
|
||||||
|
]
|
||||||
|
fileTags: ["hpp", "odbxx", "rgen"]
|
||||||
|
}
|
||||||
|
|
||||||
|
cpp.dynamicLibraries: [
|
||||||
|
"odb-sqlite",
|
||||||
|
"odb-qt",
|
||||||
|
"odb",
|
||||||
|
"sqlite3"
|
||||||
|
]
|
||||||
|
}
|
||||||
12
src/model/model_global.h
Normal file
12
src/model/model_global.h
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
#ifndef MODEL_GLOBAL_H
|
||||||
|
#define MODEL_GLOBAL_H
|
||||||
|
|
||||||
|
#include <QtCore/qglobal.h>
|
||||||
|
|
||||||
|
#if defined(MODEL_LIBRARY)
|
||||||
|
#define MODEL_EXPORT Q_DECL_EXPORT
|
||||||
|
#else
|
||||||
|
#define MODEL_EXPORT Q_DECL_IMPORT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // MODEL_GLOBAL_H
|
||||||
@@ -18,6 +18,7 @@ WPSLibrary {
|
|||||||
Depends { name: "odb.gen" }
|
Depends { name: "odb.gen" }
|
||||||
Depends { name: "redkit_gen" }
|
Depends { name: "redkit_gen" }
|
||||||
Depends { name: "rdbase" }
|
Depends { name: "rdbase" }
|
||||||
|
Depends { name: "model" }
|
||||||
|
|
||||||
cpp.cxxLanguageVersion: "c++20"
|
cpp.cxxLanguageVersion: "c++20"
|
||||||
|
|
||||||
|
|||||||
@@ -5,10 +5,10 @@
|
|||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
#include <QJsonValue>
|
#include <QJsonValue>
|
||||||
|
|
||||||
#include <database/author_s-odb.hxx> // Должен быть здесь
|
#include <model/author_s-odb.hxx> // Должен быть здесь
|
||||||
#include <database/author_s.h>
|
#include <model/author_s.h>
|
||||||
#include <database/book_s-odb.hxx> // Должен быть здесь
|
#include <model/book_s-odb.hxx> // Должен быть здесь
|
||||||
#include <database/book_s.h>
|
#include <model/book_s.h>
|
||||||
|
|
||||||
#include <odb/core.hxx>
|
#include <odb/core.hxx>
|
||||||
#include <odb/database.hxx>
|
#include <odb/database.hxx>
|
||||||
|
|||||||
Reference in New Issue
Block a user