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 }