Skip to content

Commit

Permalink
feat: implement ignoreTables for sqlite
Browse files Browse the repository at this point in the history
  • Loading branch information
Julien-R44 committed Sep 17, 2022
1 parent bbe2335 commit 396cb88
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 6 deletions.
14 changes: 9 additions & 5 deletions src/Dialects/SqliteBase.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

/// <reference path="../../adonis-typings/index.ts" />

import { DialectContract, QueryClientContract } from '@ioc:Adonis/Lucid/Database'
import { DialectContract, QueryClientContract, SqliteConfig } from '@ioc:Adonis/Lucid/Database'

export abstract class BaseSqliteDialect implements DialectContract {
public abstract readonly name: 'sqlite3' | 'better-sqlite3'
Expand All @@ -30,7 +30,7 @@ export abstract class BaseSqliteDialect implements DialectContract {
*/
public readonly dateTimeFormat = 'yyyy-MM-dd HH:mm:ss'

constructor(private client: QueryClientContract) {}
constructor(private client: QueryClientContract, private config: SqliteConfig) {}

/**
* Returns an array of table names
Expand Down Expand Up @@ -81,9 +81,13 @@ export abstract class BaseSqliteDialect implements DialectContract {
*/
public async dropAllTables() {
await this.client.rawQuery('PRAGMA writable_schema = 1;')
await this.client.rawQuery(
`delete from sqlite_master where type in ('table', 'index', 'trigger');`
)
await this.client
.knexQuery()
.delete()
.from('sqlite_master')
.whereIn('type', ['table', 'index', 'trigger'])
.andWhereNot('name', this.config.wipe?.ignoreTables || [])

await this.client.rawQuery('PRAGMA writable_schema = 0;')
await this.client.rawQuery('VACUUM;')
}
Expand Down
2 changes: 1 addition & 1 deletion test/database/drop-tables.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,5 +114,5 @@ test.group('Query client | drop tables', (group) => {
assert.isTrue(await connection.client!.schema.hasTable('table_that_should_not_be_dropped'))

await connection.disconnect()
}).skip(!['pg', 'mysql'].includes(process.env.DB!))
}).skip(!['pg', 'mysql', 'sqlite'].includes(process.env.DB!))
})

0 comments on commit 396cb88

Please sign in to comment.