packages/sql-catalog/src/Core/Sql/StatementKind.php
1<?php
2
3declare(strict_types=1);
4
5namespace SqlCatalog\Core\Sql;
6
7/**
8 * What a catalogued statement does to the database.
9 *
10 * @visibility root
11 */
12enum StatementKind: string
13{
14 case Select = 'select';
15 case Insert = 'insert';
16 case Update = 'update';
17 case Delete = 'delete';
18 case Replace = 'replace';
19 case Merge = 'merge';
20 case Truncate = 'truncate';
21 case Create = 'create';
22 case Alter = 'alter';
23 case Drop = 'drop';
24 case Call = 'call';
25 case Show = 'show';
26 case Explain = 'explain';
27 case Transaction = 'transaction';
28 case Other = 'other';
29 case Unknown = 'unknown';
30
31 /**
32 * Whether the statement can change stored rows.
33 */
34 public function isWrite(): bool
35 {
36 return match ($this) {
37 self::Insert, self::Update, self::Delete, self::Replace, self::Merge, self::Truncate => true,
38 self::Select, self::Create, self::Alter, self::Drop, self::Call, self::Show,
39 self::Explain, self::Transaction, self::Other, self::Unknown => false,
40 };
41 }
42
43 /**
44 * Whether the statement changes the schema rather than the rows.
45 */
46 public function isSchema(): bool
47 {
48 return match ($this) {
49 self::Create, self::Alter, self::Drop, self::Truncate => true,
50 self::Select, self::Insert, self::Update, self::Delete, self::Replace, self::Merge,
51 self::Call, self::Show, self::Explain, self::Transaction, self::Other, self::Unknown => false,
52 };
53 }
54}
55