LCOV - code coverage report
Current view: top level - src/interfaces/ecpg/test/sql - prepareas.pgc (source / functions) Coverage Total Hit
Test: PostgreSQL 19devel Lines: 100.0 % 158 158
Test Date: 2026-03-10 20:15:06 Functions: 100.0 % 2 2
Legend: Lines:     hit not hit

            Line data    Source code
       1              : #include <stdlib.h>
       2              : #include <string.h>
       3              : #include <stdio.h>
       4              : 
       5              : exec sql include ../regression;
       6              : exec sql whenever sqlerror sqlprint;
       7              : 
       8              : static void
       9           34 : check_result_of_insert(void)
      10              : {
      11              :     exec sql begin declare section;
      12           34 :     int ivar1 = 0, ivar2 = 0;
      13              :     exec sql end declare section;
      14              : 
      15           34 :     exec sql select c1,c2 into :ivar1,:ivar2 from test;
      16           34 :     printf("%d %d\n", ivar1, ivar2);
      17           34 : }
      18              : 
      19            2 : int main(void)
      20              : {
      21              :     exec sql begin declare section;
      22            2 :     int ivar1 = 1, ivar2 = 2;
      23              :     char v_include_dq_name[16], v_include_ws_name[16], v_normal_name[16], v_query[64];
      24              :     exec sql end declare section;
      25              : 
      26            2 :     strcpy(v_normal_name, "normal_name");
      27            2 :     strcpy(v_include_dq_name, "include_\"_name");
      28            2 :     strcpy(v_include_ws_name, "include_ _name");
      29            2 :     strcpy(v_query, "insert into test values(?,?)");
      30              : 
      31              :     /*
      32              :      * preparing for test
      33              :      */
      34            2 :     exec sql connect to REGRESSDB1;
      35            2 :     exec sql begin;
      36            2 :     exec sql create table test (c1 int, c2 int);
      37            2 :     exec sql commit work;
      38            2 :     exec sql begin;
      39            2 : 
      40              :     /*
      41              :      * Non dynamic statement
      42              :      */
      43            2 :     exec sql truncate test;
      44            2 :     printf("+++++ Test for prepnormal +++++\n");
      45            2 :     printf("insert into test values(:ivar1,:ivar2)\n");
      46            2 :     exec sql insert into test values(:ivar1,:ivar2);
      47            2 :     check_result_of_insert();
      48              : 
      49            2 :     exec sql truncate test;
      50            2 :     printf("+++++ Test for execute immediate +++++\n");
      51            2 :     printf("execute immediate \"insert into test values(1,2)\"\n");
      52            2 :     exec sql execute immediate "insert into test values(1,2)";
      53            2 :     check_result_of_insert();
      54              : 
      55              :     /*
      56              :      * PREPARE FROM
      57              :      */
      58            2 :     exec sql truncate test;
      59            2 :     printf("+++++ Test for PREPARE ident FROM CString +++++\n");
      60            2 :     printf("prepare ident_name from \"insert into test values(?,?)\"\n");
      61            2 :     exec sql prepare ident_name from "insert into test values(?,?)";
      62            2 :     printf("execute ident_name using :ivar1,:ivar2\n");
      63            2 :     exec sql execute ident_name using :ivar1,:ivar2;
      64            2 :     check_result_of_insert();
      65              : 
      66            2 :     exec sql truncate test;
      67            2 :     printf("+++++ Test for PREPARE char_variable_normal_name FROM char_variable +++++\n");
      68            2 :     printf("prepare :v_normal_name from :v_query\n");
      69            2 :     exec sql prepare :v_normal_name from :v_query;
      70            2 :     printf("execute :v_normal_name using :ivar1,:ivar2\n");
      71            2 :     exec sql execute :v_normal_name using :ivar1,:ivar2;
      72            2 :     check_result_of_insert();
      73              : 
      74            2 :     exec sql truncate test;
      75            2 :     printf("+++++ Test for PREPARE char_variable_inc_dq_name FROM char_variable +++++\n");
      76            2 :     printf("prepare :v_include_dq_name from :v_query\n");
      77            2 :     exec sql prepare :v_include_dq_name from :v_query;
      78            2 :     printf("execute :v_include_dq_name using :ivar1,:ivar2\n");
      79            2 :     exec sql execute :v_include_dq_name using :ivar1,:ivar2;
      80            2 :     check_result_of_insert();
      81              : 
      82            2 :     exec sql truncate test;
      83            2 :     printf("+++++ Test for PREPARE char_variable_inc_ws_name FROM char_variable +++++\n");
      84            2 :     printf("prepare :v_include_ws_name from :v_query\n");
      85            2 :     exec sql prepare :v_include_ws_name from :v_query;
      86            2 :     printf("execute :v_include_ws_name using :ivar1,:ivar2\n");
      87            2 :     exec sql execute :v_include_ws_name using :ivar1,:ivar2;
      88            2 :     check_result_of_insert();
      89              : 
      90            2 :     exec sql truncate test;
      91            2 :     printf("+++++ Test for PREPARE CString_inc_ws_name FROM char_variable +++++\n");
      92            2 :     printf("prepare \"include_ _name\" from :v_query\n");
      93            2 :     exec sql prepare "include_ _name" from :v_query;
      94            2 :     printf("exec sql execute \"include_ _name\" using :ivar1,:ivar2\n");
      95            2 :     exec sql execute "include_ _name" using :ivar1,:ivar2;
      96            2 :     check_result_of_insert();
      97              : 
      98            2 :     exec sql truncate test;
      99            2 :     printf("+++++ Test for PREPARE CString_normal_name FROM char_variable +++++\n");
     100            2 :     printf("prepare \"norma_name\" from :v_query\n");
     101            2 :     exec sql prepare "normal_name" from :v_query;
     102            2 :     printf("exec sql execute \"normal_name\" using :ivar1,:ivar2\n");
     103            2 :     exec sql execute "normal_name" using :ivar1,:ivar2;
     104            2 :     check_result_of_insert();
     105              : 
     106              :     /*
     107              :      * PREPARE AS
     108              :      */
     109            2 :     exec sql deallocate "ident_name";
     110            2 :     exec sql deallocate "normal_name";
     111            2 :     exec sql deallocate "include_ _name";
     112            2 : 
     113            2 :     exec sql truncate test;
     114            2 :     printf("+++++ Test for PREPARE ident(typelist) AS +++++\n");
     115            2 :     printf("prepare ident_name(int,int) as insert into test values($1,$2)\n");
     116            2 :     exec sql prepare ident_name(int,int) as insert into test values($1,$2);
     117            2 :     printf("execute ident_name(:ivar1,:ivar2)\n");
     118            2 :     exec sql execute ident_name(:ivar1,:ivar2);
     119            2 :     check_result_of_insert();
     120            2 :     exec sql deallocate "ident_name";
     121            2 : 
     122            2 :     exec sql truncate test;
     123            2 :     printf("+++++ Test for PREPARE CString_normal_name(typelist) AS +++++\n");
     124            2 :     printf("prepare \"normal_name\"(int,int) as insert into test values($1,$2)\n");
     125            2 :     exec sql prepare "normal_name"(int,int) as insert into test values($1,$2);
     126            2 :     printf("execute \"normal_name\"(:ivar1,:ivar2)\n");
     127            2 :     exec sql execute "normal_name"(:ivar1,:ivar2);
     128            2 :     check_result_of_insert();
     129            2 :     exec sql deallocate "normal_name";
     130            2 : 
     131            2 :     exec sql truncate test;
     132            2 :     printf("+++++ Test for PREPARE CString_include_ws_name(typelist) AS +++++\n");
     133            2 :     printf("prepare \"include_ _name\"(int,int) as insert into test values($1,$2)\n");
     134            2 :     exec sql prepare "include_ _name"(int,int) as insert into test values($1,$2);
     135            2 :     printf("execute \"include_ _name\"(:ivar1,:ivar2)\n");
     136            2 :     exec sql execute "include_ _name"(:ivar1,:ivar2);
     137            2 :     check_result_of_insert();
     138            2 :     exec sql deallocate "include_ _name";
     139            2 : 
     140            2 :     exec sql truncate test;
     141            2 :     printf("+++++ Test for PREPARE char_variable_normal_name(typelist) AS +++++\n");
     142            2 :     printf("prepare :v_normal_name(int,int) as insert into test values($1,$2)\n");
     143            2 :     exec sql prepare :v_normal_name(int,int) as insert into test values($1,$2);
     144            2 :     printf("execute :v_normal_name(:ivar1,:ivar2)\n");
     145            2 :     exec sql execute :v_normal_name(:ivar1,:ivar2);
     146            2 :     check_result_of_insert();
     147            2 :     exec sql deallocate "normal_name";
     148            2 : 
     149            2 :     exec sql truncate test;
     150            2 :     printf("+++++ Test for PREPARE char_variable_include_ws_name(typelist) AS +++++\n");
     151            2 :     printf("prepare :v_include_ws_name(int,int) as insert into test values($1,$2)\n");
     152            2 :     exec sql prepare :v_include_ws_name(int,int) as insert into test values($1,$2);
     153            2 :     printf("execute :v_include_ws_name(:ivar1,:ivar2)\n");
     154            2 :     exec sql execute :v_include_ws_name(:ivar1,:ivar2);
     155            2 :     check_result_of_insert();
     156            2 :     exec sql deallocate "include_ _name";
     157            2 : 
     158            2 :     exec sql truncate test;
     159            2 :     printf("+++++ Test for EXECUTE :v_normal_name(const,const) +++++\n");
     160            2 :     printf("prepare :v_normal_name from :v_query\n");
     161            2 :     exec sql prepare :v_normal_name from :v_query;
     162            2 :     printf("execute :v_normal_name(1,2)\n");
     163            2 :     exec sql execute :v_normal_name(1,2);
     164            2 :     check_result_of_insert();
     165            2 :     exec sql deallocate "normal_name";
     166            2 : 
     167            2 :     exec sql truncate test;
     168            2 :     printf("+++++ Test for EXECUTE :v_normal_name(expr,expr) +++++\n");
     169            2 :     printf("prepare :v_normal_name from :v_query\n");
     170            2 :     exec sql prepare :v_normal_name from :v_query;
     171            2 :     printf("execute :v_normal_name(0+1,1+1)\n");
     172            2 :     exec sql execute :v_normal_name(0+1,1+1);
     173            2 :     check_result_of_insert();
     174            2 :     exec sql deallocate "normal_name";
     175            2 : 
     176            2 :     exec sql truncate test;
     177            2 :     printf("+++++ Test for combination PREPARE FROM and EXECUTE ident(typelist) +++++\n");
     178            2 :     printf("prepare ident_name from :v_query\n");
     179            2 :     exec sql prepare ident_name from :v_query;
     180            2 :     printf("execute ident_name(:ivar1,:ivar2)\n");
     181            2 :     exec sql execute ident_name(:ivar1,:ivar2);
     182            2 :     check_result_of_insert();
     183            2 :     exec sql deallocate "ident_name";
     184            2 : 
     185            2 :     exec sql truncate test;
     186            2 :     printf("+++++ Test for combination PREPARE FROM and EXECUTE CString_include_ws_name(typelist) +++++\n");
     187            2 :     printf("prepare \"include_ _name\" from :v_query\n");
     188            2 :     exec sql prepare "include_ _name" from :v_query;
     189            2 :     printf("execute \"include_ _name\"(:ivar1,:ivar2)\n");
     190            2 :     exec sql execute "include_ _name"(:ivar1,:ivar2);
     191            2 :     check_result_of_insert();
     192            2 :     exec sql deallocate "include_ _name";
     193            2 : 
     194            2 :     exec sql drop table test;
     195            2 :     exec sql commit work;
     196            2 : 
     197            2 :     return 0;
     198              : }
        

Generated by: LCOV version 2.0-1