systemprompt_database/
extension.rs1use systemprompt_extension::prelude::*;
12
13#[derive(Debug, Clone, Copy, Default)]
14pub struct DatabaseExtension;
15
16impl Extension for DatabaseExtension {
17 fn metadata(&self) -> ExtensionMetadata {
18 ExtensionMetadata {
19 id: "database",
20 name: "Database",
21 version: env!("CARGO_PKG_VERSION"),
22 }
23 }
24
25 fn schemas(&self) -> Vec<SchemaDefinition> {
26 vec![
27 SchemaDefinition::new(
28 "extension_migrations",
29 include_str!("../schema/extension_migrations.sql"),
30 ),
31 SchemaDefinition::new(
32 "extension_migration_compat",
33 include_str!("../schema/extension_migration_compat.sql"),
34 ),
35 SchemaDefinition::new("services", include_str!("../schema/services.sql"))
36 .with_required_columns(vec!["name".into(), "module_name".into(), "status".into()]),
37 SchemaDefinition::new(
38 "projection_backlog",
39 include_str!("../schema/projection_backlog.sql"),
40 )
41 .with_required_columns(vec![
42 "projection".into(),
43 "key".into(),
44 "attempts".into(),
45 ]),
46 SchemaDefinition::new("trace_facts", include_str!("../schema/trace_facts.sql"))
47 .with_required_columns(vec!["trace_id".into(), "first_at".into(), "status".into()]),
48 SchemaDefinition::new(
49 "instance_leases",
50 include_str!("../schema/instance_leases.sql"),
51 )
52 .with_required_columns(vec![
53 "lease_key".into(),
54 "owner_instance_id".into(),
55 "expires_at".into(),
56 ]),
57 SchemaDefinition::new(
58 "instance_endpoints",
59 include_str!("../schema/instance_endpoints.sql"),
60 )
61 .with_required_columns(vec![
62 "instance_id".into(),
63 "advertise_url".into(),
64 "heartbeat_at".into(),
65 ]),
66 SchemaDefinition::new(
67 "instance_presence",
68 include_str!("../schema/instance_presence.sql"),
69 )
70 .with_required_columns(vec![
71 "instance_id".into(),
72 "role".into(),
73 "heartbeat_at".into(),
74 ]),
75 SchemaDefinition::new(
76 "release_stamps",
77 include_str!("../schema/release_stamps.sql"),
78 )
79 .with_required_columns(vec!["name".into(), "version".into()]),
80 SchemaDefinition::new(
81 "config_version",
82 include_str!("../schema/config_version.sql"),
83 )
84 .with_required_columns(vec!["id".into(), "version".into(), "plane".into()]),
85 SchemaDefinition::new(
86 "config_plane_applied",
87 include_str!("../schema/config_plane_applied.sql"),
88 )
89 .with_required_columns(vec!["plane".into(), "applied_at".into()]),
90 SchemaDefinition::sql_only(include_str!("../schema/functions.sql")),
91 SchemaDefinition::sql_only(include_str!("../schema/config_change_triggers.sql")),
92 ]
93 }
94
95 fn migrations(&self) -> Vec<Migration> {
96 extension_migrations!()
97 }
98
99 fn dependencies(&self) -> Vec<&'static str> {
100 vec![]
101 }
102
103 fn priority(&self) -> u32 {
104 0
105 }
106}
107
108register_extension!(DatabaseExtension);