Module: EventStoreRuby::Postgres::InsertBuilder

Defined in:
lib/eventstore_ruby/postgres/insert.rb

Class Method Summary collapse

Class Method Details

.build_cte_insert_query(filter, expected_max_seq) ⇒ Object

Returns [sql, params]



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/eventstore_ruby/postgres/insert.rb', line 7

def build_cte_insert_query(filter, expected_max_seq)
  version_sql, version_params = QueryBuilder.build_context_version_query(filter)
  context_param_count = version_params.length
  event_types_param = context_param_count + 1
  payloads_param = context_param_count + 2

  sql = "    WITH context AS (\n      SELECT MAX(sequence_number) AS max_seq\n      FROM events\n      WHERE \#{version_sql}\n    )\n    INSERT INTO events (event_type, payload)\n    SELECT unnest($\#{event_types_param}::text[]), unnest($\#{payloads_param}::jsonb[])\n    FROM context\n    WHERE COALESCE(max_seq, 0) = \#{expected_max_seq}\n    RETURNING *\n  SQL\n\n  [sql, version_params]\nend\n"