LCOV - code coverage report
Current view: top level - src/interfaces/ecpg/test/sql - prepareas.pgc (source / functions) Coverage Total Hit
Test: PostgreSQL 20devel Lines: 100.0 % 158 158
Test Date: 2026-07-25 10:15:40 Functions: 100.0 % 2 2
Legend: Lines:     hit not hit
Branches: + taken - not taken # not executed
Branches: 50.0 % 138 69

             Branch data     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