Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Postgres/src/pl/plpython/sql/   (The Python Language ©)  Datei vom 11.4.2026 mit Größe 5 kB image not shown  

Quelle  plpython_record.sql

  Sprache: SQL
 

--
-- Test returning tuples
--

CREATE TABLE table_record (
 first text,
 second int4
 ) ;

CREATE TYPE type_record AS (
 first text,
 second int4
 ) ;


CREATE FUNCTION test_table_record_as(typ text, first text, second integer, retnull boolean) RETURNS table_record AS $$
if retnull:
 return None
if typ == 'dict':
 return { 'first': first, 'second': second, 'additionalfield''must not cause trouble' }
elif typ == 'tuple':
 return ( first, second )
elif typ == 'list':
 return [ first, second ]
elif typ == 'obj':
 class type_record: pass
 type_record.first = first
 type_record.second = second
 return type_record
$$ LANGUAGE plpython3u;

CREATE FUNCTION test_type_record_as(typ text, first text, second integer, retnull boolean) RETURNS type_record AS $$
if retnull:
 return None
if typ == 'dict':
 return { 'first': first, 'second': second, 'additionalfield''must not cause trouble' }
elif typ == 'tuple':
 return ( first, second )
elif typ == 'list':
 return [ first, second ]
elif typ == 'obj':
 class type_record: pass
 type_record.first = first
 type_record.second = second
 return type_record
elif typ == 'str':
 return "('%s',%r)" % (first, second)
$$ LANGUAGE plpython3u;

CREATE FUNCTION test_in_out_params(first in text, second out text) AS $$
return first + '_in_to_out';
$$ LANGUAGE plpython3u;

CREATE FUNCTION test_in_out_params_multi(first in text,
                                         second out text, third out text) AS $$
return (first + '_record_in_to_out_1', first + '_record_in_to_out_2');
$$ LANGUAGE plpython3u;

CREATE FUNCTION test_inout_params(first inout text) AS $$
return first + '_inout';
$$ LANGUAGE plpython3u;


-- Test tuple returning functions
SELECT * FROM test_table_record_as('dict'nullnullfalse);
SELECT * FROM test_table_record_as('dict''one'nullfalse);
SELECT * FROM test_table_record_as('dict'null2false);
SELECT * FROM test_table_record_as('dict''three'3false);
SELECT * FROM test_table_record_as('dict'nullnulltrue);

SELECT * FROM test_table_record_as('tuple'nullnullfalse);
SELECT * FROM test_table_record_as('tuple''one'nullfalse);
SELECT * FROM test_table_record_as('tuple'null2false);
SELECT * FROM test_table_record_as('tuple''three'3false);
SELECT * FROM test_table_record_as('tuple'nullnulltrue);

SELECT * FROM test_table_record_as('list'nullnullfalse);
SELECT * FROM test_table_record_as('list''one'nullfalse);
SELECT * FROM test_table_record_as('list'null2false);
SELECT * FROM test_table_record_as('list''three'3false);
SELECT * FROM test_table_record_as('list'nullnulltrue);

SELECT * FROM test_table_record_as('obj'nullnullfalse);
SELECT * FROM test_table_record_as('obj''one'nullfalse);
SELECT * FROM test_table_record_as('obj'null2false);
SELECT * FROM test_table_record_as('obj''three'3false);
SELECT * FROM test_table_record_as('obj'nullnulltrue);

SELECT * FROM test_type_record_as('dict'nullnullfalse);
SELECT * FROM test_type_record_as('dict''one'nullfalse);
SELECT * FROM test_type_record_as('dict'null2false);
SELECT * FROM test_type_record_as('dict''three'3false);
SELECT * FROM test_type_record_as('dict'nullnulltrue);

SELECT * FROM test_type_record_as('tuple'nullnullfalse);
SELECT * FROM test_type_record_as('tuple''one'nullfalse);
SELECT * FROM test_type_record_as('tuple'null2false);
SELECT * FROM test_type_record_as('tuple''three'3false);
SELECT * FROM test_type_record_as('tuple'nullnulltrue);

SELECT * FROM test_type_record_as('list'nullnullfalse);
SELECT * FROM test_type_record_as('list''one'nullfalse);
SELECT * FROM test_type_record_as('list'null2false);
SELECT * FROM test_type_record_as('list''three'3false);
SELECT * FROM test_type_record_as('list'nullnulltrue);

SELECT * FROM test_type_record_as('obj'nullnullfalse);
SELECT * FROM test_type_record_as('obj''one'nullfalse);
SELECT * FROM test_type_record_as('obj'null2false);
SELECT * FROM test_type_record_as('obj''three'3false);
SELECT * FROM test_type_record_as('obj'nullnulltrue);

SELECT * FROM test_type_record_as('str''one'1false);

SELECT * FROM test_in_out_params('test_in');
SELECT * FROM test_in_out_params_multi('test_in');
SELECT * FROM test_inout_params('test_in');

-- try changing the return types and call functions again

ALTER TABLE table_record DROP COLUMN first;
ALTER TABLE table_record DROP COLUMN second;
ALTER TABLE table_record ADD COLUMN first text;
ALTER TABLE table_record ADD COLUMN second int4;

SELECT * FROM test_table_record_as('obj''one'1false);

ALTER TYPE type_record DROP ATTRIBUTE first;
ALTER TYPE type_record DROP ATTRIBUTE second;
ALTER TYPE type_record ADD ATTRIBUTE first text;
ALTER TYPE type_record ADD ATTRIBUTE second int4;

SELECT * FROM test_type_record_as('obj''one'1false);

-- errors cases

CREATE FUNCTION test_type_record_error1() RETURNS type_record AS $$
    return { 'first''first' }
$$ LANGUAGE plpython3u;

SELECT * FROM test_type_record_error1();


CREATE FUNCTION test_type_record_error2() RETURNS type_record AS $$
    return [ 'first' ]
$$ LANGUAGE plpython3u;

SELECT * FROM test_type_record_error2();


CREATE FUNCTION test_type_record_error3() RETURNS type_record AS $$
    class type_record: pass
    type_record.first = 'first'
    return type_record
$$ LANGUAGE plpython3u;

SELECT * FROM test_type_record_error3();

CREATE FUNCTION test_type_record_error4() RETURNS type_record AS $$
    return 'foo'
$$ LANGUAGE plpython3u;

SELECT * FROM test_type_record_error4();

Messung V0.5 in Prozent
C=92 H=96 G=93

¤ Dauer der Verarbeitung: 0.23 Sekunden  (vorverarbeitet am  2026-08-08) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.