@mastra/mssql 1.4.1-alpha.0 → 1.5.0-alpha.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/CHANGELOG.md +62 -0
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/index.cjs +33 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +34 -3
- package/dist/index.js.map +1 -1
- package/dist/storage/domains/memory/index.d.ts.map +1 -1
- package/package.json +13 -12
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MastraError, ErrorCategory, ErrorDomain } from '@mastra/core/error';
|
|
2
|
-
import { AgentsStorage, TABLE_AGENTS, TABLE_AGENT_VERSIONS, AGENTS_SCHEMA, AGENT_VERSIONS_SCHEMA, createStorageErrorId, normalizePerPage, calculatePagination, BackgroundTasksStorage, TABLE_BACKGROUND_TASKS, TABLE_SCHEMAS, MemoryStorage, TABLE_THREADS, TABLE_MESSAGES, TABLE_RESOURCES, ObservabilityStorage, TABLE_SPANS, SPAN_SCHEMA, listTracesArgsSchema, toTraceSpans, ScoresStorage, TABLE_SCORERS, WorkflowsStorage, TABLE_WORKFLOW_SNAPSHOT, MastraCompositeStore, getDefaultValue, transformScoreRow as transformScoreRow$1, TraceStatus } from '@mastra/core/storage';
|
|
2
|
+
import { AgentsStorage, TABLE_AGENTS, TABLE_AGENT_VERSIONS, AGENTS_SCHEMA, AGENT_VERSIONS_SCHEMA, createStorageErrorId, normalizePerPage, calculatePagination, BackgroundTasksStorage, TABLE_BACKGROUND_TASKS, TABLE_SCHEMAS, MemoryStorage, TABLE_THREADS, TABLE_MESSAGES, TABLE_RESOURCES, validateStorageMetadataFilter, ObservabilityStorage, TABLE_SPANS, SPAN_SCHEMA, listTracesArgsSchema, toTraceSpans, ScoresStorage, TABLE_SCORERS, WorkflowsStorage, TABLE_WORKFLOW_SNAPSHOT, MastraCompositeStore, getDefaultValue, transformScoreRow as transformScoreRow$1, TraceStatus } from '@mastra/core/storage';
|
|
3
3
|
import sql from 'mssql';
|
|
4
4
|
import { randomUUID } from 'crypto';
|
|
5
5
|
import { parseSqlIdentifier } from '@mastra/core/utils';
|
|
@@ -2286,6 +2286,32 @@ var BackgroundTasksMSSQL = class _BackgroundTasksMSSQL extends BackgroundTasksSt
|
|
|
2286
2286
|
return Number(result.recordset[0]?.count ?? 0);
|
|
2287
2287
|
}
|
|
2288
2288
|
};
|
|
2289
|
+
function bindMssqlMetadataParams(request, params) {
|
|
2290
|
+
for (const [paramName, paramValue] of Object.entries(params)) {
|
|
2291
|
+
request.input(paramName, paramValue);
|
|
2292
|
+
}
|
|
2293
|
+
}
|
|
2294
|
+
function buildMssqlMessageMetadataFilter(metadataFilter) {
|
|
2295
|
+
if (!metadataFilter) return { clauses: [], params: {} };
|
|
2296
|
+
const clauses = [];
|
|
2297
|
+
const params = {};
|
|
2298
|
+
Object.entries(metadataFilter).forEach(([key, value], index) => {
|
|
2299
|
+
const keyParam = `metadataKey${index}`;
|
|
2300
|
+
params[keyParam] = key;
|
|
2301
|
+
clauses.push("ISJSON(content) = 1");
|
|
2302
|
+
if (value === null) {
|
|
2303
|
+
clauses.push(`EXISTS (SELECT 1 FROM OPENJSON(content, '$.metadata') WHERE [key] = @${keyParam} AND [type] = 0)`);
|
|
2304
|
+
return;
|
|
2305
|
+
}
|
|
2306
|
+
const valueParam = `metadataValue${index}`;
|
|
2307
|
+
params[valueParam] = String(value);
|
|
2308
|
+
const jsonType = typeof value === "string" ? 1 : typeof value === "number" ? 2 : 3;
|
|
2309
|
+
clauses.push(
|
|
2310
|
+
`EXISTS (SELECT 1 FROM OPENJSON(content, '$.metadata') WHERE [key] = @${keyParam} AND [type] = ${jsonType} AND [value] = @${valueParam})`
|
|
2311
|
+
);
|
|
2312
|
+
});
|
|
2313
|
+
return { clauses, params };
|
|
2314
|
+
}
|
|
2289
2315
|
var MemoryMSSQL = class _MemoryMSSQL extends MemoryStorage {
|
|
2290
2316
|
pool;
|
|
2291
2317
|
schema;
|
|
@@ -2845,6 +2871,7 @@ var MemoryMSSQL = class _MemoryMSSQL extends MemoryStorage {
|
|
|
2845
2871
|
}
|
|
2846
2872
|
async listMessages(args) {
|
|
2847
2873
|
const { threadId, resourceId, include, filter, perPage: perPageInput, page = 0, orderBy } = args;
|
|
2874
|
+
const metadataFilter = validateStorageMetadataFilter(filter?.metadata);
|
|
2848
2875
|
const threadIds = Array.isArray(threadId) ? threadId : [threadId];
|
|
2849
2876
|
if (threadIds.length === 0 || threadIds.some((id) => !id.trim())) {
|
|
2850
2877
|
throw new MastraError(
|
|
@@ -2881,10 +2908,13 @@ var MemoryMSSQL = class _MemoryMSSQL extends MemoryStorage {
|
|
|
2881
2908
|
...resourceId ? { resourceId } : {},
|
|
2882
2909
|
...buildDateRangeFilter(filter?.dateRange, "createdAt")
|
|
2883
2910
|
};
|
|
2884
|
-
const { sql:
|
|
2911
|
+
const { sql: preparedWhereClause = "", params: whereParams } = prepareWhereClause(
|
|
2885
2912
|
filters);
|
|
2913
|
+
const metadataWhere = buildMssqlMessageMetadataFilter(metadataFilter);
|
|
2914
|
+
const actualWhereClause = metadataWhere.clauses.length ? `${preparedWhereClause || " WHERE 1 = 1"} AND ${metadataWhere.clauses.join(" AND ")}` : preparedWhereClause;
|
|
2886
2915
|
const bindWhereParams = (req) => {
|
|
2887
2916
|
Object.entries(whereParams).forEach(([paramName, paramValue]) => req.input(paramName, paramValue));
|
|
2917
|
+
bindMssqlMetadataParams(req, metadataWhere.params);
|
|
2888
2918
|
};
|
|
2889
2919
|
if (perPage === 0 && (!include || include.length === 0)) {
|
|
2890
2920
|
return { messages: [], total: 0, page, perPage: perPageForResponse, hasMore: false };
|
|
@@ -2920,6 +2950,7 @@ var MemoryMSSQL = class _MemoryMSSQL extends MemoryStorage {
|
|
|
2920
2950
|
};
|
|
2921
2951
|
const baseRows = perPage === 0 ? [] : await fetchBaseMessages();
|
|
2922
2952
|
const messages = [...baseRows];
|
|
2953
|
+
const primaryPageCount = messages.length;
|
|
2923
2954
|
const seqById = /* @__PURE__ */ new Map();
|
|
2924
2955
|
messages.forEach((msg) => {
|
|
2925
2956
|
if (typeof msg.seq_id === "number") seqById.set(msg.id, msg.seq_id);
|
|
@@ -2960,7 +2991,7 @@ var MemoryMSSQL = class _MemoryMSSQL extends MemoryStorage {
|
|
|
2960
2991
|
});
|
|
2961
2992
|
const threadIdSet = new Set(threadIds);
|
|
2962
2993
|
const returnedThreadMessageCount = finalMessages.filter((m) => m.threadId && threadIdSet.has(m.threadId)).length;
|
|
2963
|
-
const hasMore = perPageInput !== false && returnedThreadMessageCount < total && offset + perPage < total;
|
|
2994
|
+
const hasMore = metadataFilter ? perPageInput !== false && offset + primaryPageCount < total : perPageInput !== false && returnedThreadMessageCount < total && offset + perPage < total;
|
|
2964
2995
|
return {
|
|
2965
2996
|
messages: finalMessages,
|
|
2966
2997
|
total,
|