File: command_spec.rb

package info (click to toggle)
ruby-dataobjects-postgres 0.10.17-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 344 kB
  • sloc: ansic: 1,509; ruby: 511; sh: 60; makefile: 5
file content (45 lines) | stat: -rw-r--r-- 1,370 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# encoding: utf-8

require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
require 'data_objects/spec/shared/command_spec'

describe DataObjects::Postgres::Command do
  it_should_behave_like 'a Command'
  it_should_behave_like 'a Command with async'

  describe 'query with RETURNING while not returning result' do
    before do
      @connection = DataObjects::Connection.new(CONFIG.uri)
      @select_command = @connection.create_command("SELECT name FROM users WHERE id = 900")
      @upsert_command = @connection.create_command("
          WITH upsert AS
            (UPDATE users SET name = ? WHERE id = 900 RETURNING id)
          INSERT INTO users (id, name)
          SELECT 900, 'dbussink' WHERE NOT EXISTS (SELECT 1 FROM upsert)")
    end

    after do
      @connection.close
    end

    it "should work with a writable CTE acting as an Upsert" do
      reader = @select_command.execute_reader
      reader.to_a.size.should == 0
      reader.close

      @upsert_command.execute_non_query('jwkoelewijn')

      reader = @select_command.execute_reader
      reader.next!
      reader.values[0].should == 'dbussink'
      reader.close

      @upsert_command.execute_non_query('jwkoelewijn')

      reader = @select_command.execute_reader
      reader.next!
      reader.values[0].should == 'jwkoelewijn'
      reader.close
    end
  end
end