-- enable statistics
SET stats_block_level = on;
SET stats_row_level = on;
--- helper function
-CREATE FUNCTION sleep(interval) RETURNS integer AS '
-DECLARE
- endtime timestamp;
-BEGIN
- endtime := timeofday()::timestamp + $1;
- WHILE timeofday()::timestamp < endtime LOOP
- END LOOP;
- RETURN 0;
-END;
-' LANGUAGE 'plpgsql';
-- do something
SELECT count(*) FROM tenk2;
count
(1 row)
-- let stats collector catch up
-SELECT sleep('0:0:2'::interval);
- sleep
--------
- 0
+SELECT do_sleep(2);
+ do_sleep
+----------
+
(1 row)
-- check effects
t | t
(1 row)
--- clean up
-DROP FUNCTION sleep(interval);
-- End of Stats Test
CREATE FUNCTION widget_in(cstring)
RETURNS widget
AS '@abs_builddir@/regress@DLSUFFIX@'
- LANGUAGE 'c';
+ LANGUAGE 'C' STRICT;
CREATE FUNCTION widget_out(widget)
RETURNS cstring
AS '@abs_builddir@/regress@DLSUFFIX@'
- LANGUAGE 'c';
+ LANGUAGE 'C' STRICT;
CREATE FUNCTION int44in(cstring)
RETURNS city_budget
AS '@abs_builddir@/regress@DLSUFFIX@'
- LANGUAGE 'c';
+ LANGUAGE 'C' STRICT;
CREATE FUNCTION int44out(city_budget)
RETURNS cstring
AS '@abs_builddir@/regress@DLSUFFIX@'
- LANGUAGE 'c';
+ LANGUAGE 'C' STRICT;
CREATE FUNCTION check_primary_key ()
RETURNS trigger
CREATE FUNCTION set_ttdummy (int4)
RETURNS int4
AS '@abs_builddir@/regress@DLSUFFIX@'
- LANGUAGE 'C';
+ LANGUAGE 'C' STRICT;
+
+CREATE FUNCTION do_sleep (int4)
+ RETURNS void
+ AS '@abs_builddir@/regress@DLSUFFIX@'
+ LANGUAGE 'C' STRICT;
-- Things that shouldn't work:
CREATE FUNCTION widget_in(cstring)
RETURNS widget
AS '@abs_builddir@/regress@DLSUFFIX@'
- LANGUAGE 'c';
+ LANGUAGE 'C' STRICT;
NOTICE: type "widget" is not yet defined
DETAIL: Creating a shell type definition.
CREATE FUNCTION widget_out(widget)
RETURNS cstring
AS '@abs_builddir@/regress@DLSUFFIX@'
- LANGUAGE 'c';
+ LANGUAGE 'C' STRICT;
NOTICE: argument type widget is only a shell
CREATE FUNCTION int44in(cstring)
RETURNS city_budget
AS '@abs_builddir@/regress@DLSUFFIX@'
- LANGUAGE 'c';
+ LANGUAGE 'C' STRICT;
NOTICE: type "city_budget" is not yet defined
DETAIL: Creating a shell type definition.
CREATE FUNCTION int44out(city_budget)
RETURNS cstring
AS '@abs_builddir@/regress@DLSUFFIX@'
- LANGUAGE 'c';
+ LANGUAGE 'C' STRICT;
NOTICE: argument type city_budget is only a shell
CREATE FUNCTION check_primary_key ()
RETURNS trigger
CREATE FUNCTION set_ttdummy (int4)
RETURNS int4
AS '@abs_builddir@/regress@DLSUFFIX@'
- LANGUAGE 'C';
+ LANGUAGE 'C' STRICT;
+CREATE FUNCTION do_sleep (int4)
+ RETURNS void
+ AS '@abs_builddir@/regress@DLSUFFIX@'
+ LANGUAGE 'C' STRICT;
-- Things that shouldn't work:
CREATE FUNCTION test1 (int) RETURNS int LANGUAGE sql
AS 'SELECT ''not an integer'';';
/*
- * $PostgreSQL: pgsql/src/test/regress/regress.c,v 1.62 2004/10/21 19:28:36 tgl Exp $
+ * $PostgreSQL: pgsql/src/test/regress/regress.c,v 1.63 2005/07/23 14:18:56 tgl Exp $
*/
#include "postgres.h"
extern int oldstyle_length(int n, text *t);
extern Datum int44in(PG_FUNCTION_ARGS);
extern Datum int44out(PG_FUNCTION_ARGS);
+extern Datum do_sleep(PG_FUNCTION_ARGS);
+
/*
* Distance from a point to a path
*--walk = '\0';
PG_RETURN_CSTRING(result);
}
+
+/*
+ * do_sleep - delay for N seconds
+ */
+PG_FUNCTION_INFO_V1(do_sleep);
+
+Datum
+do_sleep(PG_FUNCTION_ARGS)
+{
+ int32 secs = PG_GETARG_INT32(0);
+
+ pg_usleep(secs * 1000000L);
+
+ PG_RETURN_VOID();
+}
SET stats_block_level = on;
SET stats_row_level = on;
--- helper function
-CREATE FUNCTION sleep(interval) RETURNS integer AS '
-DECLARE
- endtime timestamp;
-BEGIN
- endtime := timeofday()::timestamp + $1;
- WHILE timeofday()::timestamp < endtime LOOP
- END LOOP;
- RETURN 0;
-END;
-' LANGUAGE 'plpgsql';
-
-- do something
SELECT count(*) FROM tenk2;
SELECT count(*) FROM tenk2 WHERE unique1 = 1;
-- let stats collector catch up
-SELECT sleep('0:0:2'::interval);
+SELECT do_sleep(2);
-- check effects
SELECT st.seq_scan >= pr.seq_scan + 1,
FROM pg_statio_user_tables AS st, pg_class AS cl, prevstats AS pr
WHERE st.relname='tenk2' AND cl.relname='tenk2';
--- clean up
-DROP FUNCTION sleep(interval);
-
-- End of Stats Test