mirror of
https://github.com/strapi/strapi.git
synced 2025-12-26 14:44:31 +00:00
add mysql2 as a db client option
This commit is contained in:
parent
edc2bdcecd
commit
41c7792b54
13
.github/workflows/tests.yml
vendored
13
.github/workflows/tests.yml
vendored
@ -164,6 +164,7 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
node: [14, 16, 18]
|
||||
db_client: ['mysql', 'mysql2']
|
||||
services:
|
||||
mysql:
|
||||
image: bitnami/mysql:latest
|
||||
@ -193,15 +194,16 @@ jobs:
|
||||
- run: yarn install --frozen-lockfile
|
||||
- uses: ./.github/actions/run-api-tests
|
||||
with:
|
||||
dbOptions: '--dbclient=mysql --dbhost=localhost --dbport=3306 --dbname=strapi_test --dbusername=strapi --dbpassword=strapi'
|
||||
dbOptions: '--dbclient=${{ matrix.db_client }} --dbhost=localhost --dbport=3306 --dbname=strapi_test --dbusername=strapi --dbpassword=strapi'
|
||||
|
||||
api_ce_mysql_5:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [lint, unit_back, unit_front]
|
||||
name: '[CE] API Integration (mysql:5 , node: ${{ matrix.node }})'
|
||||
name: '[CE] API Integration (mysql:5, client:${{ matrix.db_client }} , node: ${{ matrix.node }})'
|
||||
strategy:
|
||||
matrix:
|
||||
node: [14, 16, 18]
|
||||
db_client: ['mysql', 'mysql2']
|
||||
services:
|
||||
mysql:
|
||||
image: bitnami/mysql:5.7
|
||||
@ -230,7 +232,9 @@ jobs:
|
||||
- run: yarn install --frozen-lockfile
|
||||
- uses: ./.github/actions/run-api-tests
|
||||
with:
|
||||
dbOptions: '--dbclient=mysql --dbhost=localhost --dbport=3306 --dbname=strapi_test --dbusername=strapi --dbpassword=strapi'
|
||||
dbOptions: '--dbclient=${{ matrix.db_client }} --dbhost=localhost --dbport=3306 --dbname=strapi_test --dbusername=strapi --dbpassword=strapi'
|
||||
|
||||
# TODO THE REST OF THESE
|
||||
|
||||
api_ce_sqlite:
|
||||
runs-on: ubuntu-latest
|
||||
@ -311,6 +315,7 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
node: [14, 16, 18]
|
||||
db_client: ['mysql', 'mysql2']
|
||||
services:
|
||||
mysql:
|
||||
image: bitnami/mysql:latest
|
||||
@ -340,7 +345,7 @@ jobs:
|
||||
- run: yarn install --frozen-lockfile
|
||||
- uses: ./.github/actions/run-api-tests
|
||||
with:
|
||||
dbOptions: '--dbclient=mysql --dbhost=localhost --dbport=3306 --dbname=strapi_test --dbusername=strapi --dbpassword=strapi'
|
||||
dbOptions: '--dbclient=${{ matrix.db_client }} --dbhost=localhost --dbport=3306 --dbname=strapi_test --dbusername=strapi --dbpassword=strapi'
|
||||
runEE: true
|
||||
|
||||
api_ee_sqlite:
|
||||
|
||||
@ -28,6 +28,17 @@ const mysql = {
|
||||
},
|
||||
};
|
||||
|
||||
const mysql2 = {
|
||||
client: 'mysql2',
|
||||
connection: {
|
||||
database: 'strapi',
|
||||
user: 'strapi',
|
||||
password: 'strapi',
|
||||
port: 3306,
|
||||
host: 'localhost',
|
||||
},
|
||||
};
|
||||
|
||||
const mariadb = {
|
||||
client: 'mysql',
|
||||
connection: {
|
||||
@ -41,6 +52,7 @@ const mariadb = {
|
||||
|
||||
const db = {
|
||||
mysql,
|
||||
mysql2,
|
||||
sqlite,
|
||||
postgres,
|
||||
mariadb,
|
||||
|
||||
@ -27,6 +27,7 @@
|
||||
"better-sqlite3": "8.0.1",
|
||||
"lodash": "4.17.21",
|
||||
"mysql": "2.18.1",
|
||||
"mysql2": "3.2.0",
|
||||
"passport-google-oauth2": "0.2.0",
|
||||
"pg": "8.8.0",
|
||||
"react": "^17.0.2",
|
||||
|
||||
@ -13,12 +13,27 @@ const getDialectClass = (client) => {
|
||||
}
|
||||
};
|
||||
|
||||
const getDialectName = (client) => {
|
||||
switch (client) {
|
||||
case 'postgres':
|
||||
return 'postgres';
|
||||
case 'mysql':
|
||||
case 'mysql2':
|
||||
return 'mysql';
|
||||
case 'sqlite':
|
||||
return 'sqlite';
|
||||
default:
|
||||
throw new Error(`Unknown dialect ${client}`);
|
||||
}
|
||||
};
|
||||
|
||||
const getDialect = (db) => {
|
||||
const { client } = db.config.connection;
|
||||
const dialectName = getDialectName(client);
|
||||
|
||||
const constructor = getDialectClass(client);
|
||||
const constructor = getDialectClass(dialectName);
|
||||
const dialect = new constructor(db);
|
||||
dialect.client = client;
|
||||
dialect.client = dialectName;
|
||||
|
||||
return dialect;
|
||||
};
|
||||
|
||||
@ -26,6 +26,27 @@ module.exports = ({ env }) => {
|
||||
},
|
||||
pool: { min: env.int('DATABASE_POOL_MIN', 2), max: env.int('DATABASE_POOL_MAX', 10) },
|
||||
},
|
||||
mysql2: {
|
||||
connection: {
|
||||
host: env('DATABASE_HOST', 'localhost'),
|
||||
port: env.int('DATABASE_PORT', 3306),
|
||||
database: env('DATABASE_NAME', 'strapi'),
|
||||
user: env('DATABASE_USERNAME', 'strapi'),
|
||||
password: env('DATABASE_PASSWORD', 'strapi'),
|
||||
ssl: env.bool('DATABASE_SSL', false) && {
|
||||
key: env('DATABASE_SSL_KEY', undefined),
|
||||
cert: env('DATABASE_SSL_CERT', undefined),
|
||||
ca: env('DATABASE_SSL_CA', undefined),
|
||||
capath: env('DATABASE_SSL_CAPATH', undefined),
|
||||
cipher: env('DATABASE_SSL_CIPHER', undefined),
|
||||
rejectUnauthorized: env.bool(
|
||||
'DATABASE_SSL_REJECT_UNAUTHORIZED',
|
||||
true
|
||||
),
|
||||
},
|
||||
},
|
||||
pool: { min: env.int('DATABASE_POOL_MIN', 2), max: env.int('DATABASE_POOL_MAX', 10) },
|
||||
},
|
||||
postgres: {
|
||||
connection: {
|
||||
connectionString: env('DATABASE_URL'),
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
# Database
|
||||
DATABASE_CLIENT=<%= client %>
|
||||
DATABASE_HOST=<%= connection.host %>
|
||||
DATABASE_PORT=<%= connection.port %>
|
||||
DATABASE_NAME=<%= connection.database %>
|
||||
DATABASE_USERNAME=<%= connection.username %>
|
||||
DATABASE_PASSWORD=<%= connection.password %>
|
||||
DATABASE_SSL=<%= connection.ssl %>
|
||||
@ -26,6 +26,27 @@ export default ({ env }) => {
|
||||
},
|
||||
pool: { min: env.int('DATABASE_POOL_MIN', 2), max: env.int('DATABASE_POOL_MAX', 10) },
|
||||
},
|
||||
mysql2: {
|
||||
connection: {
|
||||
host: env('DATABASE_HOST', 'localhost'),
|
||||
port: env.int('DATABASE_PORT', 3306),
|
||||
database: env('DATABASE_NAME', 'strapi'),
|
||||
user: env('DATABASE_USERNAME', 'strapi'),
|
||||
password: env('DATABASE_PASSWORD', 'strapi'),
|
||||
ssl: env.bool('DATABASE_SSL', false) && {
|
||||
key: env('DATABASE_SSL_KEY', undefined),
|
||||
cert: env('DATABASE_SSL_CERT', undefined),
|
||||
ca: env('DATABASE_SSL_CA', undefined),
|
||||
capath: env('DATABASE_SSL_CAPATH', undefined),
|
||||
cipher: env('DATABASE_SSL_CIPHER', undefined),
|
||||
rejectUnauthorized: env.bool(
|
||||
'DATABASE_SSL_REJECT_UNAUTHORIZED',
|
||||
true
|
||||
),
|
||||
},
|
||||
},
|
||||
pool: { min: env.int('DATABASE_POOL_MIN', 2), max: env.int('DATABASE_POOL_MAX', 10) },
|
||||
},
|
||||
postgres: {
|
||||
connection: {
|
||||
connectionString: env('DATABASE_URL'),
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
|
||||
const sqlClientModule = {
|
||||
mysql: { mysql: '2.18.1' },
|
||||
mysql2: { mysql2: '3.2.0' },
|
||||
postgres: { pg: '8.8.0' },
|
||||
sqlite: { 'better-sqlite3': '8.0.1' },
|
||||
'sqlite-legacy': { sqlite3: '^5.0.2' },
|
||||
@ -11,16 +12,11 @@ const sqlClientModule = {
|
||||
* Client dependencies
|
||||
*/
|
||||
module.exports = ({ client }) => {
|
||||
switch (client) {
|
||||
case 'sqlite':
|
||||
case 'sqlite-legacy':
|
||||
case 'postgres':
|
||||
case 'mysql':
|
||||
return {
|
||||
...sqlClientModule[client],
|
||||
};
|
||||
|
||||
default:
|
||||
throw new Error(`Invalid client "${client}"`);
|
||||
if (Object.keys(sqlClientModule).includes(client)) {
|
||||
return {
|
||||
...sqlClientModule[client],
|
||||
};
|
||||
}
|
||||
|
||||
throw new Error(`Invalid client "${client}"`);
|
||||
};
|
||||
|
||||
12
test/api.js
12
test/api.js
@ -33,6 +33,16 @@ const databases = {
|
||||
password: 'strapi',
|
||||
},
|
||||
},
|
||||
mysql2: {
|
||||
client: 'mysql2',
|
||||
connection: {
|
||||
host: '127.0.0.1',
|
||||
port: 3306,
|
||||
database: 'strapi_test',
|
||||
username: 'strapi',
|
||||
password: 'strapi',
|
||||
},
|
||||
},
|
||||
sqlite: {
|
||||
client: 'sqlite',
|
||||
connection: {
|
||||
@ -80,7 +90,7 @@ yargs
|
||||
})
|
||||
.command(
|
||||
'$0',
|
||||
'run end to end tests',
|
||||
'run API integration tests',
|
||||
(yarg) => {
|
||||
yarg.option('database', {
|
||||
alias: 'db',
|
||||
|
||||
60
yarn.lock
60
yarn.lock
@ -10256,6 +10256,11 @@ delegates@1.0.0, delegates@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
|
||||
integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==
|
||||
|
||||
denque@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1"
|
||||
integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==
|
||||
|
||||
depd@2.0.0, depd@^2.0.0, depd@~2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
|
||||
@ -12175,6 +12180,13 @@ gauge@^4.0.3:
|
||||
strip-ansi "^6.0.1"
|
||||
wide-align "^1.1.5"
|
||||
|
||||
generate-function@^2.3.1:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f"
|
||||
integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==
|
||||
dependencies:
|
||||
is-property "^1.0.2"
|
||||
|
||||
gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2:
|
||||
version "1.0.0-beta.2"
|
||||
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
|
||||
@ -13268,7 +13280,7 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24:
|
||||
dependencies:
|
||||
safer-buffer ">= 2.1.2 < 3"
|
||||
|
||||
iconv-lite@0.6.3, iconv-lite@^0.6.2:
|
||||
iconv-lite@0.6.3, iconv-lite@^0.6.2, iconv-lite@^0.6.3:
|
||||
version "0.6.3"
|
||||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
|
||||
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
|
||||
@ -13884,6 +13896,11 @@ is-potential-custom-element-name@^1.0.1:
|
||||
resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
|
||||
integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
|
||||
|
||||
is-property@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
|
||||
integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==
|
||||
|
||||
is-regex@^1.1.2, is-regex@^1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
|
||||
@ -15591,6 +15608,11 @@ long@^4.0.0:
|
||||
resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
|
||||
integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==
|
||||
|
||||
long@^5.2.1:
|
||||
version "5.2.1"
|
||||
resolved "https://registry.yarnpkg.com/long/-/long-5.2.1.tgz#e27595d0083d103d2fa2c20c7699f8e0c92b897f"
|
||||
integrity sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==
|
||||
|
||||
longest-streak@^2.0.0:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4"
|
||||
@ -15654,6 +15676,11 @@ lru-cache@^7.10.1, lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1:
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.13.1.tgz#267a81fbd0881327c46a81c5922606a2cfe336c4"
|
||||
integrity sha512-CHqbAq7NFlW3RSnoWXLJBxCWaZVBrfa9UEHId2M3AW8iEBurbqduNexEUCGc3SHc6iCYXNJCDi903LajSVAEPQ==
|
||||
|
||||
lru-cache@^7.14.1:
|
||||
version "7.18.3"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89"
|
||||
integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==
|
||||
|
||||
lru_map@^0.3.3:
|
||||
version "0.3.3"
|
||||
resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd"
|
||||
@ -16509,6 +16536,20 @@ mute-stream@0.0.8, mute-stream@~0.0.4:
|
||||
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
|
||||
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
|
||||
|
||||
mysql2@3.2.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.2.0.tgz#3613a8903bcb7ade0ae35b29945a0378eb67da89"
|
||||
integrity sha512-0Vn6a9WSrq6fWwvPgrvIwnOCldiEcgbzapVRDAtDZ4cMTxN7pnGqCTx8EG32S/NYXl6AXkdO+9hV1tSIi/LigA==
|
||||
dependencies:
|
||||
denque "^2.1.0"
|
||||
generate-function "^2.3.1"
|
||||
iconv-lite "^0.6.3"
|
||||
long "^5.2.1"
|
||||
lru-cache "^7.14.1"
|
||||
named-placeholders "^1.1.3"
|
||||
seq-queue "^0.0.5"
|
||||
sqlstring "^2.3.2"
|
||||
|
||||
mysql@2.18.1:
|
||||
version "2.18.1"
|
||||
resolved "https://registry.yarnpkg.com/mysql/-/mysql-2.18.1.tgz#2254143855c5a8c73825e4522baf2ea021766717"
|
||||
@ -16528,6 +16569,13 @@ mz@^2.7.0:
|
||||
object-assign "^4.0.1"
|
||||
thenify-all "^1.0.0"
|
||||
|
||||
named-placeholders@^1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/named-placeholders/-/named-placeholders-1.1.3.tgz#df595799a36654da55dda6152ba7a137ad1d9351"
|
||||
integrity sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==
|
||||
dependencies:
|
||||
lru-cache "^7.14.1"
|
||||
|
||||
nan@^2.12.1:
|
||||
version "2.16.0"
|
||||
resolved "https://registry.yarnpkg.com/nan/-/nan-2.16.0.tgz#664f43e45460fb98faf00edca0bb0d7b8dce7916"
|
||||
@ -19931,6 +19979,11 @@ sentence-case@^2.1.0:
|
||||
no-case "^2.2.0"
|
||||
upper-case-first "^1.1.2"
|
||||
|
||||
seq-queue@^0.0.5:
|
||||
version "0.0.5"
|
||||
resolved "https://registry.yarnpkg.com/seq-queue/-/seq-queue-0.0.5.tgz#d56812e1c017a6e4e7c3e3a37a1da6d78dd3c93e"
|
||||
integrity sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==
|
||||
|
||||
serialize-javascript@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"
|
||||
@ -20459,6 +20512,11 @@ sqlstring@2.3.1:
|
||||
resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.1.tgz#475393ff9e91479aea62dcaf0ca3d14983a7fb40"
|
||||
integrity sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ==
|
||||
|
||||
sqlstring@^2.3.2:
|
||||
version "2.3.3"
|
||||
resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.3.tgz#2ddc21f03bce2c387ed60680e739922c65751d0c"
|
||||
integrity sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==
|
||||
|
||||
sshpk@^1.7.0:
|
||||
version "1.17.0"
|
||||
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user