Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/workflows/test-query-compiler.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,12 @@ jobs:
should_fail_tests_list: query-compiler/query-engine-tests-todo/neon/fail
relation_load_strategy: '["join", "query"]'

- name: mariadb
setup_task: dev-mariadb-qc
ignored_tests_list: query-compiler/query-engine-tests-todo/mariadb/skip
should_fail_tests_list: query-compiler/query-engine-tests-todo/mariadb/fail
relation_load_strategy: '["query"]'

name: ${{ matrix.adapter.name }}

uses: ./.github/workflows/test-query-compiler-template.yml
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/test-query-engine.yml
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,8 @@ jobs:
setup_task: 'dev-better-sqlite3'
- name: 'mssql (wasm)'
setup_task: 'dev-mssql-wasm'
- name: 'mariadb (wasm)'
setup_task: 'dev-mariadb-wasm'
name: ${{ matrix.adapter.name }}
uses: ./.github/workflows/test-driver-adapters-template.yml
with:
Expand Down
13 changes: 13 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -461,6 +461,19 @@ test-planetscale-qc: dev-planetscale-qc test-qe-st
test-driver-adapter-planetscale: test-planetscale-js
test-driver-adapter-planetscale-wasm: test-planetscale-wasm

dev-mariadb-wasm: start-mysql_8 build-qe-wasm build-driver-adapters-kit-qe
cp $(CONFIG_PATH)/mariadb-wasm $(CONFIG_FILE)

test-mariadb-wasm: dev-mariadb-wasm test-qe-st

dev-mariadb-qc: start-mysql_8 build-qc-wasm build-driver-adapters-kit-qc
cp $(CONFIG_PATH)/mariadb-qc $(CONFIG_FILE)

test-mariadb-qc: dev-mariadb-qc test-qe-st

test-driver-adapter-mariadb: test-mariadb-js
test-driver-adapter-mariadb-wasm: test-mariadb-wasm

######################
# Local dev commands #
######################
Expand Down
1 change: 1 addition & 0 deletions libs/driver-adapters/executor/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
"@prisma/adapter-neon": "workspace:*",
"@prisma/adapter-pg": "workspace:*",
"@prisma/adapter-planetscale": "workspace:*",
"@prisma/adapter-mariadb": "workspace:*",
"@prisma/bundled-js-drivers": "workspace:*",
"@prisma/client-engine-runtime": "workspace:*",
"@prisma/schema-engine-wasm": "../../../schema-engine/schema-engine-wasm/pkg",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import { PrismaMariaDb } from '@prisma/adapter-mariadb'
import type {
SqlDriverAdapter,
SqlDriverAdapterFactory,
} from '@prisma/driver-adapter-utils'
import type {
DriverAdaptersManager,
SetupDriverAdaptersInput,
} from './index.js'
import type { DriverAdapterTag, EnvForAdapter } from '../types/index.js'

const TAG = 'mariadb' as const satisfies DriverAdapterTag
type TAG = typeof TAG

export class MariaDbManager implements DriverAdaptersManager {
#factory: SqlDriverAdapterFactory
#adapter?: SqlDriverAdapter

private constructor(
private env: EnvForAdapter<TAG>,
{ url }: SetupDriverAdaptersInput,
) {
this.#factory = new PrismaMariaDb(mariadbOptions(url))
}

static async setup(env: EnvForAdapter<TAG>, input: SetupDriverAdaptersInput) {
return new MariaDbManager(env, input)
}

factory() {
return this.#factory
}

async connect() {
this.#adapter = await this.#factory.connect()
return this.#adapter
}

async teardown() {
await this.#adapter?.dispose()
}
}

function mariadbOptions(urlStr: string) {
const url = new URL(urlStr)
const { username: user, password, hostname: host, port } = url
const database = url.pathname && url.pathname.slice(1)

return {
user,
password,
database,
host,
port: Number(port),
connectionLimit: 4,
}
}
5 changes: 5 additions & 0 deletions libs/driver-adapters/executor/src/setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { PlanetScaleManager } from './driver-adapters-manager/planetscale.js'
import { D1Manager } from './driver-adapters-manager/d1.js'
import { BetterSQLite3Manager } from './driver-adapters-manager/better-sqlite3.js'
import { MssqlManager } from './driver-adapters-manager/mssql.js'
import { MariaDbManager } from './driver-adapters-manager/mariadb.js'

export async function setupDriverAdaptersManager(
env: Env,
Expand Down Expand Up @@ -45,5 +46,9 @@ export async function setupDriverAdaptersManager(
{ DRIVER_ADAPTER: 'mssql' },
async (env) => await MssqlManager.setup(env, input),
)
.with(
{ DRIVER_ADAPTER: 'mariadb' },
async (env) => await MariaDbManager.setup(env, input),
)
.exhaustive()
}
1 change: 1 addition & 0 deletions libs/driver-adapters/executor/src/types/env.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ export const Env = S.extend(
'd1',
'better-sqlite3',
'mssql',
'mariadb',
),
}),
),
Expand Down
1 change: 1 addition & 0 deletions libs/driver-adapters/pnpm-workspace.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ packages:
- '../../../prisma/packages/adapter-neon'
- '../../../prisma/packages/adapter-pg'
- '../../../prisma/packages/adapter-planetscale'
- '../../../prisma/packages/adapter-mariadb'
- '../../../prisma/packages/bundled-js-drivers'
- '../../../prisma/packages/client-engine-runtime'
- '../../../prisma/packages/debug'
Expand Down
6 changes: 6 additions & 0 deletions query-compiler/query-engine-tests-todo/mariadb/fail/query
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
new::interactive_tx::interactive_tx::batch_queries_failure
new::regressions::prisma_7434::not_in_chunking::not_in_batch_filter
queries::aggregation::group_by::aggregation_group_by::group_by_ordering_sum_aggregation
queries::chunking::chunking::order_by_aggregation_should_fail
queries::filters::self_relation_regression::sr_regression::all_categories
writes::nested_mutations::already_converted::nested_connect_inside_update::connect_inside_update::p1_c1req_rel_child_idempotent
Empty file.
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ pub enum DriverAdapter {

#[serde(rename = "mssql")]
Mssql,

#[serde(rename = "mariadb")]
MariaDb,
}

impl From<String> for DriverAdapter {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ use query_engine_tests::*;
Postgres("neon.js.wasm", "pg.js.wasm"),
Sqlite("libsql.js.wasm", "cfd1", "react-native", "better-sqlite3"),
Sqlserver("mssql.js.wasm"),
Mysql("mariadb.js.wasm")
)
)]
mod logs {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ use query_engine_tests::test_suite;
Vitess("planetscale.js.wasm"),
Postgres("neon.js.wasm", "pg.js.wasm"),
Sqlite("libsql.js.wasm", "cfd1", "react-native", "better-sqlite3"),
Sqlserver("mssql.js.wasm")
Sqlserver("mssql.js.wasm"),
Mysql("mariadb.js.wasm")
)
)]
mod metrics {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ mod json {
Vitess("planetscale.js.wasm"),
Postgres("neon.js.wasm", "pg.js.wasm"),
Sqlite("libsql.js.wasm", "cfd1", "better-sqlite3"),
MySQL(5.6)
MySQL(5.6, "mariadb.js.wasm"),
)
)]
async fn nested_not_shorthand(runner: Runner) -> TestResult<()> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,13 +137,17 @@ pub(crate) fn connection_string(
ConnectorVersion::MySql(v) => match v {
Some(MySqlVersion::V5_6) if is_ci => format!("mysql://root:prisma@test-db-mysql-5-6:3306/{database}"),
Some(MySqlVersion::V5_7) if is_ci => format!("mysql://root:prisma@test-db-mysql-5-7:3306/{database}"),
Some(MySqlVersion::V8) if is_ci => format!("mysql://root:prisma@test-db-mysql-8:3306/{database}"),
Some(MySqlVersion::V8 | MySqlVersion::MariaDbJsWasm) if is_ci => {
format!("mysql://root:prisma@test-db-mysql-8:3306/{database}")
}
Some(MySqlVersion::MariaDb) if is_ci => {
format!("mysql://root:prisma@test-db-mysql-mariadb:3306/{database}")
}
Some(MySqlVersion::V5_6) => format!("mysql://root:prisma@127.0.0.1:3309/{database}"),
Some(MySqlVersion::V5_7) => format!("mysql://root:prisma@127.0.0.1:3306/{database}"),
Some(MySqlVersion::V8) => format!("mysql://root:prisma@127.0.0.1:3307/{database}"),
Some(MySqlVersion::V8 | MySqlVersion::MariaDbJsWasm) => {
format!("mysql://root:prisma@127.0.0.1:3307/{database}")
}
Some(MySqlVersion::MariaDb) => {
format!("mysql://root:prisma@127.0.0.1:3308/{database}")
}
Expand Down Expand Up @@ -331,6 +335,7 @@ impl ConnectorVersion {
| Self::Sqlite(Some(SqliteVersion::CloudflareD1))
| Self::Sqlite(Some(SqliteVersion::BetterSQLite3))
| Self::SqlServer(Some(SqlServerVersion::MssqlJsWasm))
| Self::MySql(Some(MySqlVersion::MariaDbJsWasm))
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ pub enum MySqlVersion {
V5_7,
V8,
MariaDb,
MariaDbJsWasm,
}

impl TryFrom<&str> for MySqlVersion {
Expand All @@ -45,6 +46,7 @@ impl TryFrom<&str> for MySqlVersion {
"5.7" => Self::V5_7,
"8" => Self::V8,
"mariadb" => Self::MariaDb,
"mariadb.js.wasm" => Self::MariaDbJsWasm,
_ => return Err(TestError::parse_error(format!("Unknown MySQL version `{s}`"))),
};

Expand All @@ -59,6 +61,7 @@ impl Display for MySqlVersion {
MySqlVersion::V5_7 => f.write_str("5.7"),
MySqlVersion::V8 => f.write_str("8"),
MySqlVersion::MariaDb => f.write_str("mariadb"),
MySqlVersion::MariaDbJsWasm => f.write_str("mariadb.js.wasm"),
}
}
}
6 changes: 6 additions & 0 deletions query-engine/connector-test-kit-rs/test-configs/mariadb-qc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"connector": "mysql",
"version": "mariadb.js.wasm",
"driver_adapter": "mariadb",
"external_test_executor": "QueryCompiler"
}
6 changes: 6 additions & 0 deletions query-engine/connector-test-kit-rs/test-configs/mariadb-wasm
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"connector": "mysql",
"version": "mariadb.js.wasm",
"driver_adapter": "mariadb",
"external_test_executor": "Wasm"
}
2 changes: 1 addition & 1 deletion query-engine/query-builders/sql-query-builder/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ impl<'a, V: Visitor<'a>> QueryBuilder for SqlQueryBuilder<'a, V> {
None
};

let last_insert_id_field = id_selection.scalars().find(|sf| sf.is_auto_generated_int_id()).cloned();
let last_insert_id_field = id_selection.scalars().find(|sf| sf.is_autoincrement()).cloned();

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

needed for bigint tests in the mysql native_types suite


// Return all arguments that are a part of the primary identifier as values to merge
// into the created record.
Expand Down
Loading