go.temporal.io/server@v1.23.0/common/persistence/sql/sqlplugin/sqlite/execution.go (about)

     1  // The MIT License
     2  //
     3  // Copyright (c) 2021 Datadog, Inc.
     4  //
     5  // Copyright (c) 2020 Temporal Technologies Inc.  All rights reserved.
     6  //
     7  // Copyright (c) 2020 Uber Technologies, Inc.
     8  //
     9  // Permission is hereby granted, free of charge, to any person obtaining a copy
    10  // of this software and associated documentation files (the "Software"), to deal
    11  // in the Software without restriction, including without limitation the rights
    12  // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    13  // copies of the Software, and to permit persons to whom the Software is
    14  // furnished to do so, subject to the following conditions:
    15  //
    16  // The above copyright notice and this permission notice shall be included in
    17  // all copies or substantial portions of the Software.
    18  //
    19  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    20  // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    21  // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    22  // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    23  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    24  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    25  // THE SOFTWARE.
    26  
    27  package sqlite
    28  
    29  import (
    30  	"context"
    31  	"database/sql"
    32  
    33  	"go.temporal.io/server/common/persistence/sql/sqlplugin"
    34  )
    35  
    36  const (
    37  	executionsColumns = `shard_id, namespace_id, workflow_id, run_id, next_event_id, last_write_version, data, data_encoding, state, state_encoding, db_record_version`
    38  
    39  	createExecutionQuery = `INSERT INTO executions(` + executionsColumns + `)
    40   VALUES(:shard_id, :namespace_id, :workflow_id, :run_id, :next_event_id, :last_write_version, :data, :data_encoding, :state, :state_encoding, :db_record_version)`
    41  
    42  	updateExecutionQuery = `UPDATE executions SET
    43   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
    44   WHERE shard_id = :shard_id AND namespace_id = :namespace_id AND workflow_id = :workflow_id AND run_id = :run_id`
    45  
    46  	getExecutionQuery = `SELECT ` + executionsColumns + ` FROM executions
    47   WHERE shard_id = ? AND namespace_id = ? AND workflow_id = ? AND run_id = ?`
    48  
    49  	deleteExecutionQuery = `DELETE FROM executions 
    50   WHERE shard_id = ? AND namespace_id = ? AND workflow_id = ? AND run_id = ?`
    51  
    52  	lockExecutionQueryBase = `SELECT db_record_version, next_event_id FROM executions 
    53   WHERE shard_id = ? AND namespace_id = ? AND workflow_id = ? AND run_id = ?`
    54  
    55  	writeLockExecutionQuery = lockExecutionQueryBase
    56  	readLockExecutionQuery  = lockExecutionQueryBase
    57  
    58  	createCurrentExecutionQuery = `INSERT INTO current_executions
    59  (shard_id, namespace_id, workflow_id, run_id, create_request_id, state, status, last_write_version) VALUES
    60  (:shard_id, :namespace_id, :workflow_id, :run_id, :create_request_id, :state, :status, :last_write_version)`
    61  
    62  	deleteCurrentExecutionQuery = "DELETE FROM current_executions WHERE shard_id=? AND namespace_id=? AND workflow_id=? AND run_id=?"
    63  
    64  	getCurrentExecutionQuery = `SELECT
    65  shard_id, namespace_id, workflow_id, run_id, create_request_id, state, status, last_write_version
    66  FROM current_executions WHERE shard_id = ? AND namespace_id = ? AND workflow_id = ?`
    67  
    68  	lockCurrentExecutionJoinExecutionsQuery = `SELECT
    69  ce.shard_id, ce.namespace_id, ce.workflow_id, ce.run_id, ce.create_request_id, ce.state, ce.status, e.last_write_version
    70  FROM current_executions ce
    71  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
    72  WHERE ce.shard_id = ? AND ce.namespace_id = ? AND ce.workflow_id = ?`
    73  
    74  	lockCurrentExecutionQuery = getCurrentExecutionQuery
    75  
    76  	updateCurrentExecutionsQuery = `UPDATE current_executions SET
    77  run_id = :run_id,
    78  create_request_id = :create_request_id,
    79  state = :state,
    80  status = :status,
    81  last_write_version = :last_write_version
    82  WHERE
    83  shard_id = :shard_id AND
    84  namespace_id = :namespace_id AND
    85  workflow_id = :workflow_id
    86  `
    87  
    88  	createHistoryImmediateTasksQuery = `INSERT INTO history_immediate_tasks(shard_id, category_id, task_id, data, data_encoding) 
    89   VALUES(:shard_id, :category_id, :task_id, :data, :data_encoding)`
    90  
    91  	getHistoryImmediateTasksQuery = `SELECT task_id, data, data_encoding 
    92   FROM history_immediate_tasks WHERE shard_id = ? AND category_id = ? AND task_id >= ? AND task_id < ? ORDER BY task_id LIMIT ?`
    93  
    94  	deleteHistoryImmediateTaskQuery       = `DELETE FROM history_immediate_tasks WHERE shard_id = ? AND category_id = ? AND task_id = ?`
    95  	rangeDeleteHistoryImmediateTasksQuery = `DELETE FROM history_immediate_tasks WHERE shard_id = ? AND category_id = ? AND task_id >= ? AND task_id < ?`
    96  
    97  	createHistoryScheduledTasksQuery = `INSERT INTO history_scheduled_tasks (shard_id, category_id, visibility_timestamp, task_id, data, data_encoding)
    98    VALUES (:shard_id, :category_id, :visibility_timestamp, :task_id, :data, :data_encoding)`
    99  
   100  	getHistoryScheduledTasksQuery = `SELECT visibility_timestamp, task_id, data, data_encoding FROM history_scheduled_tasks 
   101    WHERE shard_id = ? 
   102    AND category_id = ? 
   103    AND ((visibility_timestamp >= ? AND task_id >= ?) OR visibility_timestamp > ?) 
   104    AND visibility_timestamp < ?
   105    ORDER BY visibility_timestamp,task_id LIMIT ?`
   106  
   107  	deleteHistoryScheduledTaskQuery       = `DELETE FROM history_scheduled_tasks WHERE shard_id = ? AND category_id = ? AND visibility_timestamp = ? AND task_id = ?`
   108  	rangeDeleteHistoryScheduledTasksQuery = `DELETE FROM history_scheduled_tasks WHERE shard_id = ? AND category_id = ? AND visibility_timestamp >= ? AND visibility_timestamp < ?`
   109  
   110  	createTransferTasksQuery = `INSERT INTO transfer_tasks(shard_id, task_id, data, data_encoding) 
   111   VALUES(:shard_id, :task_id, :data, :data_encoding)`
   112  
   113  	getTransferTasksQuery = `SELECT task_id, data, data_encoding 
   114   FROM transfer_tasks WHERE shard_id = ? AND task_id >= ? AND task_id < ? ORDER BY task_id LIMIT ?`
   115  
   116  	deleteTransferTaskQuery      = `DELETE FROM transfer_tasks WHERE shard_id = ? AND task_id = ?`
   117  	rangeDeleteTransferTaskQuery = `DELETE FROM transfer_tasks WHERE shard_id = ? AND task_id >= ? AND task_id < ?`
   118  
   119  	createTimerTasksQuery = `INSERT INTO timer_tasks (shard_id, visibility_timestamp, task_id, data, data_encoding)
   120    VALUES (:shard_id, :visibility_timestamp, :task_id, :data, :data_encoding)`
   121  
   122  	getTimerTasksQuery = `SELECT visibility_timestamp, task_id, data, data_encoding FROM timer_tasks 
   123    WHERE shard_id = ? 
   124    AND ((visibility_timestamp >= ? AND task_id >= ?) OR visibility_timestamp > ?) 
   125    AND visibility_timestamp < ?
   126    ORDER BY visibility_timestamp,task_id LIMIT ?`
   127  
   128  	deleteTimerTaskQuery      = `DELETE FROM timer_tasks WHERE shard_id = ? AND visibility_timestamp = ? AND task_id = ?`
   129  	rangeDeleteTimerTaskQuery = `DELETE FROM timer_tasks WHERE shard_id = ? AND visibility_timestamp >= ? AND visibility_timestamp < ?`
   130  
   131  	createReplicationTasksQuery = `INSERT INTO replication_tasks (shard_id, task_id, data, data_encoding) 
   132    VALUES(:shard_id, :task_id, :data, :data_encoding)`
   133  
   134  	getReplicationTasksQuery = `SELECT task_id, data, data_encoding FROM replication_tasks WHERE 
   135  shard_id = ? AND task_id >= ? AND task_id < ? ORDER BY task_id LIMIT ?`
   136  
   137  	deleteReplicationTaskQuery      = `DELETE FROM replication_tasks WHERE shard_id = ? AND task_id = ?`
   138  	rangeDeleteReplicationTaskQuery = `DELETE FROM replication_tasks WHERE shard_id = ? AND task_id >= ? AND task_id < ?`
   139  
   140  	getReplicationTasksDLQQuery = `SELECT task_id, data, data_encoding FROM replication_tasks_dlq WHERE 
   141  source_cluster_name = ? AND
   142  shard_id = ? AND
   143  task_id >= ? AND
   144  task_id < ?
   145  ORDER BY task_id LIMIT ?`
   146  
   147  	createVisibilityTasksQuery = `INSERT INTO visibility_tasks(shard_id, task_id, data, data_encoding) 
   148   VALUES(:shard_id, :task_id, :data, :data_encoding)`
   149  
   150  	getVisibilityTasksQuery = `SELECT task_id, data, data_encoding 
   151   FROM visibility_tasks WHERE shard_id = ? AND task_id >= ? AND task_id < ? ORDER BY task_id LIMIT ?`
   152  
   153  	deleteVisibilityTaskQuery      = `DELETE FROM visibility_tasks WHERE shard_id = ? AND task_id = ?`
   154  	rangeDeleteVisibilityTaskQuery = `DELETE FROM visibility_tasks WHERE shard_id = ? AND task_id >= ? AND task_id < ?`
   155  
   156  	bufferedEventsColumns     = `shard_id, namespace_id, workflow_id, run_id, data, data_encoding`
   157  	createBufferedEventsQuery = `INSERT INTO buffered_events(` + bufferedEventsColumns + `)
   158  VALUES (:shard_id, :namespace_id, :workflow_id, :run_id, :data, :data_encoding)`
   159  
   160  	deleteBufferedEventsQuery = `DELETE FROM buffered_events WHERE shard_id=? AND namespace_id=? AND workflow_id=? AND run_id=?`
   161  	getBufferedEventsQuery    = `SELECT data, data_encoding FROM buffered_events WHERE
   162  shard_id=? AND namespace_id=? AND workflow_id=? AND run_id=?`
   163  
   164  	insertReplicationTaskDLQQuery = `
   165  INSERT INTO replication_tasks_dlq 
   166              (source_cluster_name, 
   167               shard_id, 
   168               task_id, 
   169               data, 
   170               data_encoding) 
   171  VALUES     (:source_cluster_name, 
   172              :shard_id, 
   173              :task_id, 
   174              :data, 
   175              :data_encoding)
   176  `
   177  	deleteReplicationTaskFromDLQQuery = `
   178  	DELETE FROM replication_tasks_dlq 
   179  		WHERE source_cluster_name = ? 
   180  		AND shard_id = ? 
   181  		AND task_id = ?`
   182  
   183  	rangeDeleteReplicationTaskFromDLQQuery = `
   184  	DELETE FROM replication_tasks_dlq 
   185  		WHERE source_cluster_name = ? 
   186  		AND shard_id = ? 
   187  		AND task_id >= ?
   188  		AND task_id < ?`
   189  )
   190  
   191  // InsertIntoExecutions inserts a row into executions table
   192  func (mdb *db) InsertIntoExecutions(
   193  	ctx context.Context,
   194  	row *sqlplugin.ExecutionsRow,
   195  ) (sql.Result, error) {
   196  	return mdb.conn.NamedExecContext(ctx,
   197  		createExecutionQuery,
   198  		row,
   199  	)
   200  }
   201  
   202  // UpdateExecutions updates a single row in executions table
   203  func (mdb *db) UpdateExecutions(
   204  	ctx context.Context,
   205  	row *sqlplugin.ExecutionsRow,
   206  ) (sql.Result, error) {
   207  	return mdb.conn.NamedExecContext(ctx,
   208  		updateExecutionQuery,
   209  		row,
   210  	)
   211  }
   212  
   213  // SelectFromExecutions reads a single row from executions table
   214  func (mdb *db) SelectFromExecutions(
   215  	ctx context.Context,
   216  	filter sqlplugin.ExecutionsFilter,
   217  ) (*sqlplugin.ExecutionsRow, error) {
   218  	var row sqlplugin.ExecutionsRow
   219  	err := mdb.conn.GetContext(ctx,
   220  		&row, getExecutionQuery,
   221  		filter.ShardID,
   222  		filter.NamespaceID,
   223  		filter.WorkflowID,
   224  		filter.RunID,
   225  	)
   226  	if err != nil {
   227  		return nil, err
   228  	}
   229  	return &row, err
   230  }
   231  
   232  // DeleteFromExecutions deletes a single row from executions table
   233  func (mdb *db) DeleteFromExecutions(
   234  	ctx context.Context,
   235  	filter sqlplugin.ExecutionsFilter,
   236  ) (sql.Result, error) {
   237  	return mdb.conn.ExecContext(ctx,
   238  		deleteExecutionQuery,
   239  		filter.ShardID,
   240  		filter.NamespaceID,
   241  		filter.WorkflowID,
   242  		filter.RunID,
   243  	)
   244  }
   245  
   246  // ReadLockExecutions acquires a write lock on a single row in executions table
   247  func (mdb *db) ReadLockExecutions(
   248  	ctx context.Context,
   249  	filter sqlplugin.ExecutionsFilter,
   250  ) (int64, int64, error) {
   251  	var executionVersion sqlplugin.ExecutionVersion
   252  	err := mdb.conn.GetContext(ctx,
   253  		&executionVersion,
   254  		readLockExecutionQuery,
   255  		filter.ShardID,
   256  		filter.NamespaceID,
   257  		filter.WorkflowID,
   258  		filter.RunID,
   259  	)
   260  	return executionVersion.DBRecordVersion, executionVersion.NextEventID, err
   261  }
   262  
   263  // WriteLockExecutions acquires a write lock on a single row in executions table
   264  func (mdb *db) WriteLockExecutions(
   265  	ctx context.Context,
   266  	filter sqlplugin.ExecutionsFilter,
   267  ) (int64, int64, error) {
   268  	var executionVersion sqlplugin.ExecutionVersion
   269  	err := mdb.conn.GetContext(ctx,
   270  		&executionVersion,
   271  		writeLockExecutionQuery,
   272  		filter.ShardID,
   273  		filter.NamespaceID,
   274  		filter.WorkflowID,
   275  		filter.RunID,
   276  	)
   277  	return executionVersion.DBRecordVersion, executionVersion.NextEventID, err
   278  }
   279  
   280  // InsertIntoCurrentExecutions inserts a single row into current_executions table
   281  func (mdb *db) InsertIntoCurrentExecutions(
   282  	ctx context.Context,
   283  	row *sqlplugin.CurrentExecutionsRow,
   284  ) (sql.Result, error) {
   285  	return mdb.conn.NamedExecContext(ctx,
   286  		createCurrentExecutionQuery,
   287  		row,
   288  	)
   289  }
   290  
   291  // UpdateCurrentExecutions updates a single row in current_executions table
   292  func (mdb *db) UpdateCurrentExecutions(
   293  	ctx context.Context,
   294  	row *sqlplugin.CurrentExecutionsRow,
   295  ) (sql.Result, error) {
   296  	return mdb.conn.NamedExecContext(ctx,
   297  		updateCurrentExecutionsQuery,
   298  		row,
   299  	)
   300  }
   301  
   302  // SelectFromCurrentExecutions reads one or more rows from current_executions table
   303  func (mdb *db) SelectFromCurrentExecutions(
   304  	ctx context.Context,
   305  	filter sqlplugin.CurrentExecutionsFilter,
   306  ) (*sqlplugin.CurrentExecutionsRow, error) {
   307  	var row sqlplugin.CurrentExecutionsRow
   308  	err := mdb.conn.GetContext(ctx,
   309  		&row,
   310  		getCurrentExecutionQuery,
   311  		filter.ShardID,
   312  		filter.NamespaceID,
   313  		filter.WorkflowID,
   314  	)
   315  	return &row, err
   316  }
   317  
   318  // DeleteFromCurrentExecutions deletes a single row in current_executions table
   319  func (mdb *db) DeleteFromCurrentExecutions(
   320  	ctx context.Context,
   321  	filter sqlplugin.CurrentExecutionsFilter,
   322  ) (sql.Result, error) {
   323  	return mdb.conn.ExecContext(ctx,
   324  		deleteCurrentExecutionQuery,
   325  		filter.ShardID,
   326  		filter.NamespaceID,
   327  		filter.WorkflowID,
   328  		filter.RunID,
   329  	)
   330  }
   331  
   332  // LockCurrentExecutions acquires a write lock on a single row in current_executions table
   333  func (mdb *db) LockCurrentExecutions(
   334  	ctx context.Context,
   335  	filter sqlplugin.CurrentExecutionsFilter,
   336  ) (*sqlplugin.CurrentExecutionsRow, error) {
   337  	var row sqlplugin.CurrentExecutionsRow
   338  	err := mdb.conn.GetContext(ctx,
   339  		&row,
   340  		lockCurrentExecutionQuery,
   341  		filter.ShardID,
   342  		filter.NamespaceID,
   343  		filter.WorkflowID,
   344  	)
   345  	return &row, err
   346  }
   347  
   348  // LockCurrentExecutionsJoinExecutions joins a row in current_executions with executions table and acquires a
   349  // write lock on the result
   350  func (mdb *db) LockCurrentExecutionsJoinExecutions(
   351  	ctx context.Context,
   352  	filter sqlplugin.CurrentExecutionsFilter,
   353  ) ([]sqlplugin.CurrentExecutionsRow, error) {
   354  	var rows []sqlplugin.CurrentExecutionsRow
   355  	err := mdb.conn.SelectContext(ctx,
   356  		&rows,
   357  		lockCurrentExecutionJoinExecutionsQuery,
   358  		filter.ShardID,
   359  		filter.NamespaceID,
   360  		filter.WorkflowID,
   361  	)
   362  	return rows, err
   363  }
   364  
   365  // InsertIntoHistoryImmediateTasks inserts one or more rows into history_immediate_tasks table
   366  func (mdb *db) InsertIntoHistoryImmediateTasks(
   367  	ctx context.Context,
   368  	rows []sqlplugin.HistoryImmediateTasksRow,
   369  ) (sql.Result, error) {
   370  	return mdb.conn.NamedExecContext(ctx,
   371  		createHistoryImmediateTasksQuery,
   372  		rows,
   373  	)
   374  }
   375  
   376  // RangeSelectFromHistoryImmediateTasks reads one or more rows from transfer_tasks table
   377  func (mdb *db) RangeSelectFromHistoryImmediateTasks(
   378  	ctx context.Context,
   379  	filter sqlplugin.HistoryImmediateTasksRangeFilter,
   380  ) ([]sqlplugin.HistoryImmediateTasksRow, error) {
   381  	var rows []sqlplugin.HistoryImmediateTasksRow
   382  	if err := mdb.conn.SelectContext(ctx,
   383  		&rows,
   384  		getHistoryImmediateTasksQuery,
   385  		filter.ShardID,
   386  		filter.CategoryID,
   387  		filter.InclusiveMinTaskID,
   388  		filter.ExclusiveMaxTaskID,
   389  		filter.PageSize,
   390  	); err != nil {
   391  		return nil, err
   392  	}
   393  	return rows, nil
   394  }
   395  
   396  // DeleteFromHistoryImmediateTasks deletes one or more rows from transfer_tasks table
   397  func (mdb *db) DeleteFromHistoryImmediateTasks(
   398  	ctx context.Context,
   399  	filter sqlplugin.HistoryImmediateTasksFilter,
   400  ) (sql.Result, error) {
   401  	return mdb.conn.ExecContext(ctx,
   402  		deleteHistoryImmediateTaskQuery,
   403  		filter.ShardID,
   404  		filter.CategoryID,
   405  		filter.TaskID,
   406  	)
   407  }
   408  
   409  // RangeDeleteFromHistoryImmediateTasks deletes one or more rows from transfer_tasks table
   410  func (mdb *db) RangeDeleteFromHistoryImmediateTasks(
   411  	ctx context.Context,
   412  	filter sqlplugin.HistoryImmediateTasksRangeFilter,
   413  ) (sql.Result, error) {
   414  	return mdb.conn.ExecContext(ctx,
   415  		rangeDeleteHistoryImmediateTasksQuery,
   416  		filter.ShardID,
   417  		filter.CategoryID,
   418  		filter.InclusiveMinTaskID,
   419  		filter.ExclusiveMaxTaskID,
   420  	)
   421  }
   422  
   423  // InsertIntoHistoryScheduledTasks inserts one or more rows into timer_tasks table
   424  func (mdb *db) InsertIntoHistoryScheduledTasks(
   425  	ctx context.Context,
   426  	rows []sqlplugin.HistoryScheduledTasksRow,
   427  ) (sql.Result, error) {
   428  	for i := range rows {
   429  		rows[i].VisibilityTimestamp = mdb.converter.ToSQLiteDateTime(rows[i].VisibilityTimestamp)
   430  	}
   431  	return mdb.conn.NamedExecContext(
   432  		ctx,
   433  		createHistoryScheduledTasksQuery,
   434  		rows,
   435  	)
   436  }
   437  
   438  // RangeSelectFromHistoryScheduledTasks reads one or more rows from timer_tasks table
   439  func (mdb *db) RangeSelectFromHistoryScheduledTasks(
   440  	ctx context.Context,
   441  	filter sqlplugin.HistoryScheduledTasksRangeFilter,
   442  ) ([]sqlplugin.HistoryScheduledTasksRow, error) {
   443  	var rows []sqlplugin.HistoryScheduledTasksRow
   444  	filter.InclusiveMinVisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.InclusiveMinVisibilityTimestamp)
   445  	filter.ExclusiveMaxVisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.ExclusiveMaxVisibilityTimestamp)
   446  	if err := mdb.conn.SelectContext(ctx,
   447  		&rows,
   448  		getHistoryScheduledTasksQuery,
   449  		filter.ShardID,
   450  		filter.CategoryID,
   451  		filter.InclusiveMinVisibilityTimestamp,
   452  		filter.InclusiveMinTaskID,
   453  		filter.InclusiveMinVisibilityTimestamp,
   454  		filter.ExclusiveMaxVisibilityTimestamp,
   455  		filter.PageSize,
   456  	); err != nil {
   457  		return nil, err
   458  	}
   459  	for i := range rows {
   460  		rows[i].VisibilityTimestamp = mdb.converter.ToSQLiteDateTime(rows[i].VisibilityTimestamp)
   461  	}
   462  	return rows, nil
   463  }
   464  
   465  // DeleteFromHistoryScheduledTasks deletes one or more rows from timer_tasks table
   466  func (mdb *db) DeleteFromHistoryScheduledTasks(
   467  	ctx context.Context,
   468  	filter sqlplugin.HistoryScheduledTasksFilter,
   469  ) (sql.Result, error) {
   470  	filter.VisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.VisibilityTimestamp)
   471  	return mdb.conn.ExecContext(ctx,
   472  		deleteHistoryScheduledTaskQuery,
   473  		filter.ShardID,
   474  		filter.CategoryID,
   475  		filter.VisibilityTimestamp,
   476  		filter.TaskID,
   477  	)
   478  }
   479  
   480  // RangeDeleteFromHistoryScheduledTasks deletes one or more rows from timer_tasks table
   481  func (mdb *db) RangeDeleteFromHistoryScheduledTasks(
   482  	ctx context.Context,
   483  	filter sqlplugin.HistoryScheduledTasksRangeFilter,
   484  ) (sql.Result, error) {
   485  	filter.InclusiveMinVisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.InclusiveMinVisibilityTimestamp)
   486  	filter.ExclusiveMaxVisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.ExclusiveMaxVisibilityTimestamp)
   487  	return mdb.conn.ExecContext(ctx,
   488  		rangeDeleteHistoryScheduledTasksQuery,
   489  		filter.ShardID,
   490  		filter.CategoryID,
   491  		filter.InclusiveMinVisibilityTimestamp,
   492  		filter.ExclusiveMaxVisibilityTimestamp,
   493  	)
   494  }
   495  
   496  // InsertIntoTransferTasks inserts one or more rows into transfer_tasks table
   497  func (mdb *db) InsertIntoTransferTasks(
   498  	ctx context.Context,
   499  	rows []sqlplugin.TransferTasksRow,
   500  ) (sql.Result, error) {
   501  	return mdb.conn.NamedExecContext(ctx,
   502  		createTransferTasksQuery,
   503  		rows,
   504  	)
   505  }
   506  
   507  // RangeSelectFromTransferTasks reads one or more rows from transfer_tasks table
   508  func (mdb *db) RangeSelectFromTransferTasks(
   509  	ctx context.Context,
   510  	filter sqlplugin.TransferTasksRangeFilter,
   511  ) ([]sqlplugin.TransferTasksRow, error) {
   512  	var rows []sqlplugin.TransferTasksRow
   513  	if err := mdb.conn.SelectContext(ctx,
   514  		&rows,
   515  		getTransferTasksQuery,
   516  		filter.ShardID,
   517  		filter.InclusiveMinTaskID,
   518  		filter.ExclusiveMaxTaskID,
   519  		filter.PageSize,
   520  	); err != nil {
   521  		return nil, err
   522  	}
   523  	return rows, nil
   524  }
   525  
   526  // DeleteFromTransferTasks deletes one or more rows from transfer_tasks table
   527  func (mdb *db) DeleteFromTransferTasks(
   528  	ctx context.Context,
   529  	filter sqlplugin.TransferTasksFilter,
   530  ) (sql.Result, error) {
   531  	return mdb.conn.ExecContext(ctx,
   532  		deleteTransferTaskQuery,
   533  		filter.ShardID,
   534  		filter.TaskID,
   535  	)
   536  }
   537  
   538  // RangeDeleteFromTransferTasks deletes one or more rows from transfer_tasks table
   539  func (mdb *db) RangeDeleteFromTransferTasks(
   540  	ctx context.Context,
   541  	filter sqlplugin.TransferTasksRangeFilter,
   542  ) (sql.Result, error) {
   543  	return mdb.conn.ExecContext(ctx,
   544  		rangeDeleteTransferTaskQuery,
   545  		filter.ShardID,
   546  		filter.InclusiveMinTaskID,
   547  		filter.ExclusiveMaxTaskID,
   548  	)
   549  }
   550  
   551  // InsertIntoTimerTasks inserts one or more rows into timer_tasks table
   552  func (mdb *db) InsertIntoTimerTasks(
   553  	ctx context.Context,
   554  	rows []sqlplugin.TimerTasksRow,
   555  ) (sql.Result, error) {
   556  	for i := range rows {
   557  		rows[i].VisibilityTimestamp = mdb.converter.ToSQLiteDateTime(rows[i].VisibilityTimestamp)
   558  	}
   559  	return mdb.conn.NamedExecContext(
   560  		ctx,
   561  		createTimerTasksQuery,
   562  		rows,
   563  	)
   564  }
   565  
   566  // RangeSelectFromTimerTasks reads one or more rows from timer_tasks table
   567  func (mdb *db) RangeSelectFromTimerTasks(
   568  	ctx context.Context,
   569  	filter sqlplugin.TimerTasksRangeFilter,
   570  ) ([]sqlplugin.TimerTasksRow, error) {
   571  	var rows []sqlplugin.TimerTasksRow
   572  	filter.InclusiveMinVisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.InclusiveMinVisibilityTimestamp)
   573  	filter.ExclusiveMaxVisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.ExclusiveMaxVisibilityTimestamp)
   574  	if err := mdb.conn.SelectContext(ctx,
   575  		&rows,
   576  		getTimerTasksQuery,
   577  		filter.ShardID,
   578  		filter.InclusiveMinVisibilityTimestamp,
   579  		filter.InclusiveMinTaskID,
   580  		filter.InclusiveMinVisibilityTimestamp,
   581  		filter.ExclusiveMaxVisibilityTimestamp,
   582  		filter.PageSize,
   583  	); err != nil {
   584  		return nil, err
   585  	}
   586  	for i := range rows {
   587  		rows[i].VisibilityTimestamp = mdb.converter.FromSQLiteDateTime(rows[i].VisibilityTimestamp)
   588  	}
   589  	return rows, nil
   590  }
   591  
   592  // DeleteFromTimerTasks deletes one or more rows from timer_tasks table
   593  func (mdb *db) DeleteFromTimerTasks(
   594  	ctx context.Context,
   595  	filter sqlplugin.TimerTasksFilter,
   596  ) (sql.Result, error) {
   597  	filter.VisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.VisibilityTimestamp)
   598  	return mdb.conn.ExecContext(ctx,
   599  		deleteTimerTaskQuery,
   600  		filter.ShardID,
   601  		filter.VisibilityTimestamp,
   602  		filter.TaskID,
   603  	)
   604  }
   605  
   606  // RangeDeleteFromTimerTasks deletes one or more rows from timer_tasks table
   607  func (mdb *db) RangeDeleteFromTimerTasks(
   608  	ctx context.Context,
   609  	filter sqlplugin.TimerTasksRangeFilter,
   610  ) (sql.Result, error) {
   611  	filter.InclusiveMinVisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.InclusiveMinVisibilityTimestamp)
   612  	filter.ExclusiveMaxVisibilityTimestamp = mdb.converter.ToSQLiteDateTime(filter.ExclusiveMaxVisibilityTimestamp)
   613  	return mdb.conn.ExecContext(ctx,
   614  		rangeDeleteTimerTaskQuery,
   615  		filter.ShardID,
   616  		filter.InclusiveMinVisibilityTimestamp,
   617  		filter.ExclusiveMaxVisibilityTimestamp,
   618  	)
   619  }
   620  
   621  // InsertIntoBufferedEvents inserts one or more rows into buffered_events table
   622  func (mdb *db) InsertIntoBufferedEvents(
   623  	ctx context.Context,
   624  	rows []sqlplugin.BufferedEventsRow,
   625  ) (sql.Result, error) {
   626  	return mdb.conn.NamedExecContext(ctx,
   627  		createBufferedEventsQuery,
   628  		rows,
   629  	)
   630  }
   631  
   632  // SelectFromBufferedEvents reads one or more rows from buffered_events table
   633  func (mdb *db) SelectFromBufferedEvents(
   634  	ctx context.Context,
   635  	filter sqlplugin.BufferedEventsFilter,
   636  ) ([]sqlplugin.BufferedEventsRow, error) {
   637  	var rows []sqlplugin.BufferedEventsRow
   638  	if err := mdb.conn.SelectContext(ctx,
   639  		&rows,
   640  		getBufferedEventsQuery,
   641  		filter.ShardID,
   642  		filter.NamespaceID,
   643  		filter.WorkflowID,
   644  		filter.RunID,
   645  	); err != nil {
   646  		return nil, err
   647  	}
   648  	for i := 0; i < len(rows); i++ {
   649  		rows[i].NamespaceID = filter.NamespaceID
   650  		rows[i].WorkflowID = filter.WorkflowID
   651  		rows[i].RunID = filter.RunID
   652  		rows[i].ShardID = filter.ShardID
   653  	}
   654  	return rows, nil
   655  }
   656  
   657  // DeleteFromBufferedEvents deletes one or more rows from buffered_events table
   658  func (mdb *db) DeleteFromBufferedEvents(
   659  	ctx context.Context,
   660  	filter sqlplugin.BufferedEventsFilter,
   661  ) (sql.Result, error) {
   662  	return mdb.conn.ExecContext(ctx,
   663  		deleteBufferedEventsQuery,
   664  		filter.ShardID,
   665  		filter.NamespaceID,
   666  		filter.WorkflowID,
   667  		filter.RunID,
   668  	)
   669  }
   670  
   671  // InsertIntoReplicationTasks inserts one or more rows into replication_tasks table
   672  func (mdb *db) InsertIntoReplicationTasks(
   673  	ctx context.Context,
   674  	rows []sqlplugin.ReplicationTasksRow,
   675  ) (sql.Result, error) {
   676  	return mdb.conn.NamedExecContext(ctx,
   677  		createReplicationTasksQuery,
   678  		rows,
   679  	)
   680  }
   681  
   682  // RangeSelectFromReplicationTasks reads one or more rows from replication_tasks table
   683  func (mdb *db) RangeSelectFromReplicationTasks(
   684  	ctx context.Context,
   685  	filter sqlplugin.ReplicationTasksRangeFilter,
   686  ) ([]sqlplugin.ReplicationTasksRow, error) {
   687  	var rows []sqlplugin.ReplicationTasksRow
   688  	err := mdb.conn.SelectContext(ctx,
   689  		&rows,
   690  		getReplicationTasksQuery,
   691  		filter.ShardID,
   692  		filter.InclusiveMinTaskID,
   693  		filter.ExclusiveMaxTaskID,
   694  		filter.PageSize,
   695  	)
   696  	return rows, err
   697  }
   698  
   699  // DeleteFromReplicationTasks deletes one row from replication_tasks table
   700  func (mdb *db) DeleteFromReplicationTasks(
   701  	ctx context.Context,
   702  	filter sqlplugin.ReplicationTasksFilter,
   703  ) (sql.Result, error) {
   704  	return mdb.conn.ExecContext(ctx,
   705  		deleteReplicationTaskQuery,
   706  		filter.ShardID,
   707  		filter.TaskID,
   708  	)
   709  }
   710  
   711  // RangeDeleteFromReplicationTasks deletes multi rows from replication_tasks table
   712  func (mdb *db) RangeDeleteFromReplicationTasks(
   713  	ctx context.Context,
   714  	filter sqlplugin.ReplicationTasksRangeFilter,
   715  ) (sql.Result, error) {
   716  	return mdb.conn.ExecContext(ctx,
   717  		rangeDeleteReplicationTaskQuery,
   718  		filter.ShardID,
   719  		filter.InclusiveMinTaskID,
   720  		filter.ExclusiveMaxTaskID,
   721  	)
   722  }
   723  
   724  // InsertIntoReplicationDLQTasks inserts one or more rows into replication_tasks_dlq table
   725  func (mdb *db) InsertIntoReplicationDLQTasks(
   726  	ctx context.Context,
   727  	rows []sqlplugin.ReplicationDLQTasksRow,
   728  ) (sql.Result, error) {
   729  	return mdb.conn.NamedExecContext(ctx,
   730  		insertReplicationTaskDLQQuery,
   731  		rows,
   732  	)
   733  }
   734  
   735  // RangeSelectFromReplicationDLQTasks reads one or more rows from replication_tasks_dlq table
   736  func (mdb *db) RangeSelectFromReplicationDLQTasks(
   737  	ctx context.Context,
   738  	filter sqlplugin.ReplicationDLQTasksRangeFilter,
   739  ) ([]sqlplugin.ReplicationDLQTasksRow, error) {
   740  	var rows []sqlplugin.ReplicationDLQTasksRow
   741  	err := mdb.conn.SelectContext(ctx,
   742  		&rows, getReplicationTasksDLQQuery,
   743  		filter.SourceClusterName,
   744  		filter.ShardID,
   745  		filter.InclusiveMinTaskID,
   746  		filter.ExclusiveMaxTaskID,
   747  		filter.PageSize,
   748  	)
   749  	return rows, err
   750  }
   751  
   752  // DeleteFromReplicationDLQTasks deletes one row from replication_tasks_dlq table
   753  func (mdb *db) DeleteFromReplicationDLQTasks(
   754  	ctx context.Context,
   755  	filter sqlplugin.ReplicationDLQTasksFilter,
   756  ) (sql.Result, error) {
   757  
   758  	return mdb.conn.ExecContext(ctx,
   759  		deleteReplicationTaskFromDLQQuery,
   760  		filter.SourceClusterName,
   761  		filter.ShardID,
   762  		filter.TaskID,
   763  	)
   764  }
   765  
   766  // RangeDeleteFromReplicationDLQTasks deletes one or more rows from replication_tasks_dlq table
   767  func (mdb *db) RangeDeleteFromReplicationDLQTasks(
   768  	ctx context.Context,
   769  	filter sqlplugin.ReplicationDLQTasksRangeFilter,
   770  ) (sql.Result, error) {
   771  
   772  	return mdb.conn.ExecContext(ctx,
   773  		rangeDeleteReplicationTaskFromDLQQuery,
   774  		filter.SourceClusterName,
   775  		filter.ShardID,
   776  		filter.InclusiveMinTaskID,
   777  		filter.ExclusiveMaxTaskID,
   778  	)
   779  }
   780  
   781  // InsertIntoVisibilityTasks inserts one or more rows into visibility_tasks table
   782  func (mdb *db) InsertIntoVisibilityTasks(
   783  	ctx context.Context,
   784  	rows []sqlplugin.VisibilityTasksRow,
   785  ) (sql.Result, error) {
   786  	return mdb.conn.NamedExecContext(ctx,
   787  		createVisibilityTasksQuery,
   788  		rows,
   789  	)
   790  }
   791  
   792  // RangeSelectFromVisibilityTasks reads one or more rows from visibility_tasks table
   793  func (mdb *db) RangeSelectFromVisibilityTasks(
   794  	ctx context.Context,
   795  	filter sqlplugin.VisibilityTasksRangeFilter,
   796  ) ([]sqlplugin.VisibilityTasksRow, error) {
   797  	var rows []sqlplugin.VisibilityTasksRow
   798  	if err := mdb.conn.SelectContext(ctx,
   799  		&rows,
   800  		getVisibilityTasksQuery,
   801  		filter.ShardID,
   802  		filter.InclusiveMinTaskID,
   803  		filter.ExclusiveMaxTaskID,
   804  		filter.PageSize,
   805  	); err != nil {
   806  		return nil, err
   807  	}
   808  	return rows, nil
   809  }
   810  
   811  // DeleteFromVisibilityTasks deletes one or more rows from visibility_tasks table
   812  func (mdb *db) DeleteFromVisibilityTasks(
   813  	ctx context.Context,
   814  	filter sqlplugin.VisibilityTasksFilter,
   815  ) (sql.Result, error) {
   816  	return mdb.conn.ExecContext(ctx,
   817  		deleteVisibilityTaskQuery,
   818  		filter.ShardID,
   819  		filter.TaskID,
   820  	)
   821  }
   822  
   823  // RangeDeleteFromVisibilityTasks deletes one or more rows from visibility_tasks table
   824  func (mdb *db) RangeDeleteFromVisibilityTasks(
   825  	ctx context.Context,
   826  	filter sqlplugin.VisibilityTasksRangeFilter,
   827  ) (sql.Result, error) {
   828  	return mdb.conn.ExecContext(ctx,
   829  		rangeDeleteVisibilityTaskQuery,
   830  		filter.ShardID,
   831  		filter.InclusiveMinTaskID,
   832  		filter.ExclusiveMaxTaskID,
   833  	)
   834  }