Files
tasks/common/persistence/sql/sqlplugin/sqlite/execution.go
zeekay 5a601d081b rebrand: go.temporal.io/server -> github.com/hanzoai/tasks
Full module path rebrand from Temporal to Hanzo Tasks:
- go.mod module: github.com/hanzoai/tasks
- All internal Go imports updated (1906 files)
- cmd/server renamed to cmd/tasksd
- Binary name: tasksd (was temporal-server)
- Docker images: hanzoai/tasks (was temporalio/server)
- README rewritten with Hanzo Tasks branding
- LLM.md created with integration notes
- Makefile, goreleaser, CI workflows updated
- go.temporal.io/sdk and go.temporal.io/api imports preserved (separate repos)

Fork of Temporal.io (MIT license).
2026-03-19 10:36:40 -07:00

928 lines
30 KiB
Go

package sqlite
import (
"context"
"database/sql"
"github.com/hanzoai/tasks/chasm"
"github.com/hanzoai/tasks/common/persistence/sql/sqlplugin"
"github.com/hanzoai/tasks/common/softassert"
)
const (
executionsColumns = `shard_id, namespace_id, workflow_id, run_id, next_event_id, last_write_version, data, data_encoding, state, state_encoding, db_record_version`
createExecutionQuery = `INSERT INTO executions(` + executionsColumns + `)
VALUES(:shard_id, :namespace_id, :workflow_id, :run_id, :next_event_id, :last_write_version, :data, :data_encoding, :state, :state_encoding, :db_record_version)`
updateExecutionQuery = `UPDATE executions SET
db_record_version = :db_record_version, next_event_id = :next_event_id, last_write_version = :last_write_version, data = :data, data_encoding = :data_encoding, state = :state, state_encoding = :state_encoding
WHERE shard_id = :shard_id AND namespace_id = :namespace_id AND workflow_id = :workflow_id AND run_id = :run_id`
getExecutionQuery = `SELECT ` + executionsColumns + ` FROM executions
WHERE shard_id = ? AND namespace_id = ? AND workflow_id = ? AND run_id = ?`
deleteExecutionQuery = `DELETE FROM executions
WHERE shard_id = ? AND namespace_id = ? AND workflow_id = ? AND run_id = ?`
lockExecutionQueryBase = `SELECT db_record_version, next_event_id FROM executions
WHERE shard_id = ? AND namespace_id = ? AND workflow_id = ? AND run_id = ?`
writeLockExecutionQuery = lockExecutionQueryBase
readLockExecutionQuery = lockExecutionQueryBase
createCurrentExecutionQuery = `INSERT INTO current_executions
(shard_id, namespace_id, workflow_id, run_id, create_request_id, state, status, start_time, last_write_version, data, data_encoding) VALUES
(:shard_id, :namespace_id, :workflow_id, :run_id, :create_request_id, :state, :status, :start_time, :last_write_version, :data, :data_encoding)`
createCurrentChasmExecutionQuery = `INSERT INTO current_chasm_executions
(shard_id, namespace_id, business_id, archetype_id, run_id, create_request_id, state, status, start_time, last_write_version, data, data_encoding) VALUES
(:shard_id, :namespace_id, :workflow_id, :archetype_id, :run_id, :create_request_id, :state, :status, :start_time, :last_write_version, :data, :data_encoding)`
deleteCurrentExecutionQuery = "DELETE FROM current_executions WHERE shard_id = ? AND namespace_id = ? AND workflow_id = ? AND run_id = ?"
deleteCurrentChasmExecutionQuery = "DELETE FROM current_chasm_executions WHERE shard_id = ? AND namespace_id = ? AND business_id = ? AND archetype_id = ? AND run_id = ?"
getCurrentExecutionQuery = `SELECT
shard_id, namespace_id, workflow_id, run_id, create_request_id, state, status, start_time, last_write_version, data, data_encoding
FROM current_executions WHERE shard_id = ? AND namespace_id = ? AND workflow_id = ?`
getCurrentChasmExecutionQuery = `SELECT
shard_id, namespace_id, business_id as workflow_id, run_id, create_request_id, state, status, start_time, last_write_version, data, data_encoding
FROM current_chasm_executions WHERE shard_id = ? AND namespace_id = ? AND business_id = ? AND archetype_id = ?`
lockCurrentExecutionJoinExecutionsQuery = `SELECT
ce.shard_id, ce.namespace_id, ce.workflow_id, ce.run_id, ce.create_request_id, ce.state, ce.status, ce.start_time, e.last_write_version, ce.data, ce.data_encoding
FROM current_executions ce
INNER JOIN executions e ON e.shard_id = ce.shard_id AND e.namespace_id = ce.namespace_id AND e.workflow_id = ce.workflow_id AND e.run_id = ce.run_id
WHERE ce.shard_id = ? AND ce.namespace_id = ? AND ce.workflow_id = ?`
lockCurrentChasmExecutionJoinExecutionsQuery = `SELECT
ce.shard_id, ce.namespace_id, ce.business_id as workflow_id, ce.run_id, ce.create_request_id, ce.state, ce.status, ce.start_time, e.last_write_version, ce.data, ce.data_encoding
FROM current_chasm_executions ce
INNER JOIN executions e ON e.shard_id = ce.shard_id AND e.namespace_id = ce.namespace_id AND e.workflow_id = ce.business_id AND e.run_id = ce.run_id
WHERE ce.shard_id = ? AND ce.namespace_id = ? AND ce.business_id = ? AND ce.archetype_id = ?`
lockCurrentExecutionQuery = getCurrentExecutionQuery
lockCurrentChasmExecutionQuery = getCurrentChasmExecutionQuery
updateCurrentExecutionsBase = ` SET
run_id = :run_id,
create_request_id = :create_request_id,
state = :state,
status = :status,
start_time = :start_time,
last_write_version = :last_write_version,
data = :data,
data_encoding = :data_encoding
WHERE
shard_id = :shard_id AND
namespace_id = :namespace_id
`
updateCurrentExecutionsQuery = `UPDATE current_executions` + updateCurrentExecutionsBase + ` AND workflow_id = :workflow_id`
updateCurrentChasmExecutionsQuery = `UPDATE current_chasm_executions` + updateCurrentExecutionsBase + ` AND business_id = :workflow_id AND archetype_id = :archetype_id`
createHistoryImmediateTasksQuery = `INSERT INTO history_immediate_tasks(shard_id, category_id, task_id, data, data_encoding)
VALUES(:shard_id, :category_id, :task_id, :data, :data_encoding)`
getHistoryImmediateTasksQuery = `SELECT task_id, data, data_encoding
FROM history_immediate_tasks WHERE shard_id = ? AND category_id = ? AND task_id >= ? AND task_id < ? ORDER BY task_id LIMIT ?`
deleteHistoryImmediateTaskQuery = `DELETE FROM history_immediate_tasks WHERE shard_id = ? AND category_id = ? AND task_id = ?`
rangeDeleteHistoryImmediateTasksQuery = `DELETE FROM history_immediate_tasks WHERE shard_id = ? AND category_id = ? AND task_id >= ? AND task_id < ?`
createHistoryScheduledTasksQuery = `INSERT INTO history_scheduled_tasks (shard_id, category_id, visibility_timestamp, task_id, data, data_encoding)
VALUES (:shard_id, :category_id, :visibility_timestamp, :task_id, :data, :data_encoding)`
getHistoryScheduledTasksQuery = `SELECT visibility_timestamp, task_id, data, data_encoding FROM history_scheduled_tasks
WHERE shard_id = ?
AND category_id = ?
AND ((visibility_timestamp >= ? AND task_id >= ?) OR visibility_timestamp > ?)
AND visibility_timestamp < ?
ORDER BY visibility_timestamp,task_id LIMIT ?`
deleteHistoryScheduledTaskQuery = `DELETE FROM history_scheduled_tasks WHERE shard_id = ? AND category_id = ? AND visibility_timestamp = ? AND task_id = ?`
rangeDeleteHistoryScheduledTasksQuery = `DELETE FROM history_scheduled_tasks WHERE shard_id = ? AND category_id = ? AND visibility_timestamp >= ? AND visibility_timestamp < ?`
createTransferTasksQuery = `INSERT INTO transfer_tasks(shard_id, task_id, data, data_encoding)
VALUES(:shard_id, :task_id, :data, :data_encoding)`
getTransferTasksQuery = `SELECT task_id, data, data_encoding
FROM transfer_tasks WHERE shard_id = ? AND task_id >= ? AND task_id < ? ORDER BY task_id LIMIT ?`
deleteTransferTaskQuery = `DELETE FROM transfer_tasks WHERE shard_id = ? AND task_id = ?`
rangeDeleteTransferTaskQuery = `DELETE FROM transfer_tasks WHERE shard_id = ? AND task_id >= ? AND task_id < ?`
createTimerTasksQuery = `INSERT INTO timer_tasks (shard_id, visibility_timestamp, task_id, data, data_encoding)
VALUES (:shard_id, :visibility_timestamp, :task_id, :data, :data_encoding)`
getTimerTasksQuery = `SELECT visibility_timestamp, task_id, data, data_encoding FROM timer_tasks
WHERE shard_id = ?
AND ((visibility_timestamp >= ? AND task_id >= ?) OR visibility_timestamp > ?)
AND visibility_timestamp < ?
ORDER BY visibility_timestamp,task_id LIMIT ?`
deleteTimerTaskQuery = `DELETE FROM timer_tasks WHERE shard_id = ? AND visibility_timestamp = ? AND task_id = ?`
rangeDeleteTimerTaskQuery = `DELETE FROM timer_tasks WHERE shard_id = ? AND visibility_timestamp >= ? AND visibility_timestamp < ?`
createReplicationTasksQuery = `INSERT INTO replication_tasks (shard_id, task_id, data, data_encoding)
VALUES(:shard_id, :task_id, :data, :data_encoding)`
getReplicationTasksQuery = `SELECT task_id, data, data_encoding FROM replication_tasks WHERE
shard_id = ? AND task_id >= ? AND task_id < ? ORDER BY task_id LIMIT ?`
deleteReplicationTaskQuery = `DELETE FROM replication_tasks WHERE shard_id = ? AND task_id = ?`
rangeDeleteReplicationTaskQuery = `DELETE FROM replication_tasks WHERE shard_id = ? AND task_id >= ? AND task_id < ?`
getReplicationTasksDLQQuery = `SELECT task_id, data, data_encoding FROM replication_tasks_dlq WHERE
source_cluster_name = ? AND
shard_id = ? AND
task_id >= ? AND
task_id < ?
ORDER BY task_id LIMIT ?`
createVisibilityTasksQuery = `INSERT INTO visibility_tasks(shard_id, task_id, data, data_encoding)
VALUES(:shard_id, :task_id, :data, :data_encoding)`
getVisibilityTasksQuery = `SELECT task_id, data, data_encoding
FROM visibility_tasks WHERE shard_id = ? AND task_id >= ? AND task_id < ? ORDER BY task_id LIMIT ?`
deleteVisibilityTaskQuery = `DELETE FROM visibility_tasks WHERE shard_id = ? AND task_id = ?`
rangeDeleteVisibilityTaskQuery = `DELETE FROM visibility_tasks WHERE shard_id = ? AND task_id >= ? AND task_id < ?`
bufferedEventsColumns = `shard_id, namespace_id, workflow_id, run_id, data, data_encoding`
createBufferedEventsQuery = `INSERT INTO buffered_events(` + bufferedEventsColumns + `)
VALUES (:shard_id, :namespace_id, :workflow_id, :run_id, :data, :data_encoding)`
deleteBufferedEventsQuery = `DELETE FROM buffered_events WHERE shard_id=? AND namespace_id=? AND workflow_id=? AND run_id=?`
getBufferedEventsQuery = `SELECT data, data_encoding FROM buffered_events WHERE
shard_id=? AND namespace_id=? AND workflow_id=? AND run_id=? ORDER BY id`
insertReplicationTaskDLQQuery = `
INSERT INTO replication_tasks_dlq
(source_cluster_name,
shard_id,
task_id,
data,
data_encoding)
VALUES (:source_cluster_name,
:shard_id,
:task_id,
:data,
:data_encoding)
`
deleteReplicationTaskFromDLQQuery = `
DELETE FROM replication_tasks_dlq
WHERE source_cluster_name = ?
AND shard_id = ?
AND task_id = ?`
rangeDeleteReplicationTaskFromDLQQuery = `
DELETE FROM replication_tasks_dlq
WHERE source_cluster_name = ?
AND shard_id = ?
AND task_id >= ?
AND task_id < ?`
)
// InsertIntoExecutions inserts a row into executions table
func (mdb *db) InsertIntoExecutions(
ctx context.Context,
row *sqlplugin.ExecutionsRow,
) (sql.Result, error) {
return mdb.conn.NamedExecContext(ctx,
createExecutionQuery,
row,
)
}
// UpdateExecutions updates a single row in executions table
func (mdb *db) UpdateExecutions(
ctx context.Context,
row *sqlplugin.ExecutionsRow,
) (sql.Result, error) {
return mdb.conn.NamedExecContext(ctx,
updateExecutionQuery,
row,
)
}
// SelectFromExecutions reads a single row from executions table
func (mdb *db) SelectFromExecutions(
ctx context.Context,
filter sqlplugin.ExecutionsFilter,
) (*sqlplugin.ExecutionsRow, error) {
var row sqlplugin.ExecutionsRow
err := mdb.conn.GetContext(ctx,
&row, getExecutionQuery,
filter.ShardID,
filter.NamespaceID,
filter.WorkflowID,
filter.RunID,
)
if err != nil {
return nil, err
}
return &row, err
}
// DeleteFromExecutions deletes a single row from executions table
func (mdb *db) DeleteFromExecutions(
ctx context.Context,
filter sqlplugin.ExecutionsFilter,
) (sql.Result, error) {
return mdb.conn.ExecContext(ctx,
deleteExecutionQuery,
filter.ShardID,
filter.NamespaceID,
filter.WorkflowID,
filter.RunID,
)
}
// ReadLockExecutions acquires a write lock on a single row in executions table
func (mdb *db) ReadLockExecutions(
ctx context.Context,
filter sqlplugin.ExecutionsFilter,
) (int64, int64, error) {
var executionVersion sqlplugin.ExecutionVersion
err := mdb.conn.GetContext(ctx,
&executionVersion,
readLockExecutionQuery,
filter.ShardID,
filter.NamespaceID,
filter.WorkflowID,
filter.RunID,
)
return executionVersion.DBRecordVersion, executionVersion.NextEventID, err
}
// WriteLockExecutions acquires a write lock on a single row in executions table
func (mdb *db) WriteLockExecutions(
ctx context.Context,
filter sqlplugin.ExecutionsFilter,
) (int64, int64, error) {
var executionVersion sqlplugin.ExecutionVersion
err := mdb.conn.GetContext(ctx,
&executionVersion,
writeLockExecutionQuery,
filter.ShardID,
filter.NamespaceID,
filter.WorkflowID,
filter.RunID,
)
return executionVersion.DBRecordVersion, executionVersion.NextEventID, err
}
// InsertIntoCurrentExecutions inserts a single row into current_executions table
func (mdb *db) InsertIntoCurrentExecutions(
ctx context.Context,
row *sqlplugin.CurrentExecutionsRow,
) (sql.Result, error) {
if err := mdb.assertArchetypeIDSpecified(row.ArchetypeID); err != nil {
return nil, err
}
if row.ArchetypeID == chasm.WorkflowArchetypeID {
return mdb.conn.NamedExecContext(ctx,
createCurrentExecutionQuery,
row,
)
}
return mdb.conn.NamedExecContext(ctx,
createCurrentChasmExecutionQuery,
row,
)
}
// UpdateCurrentExecutions updates a single row in current_executions table
func (mdb *db) UpdateCurrentExecutions(
ctx context.Context,
row *sqlplugin.CurrentExecutionsRow,
) (sql.Result, error) {
if err := mdb.assertArchetypeIDSpecified(row.ArchetypeID); err != nil {
return nil, err
}
if row.ArchetypeID == chasm.WorkflowArchetypeID {
return mdb.conn.NamedExecContext(ctx,
updateCurrentExecutionsQuery,
row,
)
}
return mdb.conn.NamedExecContext(ctx,
updateCurrentChasmExecutionsQuery,
row,
)
}
// SelectFromCurrentExecutions reads one or more rows from current_executions table
func (mdb *db) SelectFromCurrentExecutions(
ctx context.Context,
filter sqlplugin.CurrentExecutionsFilter,
) (*sqlplugin.CurrentExecutionsRow, error) {
var row sqlplugin.CurrentExecutionsRow
var err error
if err := mdb.assertArchetypeIDSpecified(filter.ArchetypeID); err != nil {
return nil, err
}
if filter.ArchetypeID == chasm.WorkflowArchetypeID {
err = mdb.conn.GetContext(ctx,
&row,
getCurrentExecutionQuery,
filter.ShardID,
filter.NamespaceID,
filter.WorkflowID,
)
} else {
err = mdb.conn.GetContext(ctx,
&row,
getCurrentChasmExecutionQuery,
filter.ShardID,
filter.NamespaceID,
filter.WorkflowID,
filter.ArchetypeID,
)
}
row.ArchetypeID = filter.ArchetypeID
return &row, err
}
// DeleteFromCurrentExecutions deletes a single row in current_executions table
func (mdb *db) DeleteFromCurrentExecutions(
ctx context.Context,
filter sqlplugin.CurrentExecutionsFilter,
) (sql.Result, error) {
if err := mdb.assertArchetypeIDSpecified(filter.ArchetypeID); err != nil {
return nil, err
}
if filter.ArchetypeID == chasm.WorkflowArchetypeID {
return mdb.conn.ExecContext(ctx,
deleteCurrentExecutionQuery,
filter.ShardID,
filter.NamespaceID,
filter.WorkflowID,
filter.RunID,
)
}
return mdb.conn.ExecContext(ctx,
deleteCurrentChasmExecutionQuery,
filter.ShardID,
filter.NamespaceID,
filter.WorkflowID,
filter.ArchetypeID,
filter.RunID,
)
}
// LockCurrentExecutions acquires a write lock on a single row in current_executions table
func (mdb *db) LockCurrentExecutions(
ctx context.Context,
filter sqlplugin.CurrentExecutionsFilter,
) (*sqlplugin.CurrentExecutionsRow, error) {
var row sqlplugin.CurrentExecutionsRow
var err error
if err := mdb.assertArchetypeIDSpecified(filter.ArchetypeID); err != nil {
return nil, err
}
if filter.ArchetypeID == chasm.WorkflowArchetypeID {
err = mdb.conn.GetContext(ctx,
&row,
lockCurrentExecutionQuery,
filter.ShardID,
filter.NamespaceID,
filter.WorkflowID,
)
} else {
err = mdb.conn.GetContext(ctx,
&row,
lockCurrentChasmExecutionQuery,
filter.ShardID,
filter.NamespaceID,
filter.WorkflowID,
filter.ArchetypeID,
)
}
row.ArchetypeID = filter.ArchetypeID
return &row, err
}
// LockCurrentExecutionsJoinExecutions joins a row in current_executions with executions table and acquires a
// write lock on the result
func (mdb *db) LockCurrentExecutionsJoinExecutions(
ctx context.Context,
filter sqlplugin.CurrentExecutionsFilter,
) (rows []sqlplugin.CurrentExecutionsRow, err error) {
if err := mdb.assertArchetypeIDSpecified(filter.ArchetypeID); err != nil {
return nil, err
}
if filter.ArchetypeID == chasm.WorkflowArchetypeID {
err = mdb.conn.SelectContext(ctx,
&rows,
lockCurrentExecutionJoinExecutionsQuery,
filter.ShardID,
filter.NamespaceID,
filter.WorkflowID,
)
} else {
err = mdb.conn.SelectContext(ctx,
&rows,
lockCurrentChasmExecutionJoinExecutionsQuery,
filter.ShardID,
filter.NamespaceID,
filter.WorkflowID,
filter.ArchetypeID,
)
}
for i := range rows {
rows[i].ArchetypeID = filter.ArchetypeID
}
return rows, err
}
// InsertIntoHistoryImmediateTasks inserts one or more rows into history_immediate_tasks table
func (mdb *db) InsertIntoHistoryImmediateTasks(
ctx context.Context,
rows []sqlplugin.HistoryImmediateTasksRow,
) (sql.Result, error) {
return mdb.conn.NamedExecContext(ctx,
createHistoryImmediateTasksQuery,
rows,
)
}
// RangeSelectFromHistoryImmediateTasks reads one or more rows from transfer_tasks table
func (mdb *db) RangeSelectFromHistoryImmediateTasks(
ctx context.Context,
filter sqlplugin.HistoryImmediateTasksRangeFilter,
) ([]sqlplugin.HistoryImmediateTasksRow, error) {
var rows []sqlplugin.HistoryImmediateTasksRow
if err := mdb.conn.SelectContext(ctx,
&rows,
getHistoryImmediateTasksQuery,
filter.ShardID,
filter.CategoryID,
filter.InclusiveMinTaskID,
filter.ExclusiveMaxTaskID,
filter.PageSize,
); err != nil {
return nil, err
}
return rows, nil
}
// DeleteFromHistoryImmediateTasks deletes one or more rows from transfer_tasks table
func (mdb *db) DeleteFromHistoryImmediateTasks(
ctx context.Context,
filter sqlplugin.HistoryImmediateTasksFilter,
) (sql.Result, error) {
return mdb.conn.ExecContext(ctx,
deleteHistoryImmediateTaskQuery,
filter.ShardID,
filter.CategoryID,
filter.TaskID,
)
}
// RangeDeleteFromHistoryImmediateTasks deletes one or more rows from transfer_tasks table
func (mdb *db) RangeDeleteFromHistoryImmediateTasks(
ctx context.Context,
filter sqlplugin.HistoryImmediateTasksRangeFilter,
) (sql.Result, error) {
return mdb.conn.ExecContext(ctx,
rangeDeleteHistoryImmediateTasksQuery,
filter.ShardID,
filter.CategoryID,
filter.InclusiveMinTaskID,
filter.ExclusiveMaxTaskID,
)
}
// InsertIntoHistoryScheduledTasks inserts one or more rows into timer_tasks table
func (mdb *db) InsertIntoHistoryScheduledTasks(
ctx context.Context,
rows []sqlplugin.HistoryScheduledTasksRow,
) (sql.Result, error) {
for i := range rows {
rows[i].VisibilityTimestamp = mdb.converter.ToSQLiteDateTime(rows[i].VisibilityTimestamp)
}
return mdb.conn.NamedExecContext(
ctx,
createHistoryScheduledTasksQuery,
rows,
)
}
// RangeSelectFromHistoryScheduledTasks reads one or more rows from timer_tasks table
func (mdb *db) RangeSelectFromHistoryScheduledTasks(
ctx context.Context,
filter sqlplugin.HistoryScheduledTasksRangeFilter,
) ([]sqlplugin.HistoryScheduledTasksRow, error) {
var rows []sqlplugin.HistoryScheduledTasksRow
filter.InclusiveMinVisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.InclusiveMinVisibilityTimestamp)
filter.ExclusiveMaxVisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.ExclusiveMaxVisibilityTimestamp)
if err := mdb.conn.SelectContext(ctx,
&rows,
getHistoryScheduledTasksQuery,
filter.ShardID,
filter.CategoryID,
filter.InclusiveMinVisibilityTimestamp,
filter.InclusiveMinTaskID,
filter.InclusiveMinVisibilityTimestamp,
filter.ExclusiveMaxVisibilityTimestamp,
filter.PageSize,
); err != nil {
return nil, err
}
for i := range rows {
rows[i].VisibilityTimestamp = mdb.converter.ToSQLiteDateTime(rows[i].VisibilityTimestamp)
}
return rows, nil
}
// DeleteFromHistoryScheduledTasks deletes one or more rows from timer_tasks table
func (mdb *db) DeleteFromHistoryScheduledTasks(
ctx context.Context,
filter sqlplugin.HistoryScheduledTasksFilter,
) (sql.Result, error) {
filter.VisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.VisibilityTimestamp)
return mdb.conn.ExecContext(ctx,
deleteHistoryScheduledTaskQuery,
filter.ShardID,
filter.CategoryID,
filter.VisibilityTimestamp,
filter.TaskID,
)
}
// RangeDeleteFromHistoryScheduledTasks deletes one or more rows from timer_tasks table
func (mdb *db) RangeDeleteFromHistoryScheduledTasks(
ctx context.Context,
filter sqlplugin.HistoryScheduledTasksRangeFilter,
) (sql.Result, error) {
filter.InclusiveMinVisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.InclusiveMinVisibilityTimestamp)
filter.ExclusiveMaxVisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.ExclusiveMaxVisibilityTimestamp)
return mdb.conn.ExecContext(ctx,
rangeDeleteHistoryScheduledTasksQuery,
filter.ShardID,
filter.CategoryID,
filter.InclusiveMinVisibilityTimestamp,
filter.ExclusiveMaxVisibilityTimestamp,
)
}
// InsertIntoTransferTasks inserts one or more rows into transfer_tasks table
func (mdb *db) InsertIntoTransferTasks(
ctx context.Context,
rows []sqlplugin.TransferTasksRow,
) (sql.Result, error) {
return mdb.conn.NamedExecContext(ctx,
createTransferTasksQuery,
rows,
)
}
// RangeSelectFromTransferTasks reads one or more rows from transfer_tasks table
func (mdb *db) RangeSelectFromTransferTasks(
ctx context.Context,
filter sqlplugin.TransferTasksRangeFilter,
) ([]sqlplugin.TransferTasksRow, error) {
var rows []sqlplugin.TransferTasksRow
if err := mdb.conn.SelectContext(ctx,
&rows,
getTransferTasksQuery,
filter.ShardID,
filter.InclusiveMinTaskID,
filter.ExclusiveMaxTaskID,
filter.PageSize,
); err != nil {
return nil, err
}
return rows, nil
}
// DeleteFromTransferTasks deletes one or more rows from transfer_tasks table
func (mdb *db) DeleteFromTransferTasks(
ctx context.Context,
filter sqlplugin.TransferTasksFilter,
) (sql.Result, error) {
return mdb.conn.ExecContext(ctx,
deleteTransferTaskQuery,
filter.ShardID,
filter.TaskID,
)
}
// RangeDeleteFromTransferTasks deletes one or more rows from transfer_tasks table
func (mdb *db) RangeDeleteFromTransferTasks(
ctx context.Context,
filter sqlplugin.TransferTasksRangeFilter,
) (sql.Result, error) {
return mdb.conn.ExecContext(ctx,
rangeDeleteTransferTaskQuery,
filter.ShardID,
filter.InclusiveMinTaskID,
filter.ExclusiveMaxTaskID,
)
}
// InsertIntoTimerTasks inserts one or more rows into timer_tasks table
func (mdb *db) InsertIntoTimerTasks(
ctx context.Context,
rows []sqlplugin.TimerTasksRow,
) (sql.Result, error) {
for i := range rows {
rows[i].VisibilityTimestamp = mdb.converter.ToSQLiteDateTime(rows[i].VisibilityTimestamp)
}
return mdb.conn.NamedExecContext(
ctx,
createTimerTasksQuery,
rows,
)
}
// RangeSelectFromTimerTasks reads one or more rows from timer_tasks table
func (mdb *db) RangeSelectFromTimerTasks(
ctx context.Context,
filter sqlplugin.TimerTasksRangeFilter,
) ([]sqlplugin.TimerTasksRow, error) {
var rows []sqlplugin.TimerTasksRow
filter.InclusiveMinVisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.InclusiveMinVisibilityTimestamp)
filter.ExclusiveMaxVisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.ExclusiveMaxVisibilityTimestamp)
if err := mdb.conn.SelectContext(ctx,
&rows,
getTimerTasksQuery,
filter.ShardID,
filter.InclusiveMinVisibilityTimestamp,
filter.InclusiveMinTaskID,
filter.InclusiveMinVisibilityTimestamp,
filter.ExclusiveMaxVisibilityTimestamp,
filter.PageSize,
); err != nil {
return nil, err
}
for i := range rows {
rows[i].VisibilityTimestamp = mdb.converter.FromSQLiteDateTime(rows[i].VisibilityTimestamp)
}
return rows, nil
}
// DeleteFromTimerTasks deletes one or more rows from timer_tasks table
func (mdb *db) DeleteFromTimerTasks(
ctx context.Context,
filter sqlplugin.TimerTasksFilter,
) (sql.Result, error) {
filter.VisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.VisibilityTimestamp)
return mdb.conn.ExecContext(ctx,
deleteTimerTaskQuery,
filter.ShardID,
filter.VisibilityTimestamp,
filter.TaskID,
)
}
// RangeDeleteFromTimerTasks deletes one or more rows from timer_tasks table
func (mdb *db) RangeDeleteFromTimerTasks(
ctx context.Context,
filter sqlplugin.TimerTasksRangeFilter,
) (sql.Result, error) {
filter.InclusiveMinVisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.InclusiveMinVisibilityTimestamp)
filter.ExclusiveMaxVisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.ExclusiveMaxVisibilityTimestamp)
return mdb.conn.ExecContext(ctx,
rangeDeleteTimerTaskQuery,
filter.ShardID,
filter.InclusiveMinVisibilityTimestamp,
filter.ExclusiveMaxVisibilityTimestamp,
)
}
// InsertIntoBufferedEvents inserts one or more rows into buffered_events table
func (mdb *db) InsertIntoBufferedEvents(
ctx context.Context,
rows []sqlplugin.BufferedEventsRow,
) (sql.Result, error) {
return mdb.conn.NamedExecContext(ctx,
createBufferedEventsQuery,
rows,
)
}
// SelectFromBufferedEvents reads one or more rows from buffered_events table
func (mdb *db) SelectFromBufferedEvents(
ctx context.Context,
filter sqlplugin.BufferedEventsFilter,
) ([]sqlplugin.BufferedEventsRow, error) {
var rows []sqlplugin.BufferedEventsRow
if err := mdb.conn.SelectContext(ctx,
&rows,
getBufferedEventsQuery,
filter.ShardID,
filter.NamespaceID,
filter.WorkflowID,
filter.RunID,
); err != nil {
return nil, err
}
for i := 0; i < len(rows); i++ {
rows[i].NamespaceID = filter.NamespaceID
rows[i].WorkflowID = filter.WorkflowID
rows[i].RunID = filter.RunID
rows[i].ShardID = filter.ShardID
}
return rows, nil
}
// DeleteFromBufferedEvents deletes one or more rows from buffered_events table
func (mdb *db) DeleteFromBufferedEvents(
ctx context.Context,
filter sqlplugin.BufferedEventsFilter,
) (sql.Result, error) {
return mdb.conn.ExecContext(ctx,
deleteBufferedEventsQuery,
filter.ShardID,
filter.NamespaceID,
filter.WorkflowID,
filter.RunID,
)
}
// InsertIntoReplicationTasks inserts one or more rows into replication_tasks table
func (mdb *db) InsertIntoReplicationTasks(
ctx context.Context,
rows []sqlplugin.ReplicationTasksRow,
) (sql.Result, error) {
return mdb.conn.NamedExecContext(ctx,
createReplicationTasksQuery,
rows,
)
}
// RangeSelectFromReplicationTasks reads one or more rows from replication_tasks table
func (mdb *db) RangeSelectFromReplicationTasks(
ctx context.Context,
filter sqlplugin.ReplicationTasksRangeFilter,
) ([]sqlplugin.ReplicationTasksRow, error) {
var rows []sqlplugin.ReplicationTasksRow
err := mdb.conn.SelectContext(ctx,
&rows,
getReplicationTasksQuery,
filter.ShardID,
filter.InclusiveMinTaskID,
filter.ExclusiveMaxTaskID,
filter.PageSize,
)
return rows, err
}
// DeleteFromReplicationTasks deletes one row from replication_tasks table
func (mdb *db) DeleteFromReplicationTasks(
ctx context.Context,
filter sqlplugin.ReplicationTasksFilter,
) (sql.Result, error) {
return mdb.conn.ExecContext(ctx,
deleteReplicationTaskQuery,
filter.ShardID,
filter.TaskID,
)
}
// RangeDeleteFromReplicationTasks deletes multi rows from replication_tasks table
func (mdb *db) RangeDeleteFromReplicationTasks(
ctx context.Context,
filter sqlplugin.ReplicationTasksRangeFilter,
) (sql.Result, error) {
return mdb.conn.ExecContext(ctx,
rangeDeleteReplicationTaskQuery,
filter.ShardID,
filter.InclusiveMinTaskID,
filter.ExclusiveMaxTaskID,
)
}
// InsertIntoReplicationDLQTasks inserts one or more rows into replication_tasks_dlq table
func (mdb *db) InsertIntoReplicationDLQTasks(
ctx context.Context,
rows []sqlplugin.ReplicationDLQTasksRow,
) (sql.Result, error) {
return mdb.conn.NamedExecContext(ctx,
insertReplicationTaskDLQQuery,
rows,
)
}
// RangeSelectFromReplicationDLQTasks reads one or more rows from replication_tasks_dlq table
func (mdb *db) RangeSelectFromReplicationDLQTasks(
ctx context.Context,
filter sqlplugin.ReplicationDLQTasksRangeFilter,
) ([]sqlplugin.ReplicationDLQTasksRow, error) {
var rows []sqlplugin.ReplicationDLQTasksRow
err := mdb.conn.SelectContext(ctx,
&rows, getReplicationTasksDLQQuery,
filter.SourceClusterName,
filter.ShardID,
filter.InclusiveMinTaskID,
filter.ExclusiveMaxTaskID,
filter.PageSize,
)
return rows, err
}
// DeleteFromReplicationDLQTasks deletes one row from replication_tasks_dlq table
func (mdb *db) DeleteFromReplicationDLQTasks(
ctx context.Context,
filter sqlplugin.ReplicationDLQTasksFilter,
) (sql.Result, error) {
return mdb.conn.ExecContext(ctx,
deleteReplicationTaskFromDLQQuery,
filter.SourceClusterName,
filter.ShardID,
filter.TaskID,
)
}
// RangeDeleteFromReplicationDLQTasks deletes one or more rows from replication_tasks_dlq table
func (mdb *db) RangeDeleteFromReplicationDLQTasks(
ctx context.Context,
filter sqlplugin.ReplicationDLQTasksRangeFilter,
) (sql.Result, error) {
return mdb.conn.ExecContext(ctx,
rangeDeleteReplicationTaskFromDLQQuery,
filter.SourceClusterName,
filter.ShardID,
filter.InclusiveMinTaskID,
filter.ExclusiveMaxTaskID,
)
}
// InsertIntoVisibilityTasks inserts one or more rows into visibility_tasks table
func (mdb *db) InsertIntoVisibilityTasks(
ctx context.Context,
rows []sqlplugin.VisibilityTasksRow,
) (sql.Result, error) {
return mdb.conn.NamedExecContext(ctx,
createVisibilityTasksQuery,
rows,
)
}
// RangeSelectFromVisibilityTasks reads one or more rows from visibility_tasks table
func (mdb *db) RangeSelectFromVisibilityTasks(
ctx context.Context,
filter sqlplugin.VisibilityTasksRangeFilter,
) ([]sqlplugin.VisibilityTasksRow, error) {
var rows []sqlplugin.VisibilityTasksRow
if err := mdb.conn.SelectContext(ctx,
&rows,
getVisibilityTasksQuery,
filter.ShardID,
filter.InclusiveMinTaskID,
filter.ExclusiveMaxTaskID,
filter.PageSize,
); err != nil {
return nil, err
}
return rows, nil
}
// DeleteFromVisibilityTasks deletes one or more rows from visibility_tasks table
func (mdb *db) DeleteFromVisibilityTasks(
ctx context.Context,
filter sqlplugin.VisibilityTasksFilter,
) (sql.Result, error) {
return mdb.conn.ExecContext(ctx,
deleteVisibilityTaskQuery,
filter.ShardID,
filter.TaskID,
)
}
// RangeDeleteFromVisibilityTasks deletes one or more rows from visibility_tasks table
func (mdb *db) RangeDeleteFromVisibilityTasks(
ctx context.Context,
filter sqlplugin.VisibilityTasksRangeFilter,
) (sql.Result, error) {
return mdb.conn.ExecContext(ctx,
rangeDeleteVisibilityTaskQuery,
filter.ShardID,
filter.InclusiveMinTaskID,
filter.ExclusiveMaxTaskID,
)
}
func (mdb *db) assertArchetypeIDSpecified(archetypeID chasm.ArchetypeID) error {
if archetypeID == chasm.UnspecifiedArchetypeID {
return softassert.UnexpectedInternalErr(mdb.logger, "ArchetypeID not specified", nil)
}
return nil
}