From acdd9328cc7ca1247b9b44c05c8d976b7e33f184 Mon Sep 17 00:00:00 2001 From: Sarah_deep <91503476+Sarahdeep@users.noreply.github.com> Date: Mon, 15 May 2023 22:18:49 +0300 Subject: [PATCH 1/3] test fix --- .../repository/include/MetricRepository.hpp | 2 +- .../repository/include/SolutionRepository.hpp | 2 +- .../repository/include/TaskRepository.hpp | 2 +- .../repository/include/UserRepository.hpp | 2 +- .../repository/tests/RepositoryTests.cpp | 18 +++++++++--------- .../repository/virtual/ITaskRepository.hpp | 2 +- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/server/internal/repository/include/MetricRepository.hpp b/server/internal/repository/include/MetricRepository.hpp index 5d9bf96..6e23e90 100644 --- a/server/internal/repository/include/MetricRepository.hpp +++ b/server/internal/repository/include/MetricRepository.hpp @@ -8,7 +8,7 @@ using namespace pqxx; -class MetricRepository : IMetricRepository { +class MetricRepository :public IMetricRepository { public: explicit MetricRepository(); diff --git a/server/internal/repository/include/SolutionRepository.hpp b/server/internal/repository/include/SolutionRepository.hpp index 50d9552..c7face4 100644 --- a/server/internal/repository/include/SolutionRepository.hpp +++ b/server/internal/repository/include/SolutionRepository.hpp @@ -12,7 +12,7 @@ using namespace pqxx; -class SolutionRepository : ISolutionRepository { +class SolutionRepository :public ISolutionRepository { public: explicit SolutionRepository(); std::optional getSolutionById(size_t id) override; diff --git a/server/internal/repository/include/TaskRepository.hpp b/server/internal/repository/include/TaskRepository.hpp index 83e5135..4fbc8d1 100644 --- a/server/internal/repository/include/TaskRepository.hpp +++ b/server/internal/repository/include/TaskRepository.hpp @@ -10,7 +10,7 @@ using namespace pqxx; -class TaskRepository : ITaskRepository { +class TaskRepository :public ITaskRepository { public: explicit TaskRepository(); std::optional getTaskById(size_t id) override; diff --git a/server/internal/repository/include/UserRepository.hpp b/server/internal/repository/include/UserRepository.hpp index b5a52f3..70ceaf0 100644 --- a/server/internal/repository/include/UserRepository.hpp +++ b/server/internal/repository/include/UserRepository.hpp @@ -11,7 +11,7 @@ using namespace pqxx; -class UserRepository : IUserRepository { +class UserRepository :public IUserRepository { public: explicit UserRepository(); diff --git a/server/internal/repository/tests/RepositoryTests.cpp b/server/internal/repository/tests/RepositoryTests.cpp index b78c57c..1e2cab7 100644 --- a/server/internal/repository/tests/RepositoryTests.cpp +++ b/server/internal/repository/tests/RepositoryTests.cpp @@ -46,7 +46,7 @@ TEST(TaskRepository_CRUD_Test, CRUD) { TEST(SolutionRepository_CRUD_Test, CRUD) { SolutionRepository rep; - Solution solution("01.01.1970", 1, ":/C/Users", "tokens.txt", "tree.txt", 1, "result"); + Solution solution("01.01.1970", 1, ":/C/Users", "tokens.txt", "tree.txt", 1, "result", 1); size_t id = rep.storeSolution(solution); EXPECT_NO_FATAL_FAILURE(rep.getSolutionById(1)); solution.setId(id); @@ -101,8 +101,8 @@ TEST(UserRepository_CRUD_Test, loginLikeId) { TEST(SolutionRepository_CRUD_Test, CRUD_getSolutionsBySenderId) { SolutionRepository rep; - Solution solution1("01.01.1970", 1, ":/C/Users", "tokens.txt", "tree.txt", 1, "result"); - Solution solution2("01.01.1970", 1, "/home/usr", "tokens.txt", "tree.txt", 1, "result"); + Solution solution1("01.01.1970", 1, ":/C/Users", "tokens.txt", "tree.txt", 1, "result", 1); + Solution solution2("01.01.1970", 1, "/home/usr", "tokens.txt", "tree.txt", 1, "result", 1); size_t id1 = rep.storeSolution(solution1); solution1.setId(id1); @@ -110,8 +110,8 @@ TEST(SolutionRepository_CRUD_Test, CRUD_getSolutionsBySenderId) { size_t id2 = rep.storeSolution(solution2); solution2.setId(id2); EXPECT_EQ(solution2, rep.getSolutionById(id2)); - std::vector v = {{id1, "01.01.1970", 1, ":/C/Users", "tokens.txt", "tree.txt", 1, "result"}, - {id2, "01.01.1970", 1, "/home/usr", "tokens.txt", "tree.txt", 1, "result"}}; + std::vector v = {{id1, "01.01.1970", 1, ":/C/Users", "tokens.txt", "tree.txt", 1, "result", 1}, + {id2, "01.01.1970", 1, "/home/usr", "tokens.txt", "tree.txt", 1, "result", 1}}; std::vector new_v = rep.getSolutionsBySenderId(solution1.getSenderId()); EXPECT_EQ(v, new_v); EXPECT_NO_FATAL_FAILURE(rep.deleteSolution(solution1)); @@ -122,8 +122,8 @@ TEST(SolutionRepository_CRUD_Test, CRUD_getSolutionsBySenderId) { TEST(SolutionRepository_CRUD_Test, CRUD_getSolutionsByTaskId) { SolutionRepository rep; - Solution solution1("01.01.1970", 1, ":/C/Users", "tokens.txt", "tree.txt", 1, "result"); - Solution solution2("01.01.1970", 1, "/home/usr", "tokens.txt", "tree.txt", 1, "result"); + Solution solution1("01.01.1970", 1, ":/C/Users", "tokens.txt", "tree.txt", 1, "result", 1); + Solution solution2("01.01.1970", 1, "/home/usr", "tokens.txt", "tree.txt", 1, "result", 1); size_t id1 = rep.storeSolution(solution1); solution1.setId(id1); @@ -139,7 +139,7 @@ TEST(SolutionRepository_CRUD_Test, CRUD_getSolutionsByTaskId) { TEST(SolutionRepository_CRUD_Test, tryToAddWithNotExistingTask){ SolutionRepository rep; - Solution solution("01.01.1970", 1, ":/C/Users", "tokens.txt", "tree.txt", 100500, "result"); + Solution solution("01.01.1970", 1, ":/C/Users", "tokens.txt", "tree.txt", 100500, "result", 1); try{ rep.storeSolution(solution); }catch(pqxx::foreign_key_violation &e){ @@ -150,7 +150,7 @@ TEST(SolutionRepository_CRUD_Test, tryToAddWithNotExistingTask){ TEST(SolutionRepository_CRUD_Test, tryToStoreWithNotExistingSender){ SolutionRepository rep; - Solution solution("01.01.1970", 100500, ":/C/Users", "tokens.txt", "tree.txt", 1, "result"); + Solution solution("01.01.1970", 100500, ":/C/Users", "tokens.txt", "tree.txt", 1, "result", 1); try{ rep.storeSolution(solution); }catch(pqxx::foreign_key_violation &keyViolation){ diff --git a/server/internal/repository/virtual/ITaskRepository.hpp b/server/internal/repository/virtual/ITaskRepository.hpp index 62ee8a2..dec4862 100644 --- a/server/internal/repository/virtual/ITaskRepository.hpp +++ b/server/internal/repository/virtual/ITaskRepository.hpp @@ -11,7 +11,7 @@ public: virtual std::vector getAllTasks() = 0; - virtual void updateTask(Task task) = 0; + virtual void updateTask(const Task& task) = 0; virtual size_t storeTask(Task task) = 0; -- GitLab From 9d26b74162a7106cc1cdb461f46a12bea2e22ddf Mon Sep 17 00:00:00 2001 From: Sarah_deep <91503476+Sarahdeep@users.noreply.github.com> Date: Mon, 15 May 2023 23:40:23 +0300 Subject: [PATCH 2/3] added dbdump --- server/internal/CMakeLists.txt | 1 - server/internal/src/CMakeLists.txt | 5 - server/internal/src/db/CMakeLists.txt | 29 - server/internal/src/db/config.json | 7 - server/internal/src/db/include/conn.hpp | 22 - server/internal/src/db/src/conn.cpp | 27 - sql/database.sql | 678 ++++++++++++++++++++++++ 7 files changed, 678 insertions(+), 91 deletions(-) delete mode 100644 server/internal/src/CMakeLists.txt delete mode 100644 server/internal/src/db/CMakeLists.txt delete mode 100644 server/internal/src/db/config.json delete mode 100644 server/internal/src/db/include/conn.hpp delete mode 100644 server/internal/src/db/src/conn.cpp create mode 100644 sql/database.sql diff --git a/server/internal/CMakeLists.txt b/server/internal/CMakeLists.txt index 930ea1a..bac9135 100644 --- a/server/internal/CMakeLists.txt +++ b/server/internal/CMakeLists.txt @@ -1,6 +1,5 @@ set(CMAKE_CXX_STANDARD 20) cmake_minimum_required(VERSION 3.19) -add_subdirectory(src) add_subdirectory(entities) add_subdirectory(dbManager) add_subdirectory(repository) diff --git a/server/internal/src/CMakeLists.txt b/server/internal/src/CMakeLists.txt deleted file mode 100644 index 72e4c50..0000000 --- a/server/internal/src/CMakeLists.txt +++ /dev/null @@ -1,5 +0,0 @@ -set(CMAKE_CXX_STANDARD 20) -cmake_minimum_required(VERSION 3.19) -add_subdirectory(db) -set(DB_Lib_LIB ${DB_Lib_LIB} PARENT_SCOPE) -set(DB_Lib_INCLUDE_DIRS ${DB_Lib_INCLUDE_DIRS} PARENT_SCOPE) \ No newline at end of file diff --git a/server/internal/src/db/CMakeLists.txt b/server/internal/src/db/CMakeLists.txt deleted file mode 100644 index df02471..0000000 --- a/server/internal/src/db/CMakeLists.txt +++ /dev/null @@ -1,29 +0,0 @@ -cmake_minimum_required(VERSION 3.10) - -project("DBLib") - -set(LIB_NAME DB_Lib) - -file(GLOB_RECURSE SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp) -file(GLOB_RECURSE HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h) - -message("SOURCES = ${SOURCES}") -message("HEADERS = ${HEADERS}") - - -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Wextra -O2 -pedantic -Wformat=2 -Wfloat-equal -Wconversion \ --Wlogical-op -Wshift-overflow=2 -Wduplicated-cond -Wcast-qual -Wcast-align") - -set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") - -add_library(${LIB_NAME} ${SOURCES} ${HEADERS}) -target_include_directories(${LIB_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) -target_link_libraries(${LIB_NAME} ${libpqxx_LIBRARIES} nlohmann_json::nlohmann_json) - -set(DB_Lib_LIB ${LIB_NAME}) -set(DB_Lib_LIB ${DB_Lib_LIB} PARENT_SCOPE) -set(DB_Lib_INCLUDE_DIRS ${LIB_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/include) -set(DB_Lib_INCLUDE_DIRS ${DB_Lib_INCLUDE_DIRS} PARENT_SCOPE) - -message("DB_Lib_LIB = ${DB_Lib_LIB}") -message("DB_Lib_INCLUDE_DIRS = ${DB_Lib_INCLUDE_DIRS}") diff --git a/server/internal/src/db/config.json b/server/internal/src/db/config.json deleted file mode 100644 index 81007a5..0000000 --- a/server/internal/src/db/config.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "dbname": "mydb", - "user": "postgres", - "password": "root", - "hostaddr": "127.0.0.1", - "port": "5432" -} diff --git a/server/internal/src/db/include/conn.hpp b/server/internal/src/db/include/conn.hpp deleted file mode 100644 index 1468361..0000000 --- a/server/internal/src/db/include/conn.hpp +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef SOURCEDOUT_CONN_HPP -#define SOURCEDOUT_CONN_HPP - -#include -#include -#include - -using json = nlohmann::json; - -struct conn { - std::string dbname; - std::string user; - std::string password; - std::string hostaddr; - std::string port; - - conn(); - - [[nodiscard]] std::string getData() const; -}; - -#endif //SOURCEDOUT_CONN_HPP diff --git a/server/internal/src/db/src/conn.cpp b/server/internal/src/db/src/conn.cpp deleted file mode 100644 index 9fe5074..0000000 --- a/server/internal/src/db/src/conn.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -#include -#include "conn.hpp" -#include -conn::conn() { - std::ifstream f("../config.json"); - json data = json::parse(R"( -{ - "dbname": "mydb", - "user": "postgres", - "password": "root", - "hostaddr": "172.28.224.1", - "port": "5432" -} -)"); - data.at("dbname").get_to(dbname); - data.at("user").get_to(user); - data.at("password").get_to(password); - data.at("hostaddr").get_to(hostaddr); - data.at("port").get_to(port); -} - -std::string conn::getData() const { - return "dbname = " + dbname + " user = " + user + " password = " + password + - " hostaddr = " + hostaddr + " port = " + port; -} \ No newline at end of file diff --git a/sql/database.sql b/sql/database.sql new file mode 100644 index 0000000..5266ba2 --- /dev/null +++ b/sql/database.sql @@ -0,0 +1,678 @@ +-- +-- PostgreSQL database cluster dump +-- + +-- Started on 2023-05-15 22:49:08 + +SET default_transaction_read_only = off; + +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; + +-- +-- Roles +-- + +CREATE ROLE postgres; +ALTER ROLE postgres WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS PASSWORD 'SCRAM-SHA-256$4096:nOmjHrNPdaIcnCeed7FgbQ==$U+pukPiYK1tBvbNsPjn4d9zV4IXLekf/OMW5+ZDzgrY=:1f9vBcPgoAcX5hmUUOkjkXLp0FRCqsnlQRmYs2U29pU='; + +-- +-- User Configurations +-- + + + + + + + + +-- +-- Databases +-- + +-- +-- Database "template1" dump +-- + +\connect template1 + +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 15.2 +-- Dumped by pg_dump version 15.2 + +-- Started on 2023-05-15 22:49:08 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- Completed on 2023-05-15 22:49:08 + +-- +-- PostgreSQL database dump complete +-- + +-- +-- Database "mydb" dump +-- + +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 15.2 +-- Dumped by pg_dump version 15.2 + +-- Started on 2023-05-15 22:49:08 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- TOC entry 3362 (class 1262 OID 16565) +-- Name: mydb; Type: DATABASE; Schema: -; Owner: postgres +-- + +CREATE DATABASE mydb WITH TEMPLATE = template0 ENCODING = 'UTF8' LOCALE_PROVIDER = libc LOCALE = 'Russian_Russia.1251'; + + +ALTER DATABASE mydb OWNER TO postgres; + +\connect mydb + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +SET default_tablespace = ''; + +SET default_table_access_method = heap; + +-- +-- TOC entry 215 (class 1259 OID 16574) +-- Name: users; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.users ( + id integer NOT NULL, + login character varying(255), + password character varying(255), + username character varying(255) +); + + +ALTER TABLE public.users OWNER TO postgres; + +-- +-- TOC entry 214 (class 1259 OID 16573) +-- Name: Users_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public."Users_id_seq" + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public."Users_id_seq" OWNER TO postgres; + +-- +-- TOC entry 3363 (class 0 OID 0) +-- Dependencies: 214 +-- Name: Users_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public."Users_id_seq" OWNED BY public.users.id; + + +-- +-- TOC entry 219 (class 1259 OID 16613) +-- Name: metricstat; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.metricstat ( + id integer NOT NULL, + solution_id integer, + text_based_res real, + token_based_res real, + tree_based_res real, + verdict boolean, + mean_res real +); + + +ALTER TABLE public.metricstat OWNER TO postgres; + +-- +-- TOC entry 221 (class 1259 OID 16626) +-- Name: metricstat_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.metricstat_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + MAXVALUE 2147483647 + CACHE 1; + + +ALTER TABLE public.metricstat_id_seq OWNER TO postgres; + +-- +-- TOC entry 3364 (class 0 OID 0) +-- Dependencies: 221 +-- Name: metricstat_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.metricstat_id_seq OWNED BY public.metricstat.id; + + +-- +-- TOC entry 217 (class 1259 OID 16583) +-- Name: solutions; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.solutions ( + id integer NOT NULL, + send_date date NOT NULL, + sender_id integer, + source character varying(255), + task_id integer, + result character varying, + tokens character varying, + asttree character varying, + original_solution_id integer +); + + +ALTER TABLE public.solutions OWNER TO postgres; + +-- +-- TOC entry 216 (class 1259 OID 16582) +-- Name: solutions_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.solutions_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.solutions_id_seq OWNER TO postgres; + +-- +-- TOC entry 3365 (class 0 OID 0) +-- Dependencies: 216 +-- Name: solutions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.solutions_id_seq OWNED BY public.solutions.id; + + +-- +-- TOC entry 218 (class 1259 OID 16598) +-- Name: tasks; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.tasks ( + id integer NOT NULL, + description text, + treshold real +); + + +ALTER TABLE public.tasks OWNER TO postgres; + +-- +-- TOC entry 220 (class 1259 OID 16623) +-- Name: tasks_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.tasks_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + MAXVALUE 2147483647 + CACHE 1; + + +ALTER TABLE public.tasks_id_seq OWNER TO postgres; + +-- +-- TOC entry 3366 (class 0 OID 0) +-- Dependencies: 220 +-- Name: tasks_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.tasks_id_seq OWNED BY public.tasks.id; + + +-- +-- TOC entry 3191 (class 2604 OID 16628) +-- Name: metricstat id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.metricstat ALTER COLUMN id SET DEFAULT nextval('public.metricstat_id_seq'::regclass); + + +-- +-- TOC entry 3189 (class 2604 OID 16586) +-- Name: solutions id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.solutions ALTER COLUMN id SET DEFAULT nextval('public.solutions_id_seq'::regclass); + + +-- +-- TOC entry 3190 (class 2604 OID 16625) +-- Name: tasks id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.tasks ALTER COLUMN id SET DEFAULT nextval('public.tasks_id_seq'::regclass); + + +-- +-- TOC entry 3188 (class 2604 OID 16577) +-- Name: users id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.users ALTER COLUMN id SET DEFAULT nextval('public."Users_id_seq"'::regclass); + + +-- +-- TOC entry 3354 (class 0 OID 16613) +-- Dependencies: 219 +-- Data for Name: metricstat; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.metricstat (id, solution_id, text_based_res, token_based_res, tree_based_res, verdict, mean_res) FROM stdin; +15 1 1 1 1 t 1 +\. + + +-- +-- TOC entry 3352 (class 0 OID 16583) +-- Dependencies: 217 +-- Data for Name: solutions; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.solutions (id, send_date, sender_id, source, task_id, result, tokens, asttree, original_solution_id) FROM stdin; +1 2023-05-02 10 0.1 27 0.1 0.1 0.1 1 +\. + + +-- +-- TOC entry 3353 (class 0 OID 16598) +-- Dependencies: 218 +-- Data for Name: tasks; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.tasks (id, description, treshold) FROM stdin; +27 orher_description 0.1 +1 description 0.5 +\. + + +-- +-- TOC entry 3350 (class 0 OID 16574) +-- Dependencies: 215 +-- Data for Name: users; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.users (id, login, password, username) FROM stdin; +1 qwerty200468@gmail.com 123 tolik +2 qwerty200468@gmail.com 123 tolik +3 qwerty200468@gmail.com 123 tolik +4 qwerty200468@gmail.com 123 tolik +5 qwerty200468@gmail.com 123 tolik +6 qwerty200468@gmail.com 123 tolik +7 qwerty200468@gmail.com 123 tolik +8 qwerty200468@gmail.com 123 tolik +9 qwerty200468@gmail.com 123 tolik +10 qwerty200468@gmail.com 123 tolik +52 qwerty200468@gmail.com 123 tolik +\. + + +-- +-- TOC entry 3367 (class 0 OID 0) +-- Dependencies: 214 +-- Name: Users_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public."Users_id_seq"', 78, true); + + +-- +-- TOC entry 3368 (class 0 OID 0) +-- Dependencies: 221 +-- Name: metricstat_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.metricstat_id_seq', 36, true); + + +-- +-- TOC entry 3369 (class 0 OID 0) +-- Dependencies: 216 +-- Name: solutions_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.solutions_id_seq', 150, true); + + +-- +-- TOC entry 3370 (class 0 OID 0) +-- Dependencies: 220 +-- Name: tasks_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.tasks_id_seq', 34, true); + + +-- +-- TOC entry 3193 (class 2606 OID 16581) +-- Name: users Users_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.users + ADD CONSTRAINT "Users_pkey" PRIMARY KEY (id); + + +-- +-- TOC entry 3202 (class 2606 OID 16617) +-- Name: metricstat metricStat_pk; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.metricstat + ADD CONSTRAINT "metricStat_pk" PRIMARY KEY (id); + + +-- +-- TOC entry 3198 (class 2606 OID 16588) +-- Name: solutions solutions_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.solutions + ADD CONSTRAINT solutions_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3200 (class 2606 OID 16604) +-- Name: tasks tasks_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.tasks + ADD CONSTRAINT tasks_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 3194 (class 1259 OID 16637) +-- Name: fki_original_solution_id; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX fki_original_solution_id ON public.solutions USING btree (original_solution_id); + + +-- +-- TOC entry 3195 (class 1259 OID 16594) +-- Name: fki_sender_id; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX fki_sender_id ON public.solutions USING btree (sender_id); + + +-- +-- TOC entry 3196 (class 1259 OID 16610) +-- Name: fki_task_id; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX fki_task_id ON public.solutions USING btree (task_id); + + +-- +-- TOC entry 3203 (class 2606 OID 16632) +-- Name: solutions original_solution_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.solutions + ADD CONSTRAINT original_solution_id FOREIGN KEY (original_solution_id) REFERENCES public.solutions(id) ON UPDATE CASCADE ON DELETE CASCADE NOT VALID; + + +-- +-- TOC entry 3204 (class 2606 OID 16589) +-- Name: solutions sender_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.solutions + ADD CONSTRAINT sender_id FOREIGN KEY (sender_id) REFERENCES public.users(id) ON UPDATE RESTRICT ON DELETE CASCADE NOT VALID; + + +-- +-- TOC entry 3206 (class 2606 OID 16618) +-- Name: metricstat solutions_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.metricstat + ADD CONSTRAINT solutions_id FOREIGN KEY (solution_id) REFERENCES public.solutions(id); + + +-- +-- TOC entry 3205 (class 2606 OID 16605) +-- Name: solutions task_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.solutions + ADD CONSTRAINT task_id FOREIGN KEY (task_id) REFERENCES public.tasks(id) NOT VALID; + + +-- Completed on 2023-05-15 22:49:09 + +-- +-- PostgreSQL database dump complete +-- + +-- +-- Database "postgres" dump +-- + +\connect postgres + +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 15.2 +-- Dumped by pg_dump version 15.2 + +-- Started on 2023-05-15 22:49:09 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- TOC entry 8 (class 2615 OID 16398) +-- Name: pgagent; Type: SCHEMA; Schema: -; Owner: postgres +-- + +CREATE SCHEMA pgagent; + + +ALTER SCHEMA pgagent OWNER TO postgres; + +-- +-- TOC entry 3437 (class 0 OID 0) +-- Dependencies: 8 +-- Name: SCHEMA pgagent; Type: COMMENT; Schema: -; Owner: postgres +-- + +COMMENT ON SCHEMA pgagent IS 'pgAgent system tables'; + + +-- +-- TOC entry 2 (class 3079 OID 16384) +-- Name: adminpack; Type: EXTENSION; Schema: -; Owner: - +-- + +CREATE EXTENSION IF NOT EXISTS adminpack WITH SCHEMA pg_catalog; + + +-- +-- TOC entry 3438 (class 0 OID 0) +-- Dependencies: 2 +-- Name: EXTENSION adminpack; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION adminpack IS 'administrative functions for PostgreSQL'; + + +-- +-- TOC entry 3 (class 3079 OID 16399) +-- Name: pgagent; Type: EXTENSION; Schema: -; Owner: - +-- + +CREATE EXTENSION IF NOT EXISTS pgagent WITH SCHEMA pgagent; + + +-- +-- TOC entry 3439 (class 0 OID 0) +-- Dependencies: 3 +-- Name: EXTENSION pgagent; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION pgagent IS 'A PostgreSQL job scheduler'; + + +-- +-- TOC entry 3218 (class 0 OID 16400) +-- Dependencies: 219 +-- Data for Name: pga_jobagent; Type: TABLE DATA; Schema: pgagent; Owner: postgres +-- + +COPY pgagent.pga_jobagent (jagpid, jaglogintime, jagstation) FROM stdin; +7380 2023-05-09 17:32:50.44529+03 DESKTOP-CLI5MDC +\. + + +-- +-- TOC entry 3219 (class 0 OID 16409) +-- Dependencies: 221 +-- Data for Name: pga_jobclass; Type: TABLE DATA; Schema: pgagent; Owner: postgres +-- + +COPY pgagent.pga_jobclass (jclid, jclname) FROM stdin; +\. + + +-- +-- TOC entry 3220 (class 0 OID 16419) +-- Dependencies: 223 +-- Data for Name: pga_job; Type: TABLE DATA; Schema: pgagent; Owner: postgres +-- + +COPY pgagent.pga_job (jobid, jobjclid, jobname, jobdesc, jobhostagent, jobenabled, jobcreated, jobchanged, jobagentid, jobnextrun, joblastrun) FROM stdin; +\. + + +-- +-- TOC entry 3222 (class 0 OID 16467) +-- Dependencies: 227 +-- Data for Name: pga_schedule; Type: TABLE DATA; Schema: pgagent; Owner: postgres +-- + +COPY pgagent.pga_schedule (jscid, jscjobid, jscname, jscdesc, jscenabled, jscstart, jscend, jscminutes, jschours, jscweekdays, jscmonthdays, jscmonths) FROM stdin; +\. + + +-- +-- TOC entry 3223 (class 0 OID 16495) +-- Dependencies: 229 +-- Data for Name: pga_exception; Type: TABLE DATA; Schema: pgagent; Owner: postgres +-- + +COPY pgagent.pga_exception (jexid, jexscid, jexdate, jextime) FROM stdin; +\. + + +-- +-- TOC entry 3224 (class 0 OID 16509) +-- Dependencies: 231 +-- Data for Name: pga_joblog; Type: TABLE DATA; Schema: pgagent; Owner: postgres +-- + +COPY pgagent.pga_joblog (jlgid, jlgjobid, jlgstatus, jlgstart, jlgduration) FROM stdin; +\. + + +-- +-- TOC entry 3221 (class 0 OID 16443) +-- Dependencies: 225 +-- Data for Name: pga_jobstep; Type: TABLE DATA; Schema: pgagent; Owner: postgres +-- + +COPY pgagent.pga_jobstep (jstid, jstjobid, jstname, jstdesc, jstenabled, jstkind, jstcode, jstconnstr, jstdbname, jstonerror, jscnextrun) FROM stdin; +\. + + +-- +-- TOC entry 3225 (class 0 OID 16525) +-- Dependencies: 233 +-- Data for Name: pga_jobsteplog; Type: TABLE DATA; Schema: pgagent; Owner: postgres +-- + +COPY pgagent.pga_jobsteplog (jslid, jsljlgid, jsljstid, jslstatus, jslresult, jslstart, jslduration, jsloutput) FROM stdin; +\. + + +-- Completed on 2023-05-15 22:49:09 + +-- +-- PostgreSQL database dump complete +-- + +-- Completed on 2023-05-15 22:49:09 + +-- +-- PostgreSQL database cluster dump complete +-- + -- GitLab From 68402b51545ebd198adf8a3d0c4836212da9a543 Mon Sep 17 00:00:00 2001 From: Sarah_deep <91503476+Sarahdeep@users.noreply.github.com> Date: Tue, 16 May 2023 09:39:26 +0300 Subject: [PATCH 3/3] optimised work with large data --- server/internal/entities/include/Solution.hpp | 11 +++-- server/internal/entities/src/Solution.cpp | 25 ++++++----- .../repository/include/TaskRepository.hpp | 1 + .../repository/src/SolutionRepository.cpp | 43 +++++++++++++------ .../repository/src/TaskRepository.cpp | 15 ++++--- .../repository/src/UserRepository.cpp | 11 +++-- .../repository/tests/RepositoryTests.cpp | 23 +++++----- 7 files changed, 81 insertions(+), 48 deletions(-) diff --git a/server/internal/entities/include/Solution.hpp b/server/internal/entities/include/Solution.hpp index a8aeaf3..f2cdda0 100644 --- a/server/internal/entities/include/Solution.hpp +++ b/server/internal/entities/include/Solution.hpp @@ -7,12 +7,15 @@ class Solution { public: - Solution(size_t id, std::string sendDate, size_t senderId, std::string source, + Solution(size_t id, std::string sendDate, size_t senderId, + std::string source, size_t taskId, std::string result, std::string tokens, std::string astTree, - size_t taskId, std::string result, size_t orig_solution) noexcept; + size_t orig_solution) noexcept; - Solution(std::string sendDate, size_t senderId, std::string source, std::string tokens, - std::string astTree, size_t taskId, std::string result, size_t orig_solution) noexcept; + Solution(std::string sendDate, size_t senderId, + std::string source, size_t taskId, std::string result, + std::string tokens, std::string astTree, + size_t orig_solution) noexcept; Solution() noexcept; diff --git a/server/internal/entities/src/Solution.cpp b/server/internal/entities/src/Solution.cpp index 12a7102..ca5fa0d 100644 --- a/server/internal/entities/src/Solution.cpp +++ b/server/internal/entities/src/Solution.cpp @@ -3,25 +3,24 @@ #include #include "Solution.hpp" -Solution::Solution(size_t id, std::string sendDate, unsigned long senderId, - std::string source, std::string tokens, - std::string astTree, unsigned long taskId, - std::string result, size_t orig_solution_) noexcept: +Solution::Solution(size_t id, std::string sendDate, size_t senderId, + std::string source, size_t taskId, std::string result, + std::string tokens, std::string astTree, + size_t orig_solution) noexcept: id(id), send_date(std::move(sendDate)), sender_id(senderId), source(std::move(source)), tokens(std::move(tokens)), astTree(std::move(astTree)), - task_id(taskId), result(std::move(result)), orig_solution(orig_solution_) {} + task_id(taskId), result(std::move(result)), orig_solution(orig_solution) {} -Solution::Solution(std::string sendDate, unsigned long senderId, - std::string source, std::string tokens, - std::string astTree, unsigned long taskId, - std::string result, size_t orig_solution_) noexcept: +Solution::Solution(std::string sendDate, size_t senderId, + std::string source, size_t taskId, std::string result, + std::string tokens, std::string astTree, + size_t orig_solution) noexcept: id(0), send_date(std::move(sendDate)), sender_id(senderId), source(std::move(source)), tokens(std::move(tokens)), astTree(std::move(astTree)), - task_id(taskId), result(std::move(result)), orig_solution(orig_solution_) {} + task_id(taskId), result(std::move(result)), orig_solution(orig_solution) {} -Solution::Solution() noexcept: id(0), sender_id(0), task_id(0), orig_solution(0) {} size_t Solution::getId() const noexcept { return id; @@ -103,3 +102,7 @@ void Solution::setOrigSolution(size_t origSolution) { orig_solution = origSolution; } +Solution::Solution()noexcept :id(0), sender_id(0), task_id(0){ + +} + diff --git a/server/internal/repository/include/TaskRepository.hpp b/server/internal/repository/include/TaskRepository.hpp index 4fbc8d1..467fadd 100644 --- a/server/internal/repository/include/TaskRepository.hpp +++ b/server/internal/repository/include/TaskRepository.hpp @@ -27,6 +27,7 @@ public: private: static Task makeTask(const result::const_iterator &c); + std::shared_ptr manager; }; diff --git a/server/internal/repository/src/SolutionRepository.cpp b/server/internal/repository/src/SolutionRepository.cpp index 441bab7..353ad9b 100644 --- a/server/internal/repository/src/SolutionRepository.cpp +++ b/server/internal/repository/src/SolutionRepository.cpp @@ -27,11 +27,19 @@ std::vector SolutionRepository::getSolutionsBySenderId(size_t sender_i auto c = manager->connection(); std::string sql = "SELECT * FROM solutions WHERE sender_id=" + std::to_string(sender_id); nontransaction n(*c); - result r(n.exec(sql)); + auto stream = stream_from::query(n, sql); std::vector solutions; + std::tuple row; + while (stream >> row) { + solutions.emplace_back( + get<0>(row), get<1>(row), + get<2>(row), get<3>(row), + get<4>(row), get<5>(row), + get<6>(row), get<7>(row), get<8>(row)); + } + stream.complete(); manager->freeConnection(c); - for (result::const_iterator k = r.begin(); k != r.end(); ++k) - solutions.push_back(makeSolution(k)); return solutions; } catch (...) { @@ -44,11 +52,19 @@ std::vector SolutionRepository::getSolutionsByTaskId(size_t task_id) { auto c = manager->connection(); std::string sql = "SELECT * FROM solutions WHERE task_id=" + std::to_string(task_id); nontransaction n(*c); - result r(n.exec(sql)); + auto stream = stream_from::query(n, sql); std::vector solutions; + std::tuple row; + while (stream >> row) { + solutions.emplace_back( + get<0>(row), get<1>(row), + get<2>(row), get<3>(row), + get<4>(row), get<5>(row), + get<6>(row), get<7>(row), get<8>(row)); + } + stream.complete(); manager->freeConnection(c); - for (result::const_iterator k = r.begin(); k != r.end(); ++k) - solutions.push_back(makeSolution(k)); return solutions; } catch (...) { @@ -78,10 +94,10 @@ size_t SolutionRepository::storeSolution(Solution solution) { auto c = manager->connection(); std::string sql = ( - boost::format("INSERT INTO solutions (send_date,sender_id, source, task_id, result, tokens, astTree) " \ - "VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s') RETURNING id; ") % solution.getSendDate() % + boost::format("INSERT INTO solutions (send_date,sender_id, source, task_id, result, tokens, astTree, original_solution_id) " \ + "VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s') RETURNING id; ") % solution.getSendDate() % solution.getSenderId() % solution.getSource() % solution.getTaskId() % solution.getResult() % - solution.getTokens() % solution.getAstTree()).str(); + solution.getTokens() % solution.getAstTree() % solution.getOrigSolution()).str(); work w(*c); row r = (w.exec1(sql)); w.commit(); @@ -97,10 +113,11 @@ void SolutionRepository::updateSolution(Solution solution) { auto c = manager->connection(); std::string sql = (boost::format( - "UPDATE solutions SET send_date = '%s', sender_id = '%s', source = '%s', task_id = '%s', result = '%s', tokens = '%s', astTree = '%s';") + "UPDATE solutions SET send_date = '%s', sender_id = '%s', source = '%s'," + " task_id = '%s', result = '%s', tokens = '%s', astTree = '%s', original_solution_id = '%s';") % solution.getSendDate() % solution.getSenderId() % solution.getSource() % solution.getTaskId() % solution.getResult() % solution.getTokens() % - solution.getAstTree()).str(); + solution.getAstTree() % solution.getOrigSolution()).str(); work w(*c); w.exec(sql); manager->freeConnection(c); @@ -134,10 +151,10 @@ Solution SolutionRepository::makeSolution(const result::const_iterator &c) { c.at(c.column_number("send_date")).as(), c.at(c.column_number("sender_id")).as(), c.at(c.column_number("source")).as(), - c.at(c.column_number("tokens")).as(), - c.at(c.column_number("astTree")).as(), c.at(c.column_number("task_id")).as(), c.at(c.column_number("result")).as(), + c.at(c.column_number("tokens")).as(), + c.at(c.column_number("astTree")).as(), c.at(c.column_number("original_solution_id")).as()}; } diff --git a/server/internal/repository/src/TaskRepository.cpp b/server/internal/repository/src/TaskRepository.cpp index f20dffb..261436c 100644 --- a/server/internal/repository/src/TaskRepository.cpp +++ b/server/internal/repository/src/TaskRepository.cpp @@ -1,6 +1,7 @@ #include #include "Task.hpp" #include +#include #include "TaskRepository.hpp" std::optional TaskRepository::getTaskById(size_t id) { @@ -24,12 +25,15 @@ std::vector TaskRepository::getAllTasks() { auto c = manager->connection(); std::string sql = "SELECT * FROM tasks"; nontransaction n(*c); - result r(n.exec(sql)); + auto stream = stream_from::query(n, sql); + std::vector tasks; + std::tuple row; + while(stream >> row){ + tasks.emplace_back(get<0>(row), get<1>(row), get<2>(row)); + } + stream.complete(); manager->freeConnection(c); - std::vector users; - for (result::const_iterator k = r.begin(); k != r.end(); ++k) - users.push_back(makeTask(k)); - return users; + return tasks; } catch (...) { throw; @@ -87,6 +91,7 @@ Task TaskRepository::makeTask(const result::const_iterator &c) { c.at(c.column_number("treshold")).as()}; } + TaskRepository::TaskRepository() { manager = std::make_shared(); } diff --git a/server/internal/repository/src/UserRepository.cpp b/server/internal/repository/src/UserRepository.cpp index 216baef..71e05a5 100644 --- a/server/internal/repository/src/UserRepository.cpp +++ b/server/internal/repository/src/UserRepository.cpp @@ -79,11 +79,14 @@ std::vector UserRepository::getAllUsers() { auto c = manager->connection(); std::string sql = "SELECT * FROM Users"; nontransaction n(*c); - result r(n.exec(sql)); - manager->freeConnection(c); + auto stream = stream_from::query(n, sql); std::vector users; - for (result::const_iterator k = r.begin(); k != r.end(); ++k) - users.push_back(makeUser(k)); + std::tuple row; + while(stream >> row){ + users.emplace_back(get<0>(row), get<1>(row), get<2>(row), get<3>(row)); + } + stream.complete(); + manager->freeConnection(c); return users; } catch (...) { diff --git a/server/internal/repository/tests/RepositoryTests.cpp b/server/internal/repository/tests/RepositoryTests.cpp index 1e2cab7..b34518a 100644 --- a/server/internal/repository/tests/RepositoryTests.cpp +++ b/server/internal/repository/tests/RepositoryTests.cpp @@ -46,9 +46,9 @@ TEST(TaskRepository_CRUD_Test, CRUD) { TEST(SolutionRepository_CRUD_Test, CRUD) { SolutionRepository rep; - Solution solution("01.01.1970", 1, ":/C/Users", "tokens.txt", "tree.txt", 1, "result", 1); + Solution solution("01.01.1970", 1, ":/C/Users", 1, "result","tokens.txt", "tree.txt", 1); size_t id = rep.storeSolution(solution); - EXPECT_NO_FATAL_FAILURE(rep.getSolutionById(1)); + EXPECT_NO_FATAL_FAILURE(rep.getSolutionById(163)); solution.setId(id); std::optional new_solution_opt = rep.getSolutionById(id); Solution new_solution; @@ -101,8 +101,9 @@ TEST(UserRepository_CRUD_Test, loginLikeId) { TEST(SolutionRepository_CRUD_Test, CRUD_getSolutionsBySenderId) { SolutionRepository rep; - Solution solution1("01.01.1970", 1, ":/C/Users", "tokens.txt", "tree.txt", 1, "result", 1); - Solution solution2("01.01.1970", 1, "/home/usr", "tokens.txt", "tree.txt", 1, "result", 1); + Solution solution1("01.01.1970", 1, ":/C/Users", 1, "result","tokens.txt", "tree.txt", 1); + Solution solution2("01.01.1970", 1, "home/usr", 1, "result","tokens.txt", "tree.txt", 1); + size_t id1 = rep.storeSolution(solution1); solution1.setId(id1); @@ -110,8 +111,8 @@ TEST(SolutionRepository_CRUD_Test, CRUD_getSolutionsBySenderId) { size_t id2 = rep.storeSolution(solution2); solution2.setId(id2); EXPECT_EQ(solution2, rep.getSolutionById(id2)); - std::vector v = {{id1, "01.01.1970", 1, ":/C/Users", "tokens.txt", "tree.txt", 1, "result", 1}, - {id2, "01.01.1970", 1, "/home/usr", "tokens.txt", "tree.txt", 1, "result", 1}}; + std::vector v = {{id1,"01.01.1970", 1, ":/C/Users", 1, "result","tokens.txt", "tree.txt", 1}, + {id2, "01.01.1970", 1, "home/usr", 1, "result","tokens.txt", "tree.txt", 1}}; std::vector new_v = rep.getSolutionsBySenderId(solution1.getSenderId()); EXPECT_EQ(v, new_v); EXPECT_NO_FATAL_FAILURE(rep.deleteSolution(solution1)); @@ -122,8 +123,9 @@ TEST(SolutionRepository_CRUD_Test, CRUD_getSolutionsBySenderId) { TEST(SolutionRepository_CRUD_Test, CRUD_getSolutionsByTaskId) { SolutionRepository rep; - Solution solution1("01.01.1970", 1, ":/C/Users", "tokens.txt", "tree.txt", 1, "result", 1); - Solution solution2("01.01.1970", 1, "/home/usr", "tokens.txt", "tree.txt", 1, "result", 1); + Solution solution1("01.01.1970", 1, ":/C/Users", 1, "result","tokens.txt", "tree.txt", 1); + Solution solution2("01.01.1970", 1, "home/usr", 1, "result","tokens.txt", "tree.txt", 1); + size_t id1 = rep.storeSolution(solution1); solution1.setId(id1); @@ -138,8 +140,7 @@ TEST(SolutionRepository_CRUD_Test, CRUD_getSolutionsByTaskId) { } TEST(SolutionRepository_CRUD_Test, tryToAddWithNotExistingTask){ SolutionRepository rep; - - Solution solution("01.01.1970", 1, ":/C/Users", "tokens.txt", "tree.txt", 100500, "result", 1); + Solution solution("01.01.1970", 1, ":/C/Users", 100500, "result","tokens.txt", "tree.txt", 1); try{ rep.storeSolution(solution); }catch(pqxx::foreign_key_violation &e){ @@ -150,7 +151,7 @@ TEST(SolutionRepository_CRUD_Test, tryToAddWithNotExistingTask){ TEST(SolutionRepository_CRUD_Test, tryToStoreWithNotExistingSender){ SolutionRepository rep; - Solution solution("01.01.1970", 100500, ":/C/Users", "tokens.txt", "tree.txt", 1, "result", 1); + Solution solution("01.01.1970", 100500,":/C/Users", 100500, "result","tokens.txt", "tree.txt", 1); try{ rep.storeSolution(solution); }catch(pqxx::foreign_key_violation &keyViolation){ -- GitLab