From 56ec71f63da78b1b7e9e0e6c0b44a247271b464a Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 30 Aug 2023 09:32:29 +0200 Subject: [PATCH 01/19] Update qa.yml --- .github/workflows/qa.yml | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index a409178..007a262 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -50,28 +50,30 @@ jobs: run: | oscript ./tasks/coverage.os - - name: SonarCloud Scan on push - if: github.repository == 'nixel2007/entity' && github.event_name == 'push' - uses: nixel2007/sonarcloud-github-action@v1.5 + - name: Setup sonarqube + uses: warchant/setup-sonar-scanner@v3 + + # Анализ проекта в SonarQube (ветка) + - name: Анализ в SonarQube (branch) + if: github.event_name == 'push' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - with: - args: > - -Dsonar.host.url=https://sonar.openbsl.ru - -Dsonar.branch.name=${{ env.BRANCH_NAME }} - -Dsonar.projectVersion=${{ steps.extract_version.outputs.version }} - - - name: SonarCloud Scan on PR - if: github.repository == 'nixel2007/entity' && github.event_name == 'pull_request' - uses: nixel2007/sonarcloud-github-action@v1.5 + run: sonar-scanner + -Dsonar.host.url=https://sonar.openbsl.ru + -Dsonar.branch.name=${{ env.BRANCH_NAME }} + -Dsonar.projectVersion=${{ steps.extract_version.outputs.version }} + + # Анализ проекта в SonarQube (PR) + # https://docs.sonarqube.org/latest/analysis/pull-request/ + - name: Анализ в SonarQube (pull-request) + if: github.event_name == 'pull_request' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - with: - args: > - -Dsonar.host.url=https://sonar.openbsl.ru - -Dsonar.pullrequest.key=${{ github.event.pull_request.number }} - -Dsonar.pullrequest.branch=${{ github.event.pull_request.head.ref }} - -Dsonar.pullrequest.base=${{ github.event.pull_request.base.ref }} - -Dsonar.scm.revision=${{ github.event.pull_request.head.sha }} + run: sonar-scanner + -Dsonar.host.url=https://sonar.openbsl.ru + -Dsonar.pullrequest.key=${{ github.event.pull_request.number }} + -Dsonar.pullrequest.branch=${{ github.event.pull_request.head.ref }} + -Dsonar.pullrequest.base=${{ github.event.pull_request.base.ref }} + -Dsonar.scm.revision=${{ github.event.pull_request.head.sha }} From 0f4d7357c0e6a5fa838294ff9297c0ff8ee9ec31 Mon Sep 17 00:00:00 2001 From: Vissarion Date: Thu, 31 Aug 2023 19:42:24 +0600 Subject: [PATCH 02/19] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BE=D0=BF?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF?= =?UTF-8?q?=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=B0=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20macos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/main.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ca370ac..105c208 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -28,6 +28,11 @@ jobs: opm install opm@1.0.2 opm install -l --dev + - name: Prepare macOS env + if: matrix.os == 'macos-latest' + run: | + echo "SIGN_QEMU_BINARY=1" >> "$GITHUB_ENV" + - name: Install docker if: matrix.os != 'windows-latest' uses: crazy-max/ghaction-setup-docker@v1 From 45940c7a47bea522315459a9e65393106c48ace5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 31 Aug 2023 17:18:48 +0000 Subject: [PATCH 03/19] Bump warchant/setup-sonar-scanner from 3 to 7 Bumps [warchant/setup-sonar-scanner](https://github.com/warchant/setup-sonar-scanner) from 3 to 7. - [Release notes](https://github.com/warchant/setup-sonar-scanner/releases) - [Commits](https://github.com/warchant/setup-sonar-scanner/compare/v3...v7) --- updated-dependencies: - dependency-name: warchant/setup-sonar-scanner dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/qa.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 007a262..240ae56 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -51,7 +51,7 @@ jobs: oscript ./tasks/coverage.os - name: Setup sonarqube - uses: warchant/setup-sonar-scanner@v3 + uses: warchant/setup-sonar-scanner@v7 # Анализ проекта в SonarQube (ветка) - name: Анализ в SonarQube (branch) From 8ae68f9ec45e291a706b55a069cf5146ad5e694c Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 1 Sep 2023 07:21:16 +0200 Subject: [PATCH 04/19] Pg test on windows --- .github/workflows/main.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 105c208..c4d22f1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -34,12 +34,11 @@ jobs: echo "SIGN_QEMU_BINARY=1" >> "$GITHUB_ENV" - name: Install docker - if: matrix.os != 'windows-latest' uses: crazy-max/ghaction-setup-docker@v1 timeout-minutes: 12 - name: Setup PostgreSQL - if: matrix.os != 'windows-latest' + shell: bash run: | docker run --rm --name postgres -d -p 5432:5432 -e POSTGRES_PASSWORD=postgres -e POSTGRES_USERNAME=postgres -e POSTGRES_DB=postgres -e POSTGRES_HOST_AUTH_METHOD=password --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 postgres docker ps @@ -48,7 +47,7 @@ jobs: - name: Run tests env: - TESTRUNNER_RUN_POSTGRES_TESTS: "${{ matrix.os != 'windows-latest' }}" + TESTRUNNER_RUN_POSTGRES_TESTS: true TESTRUNNER_RUN_SQLITE_TESTS: "${{ matrix.os == 'windows-latest' }}" run: | oscript ./tasks/test.os From 0f0d47f0e8643ba922913b543d87f4f3a6fb101d Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 1 Sep 2023 07:29:17 +0200 Subject: [PATCH 05/19] Change postgres image source --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c4d22f1..4f1c240 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -32,7 +32,7 @@ jobs: if: matrix.os == 'macos-latest' run: | echo "SIGN_QEMU_BINARY=1" >> "$GITHUB_ENV" - + - name: Install docker uses: crazy-max/ghaction-setup-docker@v1 timeout-minutes: 12 @@ -40,7 +40,7 @@ jobs: - name: Setup PostgreSQL shell: bash run: | - docker run --rm --name postgres -d -p 5432:5432 -e POSTGRES_PASSWORD=postgres -e POSTGRES_USERNAME=postgres -e POSTGRES_DB=postgres -e POSTGRES_HOST_AUTH_METHOD=password --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 postgres + docker run --rm --name postgres -d -p 5432:5432 -e POSTGRES_PASSWORD=postgres -e POSTGRES_USERNAME=postgres -e POSTGRES_DB=postgres -e POSTGRES_HOST_AUTH_METHOD=password --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 satrapu/postgresql docker ps while [ "`docker inspect -f {{.State.Health.Status}} postgres`" != "healthy" ]; do docker ps && sleep 2; done docker ps From cd7569b0a3fa090dc8273fa4b53edffec473054e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Sep 2023 00:23:44 +0000 Subject: [PATCH 06/19] Bump crazy-max/ghaction-setup-docker from 1 to 2 Bumps [crazy-max/ghaction-setup-docker](https://github.com/crazy-max/ghaction-setup-docker) from 1 to 2. - [Release notes](https://github.com/crazy-max/ghaction-setup-docker/releases) - [Commits](https://github.com/crazy-max/ghaction-setup-docker/compare/v1...v2) --- updated-dependencies: - dependency-name: crazy-max/ghaction-setup-docker dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/main.yml | 2 +- .github/workflows/qa.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4f1c240..1356666 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -34,7 +34,7 @@ jobs: echo "SIGN_QEMU_BINARY=1" >> "$GITHUB_ENV" - name: Install docker - uses: crazy-max/ghaction-setup-docker@v1 + uses: crazy-max/ghaction-setup-docker@v2 timeout-minutes: 12 - name: Setup PostgreSQL diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 240ae56..f41e499 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -25,7 +25,7 @@ jobs: opm install -l --dev - name: Install docker - uses: crazy-max/ghaction-setup-docker@v1 + uses: crazy-max/ghaction-setup-docker@v2 timeout-minutes: 12 - name: Setup PostgreSQL From 4a5fdc1244685165195591a4dcc2b29f421b46b8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Sep 2023 00:42:48 +0000 Subject: [PATCH 07/19] Bump otymko/setup-onescript from 1.1 to 1.2 Bumps [otymko/setup-onescript](https://github.com/otymko/setup-onescript) from 1.1 to 1.2. - [Release notes](https://github.com/otymko/setup-onescript/releases) - [Commits](https://github.com/otymko/setup-onescript/compare/v1.1...v1.2) --- updated-dependencies: - dependency-name: otymko/setup-onescript dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/main.yml | 2 +- .github/workflows/qa.yml | 2 +- .github/workflows/release.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1356666..0bcbef5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -19,7 +19,7 @@ jobs: - uses: actions/checkout@v3 - name: Setup Onescript Action - uses: otymko/setup-onescript@v1.1 + uses: otymko/setup-onescript@v1.2 with: version: ${{ matrix.oscript_version }} diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index f41e499..6f079cc 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -15,7 +15,7 @@ jobs: fetch-depth: 0 - name: Setup Onescript Action - uses: otymko/setup-onescript@v1.1 + uses: otymko/setup-onescript@v1.2 with: version: "1.8.3" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8299db5..a752609 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -27,7 +27,7 @@ jobs: # Установка OneScript конкретной версии - name: Установка OneScript - uses: otymko/setup-onescript@v1.1 + uses: otymko/setup-onescript@v1.2 with: version: ${{ matrix.oscript_version }} From e50537d4d653bc007bf9d9f32c9869c52b3e6b61 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Sep 2023 08:04:59 +0000 Subject: [PATCH 08/19] Bump actions/checkout from 3 to 4 Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/main.yml | 2 +- .github/workflows/qa.yml | 2 +- .github/workflows/release.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0bcbef5..9d2150d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,7 +16,7 @@ jobs: os: [ubuntu-latest, windows-latest, macos-latest] oscript_version: ['1.8.3', 'stable'] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Setup Onescript Action uses: otymko/setup-onescript@v1.2 diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 6f079cc..c9e3495 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: # Disabling shallow clone is recommended for improving relevancy of reporting fetch-depth: 0 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a752609..c0c921a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -23,7 +23,7 @@ jobs: steps: # Загрузка проекта - name: Актуализация - uses: actions/checkout@v3 + uses: actions/checkout@v4 # Установка OneScript конкретной версии - name: Установка OneScript From 3bdca3239eb4ab68473f47e9f7c27169755fd68e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 00:02:29 +0000 Subject: [PATCH 09/19] Bump otymko/setup-onescript from 1.2 to 1.3 Bumps [otymko/setup-onescript](https://github.com/otymko/setup-onescript) from 1.2 to 1.3. - [Release notes](https://github.com/otymko/setup-onescript/releases) - [Commits](https://github.com/otymko/setup-onescript/compare/v1.2...v1.3) --- updated-dependencies: - dependency-name: otymko/setup-onescript dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/main.yml | 2 +- .github/workflows/qa.yml | 2 +- .github/workflows/release.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9d2150d..c5590cf 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -19,7 +19,7 @@ jobs: - uses: actions/checkout@v4 - name: Setup Onescript Action - uses: otymko/setup-onescript@v1.2 + uses: otymko/setup-onescript@v1.3 with: version: ${{ matrix.oscript_version }} diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index c9e3495..aa65b9b 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -15,7 +15,7 @@ jobs: fetch-depth: 0 - name: Setup Onescript Action - uses: otymko/setup-onescript@v1.2 + uses: otymko/setup-onescript@v1.3 with: version: "1.8.3" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c0c921a..2104ad8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -27,7 +27,7 @@ jobs: # Установка OneScript конкретной версии - name: Установка OneScript - uses: otymko/setup-onescript@v1.2 + uses: otymko/setup-onescript@v1.3 with: version: ${{ matrix.oscript_version }} From 07020de0c8260d2936a71dac2bfeae5df30bf402 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 Dec 2023 00:09:53 +0000 Subject: [PATCH 10/19] Bump actions/upload-artifact from 3 to 4 Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3 to 4. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2104ad8..0a6753a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -41,7 +41,7 @@ jobs: run: opm build . - name: Заливка артефактов - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: package.zip path: ./${{ env.PACKAGE_MASK }} From fbee4e8c0b6d860e5ef5f3c361cf77e81036fa12 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 00:08:06 +0000 Subject: [PATCH 11/19] Bump crazy-max/ghaction-setup-docker from 2 to 3 Bumps [crazy-max/ghaction-setup-docker](https://github.com/crazy-max/ghaction-setup-docker) from 2 to 3. - [Release notes](https://github.com/crazy-max/ghaction-setup-docker/releases) - [Commits](https://github.com/crazy-max/ghaction-setup-docker/compare/v2...v3) --- updated-dependencies: - dependency-name: crazy-max/ghaction-setup-docker dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/main.yml | 2 +- .github/workflows/qa.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c5590cf..3d725a5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -34,7 +34,7 @@ jobs: echo "SIGN_QEMU_BINARY=1" >> "$GITHUB_ENV" - name: Install docker - uses: crazy-max/ghaction-setup-docker@v2 + uses: crazy-max/ghaction-setup-docker@v3 timeout-minutes: 12 - name: Setup PostgreSQL diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index aa65b9b..b81415e 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -25,7 +25,7 @@ jobs: opm install -l --dev - name: Install docker - uses: crazy-max/ghaction-setup-docker@v2 + uses: crazy-max/ghaction-setup-docker@v3 timeout-minutes: 12 - name: Setup PostgreSQL From 007e1ddd65a43c0bb9447847eb39e71b813f170c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Jan 2024 00:51:16 +0000 Subject: [PATCH 12/19] Bump otymko/setup-onescript from 1.3 to 1.4 Bumps [otymko/setup-onescript](https://github.com/otymko/setup-onescript) from 1.3 to 1.4. - [Release notes](https://github.com/otymko/setup-onescript/releases) - [Commits](https://github.com/otymko/setup-onescript/compare/v1.3...v1.4) --- updated-dependencies: - dependency-name: otymko/setup-onescript dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/main.yml | 2 +- .github/workflows/qa.yml | 2 +- .github/workflows/release.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3d725a5..98310cc 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -19,7 +19,7 @@ jobs: - uses: actions/checkout@v4 - name: Setup Onescript Action - uses: otymko/setup-onescript@v1.3 + uses: otymko/setup-onescript@v1.4 with: version: ${{ matrix.oscript_version }} diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index b81415e..1f0a7a2 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -15,7 +15,7 @@ jobs: fetch-depth: 0 - name: Setup Onescript Action - uses: otymko/setup-onescript@v1.3 + uses: otymko/setup-onescript@v1.4 with: version: "1.8.3" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0a6753a..32a5876 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -27,7 +27,7 @@ jobs: # Установка OneScript конкретной версии - name: Установка OneScript - uses: otymko/setup-onescript@v1.3 + uses: otymko/setup-onescript@v1.4 with: version: ${{ matrix.oscript_version }} From 86b5d6ba3d995a2beeabd1f22661419804235638 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Feb 2024 00:17:15 +0000 Subject: [PATCH 13/19] Bump warchant/setup-sonar-scanner from 7 to 8 Bumps [warchant/setup-sonar-scanner](https://github.com/warchant/setup-sonar-scanner) from 7 to 8. - [Release notes](https://github.com/warchant/setup-sonar-scanner/releases) - [Commits](https://github.com/warchant/setup-sonar-scanner/compare/v7...v8) --- updated-dependencies: - dependency-name: warchant/setup-sonar-scanner dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/qa.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 1f0a7a2..50dd9cc 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -51,7 +51,7 @@ jobs: oscript ./tasks/coverage.os - name: Setup sonarqube - uses: warchant/setup-sonar-scanner@v7 + uses: warchant/setup-sonar-scanner@v8 # Анализ проекта в SonarQube (ветка) - name: Анализ в SonarQube (branch) From fdbbc7d9a43ea49eab27a1375b6df73e4f4f763d Mon Sep 17 00:00:00 2001 From: Nikita Ivanchenko Date: Tue, 19 Mar 2024 00:03:07 +0300 Subject: [PATCH 14/19] =?UTF-8?q?=D0=91=D0=B0=D0=B7=D0=B0=20=D0=B2=20?= =?UTF-8?q?=D0=BF=D0=B0=D0=BC=D1=8F=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib.config | 1 + ...20\272\321\202\320\276\321\200InMemory.os" | 261 ++++++++++++++++++ ...20\272\321\202\320\276\321\200InMemory.os" | 231 ++++++++++++++++ 3 files changed, 493 insertions(+) create mode 100644 "src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200InMemory.os" create mode 100644 "tests/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200InMemory.os" diff --git a/lib.config b/lib.config index cc868f2..efbf7b1 100644 --- a/lib.config +++ b/lib.config @@ -9,6 +9,7 @@ + diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200InMemory.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200InMemory.os" new file mode 100644 index 0000000..3b18595 --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200InMemory.os" @@ -0,0 +1,261 @@ +// Для хранения статуса соединения +Перем Открыт; +Перем КешТаблиц; +Перем Рефлектор; + +// Конструктор объекта АбстрактныйКоннектор. +// +Процедура ПриСозданииОбъекта() + Открыт = Ложь; + КешТаблиц = Новый Соответствие(); + Рефлектор = Новый Рефлектор; +КонецПроцедуры + +// Открыть соединение с БД. +// +// Параметры: +// СтрокаСоединения - Строка - Строка соединения с БД. +// ПараметрыКоннектора - Массив - Дополнительные параметры инициализации коннектора. +// +Процедура Открыть(СтрокаСоединения, ПараметрыКоннектора) Экспорт + Открыт = Истина; +КонецПроцедуры + +// Закрыть соединение с БД. +// +Процедура Закрыть() Экспорт + Открыт = Ложь; +КонецПроцедуры + +// Получить статус соединения с БД. +// +// Возвращаемое значение: +// Булево - Состояние соединения. Истина, если соединение установлено и готово к использованию. +// В обратном случае - Ложь. +// +Функция Открыт() Экспорт + Возврат Открыт; +КонецФункции + +// Начинает новую транзакцию в БД. +// +Процедура НачатьТранзакцию() Экспорт + ВызватьИсключение "Не поддерживается"; +КонецПроцедуры + +// Фиксирует открытую транзакцию в БД. +// +Процедура ЗафиксироватьТранзакцию() Экспорт + ВызватьИсключение "Не поддерживается"; +КонецПроцедуры + +// Отменяет открытую транзакцию в БД. +// +Процедура ОтменитьТранзакцию() Экспорт + ВызватьИсключение "Не поддерживается"; +КонецПроцедуры + +// Создает таблицу в БД по данным модели. +// +// Параметры: +// ОбъектМодели - ОбъектМодели - Объект, содержащий описание класса-сущности и настроек таблицы БД. +// +Процедура ИнициализироватьТаблицу(ОбъектМодели) Экспорт + ИмяТаблицы = ОбъектМодели.ИмяТаблицы(); + + Если НЕ КешТаблиц.Получить(ИмяТаблицы) = Неопределено Тогда + ВызватьИсключение "Таблица " + ИмяТаблицы + " уже инициализирована"; + КонецЕсли; + + Таблица = Новый ТаблицаЗначений(); + + Таблица.Колонки.Добавить("_Идентификатор"); + Таблица.Колонки.Добавить("_Сущность"); + + Таблица.Индексы.Добавить("_Идентификатор"); + + КешТаблиц.Вставить(ИмяТаблицы, Таблица); + +КонецПроцедуры + +// Сохраняет сущность в БД. +// +// Параметры: +// ОбъектМодели - ОбъектМодели - Объект, содержащий описание класса-сущности и настроек таблицы БД. +// Сущность - Произвольный - Объект (экземпляр класса, зарегистрированного в модели) для сохранения в БД. +// +Процедура Сохранить(ОбъектМодели, Сущность) Экспорт + + ИмяТаблицы = ОбъектМодели.ИмяТаблицы(); + + Таблица = КешТаблиц.Получить(ИмяТаблицы); + + Если Таблица = Неопределено Тогда + ВызватьИсключение "Таблица " + ИмяТаблицы + " не найдена"; + КонецЕсли; + + Идентификатор = ОбъектМодели.ПолучитьЗначениеИдентификатора(Сущность); + Если НЕ ЗначениеЗаполнено(Идентификатор) Тогда + + Если ОбъектМодели.Идентификатор().ТипКолонки <> ТипыКолонок.Целое Тогда + Сообщение = СтрШаблон( + "Ошибка при сохранении сущности с типом %1. + |Генерация идентификаторов поддерживается только для колонок с типом ""Целое""", + ОбъектМодели.ТипСущности() + ); + ВызватьИсключение Сообщение; + КонецЕсли; + + МаксимальныйИдентификатор = ПроцессорыКоллекций.ИзКоллекции(Таблица) + .Обработать("Результат = Число(Элемент._Идентификатор)") + .Максимум(); + + Если МаксимальныйИдентификатор = Неопределено Тогда + МаксимальныйИдентификатор = 0; + КонецЕсли; + + Идентификатор = МаксимальныйИдентификатор + 1; + + ОбъектМодели.УстановитьЗначениеКолонкиВПоле( + Сущность, + ОбъектМодели.Идентификатор().ИмяКолонки, + Идентификатор + ); + + КонецЕсли; + Если ТипЗнч(Идентификатор) = Тип("Число") Тогда + Идентификатор = Формат(Идентификатор, "ЧГ="); + КонецЕсли; + + СтрокаТЗ = Таблица.Найти(Идентификатор, "_Идентификатор"); + + Если СтрокаТЗ = Неопределено Тогда + СтрокаТЗ = Таблица.Добавить(); + КонецЕсли; + + СущностьВБД = Новый (ОбъектМодели.ТипСущности()); + + Для Каждого Колонка Из ОбъектМодели.Колонки() Цикл + Значение = ОбъектМодели.ПолучитьПриведенноеЗначениеПоля( + Сущность, + Колонка.ИмяПоля); + Рефлектор.УстановитьСвойство(СущностьВБД, Колонка.ИмяПоля, Значение); + КонецЦикла; + + СтрокаТЗ._Идентификатор = Идентификатор; + СтрокаТЗ._Сущность = СущностьВБД; + +КонецПроцедуры + +// Удаляет сущность из таблицы БД. +// +// Параметры: +// ОбъектМодели - ОбъектМодели - Объект, содержащий описание класса-сущности и настроек таблицы БД. +// Сущность - Произвольный - Объект (экземпляр класса, зарегистрированного в модели) для удаления из БД. +// +Процедура Удалить(ОбъектМодели, Сущность) Экспорт + + ИмяТаблицы = ОбъектМодели.ИмяТаблицы(); + + Таблица = КешТаблиц.Получить(ИмяТаблицы); + + Если Таблица = Неопределено Тогда + ВызватьИсключение "Таблица " + ИмяТаблицы + " не найдена"; + КонецЕсли; + + Идентификатор = ОбъектМодели.ПолучитьЗначениеИдентификатора(Сущность); + Если ТипЗнч(Идентификатор) = Тип("Число") Тогда + Идентификатор = Формат(Идентификатор, "ЧГ="); + КонецЕсли; + + СтрокаТЗ = Таблица.Найти(Идентификатор, "_Идентификатор"); + + Если НЕ СтрокаТЗ = Неопределено Тогда + Таблица.Удалить(СтрокаТЗ); + КонецЕсли; + +КонецПроцедуры + +// Осуществляет поиск строк в таблице по указанному отбору. +// +// Параметры: +// ОбъектМодели - ОбъектМодели - Объект, содержащий описание класса-сущности и настроек таблицы БД. +// Отбор - Массив - Отбор для поиска. Каждый элемент массива должен иметь тип "ЭлементОтбора". +// Каждый элемент отбора преобразуется к условию поиска. В качестве "ПутьКДанным" указываются имена колонок. +// +// Возвращаемое значение: +// Массив - Массив, элементами которого являются "Соответствия". Ключом элемента соответствия является имя колонки, +// значением элемента соответствия - значение колонки. +// +Функция НайтиСтрокиВТаблице(ОбъектМодели, Отбор = Неопределено) Экспорт + + ИмяТаблицы = ОбъектМодели.ИмяТаблицы(); + + Таблица = КешТаблиц.Получить(ИмяТаблицы); + + Если Таблица = Неопределено Тогда + ВызватьИсключение "Таблица " + ИмяТаблицы + " не найдена"; + КонецЕсли; + + ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(Таблица); + + Для Каждого ЭлементОтбора Из Отбор Цикл + СтрокаУсловие = СтрШаблон( + "Результат = Элемент._Сущность.%1 %2 ДополнительныеПараметры.Значение", + ЭлементОтбора.ПутьКДанным, + ЭлементОтбора.ВидСравнения + ); + ДополнительныеПараметры = Новый Структура("Значение", ЭлементОтбора.Значение); + ПроцессорКоллекций = ПроцессорКоллекций.Фильтровать(СтрокаУсловие, ДополнительныеПараметры); + КонецЦикла; + + ДанныеТаблицы = ПроцессорКоллекций.ВМассив(); + + Результат = Новый Массив(); + + Колонки = ОбъектМодели.Колонки(); + + Для Каждого СтрокаДанныхТаблицы Из ДанныеТаблицы Цикл + ЗначенияКолонок = Новый Соответствие; + Для Каждого Колонка Из Колонки Цикл + Значение = Рефлектор.ПолучитьСвойство(СтрокаДанныхТаблицы._Сущность, Колонка.ИмяПоля); + ЗначенияКолонок.Вставить(Колонка.ИмяКолонки, Значение); + КонецЦикла; + Результат.Добавить(ЗначенияКолонок); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Удаляет строки в таблице по указанному отбору. +// +// Параметры: +// ОбъектМодели - ОбъектМодели - Объект, содержащий описание класса-сущности и настроек таблицы БД. +// Отбор - Массив - Отбор для поиска. Каждый элемент массива должен иметь тип "ЭлементОтбора". +// Каждый элемент отбора преобразуется к условию поиска. В качестве "ПутьКДанным" указываются имена колонок. +// +Процедура УдалитьСтрокиВТаблице(ОбъектМодели, Знач Отбор) Экспорт + СтрокиКУдалению = НайтиСтрокиВТаблице(ОбъектМодели, Отбор); + Если СтрокиКУдалению.Количество() > 0 Тогда + + ИмяКлонкиИдентификатора = ОбъектМодели.Идентификатор().ИмяКолонки; + + ИмяТаблицы = ОбъектМодели.ИмяТаблицы(); + Таблица = КешТаблиц.Получить(ИмяТаблицы); + + Для Каждого СтрокаКУдалению Из СтрокиКУдалению Цикл + Идентификатор = СтрокаКУдалению.Получить(ИмяКлонкиИдентификатора); + Если ТипЗнч(Идентификатор) = Тип("Число") Тогда + Идентификатор = Формат(Идентификатор, "ЧГ="); + КонецЕсли; + + СтрокаТЗ = Таблица.Найти(Идентификатор, "_Идентификатор"); + + Если НЕ СтрокаТЗ = Неопределено Тогда + Таблица.Удалить(СтрокаТЗ); + КонецЕсли; + КонецЦикла; + + КонецЕсли; +КонецПроцедуры \ No newline at end of file diff --git "a/tests/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200InMemory.os" "b/tests/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200InMemory.os" new file mode 100644 index 0000000..ed8439e --- /dev/null +++ "b/tests/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200InMemory.os" @@ -0,0 +1,231 @@ +#Использовать fs +#Использовать ".." + +Перем Коннектор; +Перем СтрокаСоединения; + +Процедура ПередЗапускомТеста() Экспорт + ПодключитьСценарий(ОбъединитьПути(ТекущийКаталог(), "tests", "fixtures", "СущностьСоВсемиТипамиКолонок.os"), "СущностьСоВсемиТипамиКолонок"); + ПодключитьСценарий(ОбъединитьПути(ТекущийКаталог(), "tests", "fixtures", "АвтоинкрементныйКлючБезКолонок.os"), "АвтоинкрементныйКлючБезКолонок"); + + Коннектор = Новый КоннекторInMemory(); + Коннектор.Открыть(СтрокаСоединения, Новый Массив); +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + Коннектор.Закрыть(); +КонецПроцедуры + +&Тест +Процедура КоннекторInMemoryРеализуетИнтерфейсКоннектора() Экспорт + ИнтерфейсОбъекта = Новый ИнтерфейсОбъекта(); + ИнтерфейсОбъекта.ИзОбъекта(Тип("АбстрактныйКоннектор")); + + РефлекторОбъекта = Новый РефлекторОбъекта(Тип("КоннекторInMemory")); + РефлекторОбъекта.РеализуетИнтерфейс(ИнтерфейсОбъекта, Истина); +КонецПроцедуры + +&Тест +Процедура НайтиСтрокиВТаблице() Экспорт + МодельДанных = Новый МодельДанных(); + ОбъектМодели = МодельДанных.СоздатьОбъектМодели(Тип("СущностьСоВсемиТипамиКолонок")); + Коннектор.ИнициализироватьТаблицу(ОбъектМодели); + + ЗависимаяСущность = Новый СущностьСоВсемиТипамиКолонок; + ЗависимаяСущность.Целое = 2; + + Сущность = Новый СущностьСоВсемиТипамиКолонок; + Сущность.Целое = 1; + Сущность.Дробное = 1.2; + Сущность.БулевоИстина = Истина; + Сущность.БулевоЛожь = Ложь; + Сущность.Строка = "Строка"; + Сущность.Дата = Дата(2018, 1, 1); + Сущность.Время = Дата(1, 1, 1, 10, 53, 20); + Сущность.ДатаВремя = Дата(2018, 1, 1, 10, 53, 20); + Сущность.Ссылка = ЗависимаяСущность; + Сущность.ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки("ДвоичныеДанные"); + + Коннектор.Сохранить(ОбъектМодели, ЗависимаяСущность); + Коннектор.Сохранить(ОбъектМодели, Сущность); + + Отбор = Новый Массив; + Отбор.Добавить(Новый ЭлементОтбора("Целое", ВидСравнения.Равно, Сущность.Целое)); + НайденныеСтроки = Коннектор.НайтиСтрокиВТаблице(ОбъектМодели, Отбор); + Ожидаем.Что(НайденныеСтроки, "Сущность сохранилась").ИмеетДлину(1); + + ЗначенияКолонок = НайденныеСтроки[0]; + + Ожидаем.Что(ЗначенияКолонок.Получить("Целое"), "ЗначенияКолонок.Целое получено корректно").Равно(Сущность.Целое); + Ожидаем.Что(ЗначенияКолонок.Получить("Дробное"), "ЗначенияКолонок.Дробное получено корректно").Равно(Сущность.Дробное); + Ожидаем.Что(ЗначенияКолонок.Получить("БулевоИстина"), "ЗначенияКолонок.БулевоИстина получено корректно").Равно(Сущность.БулевоИстина); + Ожидаем.Что(ЗначенияКолонок.Получить("БулевоЛожь"), "ЗначенияКолонок.БулевоЛожь получено корректно").Равно(Сущность.БулевоЛожь); + Ожидаем.Что(ЗначенияКолонок.Получить("Строка"), "ЗначенияКолонок.Строка получено корректно").Равно(Сущность.Строка); + Ожидаем.Что(ЗначенияКолонок.Получить("Дата"), "ЗначенияКолонок.Дата получено корректно").Равно(Сущность.Дата); + Ожидаем.Что(ЗначенияКолонок.Получить("Время"), "ЗначенияКолонок.Время получено корректно").Равно(Сущность.Время); + Ожидаем.Что(ЗначенияКолонок.Получить("ДатаВремя"), "ЗначенияКолонок.ДатаВремя получено корректно").Равно(Сущность.ДатаВремя); + Ожидаем.Что(ЗначенияКолонок.Получить("Ссылка"), "ЗначенияКолонок.Ссылка получено корректно").Равно(Сущность.Ссылка.Целое); + Ожидаем.Что(ЗначенияКолонок.Получить("ДвоичныеДанные"), "ЗначенияКолонок.ДвоичныеДанные получено корректно").Равно(Сущность.ДвоичныеДанные); +КонецПроцедуры + +&Тест +Процедура УдалитьСтрокиВТаблице() Экспорт + МодельДанных = Новый МодельДанных(); + ОбъектМодели = МодельДанных.СоздатьОбъектМодели(Тип("СущностьСоВсемиТипамиКолонок")); + Коннектор.ИнициализироватьТаблицу(ОбъектМодели); + + Сущность = Новый СущностьСоВсемиТипамиКолонок; + Сущность.Целое = 1; + + Коннектор.Сохранить(ОбъектМодели, Сущность); + + Отбор = Новый Массив; + Отбор.Добавить(Новый ЭлементОтбора("Целое", ВидСравнения.Равно, Сущность.Целое)); + + Коннектор.УдалитьСтрокиВТаблице(ОбъектМодели, Отбор); + + НайденныеСтроки = Коннектор.НайтиСтрокиВТаблице(ОбъектМодели, Отбор); + Ожидаем.Что(НайденныеСтроки, "Сущность удалилась").ИмеетДлину(0); +КонецПроцедуры + +&Тест +Процедура УдалениеСущности() Экспорт + МодельДанных = Новый МодельДанных(); + ОбъектМодели = МодельДанных.СоздатьОбъектМодели(Тип("СущностьСоВсемиТипамиКолонок")); + Коннектор.ИнициализироватьТаблицу(ОбъектМодели); + + Сущность = Новый СущностьСоВсемиТипамиКолонок(); + Сущность.Целое = 1; + Коннектор.Сохранить(ОбъектМодели, Сущность); + + Коннектор.Удалить(ОбъектМодели, Сущность); + + Отбор = Новый Массив; + Отбор.Добавить(Новый ЭлементОтбора("Целое", ВидСравнения.Равно, Сущность.Целое)); + НайденныеСтроки = Коннектор.НайтиСтрокиВТаблице(ОбъектМодели, Отбор); + + Ожидаем.Что(НайденныеСтроки, "Сущность удалилась").ИмеетДлину(0); + +КонецПроцедуры + +&Тест +Процедура Автоинкремент() Экспорт + МодельДанных = Новый МодельДанных(); + ОбъектМодели = МодельДанных.СоздатьОбъектМодели(Тип("АвтоинкрементныйКлючБезКолонок")); + Коннектор.ИнициализироватьТаблицу(ОбъектМодели); + + Сущность = Новый АвтоинкрементныйКлючБезКолонок(); + Коннектор.Сохранить(ОбъектМодели, Сущность); + + Ожидаем.Что(Сущность.Идентификатор).Равно(1); + + Сущность = Новый АвтоинкрементныйКлючБезКолонок(); + Коннектор.Сохранить(ОбъектМодели, Сущность); + + Ожидаем.Что(Сущность.Идентификатор).Равно(2); + +КонецПроцедуры + +&Тест +Процедура СущностьМожетЗаписатьСебя() Экспорт + // Дано + ПодключитьСценарий("tests/fixtures/ПростойОбъект.os", "ПростойОбъект"); + + ТипКоннектора = "КоннекторInMemory"; + МенеджерСущностей = Новый МенеджерСущностей(Тип(ТипКоннектора)); + МенеджерСущностей.ДобавитьКлассВМодель(Тип("ПростойОбъект")); + МенеджерСущностей.Инициализировать(); + + // Когда + ПростойОбъект = МенеджерСущностей.СоздатьЭлемент(Тип("ПростойОбъект")); + ПростойОбъект.Идентификатор = "1"; + ПростойОбъект.Поле = "2"; + ПростойОбъект.Сохранить(); + + // Тогда + НайденныйПростойОбъект = МенеджерСущностей.ПолучитьОдно(Тип("ПростойОбъект"), "1"); + + Ожидаем.Что(НайденныйПростойОбъект).Не_().Равно(Неопределено); + Ожидаем.Что(НайденныйПростойОбъект.Идентификатор).Равно("1"); + Ожидаем.Что(НайденныйПростойОбъект.Поле).Равно("2"); + +КонецПроцедуры + +&Тест +Процедура СущностьМожетПерезаписатьСебя() Экспорт + // Дано + ПодключитьСценарий("tests/fixtures/ПростойОбъект.os", "ПростойОбъект"); + ТипКоннектора = "КоннекторInMemory"; + МенеджерСущностей = Новый МенеджерСущностей(Тип(ТипКоннектора)); + МенеджерСущностей.ДобавитьКлассВМодель(Тип("ПростойОбъект")); + МенеджерСущностей.Инициализировать(); + + // Когда + ПростойОбъект = МенеджерСущностей.СоздатьЭлемент(Тип("ПростойОбъект")); + ПростойОбъект.Идентификатор = "1"; + ПростойОбъект.Поле = "2"; + ПростойОбъект.Сохранить(); + НайденныйПростойОбъект = МенеджерСущностей.ПолучитьОдно(Тип("ПростойОбъект"), "1"); + НайденныйПростойОбъект.Поле = "3"; + НайденныйПростойОбъект.Сохранить(); + + // Тогда + НайденныйПростойОбъект = МенеджерСущностей.ПолучитьОдно(Тип("ПростойОбъект"), "1"); + + Ожидаем.Что(НайденныйПростойОбъект).Не_().Равно(Неопределено); + Ожидаем.Что(НайденныйПростойОбъект.Идентификатор).Равно("1"); + Ожидаем.Что(НайденныйПростойОбъект.Поле).Равно("3"); + +КонецПроцедуры + +&Тест +Процедура МенеджерСущностейМожетЗаписать() Экспорт + // Дано + ПодключитьСценарий("tests/fixtures/ПростойОбъект.os", "ПростойОбъект"); + ТипКоннектора = "КоннекторInMemory"; + МенеджерСущностей = Новый МенеджерСущностей(Тип(ТипКоннектора)); + МенеджерСущностей.ДобавитьКлассВМодель(Тип("ПростойОбъект")); + МенеджерСущностей.Инициализировать(); + + // Когда + ПростойОбъект = МенеджерСущностей.СоздатьЭлемент(Тип("ПростойОбъект")); + ПростойОбъект.Идентификатор = "1"; + ПростойОбъект.Поле = "2"; + МенеджерСущностей.Сохранить(ПростойОбъект); + + // Тогда + НайденныйПростойОбъект = МенеджерСущностей.ПолучитьОдно(Тип("ПростойОбъект"), "1"); + + Ожидаем.Что(НайденныйПростойОбъект).Не_().Равно(Неопределено); + Ожидаем.Что(НайденныйПростойОбъект.Идентификатор).Равно("1"); + Ожидаем.Что(НайденныйПростойОбъект.Поле).Равно("2"); + +КонецПроцедуры + +&Тест +Процедура ХранилищеСущностейМожетЗаписать() Экспорт + + // Дано + ПодключитьСценарий("tests/fixtures/ПростойОбъект.os", "ПростойОбъект"); + ТипКоннектора = "КоннекторInMemory"; + МенеджерСущностей = Новый МенеджерСущностей(Тип(ТипКоннектора)); + МенеджерСущностей.ДобавитьКлассВМодель(Тип("ПростойОбъект")); + МенеджерСущностей.Инициализировать(); + + // Когда + + ХранилищеПростойОбъект = МенеджерСущностей.ПолучитьХранилищеСущностей(Тип("ПростойОбъект")); + + ПростойОбъект = ХранилищеПростойОбъект.СоздатьЭлемент(); + ПростойОбъект.Идентификатор = "1"; + ПростойОбъект.Поле = "2"; + ПростойОбъект.Сохранить(); + + // Тогда + НайденныйПростойОбъект = ХранилищеПростойОбъект.ПолучитьОдно("1"); + + Ожидаем.Что(НайденныйПростойОбъект).Не_().Равно(Неопределено); + Ожидаем.Что(НайденныйПростойОбъект.Идентификатор).Равно("1"); + Ожидаем.Что(НайденныйПростойОбъект.Поле).Равно("2"); + +КонецПроцедуры \ No newline at end of file From 50a6771fb29f69e002a815ab4a895992905d4b19 Mon Sep 17 00:00:00 2001 From: Nikita Ivanchenko Date: Tue, 19 Mar 2024 11:23:24 +0300 Subject: [PATCH 15/19] =?UTF-8?q?=D0=9A=D0=B5=D1=88=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B2=20=D0=BC=D0=BE=D0=B4?= =?UTF-8?q?=D1=83=D0=BB=D0=B5=20=D1=81=D0=B8=D0=BD=D0=B3=D0=BB=D1=82=D0=BE?= =?UTF-8?q?=D0=BD=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\260\320\274\321\217\321\202\320\270.os" | 24 +++++++++++++++++++ ...20\272\321\202\320\276\321\200InMemory.os" | 20 +++++++--------- ...20\272\321\202\320\276\321\200InMemory.os" | 1 + 3 files changed, 34 insertions(+), 11 deletions(-) create mode 100644 "src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265\320\222\320\237\320\260\320\274\321\217\321\202\320\270.os" diff --git "a/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265\320\222\320\237\320\260\320\274\321\217\321\202\320\270.os" "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265\320\222\320\237\320\260\320\274\321\217\321\202\320\270.os" new file mode 100644 index 0000000..afa3cd9 --- /dev/null +++ "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265\320\222\320\237\320\260\320\274\321\217\321\202\320\270.os" @@ -0,0 +1,24 @@ + +Перем КешиТаблиц; + +Функция КешТаблиц(СтрокаПодключения = "default") Экспорт + Результат = КешиТаблиц.Получить(СтрокаПодключения); + + Если Результат = Неопределено Тогда + Результат = Новый Соответствие(); + КешиТаблиц.Вставить(СтрокаПодключения, Результат); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Процедура Очистить(СтрокаПодключения = "default") Экспорт + КешиТаблиц.Вставить(СтрокаПодключения, Новый Соответствие()); +КонецПроцедуры + +Процедура Инициализация() + КешиТаблиц = Новый Соответствие(); +КонецПроцедуры + +Инициализация(); \ No newline at end of file diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200InMemory.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200InMemory.os" index 3b18595..f6d0470 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200InMemory.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200InMemory.os" @@ -7,7 +7,6 @@ // Процедура ПриСозданииОбъекта() Открыт = Ложь; - КешТаблиц = Новый Соответствие(); Рефлектор = Новый Рефлектор; КонецПроцедуры @@ -18,6 +17,7 @@ // ПараметрыКоннектора - Массив - Дополнительные параметры инициализации коннектора. // Процедура Открыть(СтрокаСоединения, ПараметрыКоннектора) Экспорт + КешТаблиц = ХранилищеВПамяти.КешТаблиц(СтрокаСоединения); Открыт = Истина; КонецПроцедуры @@ -63,18 +63,16 @@ Процедура ИнициализироватьТаблицу(ОбъектМодели) Экспорт ИмяТаблицы = ОбъектМодели.ИмяТаблицы(); - Если НЕ КешТаблиц.Получить(ИмяТаблицы) = Неопределено Тогда - ВызватьИсключение "Таблица " + ИмяТаблицы + " уже инициализирована"; - КонецЕсли; - - Таблица = Новый ТаблицаЗначений(); + Если КешТаблиц.Получить(ИмяТаблицы) = Неопределено Тогда + Таблица = Новый ТаблицаЗначений(); - Таблица.Колонки.Добавить("_Идентификатор"); - Таблица.Колонки.Добавить("_Сущность"); + Таблица.Колонки.Добавить("_Идентификатор"); + Таблица.Колонки.Добавить("_Сущность"); - Таблица.Индексы.Добавить("_Идентификатор"); - - КешТаблиц.Вставить(ИмяТаблицы, Таблица); + Таблица.Индексы.Добавить("_Идентификатор"); + + КешТаблиц.Вставить(ИмяТаблицы, Таблица); + КонецЕсли; КонецПроцедуры diff --git "a/tests/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200InMemory.os" "b/tests/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200InMemory.os" index ed8439e..28e872f 100644 --- "a/tests/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200InMemory.os" +++ "b/tests/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200InMemory.os" @@ -5,6 +5,7 @@ Перем СтрокаСоединения; Процедура ПередЗапускомТеста() Экспорт + ХранилищеВПамяти.Очистить(); ПодключитьСценарий(ОбъединитьПути(ТекущийКаталог(), "tests", "fixtures", "СущностьСоВсемиТипамиКолонок.os"), "СущностьСоВсемиТипамиКолонок"); ПодключитьСценарий(ОбъединитьПути(ТекущийКаталог(), "tests", "fixtures", "АвтоинкрементныйКлючБезКолонок.os"), "АвтоинкрементныйКлючБезКолонок"); From 727e79d3695408b61ed215521667227d5e68e59b Mon Sep 17 00:00:00 2001 From: Nikita Ivanchenko Date: Tue, 19 Mar 2024 12:06:48 +0300 Subject: [PATCH 16/19] =?UTF-8?q?=D0=B4=D0=BE=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 54db276..3f2dd67 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,7 @@ * КоннекторSQLite * КоннекторPostgreSQL * КоннекторJSON + * КоннекторJSON * Версионирование и обратная совместимость @@ -522,6 +523,16 @@ Все операциями по записи и удалению сущностей одного типа проводятся **синхронно**, блокируя файл таблицы целиком. Для контроля над синхронным доступом используется библиотека [semaphore](https://github.com/nixel2007/semaphore). + + +### КоннекторInMemory + +В состав библиотеки входит референсная реализация интерфейса коннектора в виде упрощенного коннектора к виртуальной базе данных в памяти. База данных состоит из соответствия, где ключ - имя таблицы модели данных, значение таблицы. + +В качестве строки соединения произвольная строка, которая будет являться разделителем данных. + +Коннектор поддерживает все CRUD-операции над сущностями, простой и сложный поиск, но не поддерживает работу с транзакциями. При вызове операций по работе с транзакциями будут выданы исключения. + ## Версионирование и обратная совместимость From ed380ef7bbd46a623888d19f78406c9b00e9d654 Mon Sep 17 00:00:00 2001 From: Nikita Ivanchenko Date: Tue, 19 Mar 2024 12:18:23 +0300 Subject: [PATCH 17/19] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D0=BD=D0=B0=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\320\275\320\265\320\272\321\202\320\276\321\200InMemory.os" | 2 ++ 1 file changed, 2 insertions(+) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200InMemory.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200InMemory.os" index f6d0470..8c18847 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200InMemory.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200InMemory.os" @@ -1,3 +1,5 @@ +#Использовать "../internal" + // Для хранения статуса соединения Перем Открыт; Перем КешТаблиц; From 0bf2786e8c2632f566f220eb40cacf29759a6cd7 Mon Sep 17 00:00:00 2001 From: Nikita Ivanchenko Date: Tue, 19 Mar 2024 12:30:40 +0300 Subject: [PATCH 18/19] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BA=D0=BE=D0=BF=D0=B8=D0=BF=D0=B0=D1=81=D1=82?= =?UTF-8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3f2dd67..c2f7424 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ * КоннекторSQLite * КоннекторPostgreSQL * КоннекторJSON - * КоннекторJSON + * КоннекторInMemory * Версионирование и обратная совместимость From 5171503936615378813df94ec93db6c3302d335d Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 19 Mar 2024 19:08:29 +0100 Subject: [PATCH 19/19] Update packagedef --- packagedef | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packagedef b/packagedef index 493da64..88f41cc 100644 --- a/packagedef +++ b/packagedef @@ -4,7 +4,7 @@ // // BSLLS:CodeOutOfRegion-off Описание.Имя("entity") - .Версия("2.3.5.0") + .Версия("2.3.6.0") .Автор("Nikita Gryzlov") .АдресАвтора("nixel2007@gmail.com") .Описание("entity")