Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 45 additions & 42 deletions modules/core/shared/src/main/scala/data/Completion.scala
Original file line number Diff line number Diff line change
Expand Up @@ -7,48 +7,51 @@ import skunk.exception.SkunkException

sealed abstract class Completion
object Completion {
case object Begin extends Completion
case object Commit extends Completion
case object CreateIndex extends Completion
case class Delete(count: Int) extends Completion
case object DropIndex extends Completion
case object Listen extends Completion
case object LockTable extends Completion
case object Notify extends Completion
case object Reset extends Completion
case object Rollback extends Completion
case object Savepoint extends Completion
case class Select(count: Int) extends Completion
case object Set extends Completion
case object Truncate extends Completion
case object Unlisten extends Completion
case class Update(count: Int) extends Completion
case class Insert(count: Int) extends Completion
case object CreateTable extends Completion
case object DropTable extends Completion
case object AlterTable extends Completion
case object CreateSchema extends Completion
case object DropSchema extends Completion
case object CreateType extends Completion
case object DropType extends Completion
case object CreateFunction extends Completion
case class Copy(count: Int) extends Completion
case object Show extends Completion
case object Do extends Completion
case object CreateView extends Completion
case object DropView extends Completion
case object CreateProcedure extends Completion
case object DropProcedure extends Completion
case object Call extends Completion
case object CreateDomain extends Completion
case object DropDomain extends Completion
case object CreateSequence extends Completion
case object AlterSequence extends Completion
case object DropSequence extends Completion
case object CreateDatabase extends Completion
case object DropDatabase extends Completion
case object CreateRole extends Completion
case object DropRole extends Completion
case object Begin extends Completion
case object Commit extends Completion
case object CreateIndex extends Completion
case class Delete(count: Int) extends Completion
case object DropIndex extends Completion
case object Listen extends Completion
case object LockTable extends Completion
case object Notify extends Completion
case object Reset extends Completion
case object Rollback extends Completion
case object Savepoint extends Completion
case class Select(count: Int) extends Completion
case object Set extends Completion
case object Truncate extends Completion
case object Unlisten extends Completion
case class Update(count: Int) extends Completion
case class Insert(count: Int) extends Completion
case object CreateTable extends Completion
case object DropTable extends Completion
case object AlterTable extends Completion
case object CreateSchema extends Completion
case object DropSchema extends Completion
case object CreateType extends Completion
case object DropType extends Completion
case object CreateFunction extends Completion
case class Copy(count: Int) extends Completion
case object Show extends Completion
case object Do extends Completion
case object CreateView extends Completion
case object DropView extends Completion
case object CreateProcedure extends Completion
case object DropProcedure extends Completion
case object Call extends Completion
case object CreateDomain extends Completion
case object DropDomain extends Completion
case object CreateSequence extends Completion
case object AlterSequence extends Completion
case object DropSequence extends Completion
case object CreateDatabase extends Completion
case object DropDatabase extends Completion
case object CreateRole extends Completion
case object DropRole extends Completion
case object CreateMaterializedView extends Completion
case object RefreshMaterializedView extends Completion
case object DropMaterializedView extends Completion
// more ...

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,48 +45,51 @@ object CommandComplete {

//TODO: maybe make lazy val
def decoder: Decoder[CommandComplete] = utf8z.map {
case "BEGIN" => apply(Completion.Begin)
case "COMMIT" => apply(Completion.Commit)
case "CREATE INDEX" => apply(Completion.CreateIndex)
case "DROP INDEX" => apply(Completion.DropIndex)
case "LISTEN" => apply(Completion.Listen)
case "LOCK TABLE" => apply(Completion.LockTable)
case "NOTIFY" => apply(Completion.Notify)
case "RESET" => apply(Completion.Reset)
case "SET" => apply(Completion.Set)
case "TRUNCATE TABLE" => apply(Completion.Truncate)
case "UNLISTEN" => apply(Completion.Unlisten)
case "ROLLBACK" => apply(Completion.Rollback)
case "SAVEPOINT" => apply(Completion.Savepoint)
case "CREATE TABLE" => apply(Completion.CreateTable)
case "DROP TABLE" => apply(Completion.DropTable)
case "ALTER TABLE" => apply(Completion.AlterTable)
case "CREATE SCHEMA" => apply(Completion.CreateSchema)
case "DROP SCHEMA" => apply(Completion.DropSchema)
case "CREATE TYPE" => apply(Completion.CreateType)
case "DROP TYPE" => apply(Completion.DropType)
case "CREATE FUNCTION" => apply(Completion.CreateFunction)
case "SHOW" => apply(Completion.Show)
case "DO" => apply(Completion.Do)
case "CREATE PROCEDURE" => apply(Completion.CreateProcedure)
case "DROP PROCEDURE" => apply(Completion.DropProcedure)
case "CALL" => apply(Completion.Call)
case "CREATE VIEW" => apply(Completion.CreateView)
case "DROP VIEW" => apply(Completion.DropView)
case "CREATE DOMAIN" => apply(Completion.CreateDomain)
case "DROP DOMAIN" => apply(Completion.DropDomain)
case "CREATE SEQUENCE" => apply(Completion.CreateSequence)
case "ALTER SEQUENCE" => apply(Completion.AlterSequence)
case "DROP SEQUENCE" => apply(Completion.DropSequence)
case "CREATE DATABASE" => apply(Completion.CreateDatabase)
case "DROP DATABASE" => apply(Completion.DropDatabase)
case "CREATE ROLE" => apply(Completion.CreateRole)
case "DROP ROLE" => apply(Completion.DropRole)
case Patterns.Select(s) => apply(Completion.Select(s.toInt))
case Patterns.Delete(s) => apply(Completion.Delete(s.toInt))
case Patterns.Update(s) => apply(Completion.Update(s.toInt))
case Patterns.Insert(s) => apply(Completion.Insert(s.drop(2).toInt))
case Patterns.Copy(s) => apply(Completion.Copy(s.toInt))
case "BEGIN" => apply(Completion.Begin)
case "COMMIT" => apply(Completion.Commit)
case "CREATE INDEX" => apply(Completion.CreateIndex)
case "DROP INDEX" => apply(Completion.DropIndex)
case "LISTEN" => apply(Completion.Listen)
case "LOCK TABLE" => apply(Completion.LockTable)
case "NOTIFY" => apply(Completion.Notify)
case "RESET" => apply(Completion.Reset)
case "SET" => apply(Completion.Set)
case "TRUNCATE TABLE" => apply(Completion.Truncate)
case "UNLISTEN" => apply(Completion.Unlisten)
case "ROLLBACK" => apply(Completion.Rollback)
case "SAVEPOINT" => apply(Completion.Savepoint)
case "CREATE TABLE" => apply(Completion.CreateTable)
case "DROP TABLE" => apply(Completion.DropTable)
case "ALTER TABLE" => apply(Completion.AlterTable)
case "CREATE SCHEMA" => apply(Completion.CreateSchema)
case "DROP SCHEMA" => apply(Completion.DropSchema)
case "CREATE TYPE" => apply(Completion.CreateType)
case "DROP TYPE" => apply(Completion.DropType)
case "CREATE FUNCTION" => apply(Completion.CreateFunction)
case "SHOW" => apply(Completion.Show)
case "DO" => apply(Completion.Do)
case "CREATE PROCEDURE" => apply(Completion.CreateProcedure)
case "DROP PROCEDURE" => apply(Completion.DropProcedure)
case "CALL" => apply(Completion.Call)
case "CREATE VIEW" => apply(Completion.CreateView)
case "DROP VIEW" => apply(Completion.DropView)
case "CREATE DOMAIN" => apply(Completion.CreateDomain)
case "DROP DOMAIN" => apply(Completion.DropDomain)
case "CREATE SEQUENCE" => apply(Completion.CreateSequence)
case "ALTER SEQUENCE" => apply(Completion.AlterSequence)
case "DROP SEQUENCE" => apply(Completion.DropSequence)
case "CREATE DATABASE" => apply(Completion.CreateDatabase)
case "DROP DATABASE" => apply(Completion.DropDatabase)
case "CREATE ROLE" => apply(Completion.CreateRole)
case "DROP ROLE" => apply(Completion.DropRole)
case "CREATE MATERIALIZED VIEW" => apply(Completion.CreateMaterializedView)
case "REFRESH MATERIALIZED VIEW" => apply(Completion.RefreshMaterializedView)
case "DROP MATERIALIZED VIEW" => apply(Completion.DropMaterializedView)
case Patterns.Select(s) => apply(Completion.Select(s.toInt))
case Patterns.Delete(s) => apply(Completion.Delete(s.toInt))
case Patterns.Update(s) => apply(Completion.Update(s.toInt))
case Patterns.Insert(s) => apply(Completion.Insert(s.drop(2).toInt))
case Patterns.Copy(s) => apply(Completion.Copy(s.toInt))
// more .. fill in as we hit them

case s => apply(Completion.Unknown(s))
Expand Down
46 changes: 45 additions & 1 deletion modules/tests/shared/src/test/scala/CommandTest.scala
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,33 @@ class CommandTest extends SkunkTest {
DROP ROLE skunk_role
""".command

val createMaterializedView: Command[Void] =
sql"""
CREATE MATERIALIZED VIEW IF NOT EXISTS my_foo_mv
AS
SELECT now()
""".command

val createUniqueIndexForMaterializedView: Command[Void] =
sql"""
CREATE UNIQUE INDEX IF NOT exists my_foo_mv_unique ON my_foo_mv(now)
""".command

val refreshMaterializedView: Command[Void] =
sql"""
REFRESH MATERIALIZED VIEW my_foo_mv
""".command

val refreshMaterializedViewConcurrently: Command[Void] =
sql"""
REFRESH MATERIALIZED VIEW CONCURRENTLY my_foo_mv
""".command

val dropMaterializedView: Command[Void] =
sql"""
DROP MATERIALIZED VIEW my_foo_mv
""".command

sessionTest("create table, create index, drop index, alter table and drop table") { s =>
for {
c <- s.execute(createTable)
Expand Down Expand Up @@ -230,6 +257,23 @@ class CommandTest extends SkunkTest {
} yield "ok"
}

sessionTest("refresh materialized view, refresh materialized view concurrently") { s =>
for {
c <- s.execute(createMaterializedView)
_ <- assert("completion", c == Completion.Select(1))
c <- s.execute(createMaterializedView)
_ <- assert("completion", c == Completion.CreateMaterializedView)
c <- s.execute(refreshMaterializedView)
_ <- assert("completion", c == Completion.RefreshMaterializedView)
c <- s.execute(createUniqueIndexForMaterializedView)
_ <- assert("completion", c == Completion.CreateIndex)
c <- s.execute(refreshMaterializedViewConcurrently)
_ <- assert("completion", c == Completion.RefreshMaterializedView)
c <- s.execute(dropMaterializedView)
_ <- assert("completion", c == Completion.DropMaterializedView)
} yield "ok"
}

sessionTest("create, call and drop procedure"){ s=>
for{
c <- s.execute(createProcedure)
Expand Down Expand Up @@ -283,7 +327,7 @@ class CommandTest extends SkunkTest {
} yield "ok"
}

sessionTest("do command"){ s=>
sessionTest("do command") { s =>
for{
c <- s.execute(doCommand)
_ <- assert("completion", c == Completion.Do)
Expand Down