mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-12 03:56:15 -08:00
* docs(skills): design implementation synchronization * docs(skills): plan implementation synchronization * fix(release): filter internal notes from public body * docs(release): synchronize release workflow guidance * fix(stalker): normalize catalog series flags * fix(stalker): preserve progress with scoped episode IDs * fix(playback): expose strict position persistence * docs(stalker): record series position compatibility * test(skills): validate repository skill contracts * fix(database): keep SQL trace values private * docs(skills): refresh Nx and SQLite ownership * docs(skills): align provider and UI guidance * docs(skills): tighten validated guidance * docs(release): require exact release pushes * style(electron): remove trailing blank line * fix(ci): classify repository skills coverage
59 lines
1.5 KiB
TypeScript
59 lines
1.5 KiB
TypeScript
export const SQL_TRACE_STATEMENT_TYPE = {
|
|
SELECT: 'SELECT',
|
|
INSERT: 'INSERT',
|
|
UPDATE: 'UPDATE',
|
|
DELETE: 'DELETE',
|
|
REPLACE: 'REPLACE',
|
|
CREATE: 'CREATE',
|
|
ALTER: 'ALTER',
|
|
DROP: 'DROP',
|
|
PRAGMA: 'PRAGMA',
|
|
WITH: 'WITH',
|
|
BEGIN: 'BEGIN',
|
|
COMMIT: 'COMMIT',
|
|
ROLLBACK: 'ROLLBACK',
|
|
SAVEPOINT: 'SAVEPOINT',
|
|
RELEASE: 'RELEASE',
|
|
VACUUM: 'VACUUM',
|
|
ANALYZE: 'ANALYZE',
|
|
REINDEX: 'REINDEX',
|
|
ATTACH: 'ATTACH',
|
|
DETACH: 'DETACH',
|
|
EXPLAIN: 'EXPLAIN',
|
|
OTHER: 'OTHER',
|
|
} as const;
|
|
|
|
export type SqlTraceStatementType =
|
|
(typeof SQL_TRACE_STATEMENT_TYPE)[keyof typeof SQL_TRACE_STATEMENT_TYPE];
|
|
|
|
export interface SqlTraceSummary {
|
|
statementType: SqlTraceStatementType;
|
|
}
|
|
|
|
const ALLOWED_STATEMENT_TYPES = new Set<SqlTraceStatementType>(
|
|
Object.values(SQL_TRACE_STATEMENT_TYPE).filter(
|
|
(statementType) =>
|
|
statementType !== SQL_TRACE_STATEMENT_TYPE.OTHER
|
|
) as SqlTraceStatementType[]
|
|
);
|
|
|
|
const SQL_STATEMENT_PREFIX = /^\s*([A-Za-z]+)(?=[\s(;]|$)/;
|
|
|
|
export function summarizeSqlStatementForTrace(sql: unknown): SqlTraceSummary {
|
|
if (typeof sql !== 'string') {
|
|
return { statementType: SQL_TRACE_STATEMENT_TYPE.OTHER };
|
|
}
|
|
|
|
const match = SQL_STATEMENT_PREFIX.exec(sql);
|
|
const candidate = match?.[1]?.toUpperCase() as
|
|
| SqlTraceStatementType
|
|
| undefined;
|
|
|
|
return {
|
|
statementType:
|
|
candidate && ALLOWED_STATEMENT_TYPES.has(candidate)
|
|
? candidate
|
|
: SQL_TRACE_STATEMENT_TYPE.OTHER,
|
|
};
|
|
}
|