Module: EventStoreRuby::Postgres::InsertBuilder
- Defined in:
- lib/eventstore_ruby/postgres/insert.rb
Class Method Summary collapse
-
.build_cte_insert_query(filter, expected_max_seq) ⇒ Object
Returns [sql, params].
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 = <<~SQL WITH context AS ( SELECT MAX(sequence_number) AS max_seq FROM events WHERE #{version_sql} ) INSERT INTO events (event_type, payload) SELECT unnest($#{event_types_param}::text[]), unnest($#{payloads_param}::jsonb[]) FROM context WHERE COALESCE(max_seq, 0) = #{expected_max_seq} RETURNING * SQL [sql, version_params] end |