directus
1import type { Knex } from 'knex';
2import { SchemaHelper } from '../types.js';
3
4export class SchemaHelperMSSQL extends SchemaHelper {
5override applyLimit(rootQuery: Knex.QueryBuilder, limit: number): void {
6// The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries,
7// and common table expressions, unless TOP, OFFSET or FOR XML is also specified.
8if (limit === -1) {
9rootQuery.limit(Number.MAX_SAFE_INTEGER);
10} else {
11rootQuery.limit(limit);
12}
13}
14
15override applyOffset(rootQuery: Knex.QueryBuilder, offset: number): void {
16rootQuery.offset(offset);
17rootQuery.orderBy(1);
18}
19
20override formatUUID(uuid: string): string {
21return uuid.toUpperCase();
22}
23
24override async getDatabaseSize(): Promise<number | null> {
25try {
26const result = await this.knex.raw('SELECT SUM(size) * 8192 AS size FROM sys.database_files;');
27
28return result[0]?.['size'] ? Number(result[0]?.['size']) : null;
29} catch {
30return null;
31}
32}
33}
34