prefect server in zig
1const std = @import("std");
2const zqlite = @import("zqlite");
3const Thread = std.Thread;
4const log = @import("../logging.zig");
5const backend = @import("backend.zig");
6const sqlite_schema = @import("schema/sqlite.zig");
7const postgres_schema = @import("schema/postgres.zig");
8
9// sub-modules
10pub const flows = @import("flows.zig");
11pub const flow_runs = @import("flow_runs.zig");
12pub const task_runs = @import("task_runs.zig");
13pub const events = @import("events.zig");
14pub const block_types = @import("block_types.zig");
15pub const block_schemas = @import("block_schemas.zig");
16pub const block_documents = @import("block_documents.zig");
17pub const variables = @import("variables.zig");
18pub const work_pools = @import("work_pools.zig");
19pub const work_queues = @import("work_queues.zig");
20pub const workers = @import("workers.zig");
21pub const deployments = @import("deployments.zig");
22pub const deployment_schedules = @import("deployment_schedules.zig");
23
24// re-export types for compatibility
25pub const FlowRow = flows.FlowRow;
26pub const FlowRunRow = flow_runs.FlowRunRow;
27pub const TaskRunRow = task_runs.TaskRunRow;
28
29// re-export functions for compatibility
30pub const getFlowByName = flows.getByName;
31pub const getFlowById = flows.getById;
32pub const insertFlow = flows.insert;
33pub const listFlows = flows.list;
34
35pub const insertFlowRun = flow_runs.insert;
36pub const getFlowRun = flow_runs.get;
37pub const setFlowRunState = flow_runs.setState;
38pub const listFlowRuns = flow_runs.list;
39
40pub const insertTaskRun = task_runs.insert;
41pub const getTaskRun = task_runs.get;
42pub const getTaskRunByKey = task_runs.getByKey;
43pub const setTaskRunState = task_runs.setState;
44pub const listTaskRuns = task_runs.list;
45
46pub const insertEventDeduped = events.insertDeduped;
47pub const trimEvents = events.trim;
48pub const countEvents = events.count;
49pub const queryRecentEvents = events.queryRecent;
50
51// legacy shared state (deprecated - use backend.db instead)
52pub var conn: zqlite.Conn = undefined;
53pub var mutex: Thread.Mutex = .{};
54
55var path_buf: [256]u8 = undefined;
56
57pub fn init() !void {
58 // Initialize the unified backend (SQLite or PostgreSQL based on env vars)
59 try backend.init();
60
61 // For backward compatibility with entity modules not yet migrated,
62 // also store the raw SQLite connection if using SQLite backend
63 switch (backend.db.impl) {
64 .sqlite => |s| {
65 conn = s.conn;
66 },
67 .postgres => {
68 // postgres doesn't have a single conn - leave conn undefined
69 },
70 }
71
72 try initSchema();
73}
74
75pub fn close() void {
76 backend.close();
77}
78
79fn initSchema() !void {
80 // Dispatch to dialect-specific schema initialization
81 switch (backend.db.dialect) {
82 .sqlite => try sqlite_schema.init(),
83 .postgres => try postgres_schema.init(),
84 }
85}