@mastra/mysql 0.3.2 → 0.3.3-alpha.1
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 +152 -0
- package/dist/index.cjs +228 -25
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +229 -26
- package/dist/index.js.map +1 -1
- package/dist/storage/domains/datasets/index.d.ts +7 -7
- package/dist/storage/domains/datasets/index.d.ts.map +1 -1
- package/dist/storage/domains/experiments/index.d.ts +5 -1
- package/dist/storage/domains/experiments/index.d.ts.map +1 -1
- package/dist/storage/domains/scores/index.d.ts +13 -5
- package/dist/storage/domains/scores/index.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MastraError, ErrorCategory, ErrorDomain } from '@mastra/core/error';
|
|
2
|
-
import { StoreOperations, TABLE_CONFIGS, TABLE_WORKFLOW_SNAPSHOT, TABLE_SPANS, AgentsStorage, TABLE_AGENTS, TABLE_AGENT_VERSIONS, AGENTS_SCHEMA, AGENT_VERSIONS_SCHEMA, createStorageErrorId, normalizePerPage, calculatePagination, BlobStore, SKILL_BLOBS_SCHEMA, TABLE_SKILL_BLOBS, DatasetsStorage, TABLE_DATASETS, TABLE_DATASET_ITEMS, TABLE_DATASET_VERSIONS, DATASETS_SCHEMA, DATASET_ITEMS_SCHEMA, DATASET_VERSIONS_SCHEMA,
|
|
2
|
+
import { StoreOperations, TABLE_CONFIGS, TABLE_WORKFLOW_SNAPSHOT, TABLE_SPANS, AgentsStorage, TABLE_AGENTS, TABLE_AGENT_VERSIONS, AGENTS_SCHEMA, AGENT_VERSIONS_SCHEMA, createStorageErrorId, normalizePerPage, calculatePagination, BlobStore, SKILL_BLOBS_SCHEMA, TABLE_SKILL_BLOBS, DatasetsStorage, TABLE_DATASETS, TABLE_DATASET_ITEMS, TABLE_DATASET_VERSIONS, DATASETS_SCHEMA, DATASET_ITEMS_SCHEMA, DATASET_VERSIONS_SCHEMA, TABLE_EXPERIMENTS, TABLE_EXPERIMENT_RESULTS, ExperimentsStorage, EXPERIMENTS_SCHEMA, EXPERIMENT_RESULTS_SCHEMA, MCPClientsStorage, TABLE_MCP_CLIENTS, TABLE_MCP_CLIENT_VERSIONS, MCP_CLIENTS_SCHEMA, MCP_CLIENT_VERSIONS_SCHEMA, MCPServersStorage, TABLE_MCP_SERVERS, TABLE_MCP_SERVER_VERSIONS, MCP_SERVERS_SCHEMA, MCP_SERVER_VERSIONS_SCHEMA, MemoryStorage, TABLE_THREADS, TABLE_MESSAGES, TABLE_RESOURCES, TABLE_SCHEMAS, OBSERVATIONAL_MEMORY_TABLE_SCHEMA, ObservabilityStorage, SPAN_SCHEMA, listTracesArgsSchema, TraceStatus, toTraceSpans, PromptBlocksStorage, TABLE_PROMPT_BLOCKS, TABLE_PROMPT_BLOCK_VERSIONS, PROMPT_BLOCKS_SCHEMA, PROMPT_BLOCK_VERSIONS_SCHEMA, ScorerDefinitionsStorage, TABLE_SCORER_DEFINITIONS, TABLE_SCORER_DEFINITION_VERSIONS, SCORER_DEFINITIONS_SCHEMA, SCORER_DEFINITION_VERSIONS_SCHEMA, ScoresStorage, TABLE_SCORERS, SCORERS_SCHEMA, SkillsStorage, TABLE_SKILLS, TABLE_SKILL_VERSIONS, SKILLS_SCHEMA, SKILL_VERSIONS_SCHEMA, WorkflowsStorage, WorkspacesStorage, TABLE_WORKSPACES, TABLE_WORKSPACE_VERSIONS, WORKSPACES_SCHEMA, WORKSPACE_VERSIONS_SCHEMA, MastraCompositeStore, TABLE_FAVORITES, BackgroundTasksStorage, TABLE_BACKGROUND_TASKS, ChannelsStorage, TABLE_CHANNEL_INSTALLATIONS, TABLE_CHANNEL_CONFIG, FavoritesStorage, FAVORITES_SCHEMA, SchedulesStorage, TABLE_SCHEDULES, TABLE_SCHEDULE_TRIGGERS, ToolProviderConnectionsStorage, TABLE_TOOL_PROVIDER_CONNECTIONS, TOOL_PROVIDER_CONNECTIONS_SCHEMA } from '@mastra/core/storage';
|
|
3
3
|
import { createPool } from 'mysql2/promise';
|
|
4
4
|
import { parseSqlIdentifier } from '@mastra/core/utils';
|
|
5
5
|
import { randomUUID } from 'crypto';
|
|
@@ -2050,11 +2050,11 @@ function parseJSON(value) {
|
|
|
2050
2050
|
try {
|
|
2051
2051
|
return JSON.parse(value);
|
|
2052
2052
|
} catch {
|
|
2053
|
-
return
|
|
2053
|
+
return value;
|
|
2054
2054
|
}
|
|
2055
2055
|
}
|
|
2056
2056
|
if (typeof value === "object") return value;
|
|
2057
|
-
return
|
|
2057
|
+
return value;
|
|
2058
2058
|
}
|
|
2059
2059
|
function jsonArg(value) {
|
|
2060
2060
|
return value === void 0 || value === null ? null : JSON.stringify(value);
|
|
@@ -2143,7 +2143,17 @@ var DatasetsMySQL = class _DatasetsMySQL extends DatasetsStorage {
|
|
|
2143
2143
|
await this.operations.alterTable({
|
|
2144
2144
|
tableName: TABLE_DATASETS,
|
|
2145
2145
|
schema: DATASETS_SCHEMA,
|
|
2146
|
-
ifNotExists: [
|
|
2146
|
+
ifNotExists: [
|
|
2147
|
+
"organizationId",
|
|
2148
|
+
"projectId",
|
|
2149
|
+
"candidateKey",
|
|
2150
|
+
"candidateId",
|
|
2151
|
+
"requestContextSchema",
|
|
2152
|
+
"tags",
|
|
2153
|
+
"targetType",
|
|
2154
|
+
"targetIds",
|
|
2155
|
+
"scorerIds"
|
|
2156
|
+
]
|
|
2147
2157
|
});
|
|
2148
2158
|
await this.operations.alterTable({
|
|
2149
2159
|
tableName: TABLE_DATASET_ITEMS,
|
|
@@ -2158,6 +2168,19 @@ var DatasetsMySQL = class _DatasetsMySQL extends DatasetsStorage {
|
|
|
2158
2168
|
await this.pool.execute(`DELETE FROM ${formatTableName(TABLE_DATASET_ITEMS)}`);
|
|
2159
2169
|
await this.pool.execute(`DELETE FROM ${formatTableName(TABLE_DATASETS)}`);
|
|
2160
2170
|
}
|
|
2171
|
+
async experimentTablesExist() {
|
|
2172
|
+
try {
|
|
2173
|
+
const [rows] = await this.pool.execute(
|
|
2174
|
+
`SELECT COUNT(*) AS c FROM information_schema.tables
|
|
2175
|
+
WHERE table_schema = DATABASE() AND table_name IN (?, ?)`,
|
|
2176
|
+
[TABLE_EXPERIMENTS, TABLE_EXPERIMENT_RESULTS]
|
|
2177
|
+
);
|
|
2178
|
+
const row = Array.isArray(rows) ? rows[0] : void 0;
|
|
2179
|
+
return Number(row?.c ?? 0) === 2;
|
|
2180
|
+
} catch {
|
|
2181
|
+
return false;
|
|
2182
|
+
}
|
|
2183
|
+
}
|
|
2161
2184
|
// --- Row transformers ---
|
|
2162
2185
|
mapDataset(row) {
|
|
2163
2186
|
return {
|
|
@@ -2167,6 +2190,11 @@ var DatasetsMySQL = class _DatasetsMySQL extends DatasetsStorage {
|
|
|
2167
2190
|
metadata: parseJSON(row.metadata),
|
|
2168
2191
|
inputSchema: parseJSON(row.inputSchema),
|
|
2169
2192
|
groundTruthSchema: parseJSON(row.groundTruthSchema),
|
|
2193
|
+
requestContextSchema: parseJSON(row.requestContextSchema),
|
|
2194
|
+
tags: parseJSON(row.tags) ?? null,
|
|
2195
|
+
targetType: row.targetType ?? null,
|
|
2196
|
+
targetIds: parseJSON(row.targetIds) ?? null,
|
|
2197
|
+
scorerIds: parseJSON(row.scorerIds) ?? null,
|
|
2170
2198
|
version: row.version,
|
|
2171
2199
|
organizationId: row.organizationId ?? null,
|
|
2172
2200
|
projectId: row.projectId ?? null,
|
|
@@ -2228,6 +2256,10 @@ var DatasetsMySQL = class _DatasetsMySQL extends DatasetsStorage {
|
|
|
2228
2256
|
metadata: jsonArg(input.metadata),
|
|
2229
2257
|
inputSchema: jsonArg(input.inputSchema),
|
|
2230
2258
|
groundTruthSchema: jsonArg(input.groundTruthSchema),
|
|
2259
|
+
requestContextSchema: jsonArg(input.requestContextSchema),
|
|
2260
|
+
targetType: input.targetType ?? null,
|
|
2261
|
+
targetIds: jsonArg(input.targetIds),
|
|
2262
|
+
scorerIds: jsonArg(input.scorerIds),
|
|
2231
2263
|
version: 0,
|
|
2232
2264
|
organizationId: input.organizationId ?? null,
|
|
2233
2265
|
projectId: input.projectId ?? null,
|
|
@@ -2244,6 +2276,10 @@ var DatasetsMySQL = class _DatasetsMySQL extends DatasetsStorage {
|
|
|
2244
2276
|
metadata: input.metadata,
|
|
2245
2277
|
inputSchema: input.inputSchema ?? void 0,
|
|
2246
2278
|
groundTruthSchema: input.groundTruthSchema ?? void 0,
|
|
2279
|
+
requestContextSchema: input.requestContextSchema ?? void 0,
|
|
2280
|
+
targetType: input.targetType ?? null,
|
|
2281
|
+
targetIds: input.targetIds ?? null,
|
|
2282
|
+
scorerIds: input.scorerIds ?? null,
|
|
2247
2283
|
version: 0,
|
|
2248
2284
|
organizationId: input.organizationId ?? null,
|
|
2249
2285
|
projectId: input.projectId ?? null,
|
|
@@ -2263,11 +2299,18 @@ var DatasetsMySQL = class _DatasetsMySQL extends DatasetsStorage {
|
|
|
2263
2299
|
);
|
|
2264
2300
|
}
|
|
2265
2301
|
}
|
|
2266
|
-
async getDatasetById({
|
|
2302
|
+
async getDatasetById({
|
|
2303
|
+
id,
|
|
2304
|
+
filters
|
|
2305
|
+
}) {
|
|
2267
2306
|
try {
|
|
2268
2307
|
const row = await this.operations.load({
|
|
2269
2308
|
tableName: TABLE_DATASETS,
|
|
2270
|
-
keys: {
|
|
2309
|
+
keys: {
|
|
2310
|
+
id,
|
|
2311
|
+
organizationId: filters?.organizationId,
|
|
2312
|
+
projectId: filters?.projectId
|
|
2313
|
+
}
|
|
2271
2314
|
});
|
|
2272
2315
|
return row ? this.mapDataset(row) : null;
|
|
2273
2316
|
} catch (error) {
|
|
@@ -2283,7 +2326,7 @@ var DatasetsMySQL = class _DatasetsMySQL extends DatasetsStorage {
|
|
|
2283
2326
|
}
|
|
2284
2327
|
async _doUpdateDataset(args) {
|
|
2285
2328
|
try {
|
|
2286
|
-
const existing = await this.getDatasetById({ id: args.id });
|
|
2329
|
+
const existing = await this.getDatasetById({ id: args.id, filters: args.filters });
|
|
2287
2330
|
if (!existing) {
|
|
2288
2331
|
throw new MastraError({
|
|
2289
2332
|
id: "MYSQL_UPDATE_DATASET_NOT_FOUND",
|
|
@@ -2300,6 +2343,14 @@ var DatasetsMySQL = class _DatasetsMySQL extends DatasetsStorage {
|
|
|
2300
2343
|
data.inputSchema = args.inputSchema === null ? null : JSON.stringify(args.inputSchema);
|
|
2301
2344
|
if (args.groundTruthSchema !== void 0)
|
|
2302
2345
|
data.groundTruthSchema = args.groundTruthSchema === null ? null : JSON.stringify(args.groundTruthSchema);
|
|
2346
|
+
if (args.requestContextSchema !== void 0)
|
|
2347
|
+
data.requestContextSchema = args.requestContextSchema === null ? null : JSON.stringify(args.requestContextSchema);
|
|
2348
|
+
if (args.tags !== void 0) data.tags = args.tags === null ? null : JSON.stringify(args.tags);
|
|
2349
|
+
if (args.targetType !== void 0) data.targetType = args.targetType;
|
|
2350
|
+
if (args.targetIds !== void 0)
|
|
2351
|
+
data.targetIds = args.targetIds === null ? null : JSON.stringify(args.targetIds);
|
|
2352
|
+
if (args.scorerIds !== void 0)
|
|
2353
|
+
data.scorerIds = args.scorerIds === null ? null : JSON.stringify(args.scorerIds);
|
|
2303
2354
|
await this.operations.update({
|
|
2304
2355
|
tableName: TABLE_DATASETS,
|
|
2305
2356
|
keys: { id: args.id },
|
|
@@ -2312,6 +2363,11 @@ var DatasetsMySQL = class _DatasetsMySQL extends DatasetsStorage {
|
|
|
2312
2363
|
metadata: args.metadata ?? existing.metadata,
|
|
2313
2364
|
inputSchema: (args.inputSchema !== void 0 ? args.inputSchema : existing.inputSchema) ?? void 0,
|
|
2314
2365
|
groundTruthSchema: (args.groundTruthSchema !== void 0 ? args.groundTruthSchema : existing.groundTruthSchema) ?? void 0,
|
|
2366
|
+
requestContextSchema: (args.requestContextSchema !== void 0 ? args.requestContextSchema : existing.requestContextSchema) ?? void 0,
|
|
2367
|
+
tags: (args.tags !== void 0 ? args.tags : existing.tags) ?? null,
|
|
2368
|
+
targetType: (args.targetType !== void 0 ? args.targetType : existing.targetType) ?? null,
|
|
2369
|
+
targetIds: (args.targetIds !== void 0 ? args.targetIds : existing.targetIds) ?? null,
|
|
2370
|
+
scorerIds: (args.scorerIds !== void 0 ? args.scorerIds : existing.scorerIds) ?? null,
|
|
2315
2371
|
updatedAt: data.updatedAt
|
|
2316
2372
|
};
|
|
2317
2373
|
} catch (error) {
|
|
@@ -2326,23 +2382,39 @@ var DatasetsMySQL = class _DatasetsMySQL extends DatasetsStorage {
|
|
|
2326
2382
|
);
|
|
2327
2383
|
}
|
|
2328
2384
|
}
|
|
2329
|
-
async deleteDataset({ id }) {
|
|
2385
|
+
async deleteDataset({ id, filters }) {
|
|
2386
|
+
const filterCols = [];
|
|
2387
|
+
const filterVals = [];
|
|
2388
|
+
if (filters?.organizationId !== void 0) {
|
|
2389
|
+
filterCols.push(`${quoteIdentifier("organizationId", "column name")} = ?`);
|
|
2390
|
+
filterVals.push(filters.organizationId);
|
|
2391
|
+
}
|
|
2392
|
+
if (filters?.projectId !== void 0) {
|
|
2393
|
+
filterCols.push(`${quoteIdentifier("projectId", "column name")} = ?`);
|
|
2394
|
+
filterVals.push(filters.projectId);
|
|
2395
|
+
}
|
|
2396
|
+
const scopedWhere = ["id = ?", ...filterCols].join(" AND ");
|
|
2397
|
+
const experimentTablesExist = await this.experimentTablesExist();
|
|
2330
2398
|
const connection = await this.pool.getConnection();
|
|
2331
2399
|
try {
|
|
2332
2400
|
await connection.beginTransaction();
|
|
2333
|
-
|
|
2401
|
+
const [rows] = await connection.execute(
|
|
2402
|
+
`SELECT id FROM ${formatTableName(TABLE_DATASETS)} WHERE ${scopedWhere} FOR UPDATE`,
|
|
2403
|
+
[id, ...filterVals]
|
|
2404
|
+
);
|
|
2405
|
+
if (!Array.isArray(rows) || rows.length === 0) {
|
|
2406
|
+
await connection.commit();
|
|
2407
|
+
return;
|
|
2408
|
+
}
|
|
2409
|
+
if (experimentTablesExist) {
|
|
2334
2410
|
await connection.execute(
|
|
2335
2411
|
`DELETE FROM ${formatTableName(TABLE_EXPERIMENT_RESULTS)} WHERE ${quoteIdentifier("experimentId", "column name")} IN (SELECT id FROM ${formatTableName(TABLE_EXPERIMENTS)} WHERE ${quoteIdentifier("datasetId", "column name")} = ?)`,
|
|
2336
2412
|
[id]
|
|
2337
2413
|
);
|
|
2338
|
-
} catch {
|
|
2339
|
-
}
|
|
2340
|
-
try {
|
|
2341
2414
|
await connection.execute(
|
|
2342
2415
|
`UPDATE ${formatTableName(TABLE_EXPERIMENTS)} SET ${quoteIdentifier("datasetId", "column name")} = NULL, ${quoteIdentifier("datasetVersion", "column name")} = NULL WHERE ${quoteIdentifier("datasetId", "column name")} = ?`,
|
|
2343
2416
|
[id]
|
|
2344
2417
|
);
|
|
2345
|
-
} catch {
|
|
2346
2418
|
}
|
|
2347
2419
|
await connection.execute(
|
|
2348
2420
|
`DELETE FROM ${formatTableName(TABLE_DATASET_VERSIONS)} WHERE ${quoteIdentifier("datasetId", "column name")} = ?`,
|
|
@@ -2352,7 +2424,10 @@ var DatasetsMySQL = class _DatasetsMySQL extends DatasetsStorage {
|
|
|
2352
2424
|
`DELETE FROM ${formatTableName(TABLE_DATASET_ITEMS)} WHERE ${quoteIdentifier("datasetId", "column name")} = ?`,
|
|
2353
2425
|
[id]
|
|
2354
2426
|
);
|
|
2355
|
-
await connection.execute(`DELETE FROM ${formatTableName(TABLE_DATASETS)} WHERE
|
|
2427
|
+
await connection.execute(`DELETE FROM ${formatTableName(TABLE_DATASETS)} WHERE ${scopedWhere}`, [
|
|
2428
|
+
id,
|
|
2429
|
+
...filterVals
|
|
2430
|
+
]);
|
|
2356
2431
|
await connection.commit();
|
|
2357
2432
|
} catch (error) {
|
|
2358
2433
|
await connection.rollback();
|
|
@@ -2389,6 +2464,19 @@ var DatasetsMySQL = class _DatasetsMySQL extends DatasetsStorage {
|
|
|
2389
2464
|
filterParts.push(`${quoteIdentifier("candidateId", "column name")} = ?`);
|
|
2390
2465
|
filterArgs.push(args.filters.candidateId);
|
|
2391
2466
|
}
|
|
2467
|
+
if (args.filters?.targetType !== void 0) {
|
|
2468
|
+
filterParts.push(`${quoteIdentifier("targetType", "column name")} = ?`);
|
|
2469
|
+
filterArgs.push(args.filters.targetType);
|
|
2470
|
+
}
|
|
2471
|
+
if (args.filters?.targetIds !== void 0 && args.filters.targetIds.length > 0) {
|
|
2472
|
+
const placeholders = args.filters.targetIds.map(() => "?").join(",");
|
|
2473
|
+
filterParts.push(`JSON_OVERLAPS(${quoteIdentifier("targetIds", "column name")}, JSON_ARRAY(${placeholders}))`);
|
|
2474
|
+
filterArgs.push(...args.filters.targetIds);
|
|
2475
|
+
}
|
|
2476
|
+
if (args.filters?.name !== void 0 && args.filters.name.length > 0) {
|
|
2477
|
+
filterParts.push(`LOWER(${quoteIdentifier("name", "column name")}) LIKE LOWER(?)`);
|
|
2478
|
+
filterArgs.push(`%${args.filters.name}%`);
|
|
2479
|
+
}
|
|
2392
2480
|
const whereClause = {
|
|
2393
2481
|
sql: filterParts.length > 0 ? `WHERE ${filterParts.join(" AND ")}` : "",
|
|
2394
2482
|
args: filterArgs
|
|
@@ -3114,7 +3202,7 @@ var ExperimentsMySQL = class _ExperimentsMySQL extends ExperimentsStorage {
|
|
|
3114
3202
|
await this.operations.alterTable({
|
|
3115
3203
|
tableName: TABLE_EXPERIMENTS,
|
|
3116
3204
|
schema: EXPERIMENTS_SCHEMA,
|
|
3117
|
-
ifNotExists: ["organizationId", "projectId"]
|
|
3205
|
+
ifNotExists: ["agentVersion", "organizationId", "projectId"]
|
|
3118
3206
|
});
|
|
3119
3207
|
await this.operations.alterTable({
|
|
3120
3208
|
tableName: TABLE_EXPERIMENT_RESULTS,
|
|
@@ -3133,6 +3221,7 @@ var ExperimentsMySQL = class _ExperimentsMySQL extends ExperimentsStorage {
|
|
|
3133
3221
|
id: row.id,
|
|
3134
3222
|
datasetId: row.datasetId ?? null,
|
|
3135
3223
|
datasetVersion: row.datasetVersion ?? null,
|
|
3224
|
+
agentVersion: row.agentVersion ?? null,
|
|
3136
3225
|
organizationId: row.organizationId ?? null,
|
|
3137
3226
|
projectId: row.projectId ?? null,
|
|
3138
3227
|
targetType: row.targetType,
|
|
@@ -3182,6 +3271,7 @@ var ExperimentsMySQL = class _ExperimentsMySQL extends ExperimentsStorage {
|
|
|
3182
3271
|
id,
|
|
3183
3272
|
datasetId: input.datasetId ?? null,
|
|
3184
3273
|
datasetVersion: input.datasetVersion ?? null,
|
|
3274
|
+
agentVersion: input.agentVersion ?? null,
|
|
3185
3275
|
organizationId: input.organizationId ?? null,
|
|
3186
3276
|
projectId: input.projectId ?? null,
|
|
3187
3277
|
targetType: input.targetType,
|
|
@@ -3204,6 +3294,7 @@ var ExperimentsMySQL = class _ExperimentsMySQL extends ExperimentsStorage {
|
|
|
3204
3294
|
id,
|
|
3205
3295
|
datasetId: input.datasetId,
|
|
3206
3296
|
datasetVersion: input.datasetVersion,
|
|
3297
|
+
agentVersion: input.agentVersion ?? null,
|
|
3207
3298
|
organizationId: input.organizationId ?? null,
|
|
3208
3299
|
projectId: input.projectId ?? null,
|
|
3209
3300
|
targetType: input.targetType,
|
|
@@ -3277,7 +3368,11 @@ var ExperimentsMySQL = class _ExperimentsMySQL extends ExperimentsStorage {
|
|
|
3277
3368
|
try {
|
|
3278
3369
|
const row = await this.operations.load({
|
|
3279
3370
|
tableName: TABLE_EXPERIMENTS,
|
|
3280
|
-
keys: {
|
|
3371
|
+
keys: {
|
|
3372
|
+
id: args.id,
|
|
3373
|
+
organizationId: args.filters?.organizationId,
|
|
3374
|
+
projectId: args.filters?.projectId
|
|
3375
|
+
}
|
|
3281
3376
|
});
|
|
3282
3377
|
return row ? this.mapExperiment(row) : null;
|
|
3283
3378
|
} catch (error) {
|
|
@@ -3300,6 +3395,22 @@ var ExperimentsMySQL = class _ExperimentsMySQL extends ExperimentsStorage {
|
|
|
3300
3395
|
conditions.push(`${quoteIdentifier("datasetId", "column name")} = ?`);
|
|
3301
3396
|
params.push(args.datasetId);
|
|
3302
3397
|
}
|
|
3398
|
+
if (args.targetType) {
|
|
3399
|
+
conditions.push(`${quoteIdentifier("targetType", "column name")} = ?`);
|
|
3400
|
+
params.push(args.targetType);
|
|
3401
|
+
}
|
|
3402
|
+
if (args.targetId) {
|
|
3403
|
+
conditions.push(`${quoteIdentifier("targetId", "column name")} = ?`);
|
|
3404
|
+
params.push(args.targetId);
|
|
3405
|
+
}
|
|
3406
|
+
if (args.agentVersion) {
|
|
3407
|
+
conditions.push(`${quoteIdentifier("agentVersion", "column name")} = ?`);
|
|
3408
|
+
params.push(args.agentVersion);
|
|
3409
|
+
}
|
|
3410
|
+
if (args.status) {
|
|
3411
|
+
conditions.push(`${quoteIdentifier("status", "column name")} = ?`);
|
|
3412
|
+
params.push(args.status);
|
|
3413
|
+
}
|
|
3303
3414
|
if (args.filters) {
|
|
3304
3415
|
const { organizationId, projectId } = args.filters;
|
|
3305
3416
|
if (organizationId !== void 0) {
|
|
@@ -3354,9 +3465,28 @@ var ExperimentsMySQL = class _ExperimentsMySQL extends ExperimentsStorage {
|
|
|
3354
3465
|
}
|
|
3355
3466
|
async deleteExperiment(args) {
|
|
3356
3467
|
try {
|
|
3468
|
+
const tenancyConditions = [];
|
|
3469
|
+
const tenancyParams = [];
|
|
3470
|
+
if (args.filters?.organizationId !== void 0) {
|
|
3471
|
+
tenancyConditions.push(`${quoteIdentifier("organizationId", "column name")} = ?`);
|
|
3472
|
+
tenancyParams.push(args.filters.organizationId);
|
|
3473
|
+
}
|
|
3474
|
+
if (args.filters?.projectId !== void 0) {
|
|
3475
|
+
tenancyConditions.push(`${quoteIdentifier("projectId", "column name")} = ?`);
|
|
3476
|
+
tenancyParams.push(args.filters.projectId);
|
|
3477
|
+
}
|
|
3478
|
+
const gateWhere = ["id = ?", ...tenancyConditions].join(" AND ");
|
|
3357
3479
|
const connection = await this.pool.getConnection();
|
|
3358
3480
|
try {
|
|
3359
3481
|
await connection.beginTransaction();
|
|
3482
|
+
const [gateRows] = await connection.execute(
|
|
3483
|
+
`SELECT id FROM ${formatTableName(TABLE_EXPERIMENTS)} WHERE ${gateWhere} FOR UPDATE`,
|
|
3484
|
+
[args.id, ...tenancyParams]
|
|
3485
|
+
);
|
|
3486
|
+
if (!Array.isArray(gateRows) || gateRows.length === 0) {
|
|
3487
|
+
await connection.commit();
|
|
3488
|
+
return;
|
|
3489
|
+
}
|
|
3360
3490
|
await connection.execute(
|
|
3361
3491
|
`DELETE FROM ${formatTableName(TABLE_EXPERIMENT_RESULTS)} WHERE ${quoteIdentifier("experimentId", "column name")} = ?`,
|
|
3362
3492
|
[args.id]
|
|
@@ -3463,7 +3593,11 @@ var ExperimentsMySQL = class _ExperimentsMySQL extends ExperimentsStorage {
|
|
|
3463
3593
|
try {
|
|
3464
3594
|
const row = await this.operations.load({
|
|
3465
3595
|
tableName: TABLE_EXPERIMENT_RESULTS,
|
|
3466
|
-
keys: {
|
|
3596
|
+
keys: {
|
|
3597
|
+
id: args.id,
|
|
3598
|
+
organizationId: args.filters?.organizationId,
|
|
3599
|
+
projectId: args.filters?.projectId
|
|
3600
|
+
}
|
|
3467
3601
|
});
|
|
3468
3602
|
return row ? this.mapExperimentResult(row) : null;
|
|
3469
3603
|
} catch (error) {
|
|
@@ -3617,6 +3751,24 @@ var ExperimentsMySQL = class _ExperimentsMySQL extends ExperimentsStorage {
|
|
|
3617
3751
|
}
|
|
3618
3752
|
async deleteExperimentResults(args) {
|
|
3619
3753
|
try {
|
|
3754
|
+
if (args.filters?.organizationId !== void 0 || args.filters?.projectId !== void 0) {
|
|
3755
|
+
const tenancyConditions = [];
|
|
3756
|
+
const tenancyParams = [];
|
|
3757
|
+
if (args.filters?.organizationId !== void 0) {
|
|
3758
|
+
tenancyConditions.push(`${quoteIdentifier("organizationId", "column name")} = ?`);
|
|
3759
|
+
tenancyParams.push(args.filters.organizationId);
|
|
3760
|
+
}
|
|
3761
|
+
if (args.filters?.projectId !== void 0) {
|
|
3762
|
+
tenancyConditions.push(`${quoteIdentifier("projectId", "column name")} = ?`);
|
|
3763
|
+
tenancyParams.push(args.filters.projectId);
|
|
3764
|
+
}
|
|
3765
|
+
const parentWhere = ["id = ?", ...tenancyConditions].join(" AND ");
|
|
3766
|
+
await this.pool.execute(
|
|
3767
|
+
`DELETE FROM ${formatTableName(TABLE_EXPERIMENT_RESULTS)} WHERE ${quoteIdentifier("experimentId", "column name")} IN (SELECT id FROM ${formatTableName(TABLE_EXPERIMENTS)} WHERE ${parentWhere})`,
|
|
3768
|
+
[args.experimentId, ...tenancyParams]
|
|
3769
|
+
);
|
|
3770
|
+
return;
|
|
3771
|
+
}
|
|
3620
3772
|
await this.pool.execute(
|
|
3621
3773
|
`DELETE FROM ${formatTableName(TABLE_EXPERIMENT_RESULTS)} WHERE ${quoteIdentifier("experimentId", "column name")} = ?`,
|
|
3622
3774
|
[args.experimentId]
|
|
@@ -8766,7 +8918,7 @@ var ScoresMySQL = class _ScoresMySQL extends ScoresStorage {
|
|
|
8766
8918
|
await this.operations.alterTable({
|
|
8767
8919
|
tableName: TABLE_SCORERS,
|
|
8768
8920
|
schema: SCORERS_SCHEMA,
|
|
8769
|
-
ifNotExists: ["spanId", "requestContext"]
|
|
8921
|
+
ifNotExists: ["spanId", "requestContext", "organizationId", "projectId", "batchId", "datasetId", "datasetItemId"]
|
|
8770
8922
|
});
|
|
8771
8923
|
await this.createDefaultIndexes();
|
|
8772
8924
|
await this.createCustomIndexes();
|
|
@@ -8841,6 +8993,11 @@ var ScoresMySQL = class _ScoresMySQL extends ScoresStorage {
|
|
|
8841
8993
|
entityId: row.entityId ?? void 0,
|
|
8842
8994
|
source: row.source ?? void 0,
|
|
8843
8995
|
resourceId: row.resourceId ?? void 0,
|
|
8996
|
+
organizationId: row.organizationId ?? void 0,
|
|
8997
|
+
projectId: row.projectId ?? void 0,
|
|
8998
|
+
batchId: row.batchId ?? void 0,
|
|
8999
|
+
datasetId: row.datasetId ?? void 0,
|
|
9000
|
+
datasetItemId: row.datasetItemId ?? void 0,
|
|
8844
9001
|
threadId: row.threadId ?? void 0,
|
|
8845
9002
|
createdAt: parseDateTime(row.createdAt) ?? /* @__PURE__ */ new Date(),
|
|
8846
9003
|
updatedAt: parseDateTime(row.updatedAt) ?? /* @__PURE__ */ new Date()
|
|
@@ -8876,6 +9033,11 @@ var ScoresMySQL = class _ScoresMySQL extends ScoresStorage {
|
|
|
8876
9033
|
entity: toJson(score.entity),
|
|
8877
9034
|
entityId: score.entityId ?? null,
|
|
8878
9035
|
resourceId: score.resourceId ?? null,
|
|
9036
|
+
organizationId: score.organizationId ?? null,
|
|
9037
|
+
projectId: score.projectId ?? null,
|
|
9038
|
+
batchId: score.batchId ?? null,
|
|
9039
|
+
datasetId: score.datasetId ?? null,
|
|
9040
|
+
datasetItemId: score.datasetItemId ?? null,
|
|
8879
9041
|
threadId: score.threadId ?? null,
|
|
8880
9042
|
source: score.source ?? null,
|
|
8881
9043
|
createdAt,
|
|
@@ -8979,33 +9141,74 @@ var ScoresMySQL = class _ScoresMySQL extends ScoresStorage {
|
|
|
8979
9141
|
pagination,
|
|
8980
9142
|
entityId,
|
|
8981
9143
|
entityType,
|
|
8982
|
-
source
|
|
9144
|
+
source,
|
|
9145
|
+
filters
|
|
8983
9146
|
}) {
|
|
8984
|
-
return this.fetchScores(
|
|
9147
|
+
return this.fetchScores(
|
|
9148
|
+
this.buildWhereClause({
|
|
9149
|
+
scorerId,
|
|
9150
|
+
entityId,
|
|
9151
|
+
entityType,
|
|
9152
|
+
source,
|
|
9153
|
+
organizationId: filters?.organizationId,
|
|
9154
|
+
projectId: filters?.projectId
|
|
9155
|
+
}),
|
|
9156
|
+
pagination
|
|
9157
|
+
);
|
|
8985
9158
|
}
|
|
8986
9159
|
async listScoresByRunId({
|
|
8987
9160
|
runId,
|
|
8988
9161
|
pagination,
|
|
8989
9162
|
entityId,
|
|
8990
9163
|
entityType,
|
|
8991
|
-
source
|
|
9164
|
+
source,
|
|
9165
|
+
filters
|
|
8992
9166
|
}) {
|
|
8993
|
-
return this.fetchScores(
|
|
9167
|
+
return this.fetchScores(
|
|
9168
|
+
this.buildWhereClause({
|
|
9169
|
+
runId,
|
|
9170
|
+
entityId,
|
|
9171
|
+
entityType,
|
|
9172
|
+
source,
|
|
9173
|
+
organizationId: filters?.organizationId,
|
|
9174
|
+
projectId: filters?.projectId
|
|
9175
|
+
}),
|
|
9176
|
+
pagination
|
|
9177
|
+
);
|
|
8994
9178
|
}
|
|
8995
9179
|
async listScoresBySpan({
|
|
8996
9180
|
traceId,
|
|
8997
9181
|
spanId,
|
|
8998
|
-
pagination
|
|
9182
|
+
pagination,
|
|
9183
|
+
filters
|
|
8999
9184
|
}) {
|
|
9000
|
-
return this.fetchScores(
|
|
9185
|
+
return this.fetchScores(
|
|
9186
|
+
this.buildWhereClause({
|
|
9187
|
+
traceId,
|
|
9188
|
+
spanId,
|
|
9189
|
+
organizationId: filters?.organizationId,
|
|
9190
|
+
projectId: filters?.projectId
|
|
9191
|
+
}),
|
|
9192
|
+
pagination
|
|
9193
|
+
);
|
|
9001
9194
|
}
|
|
9002
9195
|
async listScoresByEntityId({
|
|
9003
9196
|
entityId,
|
|
9004
9197
|
pagination,
|
|
9005
9198
|
entityType,
|
|
9006
|
-
source
|
|
9199
|
+
source,
|
|
9200
|
+
filters
|
|
9007
9201
|
}) {
|
|
9008
|
-
return this.fetchScores(
|
|
9202
|
+
return this.fetchScores(
|
|
9203
|
+
this.buildWhereClause({
|
|
9204
|
+
entityId,
|
|
9205
|
+
entityType,
|
|
9206
|
+
source,
|
|
9207
|
+
organizationId: filters?.organizationId,
|
|
9208
|
+
projectId: filters?.projectId
|
|
9209
|
+
}),
|
|
9210
|
+
pagination
|
|
9211
|
+
);
|
|
9009
9212
|
}
|
|
9010
9213
|
};
|
|
9011
9214
|
var SNAPSHOT_FIELDS = [
|