Skip to content

Commit 2912ce8

Browse files
authored
Merge pull request #691 from jbek7/materialized-view-command-completion
Support for MATERIALIZED VIEW command-completed response
2 parents 5695df4 + da99883 commit 2912ce8

File tree

3 files changed

+135
-85
lines changed

3 files changed

+135
-85
lines changed

modules/core/shared/src/main/scala/data/Completion.scala

Lines changed: 45 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -7,48 +7,51 @@ import skunk.exception.SkunkException
77

88
sealed abstract class Completion
99
object Completion {
10-
case object Begin extends Completion
11-
case object Commit extends Completion
12-
case object CreateIndex extends Completion
13-
case class Delete(count: Int) extends Completion
14-
case object DropIndex extends Completion
15-
case object Listen extends Completion
16-
case object LockTable extends Completion
17-
case object Notify extends Completion
18-
case object Reset extends Completion
19-
case object Rollback extends Completion
20-
case object Savepoint extends Completion
21-
case class Select(count: Int) extends Completion
22-
case object Set extends Completion
23-
case object Truncate extends Completion
24-
case object Unlisten extends Completion
25-
case class Update(count: Int) extends Completion
26-
case class Insert(count: Int) extends Completion
27-
case object CreateTable extends Completion
28-
case object DropTable extends Completion
29-
case object AlterTable extends Completion
30-
case object CreateSchema extends Completion
31-
case object DropSchema extends Completion
32-
case object CreateType extends Completion
33-
case object DropType extends Completion
34-
case object CreateFunction extends Completion
35-
case class Copy(count: Int) extends Completion
36-
case object Show extends Completion
37-
case object Do extends Completion
38-
case object CreateView extends Completion
39-
case object DropView extends Completion
40-
case object CreateProcedure extends Completion
41-
case object DropProcedure extends Completion
42-
case object Call extends Completion
43-
case object CreateDomain extends Completion
44-
case object DropDomain extends Completion
45-
case object CreateSequence extends Completion
46-
case object AlterSequence extends Completion
47-
case object DropSequence extends Completion
48-
case object CreateDatabase extends Completion
49-
case object DropDatabase extends Completion
50-
case object CreateRole extends Completion
51-
case object DropRole extends Completion
10+
case object Begin extends Completion
11+
case object Commit extends Completion
12+
case object CreateIndex extends Completion
13+
case class Delete(count: Int) extends Completion
14+
case object DropIndex extends Completion
15+
case object Listen extends Completion
16+
case object LockTable extends Completion
17+
case object Notify extends Completion
18+
case object Reset extends Completion
19+
case object Rollback extends Completion
20+
case object Savepoint extends Completion
21+
case class Select(count: Int) extends Completion
22+
case object Set extends Completion
23+
case object Truncate extends Completion
24+
case object Unlisten extends Completion
25+
case class Update(count: Int) extends Completion
26+
case class Insert(count: Int) extends Completion
27+
case object CreateTable extends Completion
28+
case object DropTable extends Completion
29+
case object AlterTable extends Completion
30+
case object CreateSchema extends Completion
31+
case object DropSchema extends Completion
32+
case object CreateType extends Completion
33+
case object DropType extends Completion
34+
case object CreateFunction extends Completion
35+
case class Copy(count: Int) extends Completion
36+
case object Show extends Completion
37+
case object Do extends Completion
38+
case object CreateView extends Completion
39+
case object DropView extends Completion
40+
case object CreateProcedure extends Completion
41+
case object DropProcedure extends Completion
42+
case object Call extends Completion
43+
case object CreateDomain extends Completion
44+
case object DropDomain extends Completion
45+
case object CreateSequence extends Completion
46+
case object AlterSequence extends Completion
47+
case object DropSequence extends Completion
48+
case object CreateDatabase extends Completion
49+
case object DropDatabase extends Completion
50+
case object CreateRole extends Completion
51+
case object DropRole extends Completion
52+
case object CreateMaterializedView extends Completion
53+
case object RefreshMaterializedView extends Completion
54+
case object DropMaterializedView extends Completion
5255
// more ...
5356

5457
/**

modules/core/shared/src/main/scala/net/message/CommandComplete.scala

Lines changed: 45 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -45,48 +45,51 @@ object CommandComplete {
4545

4646
//TODO: maybe make lazy val
4747
def decoder: Decoder[CommandComplete] = utf8z.map {
48-
case "BEGIN" => apply(Completion.Begin)
49-
case "COMMIT" => apply(Completion.Commit)
50-
case "CREATE INDEX" => apply(Completion.CreateIndex)
51-
case "DROP INDEX" => apply(Completion.DropIndex)
52-
case "LISTEN" => apply(Completion.Listen)
53-
case "LOCK TABLE" => apply(Completion.LockTable)
54-
case "NOTIFY" => apply(Completion.Notify)
55-
case "RESET" => apply(Completion.Reset)
56-
case "SET" => apply(Completion.Set)
57-
case "TRUNCATE TABLE" => apply(Completion.Truncate)
58-
case "UNLISTEN" => apply(Completion.Unlisten)
59-
case "ROLLBACK" => apply(Completion.Rollback)
60-
case "SAVEPOINT" => apply(Completion.Savepoint)
61-
case "CREATE TABLE" => apply(Completion.CreateTable)
62-
case "DROP TABLE" => apply(Completion.DropTable)
63-
case "ALTER TABLE" => apply(Completion.AlterTable)
64-
case "CREATE SCHEMA" => apply(Completion.CreateSchema)
65-
case "DROP SCHEMA" => apply(Completion.DropSchema)
66-
case "CREATE TYPE" => apply(Completion.CreateType)
67-
case "DROP TYPE" => apply(Completion.DropType)
68-
case "CREATE FUNCTION" => apply(Completion.CreateFunction)
69-
case "SHOW" => apply(Completion.Show)
70-
case "DO" => apply(Completion.Do)
71-
case "CREATE PROCEDURE" => apply(Completion.CreateProcedure)
72-
case "DROP PROCEDURE" => apply(Completion.DropProcedure)
73-
case "CALL" => apply(Completion.Call)
74-
case "CREATE VIEW" => apply(Completion.CreateView)
75-
case "DROP VIEW" => apply(Completion.DropView)
76-
case "CREATE DOMAIN" => apply(Completion.CreateDomain)
77-
case "DROP DOMAIN" => apply(Completion.DropDomain)
78-
case "CREATE SEQUENCE" => apply(Completion.CreateSequence)
79-
case "ALTER SEQUENCE" => apply(Completion.AlterSequence)
80-
case "DROP SEQUENCE" => apply(Completion.DropSequence)
81-
case "CREATE DATABASE" => apply(Completion.CreateDatabase)
82-
case "DROP DATABASE" => apply(Completion.DropDatabase)
83-
case "CREATE ROLE" => apply(Completion.CreateRole)
84-
case "DROP ROLE" => apply(Completion.DropRole)
85-
case Patterns.Select(s) => apply(Completion.Select(s.toInt))
86-
case Patterns.Delete(s) => apply(Completion.Delete(s.toInt))
87-
case Patterns.Update(s) => apply(Completion.Update(s.toInt))
88-
case Patterns.Insert(s) => apply(Completion.Insert(s.drop(2).toInt))
89-
case Patterns.Copy(s) => apply(Completion.Copy(s.toInt))
48+
case "BEGIN" => apply(Completion.Begin)
49+
case "COMMIT" => apply(Completion.Commit)
50+
case "CREATE INDEX" => apply(Completion.CreateIndex)
51+
case "DROP INDEX" => apply(Completion.DropIndex)
52+
case "LISTEN" => apply(Completion.Listen)
53+
case "LOCK TABLE" => apply(Completion.LockTable)
54+
case "NOTIFY" => apply(Completion.Notify)
55+
case "RESET" => apply(Completion.Reset)
56+
case "SET" => apply(Completion.Set)
57+
case "TRUNCATE TABLE" => apply(Completion.Truncate)
58+
case "UNLISTEN" => apply(Completion.Unlisten)
59+
case "ROLLBACK" => apply(Completion.Rollback)
60+
case "SAVEPOINT" => apply(Completion.Savepoint)
61+
case "CREATE TABLE" => apply(Completion.CreateTable)
62+
case "DROP TABLE" => apply(Completion.DropTable)
63+
case "ALTER TABLE" => apply(Completion.AlterTable)
64+
case "CREATE SCHEMA" => apply(Completion.CreateSchema)
65+
case "DROP SCHEMA" => apply(Completion.DropSchema)
66+
case "CREATE TYPE" => apply(Completion.CreateType)
67+
case "DROP TYPE" => apply(Completion.DropType)
68+
case "CREATE FUNCTION" => apply(Completion.CreateFunction)
69+
case "SHOW" => apply(Completion.Show)
70+
case "DO" => apply(Completion.Do)
71+
case "CREATE PROCEDURE" => apply(Completion.CreateProcedure)
72+
case "DROP PROCEDURE" => apply(Completion.DropProcedure)
73+
case "CALL" => apply(Completion.Call)
74+
case "CREATE VIEW" => apply(Completion.CreateView)
75+
case "DROP VIEW" => apply(Completion.DropView)
76+
case "CREATE DOMAIN" => apply(Completion.CreateDomain)
77+
case "DROP DOMAIN" => apply(Completion.DropDomain)
78+
case "CREATE SEQUENCE" => apply(Completion.CreateSequence)
79+
case "ALTER SEQUENCE" => apply(Completion.AlterSequence)
80+
case "DROP SEQUENCE" => apply(Completion.DropSequence)
81+
case "CREATE DATABASE" => apply(Completion.CreateDatabase)
82+
case "DROP DATABASE" => apply(Completion.DropDatabase)
83+
case "CREATE ROLE" => apply(Completion.CreateRole)
84+
case "DROP ROLE" => apply(Completion.DropRole)
85+
case "CREATE MATERIALIZED VIEW" => apply(Completion.CreateMaterializedView)
86+
case "REFRESH MATERIALIZED VIEW" => apply(Completion.RefreshMaterializedView)
87+
case "DROP MATERIALIZED VIEW" => apply(Completion.DropMaterializedView)
88+
case Patterns.Select(s) => apply(Completion.Select(s.toInt))
89+
case Patterns.Delete(s) => apply(Completion.Delete(s.toInt))
90+
case Patterns.Update(s) => apply(Completion.Update(s.toInt))
91+
case Patterns.Insert(s) => apply(Completion.Insert(s.drop(2).toInt))
92+
case Patterns.Copy(s) => apply(Completion.Copy(s.toInt))
9093
// more .. fill in as we hit them
9194

9295
case s => apply(Completion.Unknown(s))

modules/tests/shared/src/test/scala/CommandTest.scala

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,33 @@ class CommandTest extends SkunkTest {
194194
DROP ROLE skunk_role
195195
""".command
196196

197+
val createMaterializedView: Command[Void] =
198+
sql"""
199+
CREATE MATERIALIZED VIEW IF NOT EXISTS my_foo_mv
200+
AS
201+
SELECT now()
202+
""".command
203+
204+
val createUniqueIndexForMaterializedView: Command[Void] =
205+
sql"""
206+
CREATE UNIQUE INDEX IF NOT exists my_foo_mv_unique ON my_foo_mv(now)
207+
""".command
208+
209+
val refreshMaterializedView: Command[Void] =
210+
sql"""
211+
REFRESH MATERIALIZED VIEW my_foo_mv
212+
""".command
213+
214+
val refreshMaterializedViewConcurrently: Command[Void] =
215+
sql"""
216+
REFRESH MATERIALIZED VIEW CONCURRENTLY my_foo_mv
217+
""".command
218+
219+
val dropMaterializedView: Command[Void] =
220+
sql"""
221+
DROP MATERIALIZED VIEW my_foo_mv
222+
""".command
223+
197224
sessionTest("create table, create index, drop index, alter table and drop table") { s =>
198225
for {
199226
c <- s.execute(createTable)
@@ -230,6 +257,23 @@ class CommandTest extends SkunkTest {
230257
} yield "ok"
231258
}
232259

260+
sessionTest("refresh materialized view, refresh materialized view concurrently") { s =>
261+
for {
262+
c <- s.execute(createMaterializedView)
263+
_ <- assert("completion", c == Completion.Select(1))
264+
c <- s.execute(createMaterializedView)
265+
_ <- assert("completion", c == Completion.CreateMaterializedView)
266+
c <- s.execute(refreshMaterializedView)
267+
_ <- assert("completion", c == Completion.RefreshMaterializedView)
268+
c <- s.execute(createUniqueIndexForMaterializedView)
269+
_ <- assert("completion", c == Completion.CreateIndex)
270+
c <- s.execute(refreshMaterializedViewConcurrently)
271+
_ <- assert("completion", c == Completion.RefreshMaterializedView)
272+
c <- s.execute(dropMaterializedView)
273+
_ <- assert("completion", c == Completion.DropMaterializedView)
274+
} yield "ok"
275+
}
276+
233277
sessionTest("create, call and drop procedure"){ s=>
234278
for{
235279
c <- s.execute(createProcedure)
@@ -283,7 +327,7 @@ class CommandTest extends SkunkTest {
283327
} yield "ok"
284328
}
285329

286-
sessionTest("do command"){ s=>
330+
sessionTest("do command") { s =>
287331
for{
288332
c <- s.execute(doCommand)
289333
_ <- assert("completion", c == Completion.Do)

0 commit comments

Comments
 (0)