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

             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                 :             : 
       7                 :             : exec sql whenever sqlerror sqlprint;
       8                 :             : 
       9                 :             : int
      10                 :           2 : main(void)
      11                 :             : {
      12                 :             : exec sql begin declare section;
      13                 :             :     char command[512];
      14                 :             :     char search_address[10];
      15                 :             :     char cname[100];
      16                 :             :     int reg;
      17                 :             : exec sql end declare section;
      18                 :             : 
      19                 :           2 :     ECPGdebug(1, stderr);
      20                 :             : 
      21                 :           2 :     exec sql connect to REGRESSDB1 as main;
      22         [ -  + ]:           2 : 
      23                 :             :     /* Create schema and tables for property graph testing */
      24                 :           2 :     exec sql create schema graph_ecpg_tests;
      25         [ -  + ]:           2 :     exec sql set search_path = graph_ecpg_tests;
      26         [ -  + ]:           2 : 
      27                 :           2 :     exec sql create table customers (
      28                 :             :         customer_id integer primary key,
      29                 :             :         name varchar,
      30                 :             :         address varchar
      31                 :             :     );
      32         [ -  + ]:           2 : 
      33                 :           2 :     exec sql create table orders (
      34                 :             :         order_id integer primary key,
      35                 :             :         register integer
      36                 :             :     );
      37         [ -  + ]:           2 : 
      38                 :           2 :     exec sql create table customer_orders (
      39                 :             :         customer_orders_id integer primary key,
      40                 :             :         customer_id integer references customers (customer_id),
      41                 :             :         order_id integer references orders (order_id)
      42                 :             :     );
      43         [ -  + ]:           2 : 
      44                 :             :     /* Insert test data */
      45                 :           2 :     exec sql insert into customers values (1, 'customer1', 'US'), (2, 'customer2', 'CA'), (3, 'customer3', 'GL');
      46         [ -  + ]:           2 :     exec sql insert into orders values (1, 100), (2, 200), (3, 500);
      47         [ -  + ]:           2 :     exec sql insert into customer_orders (customer_orders_id, customer_id, order_id) values (1, 1, 1), (2, 2, 2), (3, 3, 3);
      48         [ -  + ]:           2 : 
      49                 :             :     /* Create property graph */
      50                 :           2 :     exec sql create property graph shopgraph
      51                 :             :         vertex tables (
      52                 :             :             customers,
      53                 :             :             orders
      54                 :             :         )
      55                 :             :         edge tables (
      56                 :             :             customer_orders key (customer_orders_id)
      57                 :             :                 source key (customer_id) references customers (customer_id)
      58                 :             :                 destination key (order_id) references orders (order_id)
      59                 :             :         );
      60         [ -  + ]:           2 : 
      61                 :           2 :     exec sql commit;
      62         [ -  + ]:           2 : 
      63                 :             :     /* direct sql - US customers */
      64                 :           2 :     exec sql select * into :cname, :reg from graph_table (shopgraph match (c is customers where c.address = 'US')-[is customer_orders]->(o is orders) columns (c.name, o.register));
      65         [ -  + ]:           2 :     printf("found %ld results (%s, %d)\n", sqlca.sqlerrd[2], cname, reg);
      66                 :             : 
      67                 :             :     /* direct sql with C variable - GL customers */
      68                 :           2 :     strcpy(search_address, "GL");
      69                 :           2 :     exec sql select * into :cname, :reg from graph_table (shopgraph match (c is customers where c.address = :search_address)-[is customer_orders]->(o is orders) columns (c.name, o.register));
      70         [ -  + ]:           2 :     printf("found %ld results (%s, %d)\n", sqlca.sqlerrd[2], cname, reg);
      71                 :             : 
      72                 :             :     /* prepared statement - CA customers */
      73                 :           2 :     sprintf(command, "select * from graph_table (shopgraph match (c is customers where c.address = $1)-[is customer_orders]->(o is orders) columns (c.name, o.register))");
      74                 :           2 :     exec sql prepare graph_stmt from :command;
      75         [ -  + ]:           2 :     strcpy(search_address, "CA");
      76                 :           2 :     exec sql execute graph_stmt into :cname, :reg using :search_address;
      77         [ -  + ]:           2 :     printf("found %ld results (%s, %d)\n", sqlca.sqlerrd[2], cname, reg);
      78                 :           2 :     exec sql deallocate graph_stmt;
      79         [ -  + ]:           2 : 
      80                 :             :     /* cursor test - all customers with orders */
      81                 :             :     exec sql declare graph_cursor cursor for select * from graph_table (shopgraph match (c is customers)-[is customer_orders]->(o is orders) columns (c.name, o.register)) order by name;
      82                 :           2 :     exec sql open graph_cursor;
      83         [ -  + ]:           2 :     exec sql whenever not found do break;
      84                 :             :     while (1) {
      85                 :           8 :         exec sql fetch graph_cursor into :cname, :reg;
      86   [ +  +  -  + ]:           8 :         printf("cursor result: %s, %d\n", cname, reg);
      87                 :             :     }
      88                 :             :     exec sql whenever not found continue;
      89                 :           2 :     exec sql close graph_cursor;
      90         [ -  + ]:           2 : 
      91                 :             :     /* label disjunction syntax test */
      92                 :           2 :     exec sql select * into :cname from graph_table (shopgraph match (c is customers | customers where c.address = 'US') columns (c.name));
      93         [ -  + ]:           2 :     printf("found %ld results (%s)\n", sqlca.sqlerrd[2], cname);
      94                 :             : 
      95                 :             :     /* Clean up */
      96                 :           2 :     exec sql drop property graph shopgraph;
      97         [ -  + ]:           2 :     exec sql drop table customer_orders;
      98         [ -  + ]:           2 :     exec sql drop table orders;
      99         [ -  + ]:           2 :     exec sql drop table customers;
     100         [ -  + ]:           2 :     exec sql drop schema graph_ecpg_tests;
     101         [ -  + ]:           2 :     exec sql commit;
     102         [ -  + ]:           2 :     exec sql disconnect;
     103         [ -  + ]:           2 : 
     104                 :           2 :     return 0;
     105                 :             : }
        

Generated by: LCOV version 2.0-1