Skip to content

Commit

Permalink
Additional indices for query database
Browse files Browse the repository at this point in the history
Fixes #179
  • Loading branch information
tpetter committed Jan 30, 2021
1 parent 5140e33 commit 4595d9a
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 2 deletions.
Expand Up @@ -62,6 +62,8 @@ trait CaseTables extends QueryDBSchema {
def indexTenant = index(tenant)
def indexRootCaseId = index(rootCaseId)
def indexCaseName = index(caseName)
def indexCreatedBy = index(createdBy)
def indexModifiedBy = index(modifiedBy)

def * = (id, tenant, caseName, state, failures, parentCaseId, rootCaseId, lastModified, modifiedBy, createdOn, createdBy, caseInput, caseOutput) <> (CaseRecord.tupled, CaseRecord.unapply)
}
Expand Down Expand Up @@ -134,6 +136,8 @@ trait CaseTables extends QueryDBSchema {
def * = (id, definitionId, stageId, name, index, caseInstanceId, tenant, currentState, historyState, transition, planItemType, repeating, required, lastModified, modifiedBy, createdOn, createdBy, taskInput, taskOutput, mappedInput, rawOutput) <> (PlanItemRecord.tupled, PlanItemRecord.unapply)

def indexCaseInstanceId = index(caseInstanceId)
def indexCreatedBy = index(createdBy)
def indexModifiedBy = index(modifiedBy)
}

final class PlanItemHistoryTable(tag: Tag) extends CafienneTable[PlanItemHistoryRecord](tag, "plan_item_history") {
Expand Down Expand Up @@ -183,6 +187,7 @@ trait CaseTables extends QueryDBSchema {
def * = (id, planItemId, stageId, name, index, caseInstanceId, tenant, currentState, historyState,transition, planItemType, repeating, required, lastModified, modifiedBy, eventType, sequenceNr, taskInput, taskOutput, mappedInput, rawOutput) <> (PlanItemHistoryRecord.tupled, PlanItemHistoryRecord.unapply)

def idx = index("idx_plan_item_history__plain_item_id", planItemId)
def indexModifiedBy = index(modifiedBy)
}

class CaseFileTable(tag: Tag) extends CafienneTable[CaseFileRecord](tag, "case_file") {
Expand Down Expand Up @@ -260,5 +265,6 @@ trait CaseTables extends QueryDBSchema {
def * = (caseInstanceId, tenant, memberId, caseRole, isTenantUser, isOwner, active) <> (CaseTeamMemberRecord.tupled, CaseTeamMemberRecord.unapply)

val indexCaseInstanceId = index(caseInstanceId)
def indexMemberId = index(generateIndexName(memberId), (memberId, isTenantUser))
}
}
Expand Up @@ -61,6 +61,9 @@ trait TaskTables extends QueryDBSchema {
def indexCaseInstanceId = index(caseInstanceId)
def indexTaskState = index(taskState)
def indexAssignee = index(assignee)
def indexOwner = index(owner)
def indexCreatedBy = index(createdBy)
def indexModifiedBy = index(modifiedBy)
def indexTenant = index(tenant)
def indexDueDate = index(generateIndexName(dueDate), dueDate)

Expand Down
Expand Up @@ -53,6 +53,8 @@ trait TenantTables extends QueryDBSchema {
// By default when inserting a user or role, enabled is true;
// right now, it does not make sense to enter a user without enabling it
def enabled = column[Boolean]("enabled", O.Default(true))

def indexOwnership = index(generateIndexName(isOwner), (userId, tenant, role_name, isOwner))
}

}
@@ -1,10 +1,10 @@
package org.cafienne.service.db.querydb

import org.cafienne.infrastructure.jdbc.schema.CafienneDatabaseDefinition
import org.cafienne.service.db.querydb.schema.versions.{QueryDB_1_0_0, QueryDB_1_1_10, QueryDB_1_1_5, QueryDB_1_1_6}
import org.cafienne.service.db.querydb.schema.versions.{QueryDB_1_0_0, QueryDB_1_1_10, QueryDB_1_1_11, QueryDB_1_1_5, QueryDB_1_1_6}

object QueryDB extends CafienneDatabaseDefinition with QueryDBSchema {
def verifyConnectivity() {
useSchema(Seq(QueryDB_1_0_0, QueryDB_1_1_5, QueryDB_1_1_6, QueryDB_1_1_10))
useSchema(Seq(QueryDB_1_0_0, QueryDB_1_1_5, QueryDB_1_1_6, QueryDB_1_1_10, QueryDB_1_1_11))
}
}
@@ -0,0 +1,32 @@
package org.cafienne.service.db.querydb.schema.versions

import org.cafienne.infrastructure.jdbc.schema.DbSchemaVersion
import org.cafienne.service.api.projection.table.{CaseTables, TaskTables, TenantTables}
import org.cafienne.service.db.querydb.QueryDBSchema
import slick.migration.api.TableMigration

object QueryDB_1_1_11 extends DbSchemaVersion with QueryDBSchema
with CaseTables
with TaskTables
with TenantTables {

val version = "1.1.11"
val migrations = (
// These indices are required for faster updating platform user id's
// Probably also some queries on tasks may become faster ...
addPlanItemIndices & addPlanItemHistoryIndex & addCaseIndices & addCaseTeamIndex & addTaskIndices

// This index is needed to optimize tenant queries
& addUserRoleIndex
)

import dbConfig.profile.api._

def addPlanItemIndices = TableMigration(TableQuery[PlanItemTable])addIndexes(_.indexCreatedBy, _.indexModifiedBy)
def addPlanItemHistoryIndex = TableMigration(TableQuery[PlanItemHistoryTable])addIndexes(_.indexModifiedBy)
def addCaseIndices = TableMigration(TableQuery[CaseInstanceTable])addIndexes(_.indexCreatedBy, _.indexModifiedBy)
def addCaseTeamIndex = TableMigration(TableQuery[CaseInstanceTeamMemberTable])addIndexes(_.indexMemberId)
def addTaskIndices = TableMigration(TableQuery[TaskTable])addIndexes(_.indexOwner, _.indexCreatedBy, _.indexModifiedBy)
def addUserRoleIndex = TableMigration(TableQuery[UserRoleTable])addIndexes(_.indexOwnership)

}

0 comments on commit 4595d9a

Please sign in to comment.