From 1c694c21b03de8805743145133ee878f929d37d0 Mon Sep 17 00:00:00 2001 From: Angelelz Date: Sat, 16 Dec 2023 21:16:49 -0500 Subject: [PATCH] Added tests to all dialects --- integration-tests/tests/libsql.test.ts | 39 +++++++++++---- integration-tests/tests/mysql.test.ts | 39 +++++++++++---- integration-tests/tests/pg.test.ts | 53 +++++++++++++++------ integration-tests/tests/postgres.js.test.ts | 23 +++++++++ 4 files changed, 123 insertions(+), 31 deletions(-) diff --git a/integration-tests/tests/libsql.test.ts b/integration-tests/tests/libsql.test.ts index 762f9ed5b..48c6ac370 100644 --- a/integration-tests/tests/libsql.test.ts +++ b/integration-tests/tests/libsql.test.ts @@ -5,24 +5,25 @@ import type { TestFn } from 'ava'; import anyTest from 'ava'; import { asc, + avg, + avgDistinct, + count, + countDistinct, eq, gt, gte, inArray, type InferModel, + max, + min, Name, name, + notInArray, placeholder, sql, - TransactionRollbackError, - count, - countDistinct, - avg, - avgDistinct, sum, sumDistinct, - max, - min + TransactionRollbackError, } from 'drizzle-orm'; import { drizzle, type LibSQLDatabase } from 'drizzle-orm/libsql'; import { migrate } from 'drizzle-orm/libsql/migrator'; @@ -126,7 +127,7 @@ const aggregateTable = sqliteTable('aggregate_table', { a: integer('a'), b: integer('b'), c: integer('c'), - nullOnly: integer('null_only') + nullOnly: integer('null_only'), }); test.before(async (t) => { @@ -941,6 +942,28 @@ test.serial('select with group by complex query', async (t) => { t.deepEqual(result, [{ name: 'Jane' }]); }); +test.serial('select with empty array in inArray', async (t) => { + const { db } = t.context; + + await db.insert(usersTable).values([{ name: 'John' }, { name: 'Jane' }, { name: 'Jane' }]); + + const result = await db.select({ name: usersTable.name }).from(usersTable) + .where(inArray(usersTable.id, [])); + + t.deepEqual(result, []); +}); + +test.serial('select with empty array in notInArray', async (t) => { + const { db } = t.context; + + await db.insert(usersTable).values([{ name: 'John' }, { name: 'Jane' }, { name: 'Jane' }]); + + const result = await db.select({ name: usersTable.name }).from(usersTable) + .where(notInArray(usersTable.id, [])); + + t.deepEqual(result, [{ name: 'John' }, { name: 'Jane' }, { name: 'Jane' }]); +}); + test.serial('build query', async (t) => { const { db } = t.context; diff --git a/integration-tests/tests/mysql.test.ts b/integration-tests/tests/mysql.test.ts index d916cc22d..08a1cff7e 100644 --- a/integration-tests/tests/mysql.test.ts +++ b/integration-tests/tests/mysql.test.ts @@ -5,24 +5,25 @@ import anyTest from 'ava'; import Docker from 'dockerode'; import { asc, + avg, + avgDistinct, + count, + countDistinct, DefaultLogger, eq, gt, gte, inArray, type InferModel, + max, + min, Name, + notInArray, placeholder, sql, - TransactionRollbackError, sum, sumDistinct, - count, - countDistinct, - avg, - avgDistinct, - max, - min, + TransactionRollbackError, } from 'drizzle-orm'; import { alias, @@ -134,7 +135,7 @@ const aggregateTable = mysqlTable('aggregate_table', { a: int('a'), b: int('b'), c: int('c'), - nullOnly: int('null_only') + nullOnly: int('null_only'), }); interface Context { @@ -745,6 +746,28 @@ test.serial('select with group by as column + sql', async (t) => { t.deepEqual(result, [{ name: 'John' }, { name: 'Jane' }, { name: 'Jane' }]); }); +test.serial('select with empty array in inArray', async (t) => { + const { db } = t.context; + + await db.insert(usersTable).values([{ name: 'John' }, { name: 'Jane' }, { name: 'Jane' }]); + + const result = await db.select({ name: usersTable.name }).from(usersTable) + .where(inArray(usersTable.id, [])); + + t.deepEqual(result, []); +}); + +test.serial('select with empty array in notInArray', async (t) => { + const { db } = t.context; + + await db.insert(usersTable).values([{ name: 'John' }, { name: 'Jane' }, { name: 'Jane' }]); + + const result = await db.select({ name: usersTable.name }).from(usersTable) + .where(notInArray(usersTable.id, [])); + + t.deepEqual(result, [{ name: 'John' }, { name: 'Jane' }, { name: 'Jane' }]); +}); + test.serial('select with group by complex query', async (t) => { const { db } = t.context; diff --git a/integration-tests/tests/pg.test.ts b/integration-tests/tests/pg.test.ts index 3c1b1c9d7..3b0eebb87 100644 --- a/integration-tests/tests/pg.test.ts +++ b/integration-tests/tests/pg.test.ts @@ -9,25 +9,26 @@ import { arrayContains, arrayOverlaps, asc, + avg, + avgDistinct, + count, + countDistinct, eq, gt, gte, inArray, lt, + max, + min, name, + notInArray, placeholder, type SQL, sql, type SQLWrapper, - TransactionRollbackError, - count, - countDistinct, - avg, - avgDistinct, sum, sumDistinct, - max, - min, + TransactionRollbackError, } from 'drizzle-orm'; import { drizzle, type NodePgDatabase } from 'drizzle-orm/node-postgres'; import { migrate } from 'drizzle-orm/node-postgres/migrator'; @@ -50,6 +51,7 @@ import { macaddr, macaddr8, type PgColumn, + pgEnum, pgMaterializedView, pgTable, pgTableCreator, @@ -64,7 +66,6 @@ import { uniqueKeyName, uuid as pgUuid, varchar, - pgEnum, } from 'drizzle-orm/pg-core'; import getPort from 'get-port'; import pg from 'pg'; @@ -149,7 +150,7 @@ const aggregateTable = pgTable('aggregate_table', { a: integer('a'), b: integer('b'), c: integer('c'), - nullOnly: integer('null_only') + nullOnly: integer('null_only'), }); interface Context { @@ -523,7 +524,7 @@ test.serial('select distinct', async (t) => { const usersDistinctTable = pgTable('users_distinct', { id: integer('id').notNull(), name: text('name').notNull(), - age: integer('age').notNull() + age: integer('age').notNull(), }); await db.execute(sql`drop table if exists ${usersDistinctTable}`); @@ -534,7 +535,7 @@ test.serial('select distinct', async (t) => { { id: 1, name: 'John', age: 24 }, { id: 2, name: 'John', age: 25 }, { id: 1, name: 'Jane', age: 24 }, - { id: 1, name: 'Jane', age: 26 } + { id: 1, name: 'Jane', age: 26 }, ]); const users1 = await db.selectDistinct().from(usersDistinctTable).orderBy( usersDistinctTable.id, @@ -547,8 +548,8 @@ test.serial('select distinct', async (t) => { usersDistinctTable, ).orderBy(usersDistinctTable.name); const users4 = await db.selectDistinctOn([usersDistinctTable.id, usersDistinctTable.age]).from( - usersDistinctTable - ).orderBy(usersDistinctTable.id, usersDistinctTable.age) + usersDistinctTable, + ).orderBy(usersDistinctTable.id, usersDistinctTable.age); await db.execute(sql`drop table ${usersDistinctTable}`); @@ -556,7 +557,7 @@ test.serial('select distinct', async (t) => { { id: 1, name: 'Jane', age: 24 }, { id: 1, name: 'Jane', age: 26 }, { id: 1, name: 'John', age: 24 }, - { id: 2, name: 'John', age: 25 } + { id: 2, name: 'John', age: 25 }, ]); t.deepEqual(users2.length, 2); @@ -570,7 +571,7 @@ test.serial('select distinct', async (t) => { t.deepEqual(users4, [ { id: 1, name: 'John', age: 24 }, { id: 1, name: 'Jane', age: 26 }, - { id: 2, name: 'John', age: 25 } + { id: 2, name: 'John', age: 25 }, ]); }); @@ -1714,6 +1715,28 @@ test.serial('array types', async (t) => { t.deepEqual(res, values); }); +test.serial('select with empty array in inArray', async (t) => { + const { db } = t.context; + + await db.insert(usersTable).values([{ name: 'John' }, { name: 'Jane' }, { name: 'Jane' }]); + + const result = await db.select({ name: usersTable.name }).from(usersTable) + .where(inArray(usersTable.id, [])); + + t.deepEqual(result, []); +}); + +test.serial('select with empty array in notInArray', async (t) => { + const { db } = t.context; + + await db.insert(usersTable).values([{ name: 'John' }, { name: 'Jane' }, { name: 'Jane' }]); + + const result = await db.select({ name: usersTable.name }).from(usersTable) + .where(notInArray(usersTable.id, [])); + + t.deepEqual(result, [{ name: 'John' }, { name: 'Jane' }, { name: 'Jane' }]); +}); + test.serial('select for ...', (t) => { const { db } = t.context; diff --git a/integration-tests/tests/postgres.js.test.ts b/integration-tests/tests/postgres.js.test.ts index a1f979f60..cf5fa1749 100644 --- a/integration-tests/tests/postgres.js.test.ts +++ b/integration-tests/tests/postgres.js.test.ts @@ -16,6 +16,7 @@ import { lt, Name, name, + notInArray, placeholder, type SQL, sql, @@ -1304,6 +1305,28 @@ test.serial('select count w/ custom mapper', async (t) => { t.deepEqual(res, [{ count: 2 }]); }); +test.serial('select with empty array in inArray', async (t) => { + const { db } = t.context; + + await db.insert(usersTable).values([{ name: 'John' }, { name: 'Jane' }, { name: 'Jane' }]); + + const result = await db.select({ name: usersTable.name }).from(usersTable) + .where(inArray(usersTable.id, [])); + + t.deepEqual(result, []); +}); + +test.serial('select with empty array in notInArray', async (t) => { + const { db } = t.context; + + await db.insert(usersTable).values([{ name: 'John' }, { name: 'Jane' }, { name: 'Jane' }]); + + const result = await db.select({ name: usersTable.name }).from(usersTable) + .where(notInArray(usersTable.id, [])); + + t.deepEqual(result, [{ name: 'John' }, { name: 'Jane' }, { name: 'Jane' }]); +}); + test.serial('select for ...', (t) => { const { db } = t.context;