Skip to content

Commit 0324a97

Browse files
authored
implement tables and views list (#111)
* implement tables and views list * 2.10.1
1 parent 9893433 commit 0324a97

5 files changed

Lines changed: 99 additions & 3 deletions

File tree

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@themost/sqlite",
3-
"version": "2.10.0",
3+
"version": "2.10.1",
44
"description": "MOST Web Framework SQLite Adapter",
55
"main": "dist/index.js",
66
"types": "dist/index.d.ts",

spec/SqliteAdapter.spec.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,26 @@ describe('SqliteAdapter', () => {
2727
});
2828
});
2929

30+
it('should get tables', async () => {
31+
await app.executeInTestTranscaction(async (context) => {
32+
const tables = await context.db.tables().listAsync();
33+
expect(Array.isArray(tables)).toBeTruthy();
34+
expect(tables.length).toBeGreaterThan(0);
35+
const table1 = tables.find((table) => table.name === 'UserBase');
36+
expect(table1).toBeTruthy();
37+
});
38+
});
39+
40+
it('should get views', async () => {
41+
await app.executeInTestTranscaction(async (context) => {
42+
const views = await context.db.views().listAsync();
43+
expect(Array.isArray(views)).toBeTruthy();
44+
expect(views.length).toBeGreaterThan(0);
45+
const view1 = views.find((table) => table.name === 'UserData');
46+
expect(view1).toBeTruthy();
47+
});
48+
});
49+
3050
it('should create table', async () => {
3151
await app.executeInTestTranscaction(async (context) => {
3252
const db = context.db;

src/SqliteAdapter.d.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,16 @@ import { DataAdapterBase, DataAdapterIndexes, DataAdapterMigration, DataAdapterT
44
import { QueryExpression, SqlFormatter } from '@themost/query';
55
import {AsyncSeriesEventEmitter} from '@themost/events';
66

7+
export declare interface DataAdapterTables {
8+
list(callback: (err: Error, result: { name: string }[]) => void): void;
9+
listAsync(): Promise<{ name: string }[]>;
10+
}
11+
12+
export declare interface DataAdapterViews {
13+
list(callback: (err: Error, result: { name: string }[]) => void): void;
14+
listAsync(): Promise<{ name: string }[]>;
15+
}
16+
717
export declare class SqliteAdapter implements DataAdapterBase {
818
executing: AsyncSeriesEventEmitter<{target: SqliteAdapter, query: (string|QueryExpression), params?: unknown[]}>;
919
executed: AsyncSeriesEventEmitter<{target: SqliteAdapter, query: (string|QueryExpression), params?: unknown[], results: uknown[]}>;
@@ -32,7 +42,9 @@ export declare class SqliteAdapter implements DataAdapterBase {
3242
lastIdentity(callback: (err: Error, value: any) => void): void;
3343
lastIdentityAsync(): Promise<any>;
3444
table(table: string): DataAdapterTable;
45+
tables(): DataAdapterTables;
3546
view(view: string): DataAdapterView;
47+
views(): DataAdapterViews;
3648
indexes(table: string): DataAdapterIndexes;
3749
getFormatter(): SqlFormatter;
3850
}

src/SqliteAdapter.js

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1120,6 +1120,70 @@ class SqliteAdapter {
11201120
};
11211121
}
11221122

1123+
/**
1124+
*
1125+
* @returns {import('./SqliteAdapter').DataAdapterTables}
1126+
*/
1127+
tables() {
1128+
const self = this;
1129+
return {
1130+
/**
1131+
* @param {function} callback
1132+
* @returns void
1133+
*/
1134+
list: function(callback) {
1135+
void self.execute('SELECT name FROM sqlite_master WHERE type=\'table\'', null, (err, results) => {
1136+
if (err) {
1137+
return callback(err);
1138+
}
1139+
return callback(null, results);
1140+
});
1141+
},
1142+
listAsync: function() {
1143+
return new Promise((resolve, reject) => {
1144+
this.list((err, value) => {
1145+
if (err) {
1146+
return reject(err);
1147+
}
1148+
return resolve(value);
1149+
});
1150+
});
1151+
}
1152+
}
1153+
}
1154+
1155+
/**
1156+
*
1157+
* @returns {import('./SqliteAdapter').DataAdapterViews}
1158+
*/
1159+
views() {
1160+
const self = this;
1161+
return {
1162+
/**
1163+
* @param {function} callback
1164+
* @returns void
1165+
*/
1166+
list: function(callback) {
1167+
void self.execute('SELECT name FROM sqlite_master WHERE type=\'view\'', null, (err, results) => {
1168+
if (err) {
1169+
return callback(err);
1170+
}
1171+
return callback(null, results);
1172+
});
1173+
},
1174+
listAsync: function() {
1175+
return new Promise((resolve, reject) => {
1176+
this.list((err, value) => {
1177+
if (err) {
1178+
return reject(err);
1179+
}
1180+
return resolve(value);
1181+
});
1182+
});
1183+
}
1184+
}
1185+
}
1186+
11231187
@before(({target, args}, callback) => {
11241188
const [query, params] = args;
11251189
void target.executing.emit({

0 commit comments

Comments
 (0)