diff --git a/test/drizzle/driver.test.ts b/test/drizzle/driver.test.ts index 54d28f2..97d291c 100644 --- a/test/drizzle/driver.test.ts +++ b/test/drizzle/driver.test.ts @@ -89,6 +89,66 @@ describe('drizzle driver', () => { expect(select2).toEqual([{ name: 'white rice' }, { name: 'bread' }]); }); + it('should accept batched queries', async () => { + const data = await db.batch([ + db.insert(groceries).values({ name: 'bread' }), + db + .insert(groceries) + .values({ name: 'rice' }) + .returning({ name: groceries.name }), + db.insert(groceries).values({ name: 'milk' }).returning(), + db.select().from(groceries), + ]); + + expect(data).toEqual([ + { rows: [], columns: [] }, + [{ name: 'rice' }], + [{ id: 3, name: 'milk' }], + [ + { id: 1, name: 'bread' }, + { id: 2, name: 'rice' }, + { id: 3, name: 'milk' }, + ], + ]); + }); + + it('should execute relational queries', async () => { + await db.batch([ + db.insert(groceries).values([{ name: 'chicken' }, { name: 'beef' }]), + db.insert(prices).values([ + { groceryId: 1, price: 3.29 }, + { groceryId: 1, price: 2.99 }, + { groceryId: 1, price: 3.79 }, + { groceryId: 2, price: 5.29 }, + { groceryId: 2, price: 4.49 }, + ]), + ]); + + const data = await db.query.groceries.findMany({ + columns: { + name: true, + }, + with: { + prices: { + columns: { + price: true, + }, + }, + }, + }); + + expect(data).toEqual([ + { + name: 'chicken', + prices: [{ price: 3.29 }, { price: 2.99 }, { price: 3.79 }], + }, + { + name: 'beef', + prices: [{ price: 5.29 }, { price: 4.49 }], + }, + ]); + }); + it('should perform successful transaction using sqlocal way', async () => { const productName = 'rice'; const productPrice = 2.99; @@ -203,65 +263,4 @@ describe('drizzle driver', () => { expect(data).toEqual([{ name: 'x' }, { name: 'b' }]); expect(order).toEqual([1, 2, 3]); }); - - it('should accept batched queries', async () => { - const data = await db.batch([ - db.insert(groceries).values({ name: 'bread' }), - db - .insert(groceries) - .values({ name: 'rice' }) - .returning({ name: groceries.name }), - db.insert(groceries).values({ name: 'milk' }).returning(), - db.select().from(groceries), - ]); - - expect(data).toEqual([ - { rows: [], columns: [] }, - [{ name: 'rice' }], - [{ id: 3, name: 'milk' }], - [ - { id: 1, name: 'bread' }, - { id: 2, name: 'rice' }, - { id: 3, name: 'milk' }, - ], - ]); - }); - - it('should execute relational queries', async () => { - await db.batch([ - db.insert(groceries).values({ name: 'chicken' }), - db.insert(groceries).values({ name: 'beef' }), - db.insert(prices).values([ - { groceryId: 1, price: 3.29 }, - { groceryId: 1, price: 2.99 }, - { groceryId: 1, price: 3.79 }, - { groceryId: 2, price: 5.29 }, - { groceryId: 2, price: 4.49 }, - ]), - ]); - - const data = await db.query.groceries.findMany({ - columns: { - name: true, - }, - with: { - prices: { - columns: { - price: true, - }, - }, - }, - }); - - expect(data).toEqual([ - { - name: 'chicken', - prices: [{ price: 3.29 }, { price: 2.99 }, { price: 3.79 }], - }, - { - name: 'beef', - prices: [{ price: 5.29 }, { price: 4.49 }], - }, - ]); - }); }); diff --git a/test/kysely/dialect.test.ts b/test/kysely/dialect.test.ts index b4c55bd..3532a07 100644 --- a/test/kysely/dialect.test.ts +++ b/test/kysely/dialect.test.ts @@ -1,5 +1,6 @@ import { afterEach, beforeEach, describe, expect, it } from 'vitest'; -import { Generated, Kysely } from 'kysely'; +import { Generated, Kysely, ParseJSONResultsPlugin } from 'kysely'; +import { jsonArrayFrom } from 'kysely/helpers/sqlite'; import { SQLocalKysely } from '../../src/kysely'; import { sleep } from '../test-utils/sleep'; @@ -7,7 +8,10 @@ describe('kysely dialect', () => { const { dialect, transaction } = new SQLocalKysely( 'kysely-dialect-test.sqlite3' ); - const db = new Kysely({ dialect }); + const db = new Kysely({ + dialect, + plugins: [new ParseJSONResultsPlugin()], + }); type DB = { groceries: { @@ -81,6 +85,47 @@ describe('kysely dialect', () => { expect(select2).toEqual([{ name: 'white rice' }, { name: 'bread' }]); }); + it('should execute queries with relations', async () => { + await db + .insertInto('groceries') + .values([{ name: 'chicken' }, { name: 'beef' }]) + .execute(); + await db + .insertInto('prices') + .values([ + { groceryId: 1, price: 3.29 }, + { groceryId: 1, price: 2.99 }, + { groceryId: 1, price: 3.79 }, + { groceryId: 2, price: 5.29 }, + { groceryId: 2, price: 4.49 }, + ]) + .execute(); + + const data = await db + .selectFrom('groceries') + .select('name') + .select((eb) => [ + jsonArrayFrom( + eb + .selectFrom('prices') + .select('price') + .whereRef('groceries.id', '=', 'prices.groceryId') + ).as('prices'), + ]) + .execute(); + + expect(data).toEqual([ + { + name: 'chicken', + prices: [{ price: 3.29 }, { price: 2.99 }, { price: 3.79 }], + }, + { + name: 'beef', + prices: [{ price: 5.29 }, { price: 4.49 }], + }, + ]); + }); + it('should perform successful transaction using sqlocal way', async () => { const productName = 'rice'; const productPrice = 2.99;