mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-28 11:55:03 +03:00 
			
		
		
		
	I chanced to notice that this dumped core due to a faulty Assert. To add insult to injury, the output has been misformatted since v11. Obviously we need some regression testing here. Discussion: https://postgr.es/m/d1cc628c-3953-4209-957b-29427acc38c8@www.fastmail.com
		
			
				
	
	
		
			113 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| CREATE EXTENSION bool_plperlu CASCADE;
 | |
| NOTICE:  installing required extension "plperlu"
 | |
| --- test transforming from perl
 | |
| CREATE FUNCTION perl2int(int) RETURNS bool
 | |
| LANGUAGE plperlu
 | |
| TRANSFORM FOR TYPE bool
 | |
| AS $$
 | |
| return shift;
 | |
| $$;
 | |
| CREATE FUNCTION perl2text(text) RETURNS bool
 | |
| LANGUAGE plperlu
 | |
| TRANSFORM FOR TYPE bool
 | |
| AS $$
 | |
| return shift;
 | |
| $$;
 | |
| CREATE FUNCTION perl2undef() RETURNS bool
 | |
| LANGUAGE plperlu
 | |
| TRANSFORM FOR TYPE bool
 | |
| AS $$
 | |
| return undef;
 | |
| $$;
 | |
| SELECT perl2int(1);
 | |
|  perl2int 
 | |
| ----------
 | |
|  t
 | |
| (1 row)
 | |
| 
 | |
| SELECT perl2int(0);
 | |
|  perl2int 
 | |
| ----------
 | |
|  f
 | |
| (1 row)
 | |
| 
 | |
| SELECT perl2text('foo');
 | |
|  perl2text 
 | |
| -----------
 | |
|  t
 | |
| (1 row)
 | |
| 
 | |
| SELECT perl2text('');
 | |
|  perl2text 
 | |
| -----------
 | |
|  f
 | |
| (1 row)
 | |
| 
 | |
| SELECT perl2undef() IS NULL AS p;
 | |
|  p 
 | |
| ---
 | |
|  t
 | |
| (1 row)
 | |
| 
 | |
| --- test transforming to perl
 | |
| CREATE FUNCTION bool2perl(bool, bool, bool) RETURNS void
 | |
| LANGUAGE plperlu
 | |
| TRANSFORM FOR TYPE bool, for type boolean  -- duplicate to test ruleutils
 | |
| AS $$
 | |
| my ($x, $y, $z) = @_;
 | |
| 
 | |
| die("NULL mistransformed") if (defined($z));
 | |
| die("TRUE mistransformed to UNDEF") if (!defined($x));
 | |
| die("FALSE mistransformed to UNDEF") if (!defined($y));
 | |
| die("TRUE mistransformed") if (!$x);
 | |
| die("FALSE mistransformed") if ($y);
 | |
| $$;
 | |
| SELECT bool2perl (true, false, NULL);
 | |
|  bool2perl 
 | |
| -----------
 | |
|  
 | |
| (1 row)
 | |
| 
 | |
| --- test ruleutils
 | |
| \sf bool2perl
 | |
| CREATE OR REPLACE FUNCTION public.bool2perl(boolean, boolean, boolean)
 | |
|  RETURNS void
 | |
|  TRANSFORM FOR TYPE boolean, FOR TYPE boolean
 | |
|  LANGUAGE plperlu
 | |
| AS $function$
 | |
| my ($x, $y, $z) = @_;
 | |
| 
 | |
| die("NULL mistransformed") if (defined($z));
 | |
| die("TRUE mistransformed to UNDEF") if (!defined($x));
 | |
| die("FALSE mistransformed to UNDEF") if (!defined($y));
 | |
| die("TRUE mistransformed") if (!$x);
 | |
| die("FALSE mistransformed") if ($y);
 | |
| $function$
 | |
| --- test selecting bool through SPI
 | |
| CREATE FUNCTION spi_test()  RETURNS void
 | |
| LANGUAGE plperlu
 | |
| TRANSFORM FOR TYPE bool
 | |
| AS $$
 | |
| my $rv = spi_exec_query('SELECT true t, false f, NULL n')->{rows}->[0];
 | |
| 
 | |
| die("TRUE mistransformed to UNDEF in SPI") if (!defined ($rv->{t}));
 | |
| die("FALSE mistransformed to UNDEF in SPI") if (!defined ($rv->{f}));
 | |
| die("NULL mistransformed in SPI") if (defined ($rv->{n}));
 | |
| die("TRUE mistransformed in SPI") if (!$rv->{t});
 | |
| die("FALSE mistransformed in SPI") if ($rv->{f});
 | |
| $$;
 | |
| SELECT spi_test();
 | |
|  spi_test 
 | |
| ----------
 | |
|  
 | |
| (1 row)
 | |
| 
 | |
| DROP EXTENSION plperlu CASCADE;
 | |
| NOTICE:  drop cascades to 6 other objects
 | |
| DETAIL:  drop cascades to function spi_test()
 | |
| drop cascades to extension bool_plperlu
 | |
| drop cascades to function perl2int(integer)
 | |
| drop cascades to function perl2text(text)
 | |
| drop cascades to function perl2undef()
 | |
| drop cascades to function bool2perl(boolean,boolean,boolean)
 |