@memberjunction/query-gen 5.37.0 → 5.39.0
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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +55 -0
- package/dist/cli/commands/export.js +6 -15
- package/dist/cli/commands/export.js.map +1 -1
- package/dist/core/QueryDatabaseWriter.d.ts.map +1 -1
- package/dist/core/QueryDatabaseWriter.js +14 -20
- package/dist/core/QueryDatabaseWriter.js.map +1 -1
- package/package.json +10 -10
- package/src/cli/commands/export.ts +6 -21
- package/src/core/QueryDatabaseWriter.ts +14 -23
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,60 @@
|
|
|
1
1
|
# @memberjunction/query-gen
|
|
2
2
|
|
|
3
|
+
## 5.39.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [361eb4c]
|
|
8
|
+
- Updated dependencies [f4bf584]
|
|
9
|
+
- Updated dependencies [7dfacc7]
|
|
10
|
+
- Updated dependencies [eaee99f]
|
|
11
|
+
- Updated dependencies [3c53858]
|
|
12
|
+
- Updated dependencies [d1cc0ad]
|
|
13
|
+
- Updated dependencies [db4addf]
|
|
14
|
+
- Updated dependencies [8c39dd9]
|
|
15
|
+
- Updated dependencies [0f9acba]
|
|
16
|
+
- Updated dependencies [ae74fd5]
|
|
17
|
+
- Updated dependencies [1b0f355]
|
|
18
|
+
- Updated dependencies [9bc2916]
|
|
19
|
+
- Updated dependencies [34fe6d1]
|
|
20
|
+
- Updated dependencies [a101a34]
|
|
21
|
+
- @memberjunction/core@5.39.0
|
|
22
|
+
- @memberjunction/sqlserver-dataprovider@5.39.0
|
|
23
|
+
- @memberjunction/ai-core-plus@5.39.0
|
|
24
|
+
- @memberjunction/core-entities@5.39.0
|
|
25
|
+
- @memberjunction/ai-prompts@5.39.0
|
|
26
|
+
- @memberjunction/global@5.39.0
|
|
27
|
+
- @memberjunction/ai@5.39.0
|
|
28
|
+
- @memberjunction/aiengine@5.39.0
|
|
29
|
+
- @memberjunction/ai-vectors-memory@5.39.0
|
|
30
|
+
|
|
31
|
+
## 5.38.0
|
|
32
|
+
|
|
33
|
+
### Patch Changes
|
|
34
|
+
|
|
35
|
+
- ebb0e3d: Eliminate provider.Refresh() from query save/delete paths, introduce MJQueryEntityExtended with child-relationship getters and business logic, migrate all QueryInfo consumers outside MJCore to use QueryEngine and entity types, remove dead QueryCacheManager, and replace 12 redundant RunView calls with QueryEngine cache reads. Fixes major performance bottleneck on large-entity deployments where every query save reloaded the entire metadata graph.
|
|
36
|
+
- Updated dependencies [6b6c321]
|
|
37
|
+
- Updated dependencies [4ee0b06]
|
|
38
|
+
- Updated dependencies [30f598d]
|
|
39
|
+
- Updated dependencies [748b2e7]
|
|
40
|
+
- Updated dependencies [ce7d2f5]
|
|
41
|
+
- Updated dependencies [275afda]
|
|
42
|
+
- Updated dependencies [8bd97f3]
|
|
43
|
+
- Updated dependencies [6a3ac36]
|
|
44
|
+
- Updated dependencies [c0b40c0]
|
|
45
|
+
- Updated dependencies [d5a51b3]
|
|
46
|
+
- Updated dependencies [3d739a3]
|
|
47
|
+
- Updated dependencies [ebb0e3d]
|
|
48
|
+
- @memberjunction/ai-core-plus@5.38.0
|
|
49
|
+
- @memberjunction/aiengine@5.38.0
|
|
50
|
+
- @memberjunction/core@5.38.0
|
|
51
|
+
- @memberjunction/core-entities@5.38.0
|
|
52
|
+
- @memberjunction/global@5.38.0
|
|
53
|
+
- @memberjunction/sqlserver-dataprovider@5.38.0
|
|
54
|
+
- @memberjunction/ai-prompts@5.38.0
|
|
55
|
+
- @memberjunction/ai-vectors-memory@5.38.0
|
|
56
|
+
- @memberjunction/ai@5.38.0
|
|
57
|
+
|
|
3
58
|
## 5.37.0
|
|
4
59
|
|
|
5
60
|
### Patch Changes
|
|
@@ -10,8 +10,9 @@ import ora from 'ora';
|
|
|
10
10
|
import chalk from 'chalk';
|
|
11
11
|
import * as fs from 'fs';
|
|
12
12
|
import * as path from 'path';
|
|
13
|
-
import { Metadata
|
|
13
|
+
import { Metadata } from '@memberjunction/core';
|
|
14
14
|
import { getSystemUser } from '../../utils/user-helpers.js';
|
|
15
|
+
import { QueryEngine } from '@memberjunction/core-entities';
|
|
15
16
|
import { extractErrorMessage } from '../../utils/error-handlers.js';
|
|
16
17
|
/**
|
|
17
18
|
* Execute the export command
|
|
@@ -34,7 +35,7 @@ export async function exportCommand(options) {
|
|
|
34
35
|
spinner.succeed('Metadata loaded');
|
|
35
36
|
// 3. Load queries from database
|
|
36
37
|
spinner.start('Loading queries from database...');
|
|
37
|
-
const queries =
|
|
38
|
+
const queries = loadQueriesFromDatabase(contextUser);
|
|
38
39
|
spinner.succeed(chalk.green(`Found ${queries.length} queries`));
|
|
39
40
|
// 4. Create output directory if it doesn't exist
|
|
40
41
|
if (!fs.existsSync(outputPath)) {
|
|
@@ -99,20 +100,10 @@ export async function exportCommand(options) {
|
|
|
99
100
|
}
|
|
100
101
|
}
|
|
101
102
|
/**
|
|
102
|
-
* Load all queries from
|
|
103
|
+
* Load all queries from QueryEngine's cache (already sorted by Name via BaseEngine)
|
|
103
104
|
*/
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
const result = await rv.RunView({
|
|
107
|
-
EntityName: 'MJ: Queries',
|
|
108
|
-
ExtraFilter: '',
|
|
109
|
-
OrderBy: 'Name',
|
|
110
|
-
ResultType: 'entity_object',
|
|
111
|
-
}, contextUser);
|
|
112
|
-
if (!result.Success) {
|
|
113
|
-
throw new Error(`Failed to load queries: ${result.ErrorMessage}`);
|
|
114
|
-
}
|
|
115
|
-
return result.Results || [];
|
|
105
|
+
function loadQueriesFromDatabase(_contextUser) {
|
|
106
|
+
return [...QueryEngine.Instance.Queries].sort((a, b) => a.Name.localeCompare(b.Name));
|
|
116
107
|
}
|
|
117
108
|
/**
|
|
118
109
|
* Convert MJQueryEntity to metadata record format
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryDatabaseWriter.d.ts","sourceRoot":"","sources":["../../src/core/QueryDatabaseWriter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"QueryDatabaseWriter.d.ts","sourceRoot":"","sources":["../../src/core/QueryDatabaseWriter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAkC,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAMhF,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7D;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,aAAa,CAAkC;;IAKvD;;;;;;;;;;;;;;OAcG;IACG,sBAAsB,CAC1B,gBAAgB,EAAE,cAAc,EAAE,EAClC,WAAW,EAAE,QAAQ,GACpB,OAAO,CAAC,WAAW,CAAC;IA4CvB;;;;OAIG;YACW,aAAa;IAmC3B;;;;;;;;;;OAUG;YACW,oBAAoB;CAoCnC"}
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
* are automatically extracted by MJQueryEntity.server.ts using AI analysis
|
|
6
6
|
* of the SQL template during the Save() operation.
|
|
7
7
|
*/
|
|
8
|
-
import { Metadata
|
|
8
|
+
import { Metadata } from '@memberjunction/core';
|
|
9
|
+
import { QueryEngine } from '@memberjunction/core-entities';
|
|
9
10
|
import { extractErrorMessage } from '../utils/error-handlers.js';
|
|
10
11
|
/**
|
|
11
12
|
* QueryDatabaseWriter class
|
|
@@ -109,26 +110,19 @@ export class QueryDatabaseWriter {
|
|
|
109
110
|
* @returns Category ID
|
|
110
111
|
*/
|
|
111
112
|
async findOrCreateCategory(categoryName, parentCategoryId, description, contextUser) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
EntityName: 'MJ: Query Categories',
|
|
123
|
-
ExtraFilter: filter,
|
|
124
|
-
ResultType: 'entity_object'
|
|
125
|
-
}, contextUser);
|
|
126
|
-
if (!result.Success) {
|
|
127
|
-
throw new Error(`Failed to search for category: ${result.ErrorMessage}`);
|
|
128
|
-
}
|
|
113
|
+
// Look up from QueryEngine's cached categories instead of hitting the DB
|
|
114
|
+
const nameLower = categoryName.trim().toLowerCase();
|
|
115
|
+
const existing = QueryEngine.Instance.Categories.find(c => {
|
|
116
|
+
if (c.Name.trim().toLowerCase() !== nameLower)
|
|
117
|
+
return false;
|
|
118
|
+
if (parentCategoryId) {
|
|
119
|
+
return c.ParentID?.trim().toLowerCase() === parentCategoryId.trim().toLowerCase();
|
|
120
|
+
}
|
|
121
|
+
return c.ParentID == null;
|
|
122
|
+
});
|
|
129
123
|
// If found, return existing category ID
|
|
130
|
-
if (
|
|
131
|
-
return
|
|
124
|
+
if (existing) {
|
|
125
|
+
return existing.ID;
|
|
132
126
|
}
|
|
133
127
|
// Category doesn't exist, create it
|
|
134
128
|
const md = new Metadata(); // global-provider-ok: query generation reads schema globally
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryDatabaseWriter.js","sourceRoot":"","sources":["../../src/core/QueryDatabaseWriter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAwB,QAAQ,
|
|
1
|
+
{"version":3,"file":"QueryDatabaseWriter.js","sourceRoot":"","sources":["../../src/core/QueryDatabaseWriter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/query-gen",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "5.
|
|
4
|
+
"version": "5.39.0",
|
|
5
5
|
"description": "AI-powered generation of domain-specific SQL query templates with automatic testing, refinement, and metadata export",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -28,15 +28,15 @@
|
|
|
28
28
|
"author": "MemberJunction",
|
|
29
29
|
"license": "MIT",
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@memberjunction/ai": "5.
|
|
32
|
-
"@memberjunction/ai-core-plus": "5.
|
|
33
|
-
"@memberjunction/aiengine": "5.
|
|
34
|
-
"@memberjunction/ai-prompts": "5.
|
|
35
|
-
"@memberjunction/ai-vectors-memory": "5.
|
|
36
|
-
"@memberjunction/core": "5.
|
|
37
|
-
"@memberjunction/core-entities": "5.
|
|
38
|
-
"@memberjunction/global": "5.
|
|
39
|
-
"@memberjunction/sqlserver-dataprovider": "5.
|
|
31
|
+
"@memberjunction/ai": "5.39.0",
|
|
32
|
+
"@memberjunction/ai-core-plus": "5.39.0",
|
|
33
|
+
"@memberjunction/aiengine": "5.39.0",
|
|
34
|
+
"@memberjunction/ai-prompts": "5.39.0",
|
|
35
|
+
"@memberjunction/ai-vectors-memory": "5.39.0",
|
|
36
|
+
"@memberjunction/core": "5.39.0",
|
|
37
|
+
"@memberjunction/core-entities": "5.39.0",
|
|
38
|
+
"@memberjunction/global": "5.39.0",
|
|
39
|
+
"@memberjunction/sqlserver-dataprovider": "5.39.0",
|
|
40
40
|
"chalk": "^5.6.2",
|
|
41
41
|
"commander": "^14.0.3",
|
|
42
42
|
"nunjucks": "^3.2.4",
|
|
@@ -11,9 +11,9 @@ import ora from 'ora';
|
|
|
11
11
|
import chalk from 'chalk';
|
|
12
12
|
import * as fs from 'fs';
|
|
13
13
|
import * as path from 'path';
|
|
14
|
-
import { Metadata,
|
|
14
|
+
import { Metadata, UserInfo } from '@memberjunction/core';
|
|
15
15
|
import { getSystemUser } from '../../utils/user-helpers';
|
|
16
|
-
import { MJQueryEntity } from '@memberjunction/core-entities';
|
|
16
|
+
import { MJQueryEntity, QueryEngine } from '@memberjunction/core-entities';
|
|
17
17
|
import { extractErrorMessage } from '../../utils/error-handlers';
|
|
18
18
|
import { QueryMetadataRecord } from '../../data/schema';
|
|
19
19
|
|
|
@@ -42,7 +42,7 @@ export async function exportCommand(options: Record<string, unknown>): Promise<v
|
|
|
42
42
|
|
|
43
43
|
// 3. Load queries from database
|
|
44
44
|
spinner.start('Loading queries from database...');
|
|
45
|
-
const queries =
|
|
45
|
+
const queries = loadQueriesFromDatabase(contextUser);
|
|
46
46
|
spinner.succeed(chalk.green(`Found ${queries.length} queries`));
|
|
47
47
|
|
|
48
48
|
// 4. Create output directory if it doesn't exist
|
|
@@ -115,25 +115,10 @@ export async function exportCommand(options: Record<string, unknown>): Promise<v
|
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
/**
|
|
118
|
-
* Load all queries from
|
|
118
|
+
* Load all queries from QueryEngine's cache (already sorted by Name via BaseEngine)
|
|
119
119
|
*/
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
const result = await rv.RunView<MJQueryEntity>(
|
|
123
|
-
{
|
|
124
|
-
EntityName: 'MJ: Queries',
|
|
125
|
-
ExtraFilter: '',
|
|
126
|
-
OrderBy: 'Name',
|
|
127
|
-
ResultType: 'entity_object',
|
|
128
|
-
},
|
|
129
|
-
contextUser
|
|
130
|
-
);
|
|
131
|
-
|
|
132
|
-
if (!result.Success) {
|
|
133
|
-
throw new Error(`Failed to load queries: ${result.ErrorMessage}`);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
return result.Results || [];
|
|
120
|
+
function loadQueriesFromDatabase(_contextUser: UserInfo): MJQueryEntity[] {
|
|
121
|
+
return [...QueryEngine.Instance.Queries].sort((a, b) => a.Name.localeCompare(b.Name));
|
|
137
122
|
}
|
|
138
123
|
|
|
139
124
|
/**
|
|
@@ -6,10 +6,11 @@
|
|
|
6
6
|
* of the SQL template during the Save() operation.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import { DatabaseProviderBase, Metadata,
|
|
9
|
+
import { DatabaseProviderBase, Metadata, UserInfo } from '@memberjunction/core';
|
|
10
10
|
import {
|
|
11
11
|
MJQueryEntity,
|
|
12
|
-
MJQueryCategoryEntity
|
|
12
|
+
MJQueryCategoryEntity,
|
|
13
|
+
QueryEngine
|
|
13
14
|
} from '@memberjunction/core-entities';
|
|
14
15
|
import { ValidatedQuery, WriteResult } from '../data/schema';
|
|
15
16
|
import { extractErrorMessage } from '../utils/error-handlers';
|
|
@@ -143,29 +144,19 @@ export class QueryDatabaseWriter {
|
|
|
143
144
|
description: string,
|
|
144
145
|
contextUser: UserInfo
|
|
145
146
|
): Promise<string> {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
const result = await rv.RunView<MJQueryCategoryEntity>({
|
|
157
|
-
EntityName: 'MJ: Query Categories',
|
|
158
|
-
ExtraFilter: filter,
|
|
159
|
-
ResultType: 'entity_object'
|
|
160
|
-
}, contextUser);
|
|
161
|
-
|
|
162
|
-
if (!result.Success) {
|
|
163
|
-
throw new Error(`Failed to search for category: ${result.ErrorMessage}`);
|
|
164
|
-
}
|
|
147
|
+
// Look up from QueryEngine's cached categories instead of hitting the DB
|
|
148
|
+
const nameLower = categoryName.trim().toLowerCase();
|
|
149
|
+
const existing = QueryEngine.Instance.Categories.find(c => {
|
|
150
|
+
if (c.Name.trim().toLowerCase() !== nameLower) return false;
|
|
151
|
+
if (parentCategoryId) {
|
|
152
|
+
return c.ParentID?.trim().toLowerCase() === parentCategoryId.trim().toLowerCase();
|
|
153
|
+
}
|
|
154
|
+
return c.ParentID == null;
|
|
155
|
+
});
|
|
165
156
|
|
|
166
157
|
// If found, return existing category ID
|
|
167
|
-
if (
|
|
168
|
-
return
|
|
158
|
+
if (existing) {
|
|
159
|
+
return existing.ID;
|
|
169
160
|
}
|
|
170
161
|
|
|
171
162
|
// Category doesn't exist, create it
|