LCOV - code coverage report
Current view: top level - src/interfaces/ecpg/test/sql - sqlpgq.pgc (source / functions) Coverage Total Hit
Test: PostgreSQL 19devel Lines: 100.0 % 50 50
Test Date: 2026-03-20 21:16:03 Functions: 100.0 % 1 1
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              : 
       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