spec/lib/truncate_spec.rb (39 lines of code) (raw):

require 'spec_helper' describe PgQuery, '#truncate' do it 'omits target list' do query = 'SELECT a, b, c, d, e, f FROM xyz WHERE a = b' expect(described_class.parse(query).truncate(40)).to eq 'SELECT ... FROM xyz WHERE a = b' end it 'omits with part of CTEs' do query = 'WITH x AS (SELECT * FROM y) SELECT * FROM x' expect(described_class.parse(query).truncate(40)).to eq 'WITH x AS (...) SELECT * FROM x' end it 'omits where clause' do query = 'SELECT * FROM z WHERE a = b AND x = y' expect(described_class.parse(query).truncate(30)).to eq 'SELECT * FROM z WHERE ...' end it 'omits INSERT field list' do query = 'INSERT INTO "x" (a, b, c, d, e, f) VALUES (?)' expect(described_class.parse(query).truncate(32)).to eq 'INSERT INTO x (...) VALUES (?)' end it 'performs a simple truncation if necessary' do query = 'SELECT * FROM t' expect(described_class.parse(query).truncate(10)).to eq 'SELECT ...' end it 'works problematic cases' do query = 'SELECT CASE WHEN $2.typtype = ? THEN $2.typtypmod ELSE $1.atttypmod END' expect(described_class.parse(query).truncate(50)).to eq 'SELECT ...' end it 'handles UPDATE target list' do query = 'UPDATE x SET a = 1, c = 2, e = \'str\'' expect(described_class.parse(query).truncate(30)).to eq 'UPDATE x SET ... = ...' end it 'handles ON CONFLICT target list' do query = 'INSERT INTO y(a) VALUES(1) ON CONFLICT DO UPDATE SET a = 123456789' expect(described_class.parse(query).truncate(65)).to eq 'INSERT INTO y (a) VALUES (1) ON CONFLICT DO UPDATE SET ... = ...' end it 'handles GRANT access privileges' do query = 'GRANT SELECT (abc, def, ghj) ON TABLE t1 TO r1' expect(described_class.parse(query).truncate(35)).to eq 'GRANT select (abc, def, ghj) ON ...' end end