LCOV - code coverage report
Current view: top level - src/interfaces/ecpg/test/sql - sqljson.pgc (source / functions) Coverage Total Hit
Test: PostgreSQL 19devel Lines: 100.0 % 65 65
Test Date: 2026-03-11 10:16:42 Functions: 100.0 % 1 1
Legend: Lines:     hit not hit

            Line data    Source code
       1              : #include <stdio.h>
       2              : 
       3              : EXEC SQL INCLUDE sqlca;
       4              : exec sql include ../regression;
       5              : 
       6              : EXEC SQL WHENEVER SQLERROR sqlprint;
       7              : 
       8              : int
       9            2 : main ()
      10              : {
      11              : EXEC SQL BEGIN DECLARE SECTION;
      12              :   char json[1024];
      13              :   bool is_json[8];
      14              : EXEC SQL END DECLARE SECTION;
      15              : 
      16            2 :   ECPGdebug (1, stderr);
      17              : 
      18            2 :   EXEC SQL CONNECT TO REGRESSDB1;
      19            2 :   EXEC SQL SET AUTOCOMMIT = ON;
      20            2 : 
      21            2 :   EXEC SQL SELECT JSON_OBJECT(RETURNING text) INTO :json;
      22            2 :   printf("Found json=%s\n", json);
      23              : 
      24            2 :   EXEC SQL SELECT JSON_OBJECT(RETURNING text FORMAT JSON) INTO :json;
      25            2 :   printf("Found json=%s\n", json);
      26              : 
      27            2 :   EXEC SQL SELECT JSON_ARRAY(RETURNING jsonb) INTO :json;
      28            2 :   printf("Found json=%s\n", json);
      29              : 
      30            2 :   EXEC SQL SELECT JSON_ARRAY(RETURNING jsonb FORMAT JSON) INTO :json;
      31            2 :   printf("Found json=%s\n", json);
      32              : 
      33            2 :   EXEC SQL SELECT JSON_OBJECT(1: 1, '1': NULL WITH UNIQUE) INTO :json;
      34            2 :   // error
      35              : 
      36            2 :   EXEC SQL SELECT JSON_OBJECT(1: 1, '2': NULL, 1: '2' ABSENT ON NULL WITHOUT UNIQUE KEYS) INTO :json;
      37            2 :   printf("Found json=%s\n", json);
      38              : 
      39            2 :   EXEC SQL SELECT JSON_OBJECT(1: 1, '2': NULL ABSENT ON NULL WITHOUT UNIQUE RETURNING jsonb) INTO :json;
      40            2 :   printf("Found json=%s\n", json);
      41              : 
      42            2 :   EXEC SQL SELECT JSON(NULL) INTO :json;
      43            2 :   printf("Found json=%s\n", json);
      44              : 
      45            2 :   EXEC SQL SELECT JSON('{ "a" : 1 } ' FORMAT JSON) INTO :json;
      46            2 :   printf("Found json=%s\n", json);
      47              : 
      48            2 :   EXEC SQL SELECT JSON('{ "a" : 1 } ' FORMAT JSON ENCODING UTF8) INTO :json;
      49            2 :   // error
      50              : 
      51            2 :   EXEC SQL SELECT JSON('   1   '::jsonb) INTO :json;
      52            2 :   printf("Found json=%s\n", json);
      53              : 
      54            2 :   EXEC SQL SELECT JSON('   1   '::json WITH UNIQUE KEYS) INTO json;
      55            2 :   // error
      56              : 
      57            2 :   EXEC SQL SELECT JSON('{"a": 1, "a": 2}') INTO :json;
      58            2 :   printf("Found json=%s\n", json);
      59              : 
      60            2 :   EXEC SQL SELECT JSON('{"a": 1, "a": 2}' WITH UNIQUE KEYS) INTO :json;
      61            2 :   // error
      62              : 
      63            2 :   EXEC SQL SELECT JSON_SCALAR(NULL) INTO :json;
      64            2 :   printf("Found json=%s\n", json);
      65              : 
      66            2 :   EXEC SQL SELECT JSON_SCALAR(NULL::int) INTO :json;
      67            2 :   printf("Found json=%s\n", json);
      68              : 
      69            2 :   EXEC SQL SELECT JSON_SCALAR(123.45) INTO :json;
      70            2 :   printf("Found json=%s\n", json);
      71              : 
      72            2 :   EXEC SQL SELECT JSON_SCALAR(true) INTO :json;
      73            2 :   printf("Found json=%s\n", json);
      74              : 
      75            2 :   EXEC SQL SELECT JSON_SCALAR(' 123.45') INTO :json;
      76            2 :   printf("Found json=%s\n", json);
      77              : 
      78            2 :   EXEC SQL SELECT JSON_SCALAR('2020-06-07 01:02:03'::timestamp) INTO :json;
      79            2 :   printf("Found json=%s\n", json);
      80              : 
      81            2 :   EXEC SQL SELECT JSON_SCALAR('{}'::jsonb) INTO :json;
      82            2 :   printf("Found json=%s\n", json);
      83              : 
      84            2 :   EXEC SQL SELECT JSON_SERIALIZE(NULL) INTO :json;
      85            2 :   printf("Found json=%s\n", json);
      86              : 
      87            2 :   EXEC SQL SELECT JSON_SERIALIZE(JSON('{ "a" : 1 } ')) INTO :json;
      88            2 :   printf("Found json=%s\n", json);
      89              : 
      90            2 :   EXEC SQL SELECT JSON_SERIALIZE('{ "a" : 1 } ') INTO :json;
      91            2 :   printf("Found json=%s\n", json);
      92              : 
      93            2 :   EXEC SQL SELECT JSON_SERIALIZE('1' FORMAT JSON) INTO :json;
      94            2 :   printf("Found json=%s\n", json);
      95              : 
      96            2 :   EXEC SQL SELECT JSON_SERIALIZE('{ "a" : 1 } ' RETURNING varchar) INTO :json;
      97            2 :   printf("Found json=%s\n", json);
      98              : 
      99            2 :   EXEC SQL SELECT JSON_SERIALIZE('{ "a" : 1 } ' RETURNING jsonb);
     100            2 :   // error
     101              : 
     102            2 :   EXEC SQL WITH val (js) AS (VALUES ('{ "a": 1, "b": [{ "a": 1, "b": 0, "a": 2 }] }'))
     103              :       SELECT
     104              :       js IS JSON "IS JSON",
     105              :       js IS NOT JSON "IS NOT JSON",
     106              :       js IS JSON VALUE "IS VALUE",
     107              :       js IS JSON OBJECT "IS OBJECT",
     108              :       js IS JSON ARRAY "IS ARRAY",
     109              :       js IS JSON SCALAR "IS SCALAR",
     110              :       js IS JSON WITHOUT UNIQUE KEYS "WITHOUT UNIQUE",
     111              :       js IS JSON WITH UNIQUE KEYS "WITH UNIQUE"
     112              :           INTO :is_json[0], :is_json[1], :is_json[2], :is_json[3], :is_json[4],
     113              :           :is_json[5], :is_json[6], :is_json[7]
     114              :           FROM val;
     115           18 :       for (int i = 0; i < sizeof(is_json); i++)
     116           16 :           printf("Found is_json[%d]: %s\n", i, is_json[i] ? "true" : "false");
     117              : 
     118            2 :   EXEC SQL DISCONNECT;
     119            2 : 
     120            2 :   return 0;
     121              : }
        

Generated by: LCOV version 2.0-1