forge-sql-orm
Version:
Drizzle ORM integration for Forge-SQL in Atlassian Forge applications.
186 lines (179 loc) • 4.76 kB
text/typescript
import { bigint, mysqlTable, timestamp, varchar } from "drizzle-orm/mysql-core";
import { Table } from "drizzle-orm";
import { sql } from "@forge/sql";
export const migrations = mysqlTable("__migrations", {
id: bigint("id", { mode: "number" }).primaryKey().autoincrement(),
name: varchar("name", { length: 255 }).notNull(),
migratedAt: timestamp("migratedAt").defaultNow().notNull(),
});
export interface ExplainAnalyzeRow {
id: string;
estRows?: string;
estCost?: string;
actRows?: string;
task?: string;
accessObject?: string;
executionInfo?: string;
operatorInfo?: string;
memory?: string;
disk?: string;
}
export interface SlowQueryNormalized {
time: string;
txnStartTs: number;
user: string;
host: string;
connId: number;
db: string;
query: string;
digest: string;
queryTime: number;
compileTime: number;
optimizeTime: number;
processTime: number;
waitTime: number;
parseTime: number;
rewriteTime: number;
copTime: number;
copProcAvg: number;
copProcMax: number;
copProcP90: number;
copProcAddr: string;
copWaitAvg: number;
copWaitMax: number;
copWaitP90: number;
copWaitAddr: string;
memMax: number;
diskMax: number;
totalKeys: number;
processKeys: number;
requestCount: number;
kvTotal: number;
pdTotal: number;
resultRows: number;
rocksdbBlockCacheHitCount: number;
rocksdbBlockReadCount: number;
rocksdbBlockReadByte: number;
plan: string;
parsedPlan?: ExplainAnalyzeRow[];
binaryPlan: string;
planDigest: string;
}
export interface ClusterStatementRowCamelCase {
instance: string;
summaryBeginTime: string;
summaryEndTime: string;
stmtType: string;
schemaName: string;
digest: string;
digestText: string;
tableNames: string;
indexNames: string | null;
sampleUser: string;
execCount: number;
sumErrors: number;
sumWarnings: number;
sumLatency: number;
maxLatency: number;
minLatency: number;
avgLatency: number;
avgParseLatency: number;
maxParseLatency: number;
avgCompileLatency: number;
maxCompileLatency: number;
sumCopTaskNum: number;
maxCopProcessTime: number;
maxCopProcessAddress: string;
maxCopWaitTime: number;
maxCopWaitAddress: string;
avgProcessTime: number;
maxProcessTime: number;
avgWaitTime: number;
maxWaitTime: number;
avgBackoffTime: number;
maxBackoffTime: number;
avgTotalKeys: number;
maxTotalKeys: number;
avgProcessedKeys: number;
maxProcessedKeys: number;
avgRocksdbDeleteSkippedCount: number;
maxRocksdbDeleteSkippedCount: number;
avgRocksdbKeySkippedCount: number;
maxRocksdbKeySkippedCount: number;
avgRocksdbBlockCacheHitCount: number;
maxRocksdbBlockCacheHitCount: number;
avgRocksdbBlockReadCount: number;
maxRocksdbBlockReadCount: number;
avgRocksdbBlockReadByte: number;
maxRocksdbBlockReadByte: number;
avgPrewriteTime: number;
maxPrewriteTime: number;
avgCommitTime: number;
maxCommitTime: number;
avgGetCommitTsTime: number;
maxGetCommitTsTime: number;
avgCommitBackoffTime: number;
maxCommitBackoffTime: number;
avgResolveLockTime: number;
maxResolveLockTime: number;
avgLocalLatchWaitTime: number;
maxLocalLatchWaitTime: number;
avgWriteKeys: number;
maxWriteKeys: number;
avgWriteSize: number;
maxWriteSize: number;
avgPrewriteRegions: number;
maxPrewriteRegions: number;
avgTxnRetry: number;
maxTxnRetry: number;
sumExecRetry: number;
sumExecRetryTime: number;
sumBackoffTimes: number;
backoffTypes: string | null;
avgMem: number;
maxMem: number;
avgDisk: number;
maxDisk: number;
avgKvTime: number;
avgPdTime: number;
avgBackoffTotalTime: number;
avgWriteSqlRespTime: number;
avgTidbCpuTime: number;
avgTikvCpuTime: number;
maxResultRows: number;
minResultRows: number;
avgResultRows: number;
prepared: number;
avgAffectedRows: number;
firstSeen: string;
lastSeen: string;
planInCache: number;
planCacheHits: number;
planInBinding: number;
querySampleText: string;
prevSampleText: string;
planDigest: string;
plan: string;
binaryPlan: string;
charset: string;
collation: string;
planHint: string;
maxRequestUnitRead: number;
avgRequestUnitRead: number;
maxRequestUnitWrite: number;
avgRequestUnitWrite: number;
maxQueuedRcTime: number;
avgQueuedRcTime: number;
resourceGroup: string;
planCacheUnqualified: number;
planCacheUnqualifiedLastReason: string;
parsedPlan?: ExplainAnalyzeRow[];
}
/**
* Retrieves all tables from the database
*/
export async function getTables(): Promise<string[]> {
const tables = await sql.executeDDL<string>("SHOW TABLES");
return tables.rows.flatMap((tableInfo) => Object.values(tableInfo));
}
export const forgeSystemTables: Table[] = [migrations];