added GitHub Actions Linux, MSYS2 UCRT64, MSVC

- initial g++/clang build, ctest on MSYS2 UCRT64 on Windows Server 2022
 - initial cmake build/ctest on Ubuntu 20.40
 - initial cmake build/ctest on MSVC on Windows Server 2019

changed driver to QPSQL in tst_databasemanager

This avoids crash when QMYSQL driver's dll is unavailable.
QMYSQL driver is not shipped by default by Qt Windows MSVC installer.
This commit is contained in:
silverqx
2021-12-03 10:43:56 +01:00
parent a71ba16800
commit 09592a7732
14 changed files with 961 additions and 179 deletions

2
.gitattributes vendored
View File

@@ -5,3 +5,5 @@ core.eol=lf
*.ico binary
*.qm binary
*.icns binary
*.dll binary
*.pdb binary

17
.github/resources/my.ini vendored Normal file
View File

@@ -0,0 +1,17 @@
[mysqld]
# The default authentication plugin to be used when connecting to the server
default_authentication_plugin=mysql_native_password
# General logging
log-output=FILE
general-log=0
general-log-file="merydeye-tinyorm-ga.log"
# Slow queries logging
slow-query-log=1
slow-query-log-file="merydeye-tinyorm-ga-slow.log"
long-query-time=10
# Error Logging
log-error="merydeye-tinyorm-ga.err"

14
.github/resources/qt5env.sh vendored Normal file
View File

@@ -0,0 +1,14 @@
#!/bin/bash
QT_BASE_DIR=/opt/qt515
export QTDIR=$QT_BASE_DIR
export PATH=$QT_BASE_DIR/bin${PATH:+:}$PATH
if [[ $(uname -m) == "x86_64" ]]; then
export LD_LIBRARY_PATH=$QT_BASE_DIR/lib/x86_64-linux-gnu:$QT_BASE_DIR/lib${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH
else
export LD_LIBRARY_PATH=$QT_BASE_DIR/lib/i386-linux-gnu:$QT_BASE_DIR/lib${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH
fi
export PKG_CONFIG_PATH=$QT_BASE_DIR/lib/pkgconfig${PKG_CONFIG_PATH:+:}$PKG_CONFIG_PATH

View File

@@ -0,0 +1,6 @@
set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE dynamic)
set(VCPKG_CMAKE_SYSTEM_NAME Linux)

213
.github/workflows/linux.yml vendored Normal file
View File

@@ -0,0 +1,213 @@
name: Linux
on:
pull_request:
push:
branches:
- main
- gh-actions
jobs:
build:
name: cmake build / ctest
runs-on: ubuntu-20.04
strategy:
matrix:
compiler:
- key: clang13
apt: [ clang-13, lld, g++-11 ]
command: clang++-13
- key: gcc11
apt: [ g++-11 ]
command: g++-11
steps:
- uses: actions/checkout@v2
- name: PostgreSQL start service
run: |
sudo systemctl start postgresql.service
- name: PostgreSQL check service status
run: |
sudo systemctl status postgresql.service
pg_isready
- name: PostgreSQL create TinyORM user
run: >-
sudo -u postgres
psql --command="CREATE USER $DB_PGSQL_USERNAME PASSWORD '$DB_PGSQL_PASSWORD'"
env:
DB_PGSQL_PASSWORD: ${{ secrets.DB_PGSQL_PASSWORD }}
DB_PGSQL_USERNAME: ${{ secrets.DB_PGSQL_USERNAME }}
- name: PostgreSQL create TinyORM database
run: |
sudo -u postgres createdb --owner=$DB_PGSQL_USERNAME $DB_PGSQL_DATABASE
env:
DB_PGSQL_DATABASE: ${{ secrets.DB_PGSQL_DATABASE }}
DB_PGSQL_USERNAME: ${{ secrets.DB_PGSQL_USERNAME }}
- name: MySQL start service
run: |
sudo systemctl start mysql.service
- name: MySQL change TinyORM password
run: >-
mysql --host=$DB_MYSQL_HOST --user=$DB_MYSQL_USERNAME --password=$DB_MYSQL_PASSWORD_DEFAULT
--execute="ALTER USER '$DB_MYSQL_USERNAME'@'$DB_MYSQL_HOST'
IDENTIFIED BY '$DB_MYSQL_PASSWORD';"
env:
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST }}
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_PASSWORD_DEFAULT: ${{ secrets.DB_MYSQL_PASSWORD_DEFAULT }}
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
- name: MySQL check service status
run: >-
sudo systemctl status mysql.service
mysqladmin --bind-address=$DB_MYSQL_HOST --user=$DB_MYSQL_USERNAME
--password=$DB_MYSQL_PASSWORD ping
env:
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST }}
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
- name: MySQL create TinyORM database
run: >-
echo "
create database if not exists $DB_MYSQL_DATABASE
default character set utf8mb4
default collate utf8mb4_0900_ai_ci;" |
mysql --host=$DB_MYSQL_HOST --user=$DB_MYSQL_USERNAME --password=$DB_MYSQL_PASSWORD
env:
DB_MYSQL_DATABASE: ${{ secrets.DB_MYSQL_DATABASE }}
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST }}
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
- name: SQLite create TinyORM database
run: |
touch "$DB_SQLITE_DATABASE"
env:
DB_SQLITE_DATABASE: ${{ runner.temp }}/${{ secrets.DB_SQLITE_DATABASE }}
- name: PHP disable Xdebug
run: |
sudo phpdismod -s cli xdebug
- name: testdata composer install (illuminate/database)
uses: "ramsey/composer-install@v1"
with:
composer-options: >-
--working-dir=${{ github.workspace }}/tests/testdata
--prefer-dist --optimize-autoloader
- name: Create and Seed tables (MySQL, PostgreSQL, SQLite)
working-directory: tests/testdata
run: |
php ./create_and_seed_database.php
env:
DB_MYSQL_CHARSET: utf8mb4
DB_MYSQL_COLLATION: utf8mb4_0900_ai_ci
DB_MYSQL_DATABASE: ${{ secrets.DB_MYSQL_DATABASE }}
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST }}
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
DB_PGSQL_CHARSET: utf8
DB_PGSQL_DATABASE: ${{ secrets.DB_PGSQL_DATABASE }}
DB_PGSQL_HOST: ${{ secrets.DB_PGSQL_HOST }}
DB_PGSQL_PASSWORD: ${{ secrets.DB_PGSQL_PASSWORD }}
DB_PGSQL_USERNAME: ${{ secrets.DB_PGSQL_USERNAME }}
DB_SQLITE_DATABASE: ${{ runner.temp }}/${{ secrets.DB_SQLITE_DATABASE }}
- name: add-apt-repository gcc 11 and Qt 5.15.2
run: |
sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
sudo add-apt-repository -y ppa:beineri/opt-qt-5.15.2-focal
- name: add-apt-repository Clang 13
if: ${{ matrix.compiler.key == 'clang13' }}
run: |
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo add-apt-repository -y "deb http://apt.llvm.org/focal/ llvm-toolchain-focal-13 main"
- name: apt update
run: |
sudo apt update
- name: apt install ${{ join(matrix.compiler.apt, ', ') }}, Qt 5.15.2 base, and ccache
run: |
sudo apt install -y ${{ join(matrix.compiler.apt, ' ') }} qt515base ccache
- name: ninja install latest version
uses: seanmiddleditch/gha-setup-ninja@master
with:
destination: ${{ runner.workspace }}/../ninja-build
- name: TinyORM create build folder (${{ matrix.compiler.key }}-cmake-debug)
run: |
mkdir -p ../TinyORM-builds-cmake/build-${{ matrix.compiler.key }}-cmake-debug
- name: ccache setup 🕺
uses: Chocobo1/setup-ccache-action@v1
with:
install_ccache: false
update_packager_index: false
ccache_options: |
compression = false
max_size = 3G
# Doesn't work in the manifest mode, I'm using header library only (range-v3) so does not matter
# for now, I leave it here anyway.
- name: vcpkg set default triplet to x64-linux-dynamic
run: |
echo 'VCPKG_OVERLAY_TRIPLETS=${{ github.workspace }}/.github/resources/vcpkg-custom-triplets' \
>> $GITHUB_ENV
echo 'VCPKG_DEFAULT_TRIPLET=x64-linux-dynamic' >> $GITHUB_ENV
- name: TinyORM cmake configure (${{ matrix.compiler.key }}-cmake-debug)
run: >-
source .github/resources/qt5env.sh
cmake
-S .
-B ../TinyORM-builds-cmake/build-${{ matrix.compiler.key }}-cmake-debug
-G Ninja
-D CMAKE_CXX_COMPILER:FILEPATH="${{ env.ccache_symlinks_path }}/${{ matrix.compiler.command }}"
-D CMAKE_TOOLCHAIN_FILE:FILEPATH="$VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake"
-D CMAKE_DISABLE_PRECOMPILE_HEADERS:BOOL=ON
-D CMAKE_BUILD_TYPE:BOOL=Debug
-D VERBOSE_CONFIGURE:BOOL=ON
-D MATCH_EQUAL_EXPORTED_BUILDTREE:BOOL=OFF
-D MYSQL_PING:BOOL=ON
-D BUILD_TESTS:BOOL=ON
- name: TinyORM cmake build ✨ (${{ matrix.compiler.key }}-cmake-debug)
run: >-
source .github/resources/qt5env.sh
cmake --build ../TinyORM-builds-cmake/build-${{ matrix.compiler.key }}-cmake-debug
--target all --parallel 2
- name: TinyORM execute ctest 🔥
working-directory: ../TinyORM-builds-cmake/build-${{ matrix.compiler.key }}-cmake-debug
run: ctest
env:
DB_MYSQL_CHARSET: utf8mb4
DB_MYSQL_COLLATION: utf8mb4_0900_ai_ci
DB_MYSQL_DATABASE: ${{ secrets.DB_MYSQL_DATABASE }}
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST }}
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
DB_PGSQL_CHARSET: utf8
DB_PGSQL_DATABASE: ${{ secrets.DB_PGSQL_DATABASE }}
DB_PGSQL_HOST: ${{ secrets.DB_PGSQL_HOST }}
DB_PGSQL_PASSWORD: ${{ secrets.DB_PGSQL_PASSWORD }}
DB_PGSQL_USERNAME: ${{ secrets.DB_PGSQL_USERNAME }}
DB_SQLITE_DATABASE: ${{ runner.temp }}/${{ secrets.DB_SQLITE_DATABASE }}

221
.github/workflows/mingw.yml vendored Normal file
View File

@@ -0,0 +1,221 @@
name: MSYS2 UCRT64
on:
pull_request:
push:
branches:
- main
- gh-actions
jobs:
build:
name: cmake build / ctest
runs-on: windows-2022
strategy:
matrix:
compiler:
- key: clang
pacboy: [ 'clang:u', 'gcc:u' ]
command: clang++.exe
- key: gcc
pacboy: [ 'gcc:u' ]
command: g++.exe
steps:
- uses: actions/checkout@v2
- name: PostgreSQL start service
run: |
Set-Service -Name postgresql-x64-14 -StartupType Manual
Start-Service postgresql-x64-14
- name: PostgreSQL add on the $env:Path
run: |
Write-Output "$env:PGBIN" | Out-File -FilePath $env:GITHUB_PATH -Append
- name: PostgreSQL check service status
run: |
$pgsqlService = Get-Service postgresql-x64-14
Write-Output $pgsqlService
$pgsqlService.status.ToString() -ceq "Running" `
-or $(throw 'postgresql-x64-14 service is not running') > $null
pg_isready.exe
- name: PostgreSQL create TinyORM user
run: >-
psql.exe
--command="CREATE USER ${env:DB_PGSQL_USERNAME} PASSWORD '${env:DB_PGSQL_PASSWORD}'"
env:
DB_PGSQL_PASSWORD: ${{ secrets.DB_PGSQL_PASSWORD }}
DB_PGSQL_USERNAME: ${{ secrets.DB_PGSQL_USERNAME }}
- name: PostgreSQL create TinyORM database
run: |
createdb.exe --owner=$env:DB_PGSQL_USERNAME $env:DB_PGSQL_DATABASE
env:
DB_PGSQL_DATABASE: ${{ secrets.DB_PGSQL_DATABASE }}
DB_PGSQL_USERNAME: ${{ secrets.DB_PGSQL_USERNAME }}
- name: MySQL create data folder
run: |
New-Item -Type Directory '${{ runner.workspace }}/../mysql/data'
- name: MySQL initialize server and install/start service
run: |
Copy-Item .github/resources/my.ini C:/mysql
mysqld.exe --initialize-insecure --console --datadir='${{ runner.workspace }}/../mysql/data'
mysqld.exe --install MySQL --datadir='${{ runner.workspace }}/../mysql/data'
Start-Service MySQL
- name: MySQL change TinyORM password
run: >-
mysql.exe --host=$env:DB_MYSQL_HOST --user=$env:DB_MYSQL_USERNAME --skip-password
--execute="ALTER USER '${env:DB_MYSQL_USERNAME}'@'${env:DB_MYSQL_HOST}'
IDENTIFIED BY '${env:DB_MYSQL_PASSWORD}';"
env:
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST }}
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
- name: MySQL check service status
run: |
$mysqlService = Get-Service MySQL
Write-Output $mysqlService
$mysqlService.status.ToString() -ceq "Running" `
-or $(throw 'MySQL service is not running') > $null
mysqladmin.exe --bind-address=$env:DB_MYSQL_HOST --user=$env:DB_MYSQL_USERNAME `
--password=$env:DB_MYSQL_PASSWORD ping
env:
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST }}
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
- name: MySQL create TinyORM database
run: >-
echo "
create database if not exists $env:DB_MYSQL_DATABASE
default character set utf8mb4
default collate utf8mb4_0900_ai_ci;" |
mysql.exe --host=$env:DB_MYSQL_HOST --user=$env:DB_MYSQL_USERNAME
--password=$env:DB_MYSQL_PASSWORD
env:
DB_MYSQL_DATABASE: ${{ secrets.DB_MYSQL_DATABASE }}
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST }}
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
- name: SQLite create TinyORM database
run: |
touch "$env:DB_SQLITE_DATABASE"
env:
DB_SQLITE_DATABASE: ${{ runner.temp }}/${{ secrets.DB_SQLITE_DATABASE }}
- name: PHP enable PDO extensions (pdo_mysql, pdo_pgsql, pdo_sqlite)
run: |
Add-Content -Path "${env:PHPROOT}/php.ini" -Value `
"[PHP]
extension=pdo_mysql
extension=pdo_pgsql
extension=pdo_sqlite
"
- name: testdata composer install (illuminate/database)
uses: "ramsey/composer-install@v1"
with:
composer-options: >-
--working-dir=${{ github.workspace }}/tests/testdata
--prefer-dist --optimize-autoloader
- name: Create and Seed tables (MySQL, PostgreSQL, SQLite)
working-directory: tests/testdata
run: |
php.exe ./create_and_seed_database.php
env:
DB_MYSQL_CHARSET: utf8mb4
DB_MYSQL_COLLATION: utf8mb4_0900_ai_ci
DB_MYSQL_DATABASE: ${{ secrets.DB_MYSQL_DATABASE }}
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST }}
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
DB_PGSQL_CHARSET: utf8
DB_PGSQL_DATABASE: ${{ secrets.DB_PGSQL_DATABASE }}
DB_PGSQL_HOST: ${{ secrets.DB_PGSQL_HOST }}
DB_PGSQL_PASSWORD: ${{ secrets.DB_PGSQL_PASSWORD }}
DB_PGSQL_USERNAME: ${{ secrets.DB_PGSQL_USERNAME }}
DB_SQLITE_DATABASE: ${{ runner.temp }}/${{ secrets.DB_SQLITE_DATABASE }}
- name: TinyORM create build folder (${{ matrix.compiler.key }}-cmake-debug)
run: |
mkdir -p ../TinyORM-builds-cmake/build-${{ matrix.compiler.key }}-cmake-debug
- name: |
MSYS2 UCRT64 setup (${{ join(matrix.compiler.pacboy, ', ') }}, lld:u, qt5-base:u, ccache:u)
uses: msys2/setup-msys2@v2
with:
msystem: ucrt64
path-type: minimal
update: true
install: |
git
pacboy: >-
${{ join(matrix.compiler.pacboy, ' ') }} lld:u
cmake:u ninja:u ccache:u
qt5-base:u
libmariadbclient:u postgresql:u
- name: ccache setup 🕺
uses: Chocobo1/setup-ccache-action@v1
with:
windows_compile_environment: msys2
prepend_symlinks_to_path: false
install_ccache: false
update_packager_index: false
ccache_options: |
compression = false
max_size = 3G
- name: TinyORM cmake configure (${{ matrix.compiler.key }}-cmake-debug)
shell: msys2 {0}
run: >-
cmake
-S .
-B ../TinyORM-builds-cmake/build-${{ matrix.compiler.key }}-cmake-debug
-G Ninja
-D CMAKE_CXX_COMPILER_LAUNCHER=ccache.exe
-D CMAKE_CXX_COMPILER:FILEPATH=/ucrt64/bin/${{ matrix.compiler.command }}
-D CMAKE_TOOLCHAIN_FILE:FILEPATH="$VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake"
-D CMAKE_DISABLE_PRECOMPILE_HEADERS:BOOL=ON
-D CMAKE_BUILD_TYPE:BOOL=Debug
-D VERBOSE_CONFIGURE:BOOL=ON
-D CMAKE_VERBOSE_MAKEFILE:BOOL=OFF
-D MATCH_EQUAL_EXPORTED_BUILDTREE:BOOL=OFF
-D MYSQL_PING:BOOL=ON
-D BUILD_TESTS:BOOL=ON
- name: TinyORM cmake build ✨ (${{ matrix.compiler.key }}-cmake-debug)
shell: msys2 {0}
run: >-
cmake --build ../TinyORM-builds-cmake/build-${{ matrix.compiler.key }}-cmake-debug
--target all --parallel ${{ matrix.compiler.key == 'gcc' && 1 || 2 }}
- name: TinyORM execute ctest 🔥
shell: msys2 {0}
working-directory: ../TinyORM-builds-cmake/build-${{ matrix.compiler.key }}-cmake-debug
run: ctest
env:
DB_MYSQL_CHARSET: utf8mb4
DB_MYSQL_COLLATION: utf8mb4_0900_ai_ci
DB_MYSQL_DATABASE: ${{ secrets.DB_MYSQL_DATABASE }}
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST }}
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
DB_PGSQL_CHARSET: utf8
DB_PGSQL_DATABASE: ${{ secrets.DB_PGSQL_DATABASE }}
DB_PGSQL_HOST: ${{ secrets.DB_PGSQL_HOST }}
DB_PGSQL_PASSWORD: ${{ secrets.DB_PGSQL_PASSWORD }}
DB_PGSQL_USERNAME: ${{ secrets.DB_PGSQL_USERNAME }}
DB_SQLITE_DATABASE: ${{ runner.temp }}/${{ secrets.DB_SQLITE_DATABASE }}

215
.github/workflows/msvc.yml vendored Normal file
View File

@@ -0,0 +1,215 @@
name: MSVC
on:
pull_request:
push:
branches:
- main
- gh-actions
jobs:
build:
name: cmake build / ctest
runs-on: windows-2019
steps:
- uses: actions/checkout@v2
- name: PostgreSQL start service
run: |
Set-Service -Name postgresql-x64-14 -StartupType Manual
Start-Service postgresql-x64-14
- name: PostgreSQL add on the $env:Path
run: |
Write-Output "$env:PGBIN" | Out-File -FilePath $env:GITHUB_PATH -Append
- name: PostgreSQL check service status
run: |
$pgsqlService = Get-Service postgresql-x64-14
Write-Output $pgsqlService
$pgsqlService.status.ToString() -ceq "Running" `
-or $(throw 'postgresql-x64-14 service is not running') > $null
pg_isready.exe
- name: PostgreSQL create TinyORM user
run: >-
psql.exe
--command="CREATE USER ${env:DB_PGSQL_USERNAME} PASSWORD '${env:DB_PGSQL_PASSWORD}'"
env:
DB_PGSQL_PASSWORD: ${{ secrets.DB_PGSQL_PASSWORD }}
DB_PGSQL_USERNAME: ${{ secrets.DB_PGSQL_USERNAME }}
- name: PostgreSQL create TinyORM database
run: |
createdb.exe --owner=$env:DB_PGSQL_USERNAME $env:DB_PGSQL_DATABASE
env:
DB_PGSQL_DATABASE: ${{ secrets.DB_PGSQL_DATABASE }}
DB_PGSQL_USERNAME: ${{ secrets.DB_PGSQL_USERNAME }}
- name: Remove C:\mysql\bin from $env:Path
run: |
Rename-Item -Path C:\mysql -NewName C:\mysql.bak
- name: choco install mysql (MySQL 8)
run: >-
choco install mysql -y --no-progress
--params "/port:3306 /serviceName:MySQL
/dataLocation:'$(Resolve-Path ${{ runner.workspace }}/../)'"
Write-Output 'C:\tools\mysql\current\lib;C:\tools\mysql\current\bin' |
Out-File -FilePath $env:GITHUB_PATH -Append
- name: MySQL change TinyORM password
run: >-
mysql.exe --host=$env:DB_MYSQL_HOST --user=$env:DB_MYSQL_USERNAME --skip-password
--execute="ALTER USER '${env:DB_MYSQL_USERNAME}'@'${env:DB_MYSQL_HOST}'
IDENTIFIED BY '${env:DB_MYSQL_PASSWORD}';"
env:
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST }}
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
- name: MySQL check service status
run: |
$mysqlService = Get-Service MySQL
Write-Output $mysqlService
$mysqlService.status.ToString() -ceq "Running" `
-or $(throw 'MySQL service is not running') > $null
mysqladmin.exe --bind-address=$env:DB_MYSQL_HOST --user=$env:DB_MYSQL_USERNAME `
--password=$env:DB_MYSQL_PASSWORD ping
env:
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST }}
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
- name: MySQL create TinyORM database
run: >-
echo "
create database if not exists $env:DB_MYSQL_DATABASE
default character set utf8mb4
default collate utf8mb4_0900_ai_ci;" |
mysql.exe --host=$env:DB_MYSQL_HOST --user=$env:DB_MYSQL_USERNAME
--password=$env:DB_MYSQL_PASSWORD
env:
DB_MYSQL_DATABASE: ${{ secrets.DB_MYSQL_DATABASE }}
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST }}
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
- name: SQLite create TinyORM database
run: |
touch "$env:DB_SQLITE_DATABASE"
env:
DB_SQLITE_DATABASE: ${{ runner.temp }}/${{ secrets.DB_SQLITE_DATABASE }}
- name: PHP enable PDO extensions (pdo_mysql, pdo_pgsql, pdo_sqlite)
run: |
Add-Content -Path "${env:PHPROOT}/php.ini" -Value `
"[PHP]
extension=pdo_mysql
extension=pdo_pgsql
extension=pdo_sqlite
"
- name: testdata composer install (illuminate/database)
uses: "ramsey/composer-install@v1"
with:
composer-options: >-
--working-dir=${{ github.workspace }}/tests/testdata
--prefer-dist --optimize-autoloader
- name: Create and Seed tables (MySQL, PostgreSQL, SQLite)
working-directory: tests/testdata
run: |
php.exe ./create_and_seed_database.php
env:
DB_MYSQL_CHARSET: utf8mb4
DB_MYSQL_COLLATION: utf8mb4_0900_ai_ci
DB_MYSQL_DATABASE: ${{ secrets.DB_MYSQL_DATABASE }}
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST }}
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
DB_PGSQL_CHARSET: utf8
DB_PGSQL_DATABASE: ${{ secrets.DB_PGSQL_DATABASE }}
DB_PGSQL_HOST: ${{ secrets.DB_PGSQL_HOST }}
DB_PGSQL_PASSWORD: ${{ secrets.DB_PGSQL_PASSWORD }}
DB_PGSQL_USERNAME: ${{ secrets.DB_PGSQL_USERNAME }}
DB_SQLITE_DATABASE: ${{ runner.temp }}/${{ secrets.DB_SQLITE_DATABASE }}
- name: TinyORM create build folder (msvc-cmake-debug)
run: |
mkdir -p ../TinyORM-builds-cmake/build-msvc-cmake-debug
- name: Qt 5.15.2 install base components
uses: jurplel/install-qt-action@v2
with:
version: 5.15.2
arch: win64_msvc2019_64
setup-python: false
extra: --external 7z.exe
dir: '${{ runner.workspace }}/../'
- name: QMYSQL install driver dlls (Qt 5.15.2)
working-directory: ${{ runner.temp }}
run: >-
$response = Invoke-WebRequest -Uri $env:DOWNLOAD_QMYSQL_DLLS
$filename = [System.Net.Mime.ContentDisposition]::new(
$response.Headers['Content-Disposition']).FileName
$filepath = Join-Path -Path $(Resolve-Path -Path .) -ChildPath $filename
$response | Select-Object -ExpandProperty Content |
Set-Content -Path $filepath -AsByteStream
7z.exe x -o"${env:QT_PLUGIN_PATH}/sqldrivers" $filepath
env:
DOWNLOAD_QMYSQL_DLLS: ${{ secrets.DOWNLOAD_QMYSQL_DLLS }}
- name: vcpkg set default triplet to x64-windows
run: >-
Write-Output 'VCPKG_DEFAULT_TRIPLET=x64-windows' |
Out-File -FilePath $env:GITHUB_ENV -Append
- name: Visual Studio 2019 pwsh shell setup
uses: egor-tensin/vs-shell@v2
with:
arch: x64
- name: TinyORM cmake configure (msvc-cmake-debug)
run: >-
cmake
-S .
-B ../TinyORM-builds-cmake/build-msvc-cmake-debug
-G Ninja
-D CMAKE_TOOLCHAIN_FILE:FILEPATH="${env:VCPKG_INSTALLATION_ROOT}/scripts/buildsystems/vcpkg.cmake"
-D CMAKE_BUILD_TYPE:BOOL=Debug
-D VERBOSE_CONFIGURE:BOOL=ON
-D CMAKE_VERBOSE_MAKEFILE:BOOL=OFF
-D MATCH_EQUAL_EXPORTED_BUILDTREE:BOOL=OFF
-D MYSQL_PING:BOOL=ON
-D BUILD_TESTS:BOOL=ON
- name: TinyORM cmake build ✨ (msvc-cmake-debug)
run: >-
cmake --build ../TinyORM-builds-cmake/build-msvc-cmake-debug --target all --parallel 2
- name: TinyORM execute ctest 🔥
working-directory: ../TinyORM-builds-cmake/build-msvc-cmake-debug
run: ctest
env:
DB_MYSQL_CHARSET: utf8mb4
DB_MYSQL_COLLATION: utf8mb4_0900_ai_ci
DB_MYSQL_DATABASE: ${{ secrets.DB_MYSQL_DATABASE }}
DB_MYSQL_HOST: ${{ secrets.DB_MYSQL_HOST }}
DB_MYSQL_PASSWORD: ${{ secrets.DB_MYSQL_PASSWORD }}
DB_MYSQL_USERNAME: ${{ secrets.DB_MYSQL_USERNAME }}
DB_PGSQL_CHARSET: utf8
DB_PGSQL_DATABASE: ${{ secrets.DB_PGSQL_DATABASE }}
DB_PGSQL_HOST: ${{ secrets.DB_PGSQL_HOST }}
DB_PGSQL_PASSWORD: ${{ secrets.DB_PGSQL_PASSWORD }}
DB_PGSQL_USERNAME: ${{ secrets.DB_PGSQL_USERNAME }}
DB_SQLITE_DATABASE: ${{ runner.temp }}/${{ secrets.DB_SQLITE_DATABASE }}

View File

@@ -77,6 +77,7 @@ Features related/to implement:
- dilemma primarykey : different types for primary keys
- expression : DB::raw() support in the query builder
- events : event system
- ga : github actions
- guarded : related to the mass assignable feature
- json columns : JSON support
- logging : logging related

View File

@@ -145,6 +145,11 @@ ${TINY_UNPARSED_ARGUMENTS}")
endif()
endif()
# Use faster lld linker on Clang
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
target_link_options(${target} INTERFACE -fuse-ld=lld)
endif()
# Use 64-bit off_t on 32-bit Linux, ensure 64bit offsets are used for filesystem
# accesses for 32bit compilation
if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SIZEOF_VOID_P EQUAL 4)

View File

@@ -121,6 +121,8 @@ namespace Relations
// CUR divide Query Builder and TinyOrm to own packages? think about it 🤔 silverqx
// BUG clang on mingw inline static initialization with another static in the same class defined line before, all other compilers (on linux too) works silverqx
// CUR unify default/non-default ctors comment silverqx
// CUR discard common settings in tests/conf.pri, then qmake project will compile only if /conf.pri will be set, less manual configurations for users is still better silverqx
// CUR cmake when MYSQL_PING is on and QMYSQL driver is not build ctest fails, fail configure? I don't knwo how I will solve this for now, also fix qmake silverqx
/*! Base model class. */
template<typename Derived, AllRelationsConcept ...AllRelations>
class Model :

View File

@@ -7,18 +7,19 @@
#include "databases.hpp"
using Orm::Constants::charset_;
using Orm::Constants::collation_;
using Orm::Constants::database_;
using Orm::Constants::driver_;
using Orm::Constants::H127001;
using Orm::Constants::host_;
using Orm::Constants::P3306;
using Orm::Constants::P5432;
using Orm::Constants::password_;
using Orm::Constants::port_;
using Orm::Constants::QMYSQL;
using Orm::Constants::ROOT;
using Orm::Constants::PUBLIC;
using Orm::Constants::QPSQL;
using Orm::Constants::schema_;
using Orm::Constants::username_;
using Orm::Constants::UTF8MB4;
using Orm::Constants::UTF8;
using Orm::DatabaseManager;
using Orm::Support::DatabaseConfiguration;
@@ -47,32 +48,32 @@ void tst_DatabaseManager::removeConnection_Connected() const
{
// Skip autotest if all env. variables are empty
const std::vector<const char *> envVariables {
"DB_MYSQL_HOST", "DB_MYSQL_PORT", "DB_MYSQL_DATABASE", "DB_MYSQL_USERNAME",
"DB_MYSQL_PASSWORD", "DB_MYSQL_CHARSET", "DB_MYSQL_COLLATION"
"DB_PGSQL_HOST", "DB_PGSQL_PORT", "DB_PGSQL_DATABASE", "DB_PGSQL_SCHEMA",
"DB_PGSQL_USERNAME", "DB_PGSQL_PASSWORD", "DB_PGSQL_CHARSET"
};
if (TestUtils::Databases::allEnvVariablesEmpty(envVariables))
QSKIP("Autotest skipped because DB_MYSQL_* environment variables for MySQL "
QSKIP("Autotest skipped because DB_PGSQL_* environment variables for PostgreSQL "
"connection were not defined.", );
const auto connectionName =
QStringLiteral(
"tinyorm_mysql_tests-tst_DatabaseMannager-removeConnection_Connected");
const auto databaseName = qEnvironmentVariable("DB_MYSQL_DATABASE", "");
const auto driverName = QMYSQL;
"tinyorm_pgsql_tests-tst_DatabaseMannager-removeConnection_Connected");
const auto databaseName = qEnvironmentVariable("DB_PGSQL_DATABASE", "");
const auto driverName = QPSQL;
// Create database connection
m_dm->addConnections({
{connectionName, {
{driver_, driverName},
{host_, qEnvironmentVariable("DB_MYSQL_HOST", H127001)},
{port_, qEnvironmentVariable("DB_MYSQL_PORT", P3306)},
{database_, databaseName},
{username_, qEnvironmentVariable("DB_MYSQL_USERNAME", ROOT)},
{password_, qEnvironmentVariable("DB_MYSQL_PASSWORD", "")},
{charset_, qEnvironmentVariable("DB_MYSQL_CHARSET", UTF8MB4)},
{collation_, qEnvironmentVariable("DB_MYSQL_COLLATION",
QStringLiteral("utf8mb4_0900_ai_ci"))},
{driver_, driverName},
{host_, qEnvironmentVariable("DB_PGSQL_HOST", H127001)},
{port_, qEnvironmentVariable("DB_PGSQL_PORT", P5432)},
{database_, databaseName},
{schema_, qEnvironmentVariable("DB_PGSQL_SCHEMA", PUBLIC)},
{username_, qEnvironmentVariable("DB_PGSQL_USERNAME",
QStringLiteral("postgres"))},
{password_, qEnvironmentVariable("DB_PGSQL_PASSWORD", "")},
{charset_, qEnvironmentVariable("DB_PGSQL_CHARSET", UTF8)},
}},
// Don't setup any default connection
}, "");
@@ -103,10 +104,12 @@ void tst_DatabaseManager::removeConnection_Connected() const
void tst_DatabaseManager::removeConnection_NotConnected() const
{
const auto connectionName = QStringLiteral("dummy_connection");
const auto connectionName =
QStringLiteral(
"tinyorm_pgsql_tests-tst_DatabaseMannager-removeConnection_NotConnected");
m_dm->addConnection({
{driver_, QMYSQL},
{driver_, QPSQL},
{host_, "example.com"},
}, connectionName);

View File

@@ -4,12 +4,17 @@
"description": "Create and seed databases for TinyORM tests.",
"keywords": [
"database",
"seed"
"seed",
"tinyorm"
],
"license": "MIT",
"require": {
"php": "^8.0",
"ext-pdo": "*",
"ext-pdo": "^8.0",
"ext-pdo_mysql": "^8.0",
"ext-pdo_pgsql": "^8.0",
"ext-pdo_sqlite": "^8.0",
"illuminate/database": "^8.33"
}
}

381
tests/testdata/composer.lock generated vendored
View File

@@ -4,38 +4,34 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "3fabf98d43b049bc1f899f75f61d627b",
"content-hash": "15609a9e5af7cb440e86cea314fab3ba",
"packages": [
{
"name": "doctrine/inflector",
"version": "2.0.3",
"version": "2.0.4",
"source": {
"type": "git",
"url": "https://github.com/doctrine/inflector.git",
"reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210"
"reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/inflector/zipball/9cf661f4eb38f7c881cac67c75ea9b00bf97b210",
"reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210",
"url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89",
"reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^7.0",
"phpstan/phpstan": "^0.11",
"phpstan/phpstan-phpunit": "^0.11",
"phpstan/phpstan-strict-rules": "^0.11",
"phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
"doctrine/coding-standard": "^8.2",
"phpstan/phpstan": "^0.12",
"phpstan/phpstan-phpunit": "^0.12",
"phpstan/phpstan-strict-rules": "^0.12",
"phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
"vimeo/psalm": "^4.10"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Inflector\\": "lib/Doctrine/Inflector"
@@ -83,7 +79,7 @@
],
"support": {
"issues": "https://github.com/doctrine/inflector/issues",
"source": "https://github.com/doctrine/inflector/tree/2.0.x"
"source": "https://github.com/doctrine/inflector/tree/2.0.4"
},
"funding": [
{
@@ -99,20 +95,20 @@
"type": "tidelift"
}
],
"time": "2020-05-29T15:13:26+00:00"
"time": "2021-10-22T20:16:43+00:00"
},
{
"name": "illuminate/collections",
"version": "v8.33.0",
"version": "v8.73.2",
"source": {
"type": "git",
"url": "https://github.com/illuminate/collections.git",
"reference": "d7cc717a00064b40fa63a8ad522042005e1de1ed"
"reference": "bfb57bc1863689058706eb41287b7ad523d74403"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/illuminate/collections/zipball/d7cc717a00064b40fa63a8ad522042005e1de1ed",
"reference": "d7cc717a00064b40fa63a8ad522042005e1de1ed",
"url": "https://api.github.com/repos/illuminate/collections/zipball/bfb57bc1863689058706eb41287b7ad523d74403",
"reference": "bfb57bc1863689058706eb41287b7ad523d74403",
"shasum": ""
},
"require": {
@@ -153,20 +149,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2021-03-08T17:22:22+00:00"
"time": "2021-11-15T14:44:56+00:00"
},
{
"name": "illuminate/container",
"version": "v8.33.0",
"version": "v8.73.2",
"source": {
"type": "git",
"url": "https://github.com/illuminate/container.git",
"reference": "6d7b2a3a3d430c27b90b6b336520e00e5c0f8354"
"reference": "6ac391bb27391706c5f921b85060aa2c4ca03fae"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/illuminate/container/zipball/6d7b2a3a3d430c27b90b6b336520e00e5c0f8354",
"reference": "6d7b2a3a3d430c27b90b6b336520e00e5c0f8354",
"url": "https://api.github.com/repos/illuminate/container/zipball/6ac391bb27391706c5f921b85060aa2c4ca03fae",
"reference": "6ac391bb27391706c5f921b85060aa2c4ca03fae",
"shasum": ""
},
"require": {
@@ -204,20 +200,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2021-03-11T03:45:11+00:00"
"time": "2021-11-17T15:04:30+00:00"
},
{
"name": "illuminate/contracts",
"version": "v8.33.0",
"version": "v8.73.2",
"source": {
"type": "git",
"url": "https://github.com/illuminate/contracts.git",
"reference": "121cea1d8b8772bc7fee99c71ecf0f57c1d77b3b"
"reference": "b0886ec05a63b204634d64d0b39d5b78a7c06f81"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/illuminate/contracts/zipball/121cea1d8b8772bc7fee99c71ecf0f57c1d77b3b",
"reference": "121cea1d8b8772bc7fee99c71ecf0f57c1d77b3b",
"url": "https://api.github.com/repos/illuminate/contracts/zipball/b0886ec05a63b204634d64d0b39d5b78a7c06f81",
"reference": "b0886ec05a63b204634d64d0b39d5b78a7c06f81",
"shasum": ""
},
"require": {
@@ -252,20 +248,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2021-03-12T14:45:30+00:00"
"time": "2021-11-17T15:04:30+00:00"
},
{
"name": "illuminate/database",
"version": "v8.36.2",
"version": "v8.73.2",
"source": {
"type": "git",
"url": "https://github.com/illuminate/database.git",
"reference": "41d31456142be497c4e6abd40b674be0162934b1"
"reference": "f93e5370a3d321de697755f185395bdf75e0ccc4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/illuminate/database/zipball/41d31456142be497c4e6abd40b674be0162934b1",
"reference": "41d31456142be497c4e6abd40b674be0162934b1",
"url": "https://api.github.com/repos/illuminate/database/zipball/f93e5370a3d321de697755f185395bdf75e0ccc4",
"reference": "f93e5370a3d321de697755f185395bdf75e0ccc4",
"shasum": ""
},
"require": {
@@ -279,7 +275,7 @@
"symfony/console": "^5.1.4"
},
"suggest": {
"doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6|^3.0).",
"doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).",
"fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).",
"illuminate/console": "Required to use the database commands (^8.0).",
"illuminate/events": "Required to use the observers with Eloquent (^8.0).",
@@ -320,20 +316,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2021-04-06T19:21:01+00:00"
"time": "2021-11-23T14:10:34+00:00"
},
{
"name": "illuminate/macroable",
"version": "v8.33.0",
"version": "v8.73.2",
"source": {
"type": "git",
"url": "https://github.com/illuminate/macroable.git",
"reference": "300aa13c086f25116b5f3cde3ca54ff5c822fb05"
"reference": "aed81891a6e046fdee72edd497f822190f61c162"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/illuminate/macroable/zipball/300aa13c086f25116b5f3cde3ca54ff5c822fb05",
"reference": "300aa13c086f25116b5f3cde3ca54ff5c822fb05",
"url": "https://api.github.com/repos/illuminate/macroable/zipball/aed81891a6e046fdee72edd497f822190f61c162",
"reference": "aed81891a6e046fdee72edd497f822190f61c162",
"shasum": ""
},
"require": {
@@ -366,20 +362,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2020-10-27T15:20:30+00:00"
"time": "2021-11-16T13:57:03+00:00"
},
{
"name": "illuminate/support",
"version": "v8.33.0",
"version": "v8.73.2",
"source": {
"type": "git",
"url": "https://github.com/illuminate/support.git",
"reference": "520dcf5aa7631723fe6343afbeba777c102c98ae"
"reference": "ecb4d4fb01f9716b2decbb1bf584ea8164c3b222"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/illuminate/support/zipball/520dcf5aa7631723fe6343afbeba777c102c98ae",
"reference": "520dcf5aa7631723fe6343afbeba777c102c98ae",
"url": "https://api.github.com/repos/illuminate/support/zipball/ecb4d4fb01f9716b2decbb1bf584ea8164c3b222",
"reference": "ecb4d4fb01f9716b2decbb1bf584ea8164c3b222",
"shasum": ""
},
"require": {
@@ -389,7 +385,7 @@
"illuminate/collections": "^8.0",
"illuminate/contracts": "^8.0",
"illuminate/macroable": "^8.0",
"nesbot/carbon": "^2.31",
"nesbot/carbon": "^2.53.1",
"php": "^7.3|^8.0",
"voku/portable-ascii": "^1.4.8"
},
@@ -398,8 +394,8 @@
},
"suggest": {
"illuminate/filesystem": "Required to use the composer class (^8.0).",
"league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^1.3).",
"ramsey/uuid": "Required to use Str::uuid() (^4.0).",
"league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^1.3|^2.0.2).",
"ramsey/uuid": "Required to use Str::uuid() (^4.2.2).",
"symfony/process": "Required to use the composer class (^5.1.4).",
"symfony/var-dumper": "Required to use the dd function (^5.1.4).",
"vlucas/phpdotenv": "Required to use the Env class and env helper (^5.2)."
@@ -434,31 +430,33 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2021-03-15T13:43:13+00:00"
"time": "2021-11-23T14:10:18+00:00"
},
{
"name": "nesbot/carbon",
"version": "2.46.0",
"version": "2.54.0",
"source": {
"type": "git",
"url": "https://github.com/briannesbitt/Carbon.git",
"reference": "2fd2c4a77d58a4e95234c8a61c5df1f157a91bf4"
"reference": "eed83939f1aed3eee517d03a33f5ec587ac529b5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/2fd2c4a77d58a4e95234c8a61c5df1f157a91bf4",
"reference": "2fd2c4a77d58a4e95234c8a61c5df1f157a91bf4",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/eed83939f1aed3eee517d03a33f5ec587ac529b5",
"reference": "eed83939f1aed3eee517d03a33f5ec587ac529b5",
"shasum": ""
},
"require": {
"ext-json": "*",
"php": "^7.1.8 || ^8.0",
"symfony/polyfill-mbstring": "^1.0",
"symfony/polyfill-php80": "^1.16",
"symfony/translation": "^3.4 || ^4.0 || ^5.0"
},
"require-dev": {
"doctrine/dbal": "^2.0 || ^3.0",
"doctrine/orm": "^2.7",
"friendsofphp/php-cs-fixer": "^2.14 || ^3.0",
"friendsofphp/php-cs-fixer": "^3.0",
"kylekatarnls/multi-tester": "^2.0",
"phpmd/phpmd": "^2.9",
"phpstan/extension-installer": "^1.0",
@@ -472,8 +470,8 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.x-dev",
"dev-3.x": "3.x-dev"
"dev-3.x": "3.x-dev",
"dev-master": "2.x-dev"
},
"laravel": {
"providers": [
@@ -499,15 +497,15 @@
{
"name": "Brian Nesbitt",
"email": "brian@nesbot.com",
"homepage": "http://nesbot.com"
"homepage": "https://markido.com"
},
{
"name": "kylekatarnls",
"homepage": "http://github.com/kylekatarnls"
"homepage": "https://github.com/kylekatarnls"
}
],
"description": "An API extension for DateTime that supports 281 different languages.",
"homepage": "http://carbon.nesbot.com",
"homepage": "https://carbon.nesbot.com",
"keywords": [
"date",
"datetime",
@@ -527,24 +525,24 @@
"type": "tidelift"
}
],
"time": "2021-02-24T17:30:44+00:00"
"time": "2021-11-01T21:22:20+00:00"
},
{
"name": "psr/container",
"version": "1.1.1",
"version": "1.1.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/container.git",
"reference": "8622567409010282b7aeebe4bb841fe98b58dcaf"
"reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf",
"reference": "8622567409010282b7aeebe4bb841fe98b58dcaf",
"url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea",
"reference": "513e0666f7216c7459170d56df27dfcefe1689ea",
"shasum": ""
},
"require": {
"php": ">=7.2.0"
"php": ">=7.4.0"
},
"type": "library",
"autoload": {
@@ -573,9 +571,9 @@
],
"support": {
"issues": "https://github.com/php-fig/container/issues",
"source": "https://github.com/php-fig/container/tree/1.1.1"
"source": "https://github.com/php-fig/container/tree/1.1.2"
},
"time": "2021-03-05T17:36:06+00:00"
"time": "2021-11-05T16:50:12+00:00"
},
{
"name": "psr/simple-cache",
@@ -630,23 +628,24 @@
},
{
"name": "symfony/console",
"version": "v5.2.5",
"version": "v5.3.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "938ebbadae1b0a9c9d1ec313f87f9708609f1b79"
"reference": "3e7ab8f5905058984899b05a4648096f558bfeba"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/938ebbadae1b0a9c9d1ec313f87f9708609f1b79",
"reference": "938ebbadae1b0a9c9d1ec313f87f9708609f1b79",
"url": "https://api.github.com/repos/symfony/console/zipball/3e7ab8f5905058984899b05a4648096f558bfeba",
"reference": "3e7ab8f5905058984899b05a4648096f558bfeba",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1",
"symfony/polyfill-mbstring": "~1.0",
"symfony/polyfill-php73": "^1.8",
"symfony/polyfill-php80": "^1.15",
"symfony/polyfill-php80": "^1.16",
"symfony/service-contracts": "^1.1|^2",
"symfony/string": "^5.1"
},
@@ -658,10 +657,10 @@
"symfony/process": "<4.4"
},
"provide": {
"psr/log-implementation": "1.0"
"psr/log-implementation": "1.0|2.0"
},
"require-dev": {
"psr/log": "~1.0",
"psr/log": "^1|^2",
"symfony/config": "^4.4|^5.0",
"symfony/dependency-injection": "^4.4|^5.0",
"symfony/event-dispatcher": "^4.4|^5.0",
@@ -707,7 +706,7 @@
"terminal"
],
"support": {
"source": "https://github.com/symfony/console/tree/v5.2.5"
"source": "https://github.com/symfony/console/tree/v5.3.11"
},
"funding": [
{
@@ -723,20 +722,87 @@
"type": "tidelift"
}
],
"time": "2021-03-06T13:42:15+00:00"
"time": "2021-11-21T19:41:05+00:00"
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.22.1",
"name": "symfony/deprecation-contracts",
"version": "v2.5.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "c6c942b1ac76c82448322025e084cadc56048b4e"
"url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e",
"reference": "c6c942b1ac76c82448322025e084cadc56048b4e",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8",
"reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "2.5-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
"files": [
"function.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2021-07-12T14:48:14+00:00"
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.23.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce",
"reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce",
"shasum": ""
},
"require": {
@@ -748,7 +814,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.22-dev"
"dev-main": "1.23-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -786,7 +852,7 @@
"portable"
],
"support": {
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1"
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0"
},
"funding": [
{
@@ -802,20 +868,20 @@
"type": "tidelift"
}
],
"time": "2021-01-07T16:49:33+00:00"
"time": "2021-02-19T12:13:01+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
"version": "v1.22.1",
"version": "v1.23.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
"reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170"
"reference": "16880ba9c5ebe3642d1995ab866db29270b36535"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5601e09b69f26c1828b13b6bb87cb07cddba3170",
"reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170",
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535",
"reference": "16880ba9c5ebe3642d1995ab866db29270b36535",
"shasum": ""
},
"require": {
@@ -827,7 +893,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.22-dev"
"dev-main": "1.23-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -867,7 +933,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.1"
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.1"
},
"funding": [
{
@@ -883,20 +949,20 @@
"type": "tidelift"
}
],
"time": "2021-01-22T09:19:47+00:00"
"time": "2021-05-27T12:26:48+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
"version": "v1.22.1",
"version": "v1.23.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
"reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248"
"reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248",
"reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8",
"reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8",
"shasum": ""
},
"require": {
@@ -908,7 +974,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.22-dev"
"dev-main": "1.23-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -951,7 +1017,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.1"
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0"
},
"funding": [
{
@@ -967,20 +1033,20 @@
"type": "tidelift"
}
],
"time": "2021-01-22T09:19:47+00:00"
"time": "2021-02-19T12:13:01+00:00"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.22.1",
"version": "v1.23.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "5232de97ee3b75b0360528dae24e73db49566ab1"
"reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1",
"reference": "5232de97ee3b75b0360528dae24e73db49566ab1",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6",
"reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6",
"shasum": ""
},
"require": {
@@ -992,7 +1058,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.22-dev"
"dev-main": "1.23-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -1031,7 +1097,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1"
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1"
},
"funding": [
{
@@ -1047,20 +1113,20 @@
"type": "tidelift"
}
],
"time": "2021-01-22T09:19:47+00:00"
"time": "2021-05-27T12:26:48+00:00"
},
{
"name": "symfony/polyfill-php73",
"version": "v1.22.1",
"version": "v1.23.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php73.git",
"reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2"
"reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2",
"reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2",
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010",
"reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010",
"shasum": ""
},
"require": {
@@ -1069,7 +1135,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.22-dev"
"dev-main": "1.23-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -1110,7 +1176,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php73/tree/v1.22.1"
"source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0"
},
"funding": [
{
@@ -1126,20 +1192,20 @@
"type": "tidelift"
}
],
"time": "2021-01-07T16:49:33+00:00"
"time": "2021-02-19T12:13:01+00:00"
},
{
"name": "symfony/polyfill-php80",
"version": "v1.22.1",
"version": "v1.23.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
"reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91"
"reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91",
"reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be",
"reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be",
"shasum": ""
},
"require": {
@@ -1148,7 +1214,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.22-dev"
"dev-main": "1.23-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -1193,7 +1259,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1"
"source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1"
},
"funding": [
{
@@ -1209,25 +1275,29 @@
"type": "tidelift"
}
],
"time": "2021-01-07T16:49:33+00:00"
"time": "2021-07-28T13:41:28+00:00"
},
{
"name": "symfony/service-contracts",
"version": "v2.2.0",
"version": "v2.5.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
"reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1"
"reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1",
"reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc",
"reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"psr/container": "^1.0"
"psr/container": "^1.1",
"symfony/deprecation-contracts": "^2.1"
},
"conflict": {
"ext-psr": "<1.1|>=2"
},
"suggest": {
"symfony/service-implementation": ""
@@ -1235,7 +1305,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.2-dev"
"dev-main": "2.5-dev"
},
"thanks": {
"name": "symfony/contracts",
@@ -1272,7 +1342,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/service-contracts/tree/master"
"source": "https://github.com/symfony/service-contracts/tree/v2.5.0"
},
"funding": [
{
@@ -1288,20 +1358,20 @@
"type": "tidelift"
}
],
"time": "2020-09-07T11:33:47+00:00"
"time": "2021-11-04T16:48:04+00:00"
},
{
"name": "symfony/string",
"version": "v5.2.4",
"version": "v5.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
"reference": "4e78d7d47061fa183639927ec40d607973699609"
"reference": "d70c35bb20bbca71fc4ab7921e3c6bda1a82a60c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/4e78d7d47061fa183639927ec40d607973699609",
"reference": "4e78d7d47061fa183639927ec40d607973699609",
"url": "https://api.github.com/repos/symfony/string/zipball/d70c35bb20bbca71fc4ab7921e3c6bda1a82a60c",
"reference": "d70c35bb20bbca71fc4ab7921e3c6bda1a82a60c",
"shasum": ""
},
"require": {
@@ -1355,7 +1425,7 @@
"utf8"
],
"support": {
"source": "https://github.com/symfony/string/tree/v5.2.4"
"source": "https://github.com/symfony/string/tree/v5.3.10"
},
"funding": [
{
@@ -1371,26 +1441,27 @@
"type": "tidelift"
}
],
"time": "2021-02-16T10:20:28+00:00"
"time": "2021-10-27T18:21:46+00:00"
},
{
"name": "symfony/translation",
"version": "v5.2.5",
"version": "v5.3.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
"reference": "0947ab1e3aabd22a6bef393874b2555d2bb976da"
"reference": "17a965c8f3b1b348cf15d903ac53942984561f8a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation/zipball/0947ab1e3aabd22a6bef393874b2555d2bb976da",
"reference": "0947ab1e3aabd22a6bef393874b2555d2bb976da",
"url": "https://api.github.com/repos/symfony/translation/zipball/17a965c8f3b1b348cf15d903ac53942984561f8a",
"reference": "17a965c8f3b1b348cf15d903ac53942984561f8a",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1",
"symfony/polyfill-mbstring": "~1.0",
"symfony/polyfill-php80": "^1.15",
"symfony/polyfill-php80": "^1.16",
"symfony/translation-contracts": "^2.3"
},
"conflict": {
@@ -1404,13 +1475,14 @@
"symfony/translation-implementation": "2.3"
},
"require-dev": {
"psr/log": "~1.0",
"psr/log": "^1|^2|^3",
"symfony/config": "^4.4|^5.0",
"symfony/console": "^4.4|^5.0",
"symfony/dependency-injection": "^5.0",
"symfony/finder": "^4.4|^5.0",
"symfony/http-kernel": "^5.0",
"symfony/intl": "^4.4|^5.0",
"symfony/polyfill-intl-icu": "^1.21",
"symfony/service-contracts": "^1.1.2|^2",
"symfony/yaml": "^4.4|^5.0"
},
@@ -1448,7 +1520,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/translation/tree/v5.2.5"
"source": "https://github.com/symfony/translation/tree/v5.3.11"
},
"funding": [
{
@@ -1464,20 +1536,20 @@
"type": "tidelift"
}
],
"time": "2021-03-06T07:59:01+00:00"
"time": "2021-11-04T16:37:19+00:00"
},
{
"name": "symfony/translation-contracts",
"version": "v2.3.0",
"version": "v2.5.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation-contracts.git",
"reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105"
"reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e2eaa60b558f26a4b0354e1bbb25636efaaad105",
"reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/d28150f0f44ce854e942b671fc2620a98aae1b1e",
"reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e",
"shasum": ""
},
"require": {
@@ -1489,7 +1561,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.3-dev"
"dev-main": "2.5-dev"
},
"thanks": {
"name": "symfony/contracts",
@@ -1526,7 +1598,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/translation-contracts/tree/v2.3.0"
"source": "https://github.com/symfony/translation-contracts/tree/v2.5.0"
},
"funding": [
{
@@ -1542,7 +1614,7 @@
"type": "tidelift"
}
],
"time": "2020-09-28T13:05:58+00:00"
"time": "2021-08-17T14:20:01+00:00"
},
{
"name": "voku/portable-ascii",
@@ -1627,8 +1699,11 @@
"prefer-lowest": false,
"platform": {
"php": "^8.0",
"ext-pdo": "*"
"ext-pdo": "^8.0",
"ext-pdo_mysql": "^8.0",
"ext-pdo_pgsql": "^8.0",
"ext-pdo_sqlite": "^8.0"
},
"platform-dev": [],
"plugin-api-version": "2.0.0"
"plugin-api-version": "2.1.0"
}

View File

@@ -5,6 +5,7 @@ require_once 'vendor/autoload.php';
use Illuminate\Database\Capsule\Manager as Capsule;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
/**
* Combine Insert statement values with columns.
@@ -93,8 +94,8 @@ function removeUnusedConfigs(array &$configs): void
case 'pgsql':
{
$envVariables = [
'DB_MYSQL_HOST', 'DB_MYSQL_PORT', 'DB_MYSQL_DATABASE', 'DB_PGSQL_SCHEMA',
'DB_MYSQL_USERNAME', 'DB_MYSQL_PASSWORD', 'DB_MYSQL_CHARSET'
'DB_PGSQL_HOST', 'DB_PGSQL_PORT', 'DB_PGSQL_DATABASE', 'DB_PGSQL_SCHEMA',
'DB_PGSQL_USERNAME', 'DB_PGSQL_PASSWORD', 'DB_PGSQL_CHARSET'
];
if (allEnvVariablesEmpty($envVariables))
@@ -489,3 +490,5 @@ removeUnusedConfigs($configs);
addConnections($capsule, $configs);
createAndSeedTables(array_keys($configs));
//var_dump(Capsule::connection('mysql')->table('torrents')->get()->toArray());