// The MIT License // // Copyright (c) 2021 Datadog, Inc. // // Copyright (c) 2020 Temporal Technologies Inc. All rights reserved. // // Copyright (c) 2020 Uber Technologies, Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. package sqlite import ( "context" "database/sql" "go.temporal.io/server/common/persistence/sql/sqlplugin" ) 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, last_write_version) VALUES (:shard_id, :namespace_id, :workflow_id, :run_id, :create_request_id, :state, :status, :last_write_version)` deleteCurrentExecutionQuery = "DELETE FROM current_executions WHERE shard_id=? AND namespace_id=? AND workflow_id=? AND run_id=?" getCurrentExecutionQuery = `SELECT shard_id, namespace_id, workflow_id, run_id, create_request_id, state, status, last_write_version FROM current_executions WHERE shard_id = ? AND namespace_id = ? AND workflow_id = ?` lockCurrentExecutionJoinExecutionsQuery = `SELECT ce.shard_id, ce.namespace_id, ce.workflow_id, ce.run_id, ce.create_request_id, ce.state, ce.status, e.last_write_version 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 = ?` lockCurrentExecutionQuery = getCurrentExecutionQuery updateCurrentExecutionsQuery = `UPDATE current_executions SET run_id = :run_id, create_request_id = :create_request_id, state = :state, status = :status, last_write_version = :last_write_version WHERE shard_id = :shard_id AND namespace_id = :namespace_id AND workflow_id = :workflow_id ` createTransferTasksQuery = `INSERT INTO transfer_tasks(shard_id, task_id, data, data_encoding) VALUES(:shard_id, :task_id, :data, :data_encoding)` getTransferTaskQuery = `SELECT task_id, data, data_encoding FROM transfer_tasks WHERE shard_id = ? AND task_id = ?` getTransferTasksQuery = `SELECT task_id, data, data_encoding FROM transfer_tasks WHERE shard_id = ? AND task_id > ? AND task_id <= ? ORDER BY task_id` 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)` getTimerTaskQuery = `SELECT visibility_timestamp, task_id, data, data_encoding FROM timer_tasks WHERE shard_id = ? AND visibility_timestamp = ? AND task_id = ?` 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)` getReplicationTaskQuery = `SELECT task_id, data, data_encoding FROM replication_tasks WHERE shard_id = ? AND task_id = ?` 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 <= ?` getReplicationTaskDLQQuery = `SELECT task_id, data, data_encoding FROM replication_tasks_dlq WHERE source_cluster_name = ? AND shard_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)` getVisibilityTaskQuery = `SELECT task_id, data, data_encoding FROM visibility_tasks WHERE shard_id = ? AND task_id = ?` getVisibilityTasksQuery = `SELECT task_id, data, data_encoding FROM visibility_tasks WHERE shard_id = ? AND task_id > ? AND task_id <= ? ORDER BY task_id` 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 <= ?` createTieredStorageTasksQuery = `INSERT INTO tiered_storage_tasks(shard_id, task_id, data, data_encoding) VALUES(:shard_id, :task_id, :data, :data_encoding)` getTieredStorageTaskQuery = `SELECT task_id, data, data_encoding FROM tiered_storage_tasks WHERE shard_id = ? AND task_id = ?` getTieredStorageTasksQuery = `SELECT task_id, data, data_encoding FROM tiered_storage_tasks WHERE shard_id = ? AND task_id > ? AND task_id <= ? ORDER BY task_id` deleteTieredStorageTaskQuery = `DELETE FROM tiered_storage_tasks WHERE shard_id = ? AND task_id = ?` rangeDeleteTieredStorageTaskQuery = `DELETE FROM tiered_storage_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=?` 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) { return mdb.conn.NamedExecContext(ctx, createCurrentExecutionQuery, row, ) } // UpdateCurrentExecutions updates a single row in current_executions table func (mdb *db) UpdateCurrentExecutions( ctx context.Context, row *sqlplugin.CurrentExecutionsRow, ) (sql.Result, error) { return mdb.conn.NamedExecContext(ctx, updateCurrentExecutionsQuery, 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 err := mdb.conn.GetContext(ctx, &row, getCurrentExecutionQuery, filter.ShardID, filter.NamespaceID, filter.WorkflowID, ) 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) { return mdb.conn.ExecContext(ctx, deleteCurrentExecutionQuery, filter.ShardID, filter.NamespaceID, filter.WorkflowID, 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 err := mdb.conn.GetContext(ctx, &row, lockCurrentExecutionQuery, filter.ShardID, filter.NamespaceID, filter.WorkflowID, ) 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, ) ([]sqlplugin.CurrentExecutionsRow, error) { var rows []sqlplugin.CurrentExecutionsRow err := mdb.conn.SelectContext(ctx, &rows, lockCurrentExecutionJoinExecutionsQuery, filter.ShardID, filter.NamespaceID, filter.WorkflowID, ) return rows, err } // 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, ) } // SelectFromTransferTasks reads one or more rows from transfer_tasks table func (mdb *db) SelectFromTransferTasks( ctx context.Context, filter sqlplugin.TransferTasksFilter, ) ([]sqlplugin.TransferTasksRow, error) { var rows []sqlplugin.TransferTasksRow if err := mdb.conn.SelectContext(ctx, &rows, getTransferTaskQuery, filter.ShardID, filter.TaskID, ); err != nil { return nil, err } return rows, nil } // 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.MinTaskID, filter.MaxTaskID, ); 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.MinTaskID, filter.MaxTaskID, ) } // 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, ) } // SelectFromTimerTasks reads one or more rows from timer_tasks table func (mdb *db) SelectFromTimerTasks( ctx context.Context, filter sqlplugin.TimerTasksFilter, ) ([]sqlplugin.TimerTasksRow, error) { var rows []sqlplugin.TimerTasksRow filter.VisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.VisibilityTimestamp) err := mdb.conn.SelectContext(ctx, &rows, getTimerTaskQuery, filter.ShardID, filter.VisibilityTimestamp, filter.TaskID, ) if err != nil { return nil, err } for i := range rows { rows[i].VisibilityTimestamp = mdb.converter.FromSQLiteDateTime(rows[i].VisibilityTimestamp) } return rows, nil } // 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.MinVisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.MinVisibilityTimestamp) filter.MaxVisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.MaxVisibilityTimestamp) if err := mdb.conn.SelectContext(ctx, &rows, getTimerTasksQuery, filter.ShardID, filter.MinVisibilityTimestamp, filter.TaskID, filter.MinVisibilityTimestamp, filter.MaxVisibilityTimestamp, 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.MinVisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.MinVisibilityTimestamp) filter.MaxVisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.MaxVisibilityTimestamp) return mdb.conn.ExecContext(ctx, rangeDeleteTimerTaskQuery, filter.ShardID, filter.MinVisibilityTimestamp, filter.MaxVisibilityTimestamp, ) } // 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, ) } // SelectFromReplicationTasks reads one or more rows from replication_tasks table func (mdb *db) SelectFromReplicationTasks( ctx context.Context, filter sqlplugin.ReplicationTasksFilter, ) ([]sqlplugin.ReplicationTasksRow, error) { var rows []sqlplugin.ReplicationTasksRow err := mdb.conn.SelectContext(ctx, &rows, getReplicationTaskQuery, filter.ShardID, filter.TaskID, ) return rows, err } // 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.MinTaskID, filter.MaxTaskID, 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.MinTaskID, filter.MaxTaskID, ) } // InsertIntoReplicationTasksDLQ 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, ) } // SelectFromReplicationTasksDLQ reads one or more rows from replication_tasks_dlq table func (mdb *db) SelectFromReplicationDLQTasks( ctx context.Context, filter sqlplugin.ReplicationDLQTasksFilter, ) ([]sqlplugin.ReplicationDLQTasksRow, error) { var rows []sqlplugin.ReplicationDLQTasksRow err := mdb.conn.SelectContext(ctx, &rows, getReplicationTaskDLQQuery, filter.SourceClusterName, filter.ShardID, filter.TaskID, ) return rows, err } // RangeSelectFromReplicationTasksDLQ 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.MinTaskID, filter.MaxTaskID, filter.PageSize, ) return rows, err } // DeleteMessageFromReplicationTasksDLQ 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, ) } // DeleteMessageFromReplicationTasksDLQ 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.MinTaskID, filter.MaxTaskID, ) } // 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, ) } // SelectFromVisibilityTasks reads one or more rows from visibility_tasks table func (mdb *db) SelectFromVisibilityTasks( ctx context.Context, filter sqlplugin.VisibilityTasksFilter, ) ([]sqlplugin.VisibilityTasksRow, error) { var rows []sqlplugin.VisibilityTasksRow if err := mdb.conn.SelectContext(ctx, &rows, getVisibilityTaskQuery, filter.ShardID, filter.TaskID, ); err != nil { return nil, err } return rows, nil } // 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.MinTaskID, filter.MaxTaskID, ); 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.MinTaskID, filter.MaxTaskID, ) } // InsertIntoTieredStorageTasks inserts one or more rows into tiered_storage_tasks table func (mdb *db) InsertIntoTieredStorageTasks( ctx context.Context, rows []sqlplugin.TieredStorageTasksRow, ) (sql.Result, error) { return mdb.conn.NamedExecContext(ctx, createTieredStorageTasksQuery, rows, ) } // SelectFromTieredStorageTasks reads one or more rows from tiered_storage_tasks table func (mdb *db) SelectFromTieredStorageTasks( ctx context.Context, filter sqlplugin.TieredStorageTasksFilter, ) ([]sqlplugin.TieredStorageTasksRow, error) { var rows []sqlplugin.TieredStorageTasksRow if err := mdb.conn.SelectContext(ctx, &rows, getTieredStorageTaskQuery, filter.ShardID, filter.TaskID, ); err != nil { return nil, err } return rows, nil } // RangeSelectFromTieredStorageTasks reads one or more rows from tiered_storage_tasks table func (mdb *db) RangeSelectFromTieredStorageTasks( ctx context.Context, filter sqlplugin.TieredStorageTasksRangeFilter, ) ([]sqlplugin.TieredStorageTasksRow, error) { var rows []sqlplugin.TieredStorageTasksRow if err := mdb.conn.SelectContext(ctx, &rows, getTieredStorageTasksQuery, filter.ShardID, filter.MinTaskID, filter.MaxTaskID, ); err != nil { return nil, err } return rows, nil } // DeleteFromTieredStorageTasks deletes one or more rows from tiered_storage_tasks table func (mdb *db) DeleteFromTieredStorageTasks( ctx context.Context, filter sqlplugin.TieredStorageTasksFilter, ) (sql.Result, error) { return mdb.conn.ExecContext(ctx, deleteTieredStorageTaskQuery, filter.ShardID, filter.TaskID, ) } // RangeDeleteFromTieredStorageTasks deletes one or more rows from tiered_storage_tasks table func (mdb *db) RangeDeleteFromTieredStorageTasks( ctx context.Context, filter sqlplugin.TieredStorageTasksRangeFilter, ) (sql.Result, error) { return mdb.conn.ExecContext(ctx, rangeDeleteTieredStorageTaskQuery, filter.ShardID, filter.MinTaskID, filter.MaxTaskID, ) }