reinhardt_query/dcl/object.rs
1//! Database object types for DCL statements
2
3/// Database object types for DCL statements
4///
5/// This enum represents the various types of database objects that can
6/// be targets of GRANT and REVOKE statements.
7///
8/// # Examples
9///
10/// ```
11/// use reinhardt_query::dcl::ObjectType;
12///
13/// let object_type = ObjectType::Table;
14/// assert_eq!(object_type.as_sql(), "TABLE");
15/// ```
16#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
17#[non_exhaustive]
18pub enum ObjectType {
19 /// Database tables
20 Table,
21 /// Entire databases
22 Database,
23 /// Database schemas (PostgreSQL-specific)
24 Schema,
25 /// Sequence objects (PostgreSQL-specific)
26 Sequence,
27 /// Functions (PostgreSQL-specific)
28 Function,
29 /// Procedures (PostgreSQL-specific)
30 Procedure,
31 /// Routines - functions or procedures (PostgreSQL-specific)
32 Routine,
33 /// User-defined types (PostgreSQL-specific)
34 Type,
35 /// Domain types (PostgreSQL-specific)
36 Domain,
37 /// Foreign data wrappers (PostgreSQL-specific)
38 ForeignDataWrapper,
39 /// Foreign servers (PostgreSQL-specific)
40 ForeignServer,
41 /// Procedural languages (PostgreSQL-specific)
42 Language,
43 /// Large objects (PostgreSQL-specific)
44 LargeObject,
45 /// Tablespaces (PostgreSQL-specific)
46 Tablespace,
47 /// Configuration parameters (PostgreSQL-specific)
48 Parameter,
49}
50
51impl ObjectType {
52 /// Returns the SQL keyword for this object type
53 ///
54 /// # Examples
55 ///
56 /// ```
57 /// use reinhardt_query::dcl::ObjectType;
58 ///
59 /// assert_eq!(ObjectType::Table.as_sql(), "TABLE");
60 /// assert_eq!(ObjectType::Database.as_sql(), "DATABASE");
61 /// ```
62 pub fn as_sql(&self) -> &'static str {
63 match self {
64 ObjectType::Table => "TABLE",
65 ObjectType::Database => "DATABASE",
66 ObjectType::Schema => "SCHEMA",
67 ObjectType::Sequence => "SEQUENCE",
68 ObjectType::Function => "FUNCTION",
69 ObjectType::Procedure => "PROCEDURE",
70 ObjectType::Routine => "ROUTINE",
71 ObjectType::Type => "TYPE",
72 ObjectType::Domain => "DOMAIN",
73 ObjectType::ForeignDataWrapper => "FOREIGN DATA WRAPPER",
74 ObjectType::ForeignServer => "FOREIGN SERVER",
75 ObjectType::Language => "LANGUAGE",
76 ObjectType::LargeObject => "LARGE OBJECT",
77 ObjectType::Tablespace => "TABLESPACE",
78 ObjectType::Parameter => "PARAMETER",
79 }
80 }
81
82 /// Checks if this object type is PostgreSQL-specific
83 ///
84 /// Returns `true` for object types that are only available in PostgreSQL,
85 /// `false` for object types that are common to both PostgreSQL and MySQL.
86 ///
87 /// # Examples
88 ///
89 /// ```
90 /// use reinhardt_query::dcl::ObjectType;
91 ///
92 /// assert!(!ObjectType::Table.is_postgres_only()); // Common
93 /// assert!(ObjectType::Schema.is_postgres_only()); // PostgreSQL-specific
94 /// ```
95 pub fn is_postgres_only(&self) -> bool {
96 matches!(
97 self,
98 ObjectType::Schema
99 | ObjectType::Sequence
100 | ObjectType::Function
101 | ObjectType::Procedure
102 | ObjectType::Routine
103 | ObjectType::Type
104 | ObjectType::Domain
105 | ObjectType::ForeignDataWrapper
106 | ObjectType::ForeignServer
107 | ObjectType::Language
108 | ObjectType::LargeObject
109 | ObjectType::Tablespace
110 | ObjectType::Parameter
111 )
112 }
113}