feat: 🎸 Add sqlite support for aliases (#2957)

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17420
This commit is contained in:
Zhihe Li committed 2025-09-03 11:41:41 -04:00
1 parent a4bf02b21b
commit 3304def44a
9 files changed
+82 -18

No files matched your search

+11 -1
View File
@@ -18,10 +18,20 @@ export const modelMapping = {
scope_id: 'scope.scope_id',
created_time: 'created_time',
},
alias: {
id: 'id',
type: 'type',
name: 'name',
description: 'description',
destination_id: 'destination_id',
value: 'value',
scope_id: 'scope.scope_id',
created_time: 'created_time',
},
};
// A list of tables that we support searching using FTS5 in SQLite.
export const searchTables = new Set(['target']);
export const searchTables = new Set(['target', 'alias']);
export default class SqliteDbService extends Service {
// =attributes
+54 -11
View File
@@ -10,17 +10,8 @@ PRAGMA writable_schema = 0;
VACUUM;
PRAGMA integrity_check;`;
export const CREATE_TABLES = (version) => `
BEGIN;
PRAGMA user_version = ${version};
CREATE TABLE IF NOT EXISTS token (
id TEXT NOT NULL PRIMARY KEY,
token TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS target (
const createTargetTables = `
CREATE TABLE IF NOT EXISTS target (
id TEXT NOT NULL PRIMARY KEY,
type TEXT NOT NULL,
name TEXT NOT NULL UNIQUE,
@@ -60,8 +51,60 @@ END;
CREATE TRIGGER IF NOT EXISTS target_ad AFTER DELETE ON target BEGIN
INSERT INTO target_fts(target_fts, rowid, id, type, name, description, address, scope_id, created_time)
VALUES('delete', old.rowid, old.id, old.type, old.name, old.description, old.address, old.scope_id, old.created_time);
END;`;
const createAliasTables = `
CREATE TABLE IF NOT EXISTS alias (
id TEXT NOT NULL PRIMARY KEY,
type TEXT NOT NULL,
name TEXT,
description TEXT,
destination_id TEXT,
value TEXT,
scope_id TEXT NOT NULL,
created_time TEXT NOT NULL,
data TEXT NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_alias_created_time ON alias(created_time DESC);
CREATE VIRTUAL TABLE IF NOT EXISTS alias_fts USING fts5(
id,
type,
name,
description,
destination_id,
value,
scope_id,
created_time,
content='',
);
CREATE TRIGGER IF NOT EXISTS alias_ai AFTER INSERT ON alias BEGIN
INSERT INTO alias_fts(
id, type, name, description, destination_id, value, scope_id, created_time
) VALUES (
new.id, new.type, new.name, new.description, new.destination_id, new.value, new.scope_id, new.created_time
);
END;
CREATE TRIGGER IF NOT EXISTS alias_ad AFTER DELETE ON alias BEGIN
INSERT INTO alias_fts(alias_fts, rowid, id, type, name, description, destination_id, value, scope_id, created_time)
VALUES('delete', old.rowid, old.id, old.type, old.name, old.description, old.destination_id, old.value, old.scope_id, old.created_time);
END;`;
export const CREATE_TABLES = (version) => `
BEGIN;
PRAGMA user_version = ${version};
CREATE TABLE IF NOT EXISTS token (
id TEXT NOT NULL PRIMARY KEY,
token TEXT NOT NULL
);
${createTargetTables}
${createAliasTables}
COMMIT;`;
export const INSERT_STATEMENTS = (resource, items, modelMapping) => {
@@ -123,7 +123,6 @@ export default class ScopesScopeAliasesIndexRoute extends Route {
'alias',
{
scope_id,
query: { filters: { scope_id: [{ equals: scope_id }] } },
page: 1,
pageSize: 1,
},
@@ -4,12 +4,13 @@
*/
import { module, test } from 'qunit';
import { visit, currentURL, click, fillIn } from '@ember/test-helpers';
import { click, currentURL, fillIn, visit } from '@ember/test-helpers';
import { setupApplicationTest } from 'admin/tests/helpers';
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
import { Response } from 'miragejs';
import { authenticateSession } from 'ember-simple-auth/test-support';
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
import { setupSqlite } from 'api/test-support/helpers/sqlite';
import * as commonSelectors from 'admin/tests/helpers/selectors';
import * as selectors from './selectors';
import { setRunOptions } from 'ember-a11y-testing/test-support';
@@ -17,6 +18,7 @@ import { setRunOptions } from 'ember-a11y-testing/test-support';
module('Acceptance | aliases | create', function (hooks) {
setupApplicationTest(hooks);
setupMirage(hooks);
setupSqlite(hooks);
setupIndexedDb(hooks);
let features;
@@ -4,17 +4,19 @@
*/
import { module, test } from 'qunit';
import { visit, click } from '@ember/test-helpers';
import { click, visit } from '@ember/test-helpers';
import { setupApplicationTest } from 'admin/tests/helpers';
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
import { authenticateSession } from 'ember-simple-auth/test-support';
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
import { setupSqlite } from 'api/test-support/helpers/sqlite';
import * as commonSelectors from 'admin/tests/helpers/selectors';
import { setRunOptions } from 'ember-a11y-testing/test-support';
module('Acceptance | aliases | delete', function (hooks) {
setupApplicationTest(hooks);
setupMirage(hooks);
setupSqlite(hooks);
setupIndexedDb(hooks);
let aliasCount;
@@ -8,6 +8,7 @@ import { visit, click, currentURL, waitFor, fillIn } from '@ember/test-helpers';
import { setupApplicationTest } from 'admin/tests/helpers';
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
import { setupSqlite } from 'api/test-support/helpers/sqlite';
import { authenticateSession } from 'ember-simple-auth/test-support';
import * as commonSelectors from 'admin/tests/helpers/selectors';
import * as selectors from './selectors';
@@ -17,6 +18,7 @@ import { setRunOptions } from 'ember-a11y-testing/test-support';
module('Acceptance | aliases | list', function (hooks) {
setupApplicationTest(hooks);
setupMirage(hooks);
setupSqlite(hooks);
setupIndexedDb(hooks);
let intl;
@@ -4,17 +4,19 @@
*/
import { module, test } from 'qunit';
import { visit, currentURL, click } from '@ember/test-helpers';
import { click, currentURL, visit } from '@ember/test-helpers';
import { setupApplicationTest } from 'admin/tests/helpers';
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
import { authenticateSession } from 'ember-simple-auth/test-support';
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
import { setupSqlite } from 'api/test-support/helpers/sqlite';
import * as commonSelectors from 'admin/tests/helpers/selectors';
import { setRunOptions } from 'ember-a11y-testing/test-support';
module('Acceptance | aliases | read', function (hooks) {
setupApplicationTest(hooks);
setupMirage(hooks);
setupSqlite(hooks);
setupIndexedDb(hooks);
const instances = {
@@ -4,10 +4,11 @@
*/
import { module, test } from 'qunit';
import { visit, click, fillIn } from '@ember/test-helpers';
import { click, fillIn, visit } from '@ember/test-helpers';
import { setupApplicationTest } from 'admin/tests/helpers';
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
import { setupSqlite } from 'api/test-support/helpers/sqlite';
import { authenticateSession } from 'ember-simple-auth/test-support';
import * as commonSelectors from 'admin/tests/helpers/selectors';
import { setRunOptions } from 'ember-a11y-testing/test-support';
@@ -15,6 +16,7 @@ import { setRunOptions } from 'ember-a11y-testing/test-support';
module('Acceptance | aliases | update', function (hooks) {
setupApplicationTest(hooks);
setupMirage(hooks);
setupSqlite(hooks);
setupIndexedDb(hooks);
let aliasCount;
@@ -5,9 +5,10 @@
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
import { waitUntil, visit } from '@ember/test-helpers';
import { visit, waitUntil } from '@ember/test-helpers';
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
import { setupSqlite } from 'api/test-support/helpers/sqlite';
import { setupIntl } from 'ember-intl/test-support';
import { authenticateSession } from 'ember-simple-auth/test-support';
@@ -15,6 +16,7 @@ module('Unit | Controller | scopes/scope/aliases/index', function (hooks) {
setupTest(hooks);
setupMirage(hooks);
setupIndexedDb(hooks);
setupSqlite(hooks);
setupIntl(hooks, 'en-us');
let intl;