sqlew 4.0.1 → 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +86 -0
- package/README.md +12 -8
- package/dist/cli/db-dump.d.ts +4 -0
- package/dist/cli/db-dump.d.ts.map +1 -1
- package/dist/cli/db-dump.js +89 -114
- package/dist/cli/db-dump.js.map +1 -1
- package/dist/cli/db-export.d.ts +1 -0
- package/dist/cli/db-export.d.ts.map +1 -1
- package/dist/cli/db-export.js +46 -80
- package/dist/cli/db-export.js.map +1 -1
- package/dist/cli/db-import.d.ts +1 -0
- package/dist/cli/db-import.d.ts.map +1 -1
- package/dist/cli/db-import.js +52 -90
- package/dist/cli/db-import.js.map +1 -1
- package/dist/cli.d.ts +10 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +57 -59
- package/dist/cli.js.map +1 -1
- package/dist/database/migrations/v4/20251127000002_v4_seed_help_system.d.ts.map +1 -1
- package/dist/database/migrations/v4/20251127000002_v4_seed_help_system.js +7 -4
- package/dist/database/migrations/v4/20251127000002_v4_seed_help_system.js.map +1 -1
- package/dist/database/operations/inserts.d.ts.map +1 -1
- package/dist/database/operations/inserts.js +7 -0
- package/dist/database/operations/inserts.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +70 -48
- package/dist/index.js.map +1 -1
- package/dist/tests/database/testing-config.d.ts +4 -0
- package/dist/tests/database/testing-config.d.ts.map +1 -1
- package/dist/tests/database/testing-config.js +1 -1
- package/dist/tests/database/testing-config.js.map +1 -1
- package/dist/tests/docker/native/test-harness.d.ts +56 -1
- package/dist/tests/docker/native/test-harness.d.ts.map +1 -1
- package/dist/tests/docker/native/test-harness.js +221 -5
- package/dist/tests/docker/native/test-harness.js.map +1 -1
- package/dist/tests/unit/utils/case-insensitive-validator.test.d.ts +2 -0
- package/dist/tests/unit/utils/case-insensitive-validator.test.d.ts.map +1 -0
- package/dist/tests/unit/utils/case-insensitive-validator.test.js +97 -0
- package/dist/tests/unit/utils/case-insensitive-validator.test.js.map +1 -0
- package/dist/tools/context/actions/create-policy.d.ts.map +1 -1
- package/dist/tools/context/actions/create-policy.js +5 -1
- package/dist/tools/context/actions/create-policy.js.map +1 -1
- package/dist/types.d.ts +10 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/case-insensitive-validator.d.ts +102 -0
- package/dist/utils/case-insensitive-validator.d.ts.map +1 -0
- package/dist/utils/case-insensitive-validator.js +144 -0
- package/dist/utils/case-insensitive-validator.js.map +1 -0
- package/dist/utils/exporter/export.d.ts +22 -7
- package/dist/utils/exporter/export.d.ts.map +1 -1
- package/dist/utils/exporter/export.js +33 -49
- package/dist/utils/exporter/export.js.map +1 -1
- package/dist/utils/importer/import.js +64 -27
- package/dist/utils/importer/import.js.map +1 -1
- package/dist/utils/importer/master-tables.d.ts +3 -1
- package/dist/utils/importer/master-tables.d.ts.map +1 -1
- package/dist/utils/importer/master-tables.js +7 -29
- package/dist/utils/importer/master-tables.js.map +1 -1
- package/dist/utils/sql-dump/core/generate-dump.d.ts.map +1 -1
- package/dist/utils/sql-dump/core/generate-dump.js +25 -5
- package/dist/utils/sql-dump/core/generate-dump.js.map +1 -1
- package/dist/utils/sql-dump/core/index-export.d.ts +3 -2
- package/dist/utils/sql-dump/core/index-export.d.ts.map +1 -1
- package/dist/utils/sql-dump/core/index-export.js +9 -9
- package/dist/utils/sql-dump/core/index-export.js.map +1 -1
- package/dist/utils/sql-dump/schema/indexes.d.ts +14 -0
- package/dist/utils/sql-dump/schema/indexes.d.ts.map +1 -1
- package/dist/utils/sql-dump/schema/indexes.js +81 -15
- package/dist/utils/sql-dump/schema/indexes.js.map +1 -1
- package/dist/utils/sql-dump/schema/tables.d.ts +4 -1
- package/dist/utils/sql-dump/schema/tables.d.ts.map +1 -1
- package/dist/utils/sql-dump/schema/tables.js +81 -51
- package/dist/utils/sql-dump/schema/tables.js.map +1 -1
- package/docs/cli/DATABASE_MIGRATION.md +62 -58
- package/docs/cli/DATA_EXPORT_IMPORT.md +403 -103
- package/docs/cli/README.md +95 -45
- package/package.json +4 -6
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Handles importing master tables with intelligent ID remapping:
|
|
5
5
|
* - Project-scoped tables (m_files, m_tags, m_scopes): Smart merge on UNIQUE (project_id, name/path)
|
|
6
|
-
* - Global tables (
|
|
6
|
+
* - Global tables (m_context_keys, etc.): Always create new IDs
|
|
7
|
+
*
|
|
8
|
+
* Note: Agent system removed in v4.0 - no agent imports
|
|
7
9
|
*
|
|
8
10
|
* Architectural Decision: Decision #253 - Smart merge for project-scoped master tables
|
|
9
11
|
*/
|
|
@@ -16,7 +18,7 @@
|
|
|
16
18
|
export async function importMasterTables(ctx) {
|
|
17
19
|
console.error(' Importing master tables...');
|
|
18
20
|
// Import order: no dependencies between master tables
|
|
19
|
-
|
|
21
|
+
// Note: importAgents removed in v4.0 (agent system deleted)
|
|
20
22
|
await importFiles(ctx);
|
|
21
23
|
await importContextKeys(ctx);
|
|
22
24
|
await importTags(ctx);
|
|
@@ -27,31 +29,7 @@ export async function importMasterTables(ctx) {
|
|
|
27
29
|
console.error(` ✓ Master tables imported (${getTotalMappings(ctx)} ID mappings created)`);
|
|
28
30
|
return ctx;
|
|
29
31
|
}
|
|
30
|
-
|
|
31
|
-
* Import v4_agents (global, create or reuse by name)
|
|
32
|
-
*/
|
|
33
|
-
async function importAgents(ctx) {
|
|
34
|
-
const agents = ctx.jsonData.master_tables.agents || [];
|
|
35
|
-
for (const agent of agents) {
|
|
36
|
-
// Check if agent exists by name (global lookup)
|
|
37
|
-
const existing = await ctx.knex('v4_agents')
|
|
38
|
-
.where({ name: agent.name })
|
|
39
|
-
.first();
|
|
40
|
-
if (existing) {
|
|
41
|
-
// Reuse existing global agent
|
|
42
|
-
ctx.mappings.agents.set(agent.id, existing.id);
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
// Create new agent
|
|
46
|
-
const [newId] = await ctx.knex('v4_agents').insert({
|
|
47
|
-
name: agent.name,
|
|
48
|
-
last_active_ts: agent.last_active_ts
|
|
49
|
-
});
|
|
50
|
-
ctx.mappings.agents.set(agent.id, newId);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
ctx.stats.master_tables.agents_created = agents.length;
|
|
54
|
-
}
|
|
32
|
+
// Note: importAgents function removed in v4.0 (agent system deleted)
|
|
55
33
|
/**
|
|
56
34
|
* Import v4_files (project-scoped, smart merge)
|
|
57
35
|
*/
|
|
@@ -241,10 +219,10 @@ async function importTaskStatuses(ctx) {
|
|
|
241
219
|
}
|
|
242
220
|
/**
|
|
243
221
|
* Get total number of ID mappings created
|
|
222
|
+
* Note: agents removed in v4.0
|
|
244
223
|
*/
|
|
245
224
|
function getTotalMappings(ctx) {
|
|
246
|
-
return (ctx.mappings.
|
|
247
|
-
ctx.mappings.files.size +
|
|
225
|
+
return (ctx.mappings.files.size +
|
|
248
226
|
ctx.mappings.context_keys.size +
|
|
249
227
|
ctx.mappings.tags.size +
|
|
250
228
|
ctx.mappings.scopes.size +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"master-tables.js","sourceRoot":"","sources":["../../../src/utils/importer/master-tables.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"master-tables.js","sourceRoot":"","sources":["../../../src/utils/importer/master-tables.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-dump.d.ts","sourceRoot":"","sources":["../../../../src/utils/sql-dump/core/generate-dump.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAWhE;;GAEG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,YAAY,CAAC;CACxB,GACL,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"generate-dump.d.ts","sourceRoot":"","sources":["../../../../src/utils/sql-dump/core/generate-dump.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAWhE;;GAEG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,YAAY,CAAC;CACxB,GACL,OAAO,CAAC,MAAM,CAAC,CAgNjB"}
|
|
@@ -3,7 +3,7 @@ import { generateHeader } from '../generators/headers.js';
|
|
|
3
3
|
import { generateForeignKeyControls, generateTransactionControl } from '../generators/controls.js';
|
|
4
4
|
import { getAllTables, getCreateTableStatement } from './table-export.js';
|
|
5
5
|
import { getAllViews, getCreateViewStatement } from './view-export.js';
|
|
6
|
-
import { getAllIndexes, getCreateIndexStatement } from './index-export.js';
|
|
6
|
+
import { getAllIndexes, getCreateIndexStatement, getIndexMetadata } from './index-export.js';
|
|
7
7
|
import { generateSequenceResets } from './sequence-reset.js';
|
|
8
8
|
import { getTableDependencies, topologicalSort } from './dependency-sort.js';
|
|
9
9
|
import { getPrimaryKeyColumns } from '../schema/primary-keys.js';
|
|
@@ -27,10 +27,17 @@ export async function generateSqlDump(knex, format, options = {}) {
|
|
|
27
27
|
statements.push('');
|
|
28
28
|
// Get tables to dump
|
|
29
29
|
// Include knex_migrations table when schema is included for complete migration state
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
let tablesToDump;
|
|
31
|
+
if (requestedTables && requestedTables.length > 0) {
|
|
32
|
+
// When specific tables are requested, use them directly (no prefix filtering)
|
|
33
|
+
// This allows dumping tables with any prefix for testing and flexibility
|
|
34
|
+
tablesToDump = requestedTables;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
// No specific tables requested: get all tables with default v4_ prefix filter
|
|
38
|
+
const allTables = await getAllTables(knex, includeSchema);
|
|
39
|
+
tablesToDump = allTables;
|
|
40
|
+
}
|
|
34
41
|
// Sort tables by foreign key dependencies for PostgreSQL compatibility
|
|
35
42
|
// Parent tables must be created before child tables
|
|
36
43
|
const dependencies = await getTableDependencies(knex, tablesToDump);
|
|
@@ -81,6 +88,7 @@ export async function generateSqlDump(knex, format, options = {}) {
|
|
|
81
88
|
console.warn('Warning: Could not retrieve views:', err);
|
|
82
89
|
}
|
|
83
90
|
// Generate CREATE INDEX statements
|
|
91
|
+
// Skip single-column UNIQUE indexes (already output as UNIQUE constraint in CREATE TABLE)
|
|
84
92
|
try {
|
|
85
93
|
const indexStatements = [];
|
|
86
94
|
for (const table of sortedTables) {
|
|
@@ -88,6 +96,18 @@ export async function generateSqlDump(knex, format, options = {}) {
|
|
|
88
96
|
if (indexes.length > 0) {
|
|
89
97
|
for (const indexName of indexes) {
|
|
90
98
|
try {
|
|
99
|
+
// Skip foreign key indexes - MySQL auto-creates these with FK constraints
|
|
100
|
+
// They typically have names ending with '_foreign' or '_fkey'
|
|
101
|
+
if (indexName.endsWith('_foreign') || indexName.endsWith('_fkey')) {
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
// Check if this is a single-column UNIQUE index
|
|
105
|
+
// These are already included in CREATE TABLE as column-level UNIQUE constraints
|
|
106
|
+
const metadata = await getIndexMetadata(knex, indexName, table);
|
|
107
|
+
if (metadata && metadata.isUnique && metadata.columns.length === 1) {
|
|
108
|
+
// Skip - already output as UNIQUE constraint in CREATE TABLE
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
91
111
|
const createIndexSql = await getCreateIndexStatement(knex, indexName, format);
|
|
92
112
|
indexStatements.push(`-- Index: ${indexName} on ${table}`);
|
|
93
113
|
indexStatements.push(createIndexSql);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-dump.js","sourceRoot":"","sources":["../../../../src/utils/sql-dump/core/generate-dump.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAI5D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"generate-dump.js","sourceRoot":"","sources":["../../../../src/utils/sql-dump/core/generate-dump.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { Knex } from 'knex';
|
|
2
2
|
import type { DatabaseFormat } from '../types.js';
|
|
3
|
-
import { getAllIndexes } from '../schema/indexes.js';
|
|
4
|
-
export {
|
|
3
|
+
import { getAllIndexes, getIndexMetadata } from '../schema/indexes.js';
|
|
4
|
+
export type { IndexMetadata } from '../schema/indexes.js';
|
|
5
|
+
export { getAllIndexes, getIndexMetadata };
|
|
5
6
|
/**
|
|
6
7
|
* Get CREATE INDEX statement for an index
|
|
7
8
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-export.d.ts","sourceRoot":"","sources":["../../../../src/utils/sql-dump/core/index-export.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index-export.d.ts","sourceRoot":"","sources":["../../../../src/utils/sql-dump/core/index-export.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACvE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC;AAE3C;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA8L1H"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
// core/index-export.ts - Index export utilities
|
|
2
2
|
import { convertIdentifierQuotes, } from '../../sql-dump-converters.js';
|
|
3
|
-
import { getAllIndexes } from '../schema/indexes.js';
|
|
4
|
-
export { getAllIndexes };
|
|
3
|
+
import { getAllIndexes, getIndexMetadata } from '../schema/indexes.js';
|
|
4
|
+
export { getAllIndexes, getIndexMetadata };
|
|
5
5
|
/**
|
|
6
6
|
* Get CREATE INDEX statement for an index
|
|
7
7
|
*/
|
|
8
8
|
export async function getCreateIndexStatement(knex, indexName, targetFormat) {
|
|
9
9
|
const client = knex.client.config.client;
|
|
10
10
|
if (client === 'better-sqlite3' || client === 'sqlite3') {
|
|
11
|
-
const result = await knex.raw(`
|
|
12
|
-
SELECT sql, tbl_name FROM sqlite_master
|
|
13
|
-
WHERE type='index' AND name=?
|
|
11
|
+
const result = await knex.raw(`
|
|
12
|
+
SELECT sql, tbl_name FROM sqlite_master
|
|
13
|
+
WHERE type='index' AND name=?
|
|
14
14
|
`, [indexName]);
|
|
15
15
|
if (result.length === 0 || !result[0].sql) {
|
|
16
16
|
throw new Error(`Index ${indexName} not found`);
|
|
@@ -121,10 +121,10 @@ export async function getCreateIndexStatement(knex, indexName, targetFormat) {
|
|
|
121
121
|
}
|
|
122
122
|
else if (client === 'pg') {
|
|
123
123
|
// Get index definition from PostgreSQL
|
|
124
|
-
const result = await knex.raw(`
|
|
125
|
-
SELECT indexdef
|
|
126
|
-
FROM pg_indexes
|
|
127
|
-
WHERE schemaname = 'public' AND indexname = ?
|
|
124
|
+
const result = await knex.raw(`
|
|
125
|
+
SELECT indexdef
|
|
126
|
+
FROM pg_indexes
|
|
127
|
+
WHERE schemaname = 'public' AND indexname = ?
|
|
128
128
|
`, [indexName]);
|
|
129
129
|
if (result.rows.length === 0) {
|
|
130
130
|
throw new Error(`Index ${indexName} not found`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-export.js","sourceRoot":"","sources":["../../../../src/utils/sql-dump/core/index-export.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAIhD,OAAO,EACL,uBAAuB,GACxB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index-export.js","sourceRoot":"","sources":["../../../../src/utils/sql-dump/core/index-export.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
import type { Knex } from 'knex';
|
|
2
|
+
/**
|
|
3
|
+
* Index metadata for filtering duplicate UNIQUE constraints
|
|
4
|
+
*/
|
|
5
|
+
export interface IndexMetadata {
|
|
6
|
+
name: string;
|
|
7
|
+
table: string;
|
|
8
|
+
columns: string[];
|
|
9
|
+
isUnique: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Get index metadata for a specific index
|
|
13
|
+
* Used to detect single-column UNIQUE indexes that are already in CREATE TABLE
|
|
14
|
+
*/
|
|
15
|
+
export declare function getIndexMetadata(knex: Knex, indexName: string, table: string): Promise<IndexMetadata | null>;
|
|
2
16
|
/**
|
|
3
17
|
* Get all indexes for a table
|
|
4
18
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexes.d.ts","sourceRoot":"","sources":["../../../../src/utils/sql-dump/schema/indexes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqChF"}
|
|
1
|
+
{"version":3,"file":"indexes.d.ts","sourceRoot":"","sources":["../../../../src/utils/sql-dump/schema/indexes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAoElH;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqChF"}
|
|
@@ -1,22 +1,88 @@
|
|
|
1
1
|
// schema/indexes.ts - Index detection utilities
|
|
2
|
+
/**
|
|
3
|
+
* Get index metadata for a specific index
|
|
4
|
+
* Used to detect single-column UNIQUE indexes that are already in CREATE TABLE
|
|
5
|
+
*/
|
|
6
|
+
export async function getIndexMetadata(knex, indexName, table) {
|
|
7
|
+
const client = knex.client.config.client;
|
|
8
|
+
if (client === 'better-sqlite3' || client === 'sqlite3') {
|
|
9
|
+
// Get index info from SQLite
|
|
10
|
+
// Note: PRAGMA doesn't support parameter binding, use template literal with escaped table name
|
|
11
|
+
const escapedTable = table.replace(/'/g, "''");
|
|
12
|
+
const escapedIndexName = indexName.replace(/'/g, "''");
|
|
13
|
+
const indexList = await knex.raw(`PRAGMA index_list('${escapedTable}')`);
|
|
14
|
+
const indexEntry = indexList.find((idx) => idx.name === indexName);
|
|
15
|
+
if (!indexEntry) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
const indexInfo = await knex.raw(`PRAGMA index_info('${escapedIndexName}')`);
|
|
19
|
+
if (!indexInfo || indexInfo.length === 0) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
const columns = indexInfo.map((col) => col.name);
|
|
23
|
+
return {
|
|
24
|
+
name: indexName,
|
|
25
|
+
table,
|
|
26
|
+
columns,
|
|
27
|
+
isUnique: indexEntry.unique === 1,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
else if (client === 'mysql' || client === 'mysql2') {
|
|
31
|
+
const result = await knex.raw(`SHOW INDEXES FROM ?? WHERE Key_name = ?`, [table, indexName]);
|
|
32
|
+
if (result[0].length === 0) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
const columns = result[0].map((row) => row.Column_name);
|
|
36
|
+
const isUnique = result[0][0].Non_unique === 0;
|
|
37
|
+
return {
|
|
38
|
+
name: indexName,
|
|
39
|
+
table,
|
|
40
|
+
columns,
|
|
41
|
+
isUnique,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
else if (client === 'pg') {
|
|
45
|
+
// Get index definition and uniqueness from PostgreSQL
|
|
46
|
+
const result = await knex.raw(`
|
|
47
|
+
SELECT
|
|
48
|
+
i.indisunique AS is_unique,
|
|
49
|
+
ARRAY_AGG(a.attname ORDER BY array_position(i.indkey, a.attnum)) AS columns
|
|
50
|
+
FROM pg_index i
|
|
51
|
+
JOIN pg_class c ON c.oid = i.indexrelid
|
|
52
|
+
JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey)
|
|
53
|
+
WHERE c.relname = ?
|
|
54
|
+
GROUP BY i.indisunique
|
|
55
|
+
`, [indexName]);
|
|
56
|
+
if (result.rows.length === 0) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
name: indexName,
|
|
61
|
+
table,
|
|
62
|
+
columns: result.rows[0].columns,
|
|
63
|
+
isUnique: result.rows[0].is_unique,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
2
68
|
/**
|
|
3
69
|
* Get all indexes for a table
|
|
4
70
|
*/
|
|
5
71
|
export async function getAllIndexes(knex, table) {
|
|
6
72
|
const client = knex.client.config.client;
|
|
7
73
|
if (client === 'better-sqlite3' || client === 'sqlite3') {
|
|
8
|
-
const result = await knex.raw(`
|
|
9
|
-
SELECT name FROM sqlite_master
|
|
10
|
-
WHERE type='index'
|
|
11
|
-
AND tbl_name=?
|
|
12
|
-
AND sql IS NOT NULL
|
|
13
|
-
ORDER BY name
|
|
74
|
+
const result = await knex.raw(`
|
|
75
|
+
SELECT name FROM sqlite_master
|
|
76
|
+
WHERE type='index'
|
|
77
|
+
AND tbl_name=?
|
|
78
|
+
AND sql IS NOT NULL
|
|
79
|
+
ORDER BY name
|
|
14
80
|
`, [table]);
|
|
15
81
|
return result.map((row) => row.name);
|
|
16
82
|
}
|
|
17
83
|
else if (client === 'mysql' || client === 'mysql2') {
|
|
18
|
-
const result = await knex.raw(`
|
|
19
|
-
SHOW INDEXES FROM ?? WHERE Key_name != 'PRIMARY'
|
|
84
|
+
const result = await knex.raw(`
|
|
85
|
+
SHOW INDEXES FROM ?? WHERE Key_name != 'PRIMARY'
|
|
20
86
|
`, [table]);
|
|
21
87
|
// Group by index name (indexes can span multiple columns)
|
|
22
88
|
const indexNames = new Set();
|
|
@@ -26,13 +92,13 @@ export async function getAllIndexes(knex, table) {
|
|
|
26
92
|
return Array.from(indexNames).sort();
|
|
27
93
|
}
|
|
28
94
|
else if (client === 'pg') {
|
|
29
|
-
const result = await knex.raw(`
|
|
30
|
-
SELECT indexname
|
|
31
|
-
FROM pg_indexes
|
|
32
|
-
WHERE schemaname = 'public'
|
|
33
|
-
AND tablename = ?
|
|
34
|
-
AND indexname NOT LIKE '%_pkey'
|
|
35
|
-
ORDER BY indexname
|
|
95
|
+
const result = await knex.raw(`
|
|
96
|
+
SELECT indexname
|
|
97
|
+
FROM pg_indexes
|
|
98
|
+
WHERE schemaname = 'public'
|
|
99
|
+
AND tablename = ?
|
|
100
|
+
AND indexname NOT LIKE '%_pkey'
|
|
101
|
+
ORDER BY indexname
|
|
36
102
|
`, [table]);
|
|
37
103
|
return result.rows.map((row) => row.indexname);
|
|
38
104
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexes.js","sourceRoot":"","sources":["../../../../src/utils/sql-dump/schema/indexes.ts"],"names":[],"mappings":"AAAA,gDAAgD;
|
|
1
|
+
{"version":3,"file":"indexes.js","sourceRoot":"","sources":["../../../../src/utils/sql-dump/schema/indexes.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,11 @@ import type { Knex } from 'knex';
|
|
|
2
2
|
import type { DatabaseFormat } from '../types.js';
|
|
3
3
|
/**
|
|
4
4
|
* Get all table names from the database (excluding system tables)
|
|
5
|
+
* @param knex Knex instance
|
|
6
|
+
* @param includeKnexTables Include knex_* migration tables
|
|
7
|
+
* @param tablePrefix Filter tables by prefix (default: 'v4_' for v4 schema only)
|
|
5
8
|
*/
|
|
6
|
-
export declare function getAllTables(knex: Knex, includeKnexTables?: boolean): Promise<string[]>;
|
|
9
|
+
export declare function getAllTables(knex: Knex, includeKnexTables?: boolean, tablePrefix?: string): Promise<string[]>;
|
|
7
10
|
/**
|
|
8
11
|
* Get CREATE TABLE statement for a table using knex-schema-inspector
|
|
9
12
|
* Replaces regex-based SQL conversion with metadata-driven approach
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../../../../src/utils/sql-dump/schema/tables.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAIjC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../../../../src/utils/sql-dump/schema/tables.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAIjC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAuRlD;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,iBAAiB,UAAQ,EAAE,WAAW,SAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAyChH;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAuOtH"}
|