@oliphaunt/extension-pgtap-linux-arm64-gnu 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +6 -0
  3. package/THIRD_PARTY_NOTICES.md +20 -0
  4. package/extension-contract.json +31 -0
  5. package/package.json +49 -0
  6. package/runtime/share/licenses/pgtap/README.md +153 -0
  7. package/runtime/share/postgresql/extension/pgtap--0.90.0--0.91.0.sql +29 -0
  8. package/runtime/share/postgresql/extension/pgtap--0.91.0--0.92.0.sql +1650 -0
  9. package/runtime/share/postgresql/extension/pgtap--0.92.0--0.93.0.sql +679 -0
  10. package/runtime/share/postgresql/extension/pgtap--0.93.0--0.94.0.sql +193 -0
  11. package/runtime/share/postgresql/extension/pgtap--0.94.0--0.95.0.sql +639 -0
  12. package/runtime/share/postgresql/extension/pgtap--0.95.0--0.96.0.sql +415 -0
  13. package/runtime/share/postgresql/extension/pgtap--0.96.0--0.97.0.sql +375 -0
  14. package/runtime/share/postgresql/extension/pgtap--0.97.0--0.98.0.sql +441 -0
  15. package/runtime/share/postgresql/extension/pgtap--0.98.0--0.99.0.sql +209 -0
  16. package/runtime/share/postgresql/extension/pgtap--0.99.0--1.0.0.sql +737 -0
  17. package/runtime/share/postgresql/extension/pgtap--1.0.0--1.1.0.sql +186 -0
  18. package/runtime/share/postgresql/extension/pgtap--1.1.0--1.2.0.sql +889 -0
  19. package/runtime/share/postgresql/extension/pgtap--1.2.0--1.3.0.sql +495 -0
  20. package/runtime/share/postgresql/extension/pgtap--1.3.0--1.3.1.sql +229 -0
  21. package/runtime/share/postgresql/extension/pgtap--1.3.1--1.3.2.sql +34 -0
  22. package/runtime/share/postgresql/extension/pgtap--1.3.2--1.3.3.sql +42 -0
  23. package/runtime/share/postgresql/extension/pgtap--1.3.3--1.3.4.sql +89 -0
  24. package/runtime/share/postgresql/extension/pgtap--1.3.4--1.3.5.sql +1 -0
  25. package/runtime/share/postgresql/extension/pgtap--1.3.5.sql +11520 -0
  26. package/runtime/share/postgresql/extension/pgtap--unpackaged--0.91.0.sql +714 -0
  27. package/runtime/share/postgresql/extension/pgtap-core--1.3.5.sql +4390 -0
  28. package/runtime/share/postgresql/extension/pgtap-core.sql +4390 -0
  29. package/runtime/share/postgresql/extension/pgtap-schema--1.3.5.sql +6764 -0
  30. package/runtime/share/postgresql/extension/pgtap-schema.sql +6764 -0
  31. package/runtime/share/postgresql/extension/pgtap.control +6 -0
  32. package/runtime/share/postgresql/extension/pgtap.sql +11520 -0
  33. package/runtime/share/postgresql/extension/uninstall_pgtap.sql +1088 -0
  34. package/share/licenses/pgtap/README.md +153 -0
@@ -0,0 +1,375 @@
1
+ CREATE OR REPLACE FUNCTION pgtap_version()
2
+ RETURNS NUMERIC AS 'SELECT 0.97;'
3
+ LANGUAGE SQL IMMUTABLE;
4
+
5
+ -- pg_version_num()
6
+ CREATE OR REPLACE FUNCTION pg_version_num()
7
+ RETURNS integer AS $$
8
+ SELECT substring(s.a[1] FROM '[[:digit:]]+')::int * 10000
9
+ + COALESCE(substring(s.a[2] FROM '[[:digit:]]+')::int, 0) * 100
10
+ + COALESCE(substring(s.a[3] FROM '[[:digit:]]+')::int, 0)
11
+ FROM (
12
+ SELECT string_to_array(current_setting('server_version'), '.') AS a
13
+ ) AS s;
14
+ $$ LANGUAGE SQL IMMUTABLE;
15
+
16
+ CREATE OR REPLACE FUNCTION _is_indexed( NAME, NAME, TEXT[] )
17
+ RETURNS BOOL AS $$
18
+ SELECT EXISTS( SELECT TRUE FROM (
19
+ SELECT _ikeys(coalesce($1, n.nspname), $2, ci.relname) AS cols
20
+ FROM pg_catalog.pg_index x
21
+ JOIN pg_catalog.pg_class ct ON ct.oid = x.indrelid
22
+ JOIN pg_catalog.pg_class ci ON ci.oid = x.indexrelid
23
+ JOIN pg_catalog.pg_namespace n ON n.oid = ct.relnamespace
24
+ WHERE ($1 IS NULL OR n.nspname = $1)
25
+ AND ct.relname = $2
26
+ ) icols
27
+ WHERE cols = $3 )
28
+ $$ LANGUAGE sql;
29
+
30
+ -- is_indexed( schema, table, columns[], description )
31
+ CREATE OR REPLACE FUNCTION is_indexed ( NAME, NAME, NAME[], TEXT )
32
+ RETURNS TEXT AS $$
33
+ SELECT ok( _is_indexed($1, $2, $3), $4 );
34
+ $$ LANGUAGE sql;
35
+
36
+ -- is_indexed( schema, table, columns[] )
37
+ CREATE OR REPLACE FUNCTION is_indexed ( NAME, NAME, NAME[] )
38
+ RETURNS TEXT AS $$
39
+ SELECT ok(
40
+ _is_indexed($1, $2, $3),
41
+ 'Should have an index on ' || quote_ident($1) || '.' || quote_ident($2) || '(' || array_to_string( $3, ', ' ) || ')'
42
+ );
43
+ $$ LANGUAGE sql;
44
+
45
+ -- is_indexed( table, columns[], description )
46
+ CREATE OR REPLACE FUNCTION is_indexed ( NAME, NAME[], TEXT )
47
+ RETURNS TEXT AS $$
48
+ SELECT ok( _is_indexed(NULL, $1, $2), $3 );
49
+ $$ LANGUAGE sql;
50
+
51
+ -- is_indexed( table, columns[] )
52
+ CREATE OR REPLACE FUNCTION is_indexed ( NAME, NAME[] )
53
+ RETURNS TEXT AS $$
54
+ SELECT ok(
55
+ _is_indexed(NULL, $1, $2),
56
+ 'Should have an index on ' || quote_ident($1) || '(' || array_to_string( $2, ', ' ) || ')'
57
+ );
58
+ $$ LANGUAGE sql;
59
+
60
+ -- is_indexed( schema, table, column, description )
61
+ CREATE OR REPLACE FUNCTION is_indexed ( NAME, NAME, NAME, TEXT )
62
+ RETURNS TEXT AS $$
63
+ SELECT ok ( _is_indexed( $1, $2, ARRAY[$3]::NAME[]), $4);
64
+ $$ LANGUAGE sql;
65
+
66
+ -- is_indexed( schema, table, column )
67
+ -- is_indexed( table, column, description )
68
+ CREATE OR REPLACE FUNCTION is_indexed ( NAME, NAME, NAME )
69
+ RETURNS TEXT AS $$
70
+ SELECT CASE WHEN _is_schema( $1 ) THEN
71
+ -- Looking for schema.table index.
72
+ is_indexed( $1, $2, ARRAY[$3]::NAME[] )
73
+ ELSE
74
+ -- Looking for particular columns.
75
+ is_indexed( $1, ARRAY[$2]::NAME[], $3 )
76
+ END;
77
+ $$ LANGUAGE sql;
78
+
79
+ -- is_indexed( table, column )
80
+ CREATE OR REPLACE FUNCTION is_indexed ( NAME, NAME )
81
+ RETURNS TEXT AS $$
82
+ SELECT ok ( _is_indexed( NULL, $1, ARRAY[$2]::NAME[]) );
83
+ $$ LANGUAGE sql;
84
+
85
+
86
+ -- isnt_definer( schema, function, args[], description )
87
+ CREATE OR REPLACE FUNCTION isnt_definer ( NAME, NAME, NAME[], TEXT )
88
+ RETURNS TEXT AS $$
89
+ SELECT _func_compare($1, $2, $3, NOT _definer($1, $2, $3), $4 );
90
+ $$ LANGUAGE SQL;
91
+
92
+ -- isnt_definer( schema, function, args[] )
93
+ CREATE OR REPLACE FUNCTION isnt_definer( NAME, NAME, NAME[] )
94
+ RETURNS TEXT AS $$
95
+ SELECT ok(
96
+ NOT _definer($1, $2, $3),
97
+ 'Function ' || quote_ident($1) || '.' || quote_ident($2) || '(' ||
98
+ array_to_string($3, ', ') || ') should not be security definer'
99
+ );
100
+ $$ LANGUAGE sql;
101
+
102
+ -- isnt_definer( schema, function, description )
103
+ CREATE OR REPLACE FUNCTION isnt_definer ( NAME, NAME, TEXT )
104
+ RETURNS TEXT AS $$
105
+ SELECT _func_compare($1, $2, NOT _definer($1, $2), $3 );
106
+ $$ LANGUAGE SQL;
107
+
108
+ -- isnt_definer( schema, function )
109
+ CREATE OR REPLACE FUNCTION isnt_definer( NAME, NAME )
110
+ RETURNS TEXT AS $$
111
+ SELECT ok(
112
+ NOT _definer($1, $2),
113
+ 'Function ' || quote_ident($1) || '.' || quote_ident($2) || '() should not be security definer'
114
+ );
115
+ $$ LANGUAGE sql;
116
+
117
+ -- isnt_definer( function, args[], description )
118
+ CREATE OR REPLACE FUNCTION isnt_definer ( NAME, NAME[], TEXT )
119
+ RETURNS TEXT AS $$
120
+ SELECT _func_compare(NULL, $1, $2, NOT _definer($1, $2), $3 );
121
+ $$ LANGUAGE SQL;
122
+
123
+ -- isnt_definer( function, args[] )
124
+ CREATE OR REPLACE FUNCTION isnt_definer( NAME, NAME[] )
125
+ RETURNS TEXT AS $$
126
+ SELECT ok(
127
+ NOT _definer($1, $2),
128
+ 'Function ' || quote_ident($1) || '(' ||
129
+ array_to_string($2, ', ') || ') should not be security definer'
130
+ );
131
+ $$ LANGUAGE sql;
132
+
133
+ -- isnt_definer( function, description )
134
+ CREATE OR REPLACE FUNCTION isnt_definer( NAME, TEXT )
135
+ RETURNS TEXT AS $$
136
+ SELECT _func_compare(NULL, $1, NOT _definer($1), $2 );
137
+ $$ LANGUAGE sql;
138
+
139
+ -- isnt_definer( function )
140
+ CREATE OR REPLACE FUNCTION isnt_definer( NAME )
141
+ RETURNS TEXT AS $$
142
+ SELECT ok( NOT _definer($1), 'Function ' || quote_ident($1) || '() should not be security definer' );
143
+ $$ LANGUAGE sql;
144
+
145
+ -- isnt_aggregate( schema, function, args[], description )
146
+ CREATE OR REPLACE FUNCTION isnt_aggregate ( NAME, NAME, NAME[], TEXT )
147
+ RETURNS TEXT AS $$
148
+ SELECT _func_compare($1, $2, $3, NOT _agg($1, $2, $3), $4 );
149
+ $$ LANGUAGE SQL;
150
+
151
+ -- isnt_aggregate( schema, function, args[] )
152
+ CREATE OR REPLACE FUNCTION isnt_aggregate( NAME, NAME, NAME[] )
153
+ RETURNS TEXT AS $$
154
+ SELECT ok(
155
+ NOT _agg($1, $2, $3),
156
+ 'Function ' || quote_ident($1) || '.' || quote_ident($2) || '(' ||
157
+ array_to_string($3, ', ') || ') should not be an aggregate function'
158
+ );
159
+ $$ LANGUAGE sql;
160
+
161
+ -- isnt_aggregate( schema, function, description )
162
+ CREATE OR REPLACE FUNCTION isnt_aggregate ( NAME, NAME, TEXT )
163
+ RETURNS TEXT AS $$
164
+ SELECT _func_compare($1, $2, NOT _agg($1, $2), $3 );
165
+ $$ LANGUAGE SQL;
166
+
167
+ -- isnt_aggregate( schema, function )
168
+ CREATE OR REPLACE FUNCTION isnt_aggregate( NAME, NAME )
169
+ RETURNS TEXT AS $$
170
+ SELECT ok(
171
+ NOT _agg($1, $2),
172
+ 'Function ' || quote_ident($1) || '.' || quote_ident($2) || '() should not be an aggregate function'
173
+ );
174
+ $$ LANGUAGE sql;
175
+
176
+ -- isnt_aggregate( function, args[], description )
177
+ CREATE OR REPLACE FUNCTION isnt_aggregate ( NAME, NAME[], TEXT )
178
+ RETURNS TEXT AS $$
179
+ SELECT _func_compare(NULL, $1, $2, NOT _agg($1, $2), $3 );
180
+ $$ LANGUAGE SQL;
181
+
182
+ -- isnt_aggregate( function, args[] )
183
+ CREATE OR REPLACE FUNCTION isnt_aggregate( NAME, NAME[] )
184
+ RETURNS TEXT AS $$
185
+ SELECT ok(
186
+ NOT _agg($1, $2),
187
+ 'Function ' || quote_ident($1) || '(' ||
188
+ array_to_string($2, ', ') || ') should not be an aggregate function'
189
+ );
190
+ $$ LANGUAGE sql;
191
+
192
+ -- isnt_aggregate( function, description )
193
+ CREATE OR REPLACE FUNCTION isnt_aggregate( NAME, TEXT )
194
+ RETURNS TEXT AS $$
195
+ SELECT _func_compare(NULL, $1, NOT _agg($1), $2 );
196
+ $$ LANGUAGE sql;
197
+
198
+ -- isnt_aggregate( function )
199
+ CREATE OR REPLACE FUNCTION isnt_aggregate( NAME )
200
+ RETURNS TEXT AS $$
201
+ SELECT ok( NOT _agg($1), 'Function ' || quote_ident($1) || '() should not be an aggregate function' );
202
+ $$ LANGUAGE sql;
203
+
204
+
205
+ -- https://github.com/theory/pgtap/pull/99
206
+
207
+ -- hasnt_opclass( schema, name )
208
+ CREATE OR REPLACE FUNCTION hasnt_opclass( NAME, NAME )
209
+ RETURNS TEXT AS $$
210
+ SELECT ok( NOT _opc_exists( $1, $2 ), 'Operator class ' || quote_ident($1) || '.' || quote_ident($2) || ' should not exist' );
211
+ $$ LANGUAGE SQL;
212
+
213
+ -- hasnt_opclass( name )
214
+ CREATE OR REPLACE FUNCTION hasnt_opclass( NAME )
215
+ RETURNS TEXT AS $$
216
+ SELECT ok( NOT _opc_exists( $1 ), 'Operator class ' || quote_ident($1) || ' should not exist' );
217
+ $$ LANGUAGE SQL;
218
+
219
+ -- https://github.com/theory/pgtap/pull/101
220
+
221
+ -- check extension exists function with schema name
222
+ CREATE OR REPLACE FUNCTION _ext_exists( NAME, NAME )
223
+ RETURNS BOOLEAN AS $$
224
+ SELECT EXISTS (
225
+ SELECT TRUE
226
+ FROM pg_catalog.pg_extension ex
227
+ JOIN pg_catalog.pg_namespace n ON ex.extnamespace = n.oid
228
+ WHERE n.nspname = $1
229
+ AND ex.extname = $2
230
+ );
231
+ $$ LANGUAGE SQL;
232
+
233
+ -- check extension exists function without schema name
234
+ CREATE OR REPLACE FUNCTION _ext_exists( NAME )
235
+ RETURNS BOOLEAN AS $$
236
+ SELECT EXISTS (
237
+ SELECT TRUE
238
+ FROM pg_catalog.pg_extension ex
239
+ WHERE ex.extname = $1
240
+ );
241
+ $$ LANGUAGE SQL;
242
+
243
+ -- has_extension( schema, name, description )
244
+ CREATE OR REPLACE FUNCTION has_extension( NAME, NAME, TEXT )
245
+ RETURNS TEXT AS $$
246
+ SELECT ok( _ext_exists( $1, $2 ), $3 );
247
+ $$ LANGUAGE SQL;
248
+
249
+ -- has_extension( schema, name )
250
+ CREATE OR REPLACE FUNCTION has_extension( NAME, NAME )
251
+ RETURNS TEXT AS $$
252
+ SELECT ok(
253
+ _ext_exists( $1, $2 ),
254
+ 'Extension ' || quote_ident($2)
255
+ || ' should exist in schema ' || quote_ident($1) );
256
+ $$ LANGUAGE SQL;
257
+
258
+ -- has_extension( name, description )
259
+ CREATE OR REPLACE FUNCTION has_extension( NAME, TEXT )
260
+ RETURNS TEXT AS $$
261
+ SELECT ok( _ext_exists( $1 ), $2)
262
+ $$ LANGUAGE SQL;
263
+
264
+ -- has_extension( name )
265
+ CREATE OR REPLACE FUNCTION has_extension( NAME )
266
+ RETURNS TEXT AS $$
267
+ SELECT ok(
268
+ _ext_exists( $1 ),
269
+ 'Extension ' || quote_ident($1) || ' should exist' );
270
+ $$ LANGUAGE SQL;
271
+
272
+ -- hasnt_extension( schema, name, description )
273
+ CREATE OR REPLACE FUNCTION hasnt_extension( NAME, NAME, TEXT )
274
+ RETURNS TEXT AS $$
275
+ SELECT ok( NOT _ext_exists( $1, $2 ), $3 );
276
+ $$ LANGUAGE SQL;
277
+
278
+ -- hasnt_extension( schema, name )
279
+ CREATE OR REPLACE FUNCTION hasnt_extension( NAME, NAME )
280
+ RETURNS TEXT AS $$
281
+ SELECT ok(
282
+ NOT _ext_exists( $1, $2 ),
283
+ 'Extension ' || quote_ident($2)
284
+ || ' should not exist in schema ' || quote_ident($1) );
285
+ $$ LANGUAGE SQL;
286
+
287
+ -- hasnt_extension( name, description )
288
+ CREATE OR REPLACE FUNCTION hasnt_extension( NAME, TEXT )
289
+ RETURNS TEXT AS $$
290
+ SELECT ok( NOT _ext_exists( $1 ), $2)
291
+ $$ LANGUAGE SQL;
292
+
293
+ -- hasnt_extension( name )
294
+ CREATE OR REPLACE FUNCTION hasnt_extension( NAME )
295
+ RETURNS TEXT AS $$
296
+ SELECT ok(
297
+ NOT _ext_exists( $1 ),
298
+ 'Extension ' || quote_ident($1) || ' should not exist' );
299
+ $$ LANGUAGE SQL;
300
+
301
+ -- https://github.com/theory/pgtap/pull/119
302
+
303
+ -- throws_ok ( sql, errcode, errmsg, description )
304
+ CREATE OR REPLACE FUNCTION throws_ok ( TEXT, CHAR(5), TEXT, TEXT )
305
+ RETURNS TEXT AS $$
306
+ DECLARE
307
+ query TEXT := _query($1);
308
+ errcode ALIAS FOR $2;
309
+ errmsg ALIAS FOR $3;
310
+ desctext ALIAS FOR $4;
311
+ descr TEXT;
312
+ BEGIN
313
+ descr := COALESCE(
314
+ desctext,
315
+ 'threw ' || errcode || ': ' || errmsg,
316
+ 'threw ' || errcode,
317
+ 'threw ' || errmsg,
318
+ 'threw an exception'
319
+ );
320
+ EXECUTE query;
321
+ RETURN ok( FALSE, descr ) || E'\n' || diag(
322
+ ' caught: no exception' ||
323
+ E'\n wanted: ' || COALESCE( errcode, 'an exception' )
324
+ );
325
+ EXCEPTION WHEN OTHERS OR ASSERT_FAILURE THEN
326
+ IF (errcode IS NULL OR SQLSTATE = errcode)
327
+ AND ( errmsg IS NULL OR SQLERRM = errmsg)
328
+ THEN
329
+ -- The expected errcode and/or message was thrown.
330
+ RETURN ok( TRUE, descr );
331
+ ELSE
332
+ -- This was not the expected errcode or errmsg.
333
+ RETURN ok( FALSE, descr ) || E'\n' || diag(
334
+ ' caught: ' || SQLSTATE || ': ' || SQLERRM ||
335
+ E'\n wanted: ' || COALESCE( errcode, 'an exception' ) ||
336
+ COALESCE( ': ' || errmsg, '')
337
+ );
338
+ END IF;
339
+ END;
340
+ $$ LANGUAGE plpgsql;
341
+
342
+ -- lives_ok( sql, description )
343
+ CREATE OR REPLACE FUNCTION lives_ok ( TEXT, TEXT )
344
+ RETURNS TEXT AS $$
345
+ DECLARE
346
+ code TEXT := _query($1);
347
+ descr ALIAS FOR $2;
348
+ detail text;
349
+ hint text;
350
+ context text;
351
+ schname text;
352
+ tabname text;
353
+ colname text;
354
+ chkname text;
355
+ typname text;
356
+ BEGIN
357
+ EXECUTE code;
358
+ RETURN ok( TRUE, descr );
359
+ EXCEPTION WHEN OTHERS OR ASSERT_FAILURE THEN
360
+ -- There should have been no exception.
361
+ GET STACKED DIAGNOSTICS
362
+ detail = PG_EXCEPTION_DETAIL,
363
+ hint = PG_EXCEPTION_HINT,
364
+ context = PG_EXCEPTION_CONTEXT,
365
+ schname = SCHEMA_NAME,
366
+ tabname = TABLE_NAME,
367
+ colname = COLUMN_NAME,
368
+ chkname = CONSTRAINT_NAME,
369
+ typname = PG_DATATYPE_NAME;
370
+ RETURN ok( FALSE, descr ) || E'\n' || diag(
371
+ ' died: ' || _error_diag(SQLSTATE, SQLERRM, detail, hint, context, schname, tabname, colname, chkname, typname)
372
+ );
373
+ END;
374
+ $$ LANGUAGE plpgsql;
375
+