Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Postgres/src/interfaces/ecpg/test/sql/   (Postgres Database Version 18.4©)  Datei vom 11.4.2026 mit Größe 7 kB image not shown  

Quelle  prepareas.pgc   Sprache: unbekannt

 
Spracherkennung für: .pgc vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

exec sql include ../regression;
exec sql whenever sqlerror sqlprint;

static void
check_result_of_insert(void)
{
 exec sql begin declare section;
 int ivar1 = 0, ivar2 = 0;
 exec sql end declare section;

 exec sql select c1,c2 into :ivar1,:ivar2 from test;
 printf("%d %d\n", ivar1, ivar2);
}

int main(void)
{
 exec sql begin declare section;
 int ivar1 = 1, ivar2 = 2;
 char v_include_dq_name[16], v_include_ws_name[16], v_normal_name[16], v_query[64];
 exec sql end declare section;

 strcpy(v_normal_name, "normal_name");
 strcpy(v_include_dq_name, "include_\"_name");
 strcpy(v_include_ws_name, "include_ _name");
 strcpy(v_query, "insert into test values(?,?)");

 /*
  * preparing for test
  */
 exec sql connect to REGRESSDB1;
 exec sql begin;
 exec sql create table test (c1 int, c2 int);
 exec sql commit work;
 exec sql begin;

 /*
  * Non dynamic statement
  */
 exec sql truncate test;
 printf("+++++ Test for prepnormal +++++\n");
 printf("insert into test values(:ivar1,:ivar2)\n");
 exec sql insert into test values(:ivar1,:ivar2);
 check_result_of_insert();

 exec sql truncate test;
 printf("+++++ Test for execute immediate +++++\n");
 printf("execute immediate \"insert into test values(1,2)\"\n");
 exec sql execute immediate "insert into test values(1,2)";
 check_result_of_insert();

 /*
  * PREPARE FROM
  */
 exec sql truncate test;
 printf("+++++ Test for PREPARE ident FROM CString +++++\n");
 printf("prepare ident_name from \"insert into test values(?,?)\"\n");
 exec sql prepare ident_name from "insert into test values(?,?)";
 printf("execute ident_name using :ivar1,:ivar2\n");
 exec sql execute ident_name using :ivar1,:ivar2;
 check_result_of_insert();

 exec sql truncate test;
 printf("+++++ Test for PREPARE char_variable_normal_name FROM char_variable +++++\n");
 printf("prepare :v_normal_name from :v_query\n");
 exec sql prepare :v_normal_name from :v_query;
 printf("execute :v_normal_name using :ivar1,:ivar2\n");
 exec sql execute :v_normal_name using :ivar1,:ivar2;
 check_result_of_insert();

 exec sql truncate test;
 printf("+++++ Test for PREPARE char_variable_inc_dq_name FROM char_variable +++++\n");
 printf("prepare :v_include_dq_name from :v_query\n");
 exec sql prepare :v_include_dq_name from :v_query;
 printf("execute :v_include_dq_name using :ivar1,:ivar2\n");
 exec sql execute :v_include_dq_name using :ivar1,:ivar2;
 check_result_of_insert();

 exec sql truncate test;
 printf("+++++ Test for PREPARE char_variable_inc_ws_name FROM char_variable +++++\n");
 printf("prepare :v_include_ws_name from :v_query\n");
 exec sql prepare :v_include_ws_name from :v_query;
 printf("execute :v_include_ws_name using :ivar1,:ivar2\n");
 exec sql execute :v_include_ws_name using :ivar1,:ivar2;
 check_result_of_insert();

 exec sql truncate test;
 printf("+++++ Test for PREPARE CString_inc_ws_name FROM char_variable +++++\n");
 printf("prepare \"include_ _name\" from :v_query\n");
 exec sql prepare "include_ _name" from :v_query;
 printf("exec sql execute \"include_ _name\" using :ivar1,:ivar2\n");
 exec sql execute "include_ _name" using :ivar1,:ivar2;
 check_result_of_insert();

 exec sql truncate test;
 printf("+++++ Test for PREPARE CString_normal_name FROM char_variable +++++\n");
 printf("prepare \"norma_name\" from :v_query\n");
 exec sql prepare "normal_name" from :v_query;
 printf("exec sql execute \"normal_name\" using :ivar1,:ivar2\n");
 exec sql execute "normal_name" using :ivar1,:ivar2;
 check_result_of_insert();

 /*
  * PREPARE AS
  */
 exec sql deallocate "ident_name";
 exec sql deallocate "normal_name";
 exec sql deallocate "include_ _name";

 exec sql truncate test;
 printf("+++++ Test for PREPARE ident(typelist) AS +++++\n");
 printf("prepare ident_name(int,int) as insert into test values($1,$2)\n");
 exec sql prepare ident_name(int,int) as insert into test values($1,$2);
 printf("execute ident_name(:ivar1,:ivar2)\n");
 exec sql execute ident_name(:ivar1,:ivar2);
 check_result_of_insert();
 exec sql deallocate "ident_name";

 exec sql truncate test;
 printf("+++++ Test for PREPARE CString_normal_name(typelist) AS +++++\n");
 printf("prepare \"normal_name\"(int,int) as insert into test values($1,$2)\n");
 exec sql prepare "normal_name"(int,int) as insert into test values($1,$2);
 printf("execute \"normal_name\"(:ivar1,:ivar2)\n");
 exec sql execute "normal_name"(:ivar1,:ivar2);
 check_result_of_insert();
 exec sql deallocate "normal_name";

 exec sql truncate test;
 printf("+++++ Test for PREPARE CString_include_ws_name(typelist) AS +++++\n");
 printf("prepare \"include_ _name\"(int,int) as insert into test values($1,$2)\n");
 exec sql prepare "include_ _name"(int,int) as insert into test values($1,$2);
 printf("execute \"include_ _name\"(:ivar1,:ivar2)\n");
 exec sql execute "include_ _name"(:ivar1,:ivar2);
 check_result_of_insert();
 exec sql deallocate "include_ _name";

 exec sql truncate test;
 printf("+++++ Test for PREPARE char_variable_normal_name(typelist) AS +++++\n");
 printf("prepare :v_normal_name(int,int) as insert into test values($1,$2)\n");
 exec sql prepare :v_normal_name(int,int) as insert into test values($1,$2);
 printf("execute :v_normal_name(:ivar1,:ivar2)\n");
 exec sql execute :v_normal_name(:ivar1,:ivar2);
 check_result_of_insert();
 exec sql deallocate "normal_name";

 exec sql truncate test;
 printf("+++++ Test for PREPARE char_variable_include_ws_name(typelist) AS +++++\n");
 printf("prepare :v_include_ws_name(int,int) as insert into test values($1,$2)\n");
 exec sql prepare :v_include_ws_name(int,int) as insert into test values($1,$2);
 printf("execute :v_include_ws_name(:ivar1,:ivar2)\n");
 exec sql execute :v_include_ws_name(:ivar1,:ivar2);
 check_result_of_insert();
 exec sql deallocate "include_ _name";

 exec sql truncate test;
 printf("+++++ Test for EXECUTE :v_normal_name(const,const) +++++\n");
 printf("prepare :v_normal_name from :v_query\n");
 exec sql prepare :v_normal_name from :v_query;
 printf("execute :v_normal_name(1,2)\n");
 exec sql execute :v_normal_name(1,2);
 check_result_of_insert();
 exec sql deallocate "normal_name";

 exec sql truncate test;
 printf("+++++ Test for EXECUTE :v_normal_name(expr,expr) +++++\n");
 printf("prepare :v_normal_name from :v_query\n");
 exec sql prepare :v_normal_name from :v_query;
 printf("execute :v_normal_name(0+1,1+1)\n");
 exec sql execute :v_normal_name(0+1,1+1);
 check_result_of_insert();
 exec sql deallocate "normal_name";

 exec sql truncate test;
 printf("+++++ Test for combination PREPARE FROM and EXECUTE ident(typelist) +++++\n");
 printf("prepare ident_name from :v_query\n");
 exec sql prepare ident_name from :v_query;
 printf("execute ident_name(:ivar1,:ivar2)\n");
 exec sql execute ident_name(:ivar1,:ivar2);
 check_result_of_insert();
 exec sql deallocate "ident_name";

 exec sql truncate test;
 printf("+++++ Test for combination PREPARE FROM and EXECUTE CString_include_ws_name(typelist) +++++\n");
 printf("prepare \"include_ _name\" from :v_query\n");
 exec sql prepare "include_ _name" from :v_query;
 printf("execute \"include_ _name\"(:ivar1,:ivar2)\n");
 exec sql execute "include_ _name"(:ivar1,:ivar2);
 check_result_of_insert();
 exec sql deallocate "include_ _name";

 exec sql drop table test;
 exec sql commit work;

 return 0;
}

[Dauer der Verarbeitung: 0.11 Sekunden, vorverarbeitet 2026-08-08]