Skip to content

Commit 219a50b

Browse files
committed
added sqlite_schema tests, and various fixes
1 parent 9d8dd0c commit 219a50b

File tree

3 files changed

+31
-18
lines changed

3 files changed

+31
-18
lines changed

src/manager.ts

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,14 @@ export class SQLiteManager {
4747
}
4848

4949
/** Pass to this method the result of this query: SELECT sql FROM sqlite_schema WHERE tbl_name='X'; where X is the name of the table you're using */
50-
sqlite_schema(sql: string[]): void {
51-
this.sql = sql
50+
sqlite_schema(sql?: string[]): void {
51+
if (sql) {
52+
this.sql = sql
53+
} else {
54+
if (!this.create) {
55+
throw new Error('Alter table needs SELECT sql FROM sqlite_schema WHERE tbl_name=X; as sql')
56+
}
57+
}
5258
}
5359

5460
/** If changing name in altertable you need to manually call the queryBuilder() */
@@ -133,18 +139,17 @@ export class SQLiteManager {
133139
this.query += 'DROP TABLE "' + oldname + '";\n'
134140
this.query += 'ALTER TABLE "' + this.table.name + '" RENAME TO "' + oldname + '";\n'
135141
this.table.name = oldname
136-
this.query += 'CREATE INDEX '
137142

138143
if (this.sql) {
139144
if (op == 'DROP_COLUMN' && column) {
140145
this.sql.forEach(element => {
141146
if (!element.includes(column.name)) {
142-
query += element + '\n'
147+
this.query += element + '\n'
143148
}
144149
})
145150
} else {
146151
this.sql.forEach(element => {
147-
query += element + '\n'
152+
this.query += element + '\n'
148153
})
149154
}
150155
}
@@ -235,7 +240,7 @@ export class SQLiteManager {
235240
* column: the SQLiteManagerColumn you want to add to the table
236241
* sql[]: SELECT sql FROM sqlite_schema WHERE tbl_name='X'; where X is the name of the table you're using
237242
*/
238-
addColumn(column: SQLiteManagerColumn, sql: string[]): string {
243+
addColumn(column: SQLiteManagerColumn, sql?: string[]): string {
239244
if (this.table.columns) {
240245
if (typeof this.findColumn(column.name) == 'undefined') {
241246
this.table.columns.push(column)
@@ -254,7 +259,7 @@ export class SQLiteManager {
254259
* name: name of the column you want to delete
255260
* sql[]: SELECT sql FROM sqlite_schema WHERE tbl_name='X'; where X is the name of the table you're using
256261
*/
257-
deleteColumn(name: string, sql: string[]): string {
262+
deleteColumn(name: string, sql?: string[]): string {
258263
let query = ''
259264
const i = this.findColumn(name)
260265

@@ -291,7 +296,7 @@ export class SQLiteManager {
291296
* type: the new type you want to give to the column
292297
* sql[]: SELECT sql FROM sqlite_schema WHERE tbl_name='X'; where X is the name of the table you're using
293298
*/
294-
changeColumnType(name: string, type: SQLiteManagerType, sql: string[]): string {
299+
changeColumnType(name: string, type: SQLiteManagerType, sql?: string[]): string {
295300
return this.generalFun(name, (column: SQLiteManagerColumn) => (column.type = type), sql)
296301
}
297302

@@ -300,7 +305,7 @@ export class SQLiteManager {
300305
* constraits: edited constraints you get from getConstraints()
301306
* sql[]: SELECT sql FROM sqlite_schema WHERE tbl_name='X'; where X is the name of the table you're using
302307
*/
303-
changeColumnConstraints(name: string, constraints: SQLiteManagerConstraints, sql: string[]): string {
308+
changeColumnConstraints(name: string, constraints: SQLiteManagerConstraints, sql?: string[]): string {
304309
return this.generalFun(name, (column: SQLiteManagerColumn) => (column.constraints = constraints), sql)
305310
}
306311

@@ -318,9 +323,7 @@ export class SQLiteManager {
318323
fun(this.table.columns[i])
319324
}
320325

321-
if (sql) {
322-
this.sqlite_schema(sql)
323-
}
326+
this.sqlite_schema(sql)
324327

325328
return this.queryBuilder(qb1 ? qb1 : '', qb2 ? qb2 : ({} as SQLiteManagerColumn))
326329
}

test/assets/manager-test-tables.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,9 @@ export const testTable2 = {
9090
}
9191
]
9292
}
93+
94+
export const sqlite_schema = [
95+
'CREATE VIEW "myView" AS SELECT "myTable"."column1", "myTable"."column2", "myTable"."column3", "myTable"."column4" FROM "myTable";',
96+
'CREATE TRIGGER "myTrigger" AFTER INSERT ON "myTable" BEGIN INSERT INTO "myTable2" ("test1", "test2", "test3", "test4") VALUES (new."column1", new."column2", new."column3", new."column4"); END;',
97+
'CREATE INDEX "myIndex" ON "myTable" ("column1", "column2", "column3", "column4");'
98+
]

test/manager.test.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* eslint-disable prettier/prettier */
22
import { SQLiteManager } from '../src/manager'
33
import { SQLiteManagerType } from '../src/types'
4-
import { testTable, testTable2 } from './assets/manager-test-tables'
4+
import { testTable, testTable2, sqlite_schema } from './assets/manager-test-tables'
55

66
describe('Create a table', () => {
77
let manager: SQLiteManager
@@ -34,16 +34,18 @@ describe('Create a table', () => {
3434
it('tests alter table', () => {
3535
manager = new SQLiteManager(testTable)
3636

37-
const addColumn: string = manager.addColumn(testTable2.columns[0])
37+
const addColumn: string = manager.addColumn(testTable2.columns[0], sqlite_schema)
3838

3939
expect(addColumn).toContain('ALTER TABLE')
4040
expect(addColumn).toContain(testTable.name)
4141
expect(addColumn).toContain('ADD COLUMN')
4242
expect(addColumn).toContain(testTable2.columns[0].name)
4343
expect(addColumn).toContain(SQLiteManagerType[testTable2.columns[0].type])
4444

45-
manager.addColumn(JSON.parse(JSON.stringify(testTable2.columns[1])))
46-
expect(manager.deleteColumn(testTable2.columns[0].name)).toContain('ALTER TABLE "' + testTable.name + '" DROP COLUMN "' + testTable2.columns[0].name + '";')
45+
manager.addColumn(JSON.parse(JSON.stringify(testTable2.columns[1])), sqlite_schema)
46+
expect(manager.deleteColumn(testTable2.columns[0].name, sqlite_schema)).toContain(
47+
'ALTER TABLE "' + testTable.name + '" DROP COLUMN "' + testTable2.columns[0].name + '";'
48+
)
4749

4850
const risRen: string = manager.renameColumn(testTable.columns[1].name, testTable2.columns[2].name)
4951

@@ -55,7 +57,7 @@ describe('Create a table', () => {
5557

5658
expect(renTable).toContain('ALTER TABLE "' + testTable.name + '" RENAME TO "' + testTable2.name + '";')
5759

58-
const risCh: string = manager.changeColumnType(testTable.columns[2].name, SQLiteManagerType.TEXT)
60+
const risCh: string = manager.changeColumnType(testTable.columns[2].name, SQLiteManagerType.TEXT, sqlite_schema)
5961

6062
expect(risCh).toContain('PRAGMA foreign_keys = OFF;')
6163
expect(risCh).toContain('BEGIN TRANSACTION;')
@@ -66,7 +68,9 @@ describe('Create a table', () => {
6668
expect(risCh).toContain('COMMIT;')
6769
expect(risCh).toContain('PRAGMA foreign_keys = ON;')
6870

69-
const risCnstr: string = manager.changeColumnConstraints(testTable.columns[2].name, testTable2.columns[2].constraints)
71+
const risCnstr: string = manager.changeColumnConstraints(testTable.columns[2].name, testTable2.columns[2].constraints, sqlite_schema)
7072
expect(risCnstr).toContain('"' + testTable.columns[2].name + '" TEXT UNIQUE')
73+
74+
console.log(risCnstr)
7175
})
7276
})

0 commit comments

Comments
 (0)