Skip to content

Commit c8c8e64

Browse files
committed
add CREATE and DROP index queries
1 parent f44de16 commit c8c8e64

File tree

6 files changed

+183
-188
lines changed

6 files changed

+183
-188
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
public struct PostgreSQLDropIndex: SQLDropIndex {
2+
public var identifier: PostgreSQLIdentifier
3+
4+
/// See `SQLSerializable`.
5+
public func serialize(_ binds: inout [Encodable]) -> String {
6+
var sql: [String] = []
7+
sql.append("DROP INDEX")
8+
sql.append(identifier.serialize(&binds))
9+
return sql.joined(separator: " ")
10+
}
11+
}
12+
13+
public final class PostgreSQLDropIndexBuilder<Connection>: SQLQueryBuilder
14+
where Connection: DatabaseQueryable, Connection.Query == PostgreSQLQuery
15+
{
16+
/// `AlterTable` query being built.
17+
public var dropIndex: PostgreSQLDropIndex
18+
19+
/// See `SQLQueryBuilder`.
20+
public var connection: Connection
21+
22+
/// See `SQLQueryBuilder`.
23+
public var query: PostgreSQLQuery {
24+
return .dropIndex(dropIndex)
25+
}
26+
27+
/// Creates a new `SQLCreateIndexBuilder`.
28+
public init(_ dropIndex: PostgreSQLDropIndex, on connection: Connection) {
29+
self.dropIndex = dropIndex
30+
self.connection = connection
31+
}
32+
}
33+
34+
35+
extension DatabaseQueryable where Query == PostgreSQLQuery {
36+
public func drop(index identifier: PostgreSQLIdentifier) -> PostgreSQLDropIndexBuilder<Self> {
37+
return .init(PostgreSQLDropIndex(identifier: identifier), on: self)
38+
}
39+
}

Sources/PostgreSQL/SQL/PostgreSQLGeneric.swift

+9-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,12 @@ public typealias PostgreSQLColumnIdentifier = GenericSQLColumnIdentifier<
1818
PostgreSQLTableIdentifier, PostgreSQLIdentifier
1919
>
2020

21-
/// See `SQLQuery`
21+
/// See `SQLQuery`.
22+
public typealias PostgreSQLCreateIndex = GenericSQLCreateIndex<
23+
PostgreSQLIndexModifier, PostgreSQLIdentifier, PostgreSQLTableIdentifier
24+
>
25+
26+
/// See `SQLQuery`.
2227
public typealias PostgreSQLCreateTable = GenericSQLCreateTable<
2328
PostgreSQLTableIdentifier, PostgreSQLColumnDefinition, PostgreSQLTableConstraint
2429
>
@@ -53,6 +58,9 @@ public typealias PostgreSQLForeignKeyAction = GenericSQLForeignKeyAction
5358
/// See `SQLQuery`.
5459
public typealias PostgreSQLGroupBy = GenericSQLGroupBy<PostgreSQLExpression>
5560

61+
/// See `SQLQuery`.
62+
public typealias PostgreSQLIndexModifier = GenericSQLIndexModifier
63+
5664
/// See `SQLQuery`.
5765
public typealias PostgreSQLIdentifier = GenericSQLIdentifier
5866

Sources/PostgreSQL/SQL/PostgreSQLQuery.swift

+24
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,18 @@ public enum PostgreSQLQuery: SQLQuery {
22
/// See `SQLQuery`.
33
public typealias AlterTable = PostgreSQLAlterTable
44

5+
/// See `SQLQuery`.
6+
public typealias CreateIndex = PostgreSQLCreateIndex
7+
58
/// See `SQLQuery`.
69
public typealias CreateTable = PostgreSQLCreateTable
710

811
/// See `SQLQuery`.
912
public typealias Delete = PostgreSQLDelete
1013

14+
/// See `SQLQuery`.
15+
public typealias DropIndex = PostgreSQLDropIndex
16+
1117
/// See `SQLQuery`.
1218
public typealias DropTable = PostgreSQLDropTable
1319

@@ -28,6 +34,11 @@ public enum PostgreSQLQuery: SQLQuery {
2834
return ._alterTable(alterTable)
2935
}
3036

37+
/// See `SQLQuery`.
38+
public static func createIndex(_ createIndex: PostgreSQLCreateIndex) -> PostgreSQLQuery {
39+
return ._createIndex(createIndex)
40+
}
41+
3142
/// See `SQLQuery`.
3243
public static func createTable(_ createTable: CreateTable) -> PostgreSQLQuery {
3344
return ._createTable(createTable)
@@ -38,6 +49,11 @@ public enum PostgreSQLQuery: SQLQuery {
3849
return ._delete(delete)
3950
}
4051

52+
/// See `SQLQuery`.
53+
public static func dropIndex(_ dropIndex: PostgreSQLDropIndex) -> PostgreSQLQuery {
54+
return ._dropIndex(dropIndex)
55+
}
56+
4157
/// See `SQLQuery`.
4258
public static func dropTable(_ dropTable: DropTable) -> PostgreSQLQuery {
4359
return ._dropTable(dropTable)
@@ -66,12 +82,18 @@ public enum PostgreSQLQuery: SQLQuery {
6682
/// See `SQLQuery`.
6783
case _alterTable(PostgreSQLAlterTable)
6884

85+
/// See `SQLQuery`.
86+
case _createIndex(PostgreSQLCreateIndex)
87+
6988
/// See `SQLQuery`.
7089
case _createTable(PostgreSQLCreateTable)
7190

7291
/// See `SQLQuery`.
7392
case _delete(PostgreSQLDelete)
7493

94+
/// See `SQLQuery`.
95+
case _dropIndex(PostgreSQLDropIndex)
96+
7597
/// See `SQLQuery`.
7698
case _dropTable(PostgreSQLDropTable)
7799

@@ -91,8 +113,10 @@ public enum PostgreSQLQuery: SQLQuery {
91113
public func serialize(_ binds: inout [Encodable]) -> String {
92114
switch self {
93115
case ._alterTable(let alterTable): return alterTable.serialize(&binds)
116+
case ._createIndex(let createIndex): return createIndex.serialize(&binds)
94117
case ._createTable(let createTable): return createTable.serialize(&binds)
95118
case ._delete(let delete): return delete.serialize(&binds)
119+
case ._dropIndex(let dropIndex): return dropIndex.serialize(&binds)
96120
case ._dropTable(let dropTable): return dropTable.serialize(&binds)
97121
case ._insert(let insert): return insert.serialize(&binds)
98122
case ._select(let select): return select.serialize(&binds)

0 commit comments

Comments
 (0)