Updated on 2024-05-07 GMT+08:00

Using Library Functions

  • ECPGdebug(int on, FILE *stream): If the first parameter of the function is not 0, the debug log function is enabled. The second parameter indicates the standard output stream of the log to be printed. Debug logs are executed on the standard output stream. The logs contain all input SQL statements and results from the GaussDB Kernel server.
    Example:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "sqlca.h"
    
    int main()
    {
        ECPGdebug(1, stderr);
        EXEC SQL CONNECT postgres;
        EXEC SQL SET AUTOCOMMIT TO ON;
        EXEC SQL CREATE TABLE T1(a int);
        return (0);
    }
  • ECPGget_PGconn(const char *connection_name): returns the database connection handle identified by the given name. If connection_name is set to NULL, the current connection handle is returned. If no connection handle can be identified, the function returns NULL.
    Example:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "sqlca.h"
    
    int main()
    {
        ECPGdebug(1, stderr);
        EXEC SQL CONNECT TO postgres as con1;
        EXEC SQL SET AUTOCOMMIT TO ON;
        EXEC SQL DROP TABLE IF EXISTS T1;
        PGconn     *conn;
        conn = ECPGget_PGconn("con1");
        printf("conn = %p\n", conn);
        conn = ECPGget_PGconn(NULL);
        printf("conn = %p\n", conn);
        EXEC SQL CREATE TABLE T1(a int);
        return (0);
    }
  • ECPGtransactionStatus(const char *connection_name): returns the current transaction status of the connection_name connection. The possible return values are as follows:
        PQTRANS_IDLE,    /* connection idle */
        PQTRANS_ACTIVE,  /* command in progress */
        PQTRANS_INTRANS, /* idle, within transaction block */
        PQTRANS_INERROR, /* idle, within failed transaction */
        PQTRANS_UNKNOWN  /* cannot determine status */
    Example:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "sqlca.h"
    
    int main()
    {
        ECPGdebug(1, stderr);
        EXEC SQL CONNECT TO postgres as con1;
        EXEC SQL DROP TABLE IF EXISTS T1;
        int a = ECPGtransactionStatus("con1");
        printf("%d\n", a);
        EXEC SQL CREATE TABLE T1(a int);
        EXEC SQL COMMIT;
        return (0);
    }
  • ECPGfree_auto_mem(): releases all memory allocated for output host variables. This function is called (return\exit) when the program ends.
    Example:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "sqlca.h"
    
    int main()
    {
       EXEC SQL BEGIN DECLARE SECTION;
       int *ip1=0;
       char **cp2=0;
       int *ipointer1=0;
       int *ipointer2=0;
       int colnum;
       EXEC SQL END DECLARE SECTION;
       int i;
    
       ECPGdebug(1, stderr);
    
       EXEC SQL WHENEVER SQLERROR DO sqlprint();
       EXEC SQL CONNECT TO REGRESSDB1;
    
       EXEC SQL SET DATESTYLE TO postgres;
    
       EXEC SQL CREATE TABLE test (a int, b text);
       EXEC SQL INSERT INTO test VALUES (1, 'one');
       EXEC SQL INSERT INTO test VALUES (2, 'two');
       EXEC SQL INSERT INTO test VALUES (NULL, 'three');
       EXEC SQL INSERT INTO test VALUES (NULL, NULL);
    
       EXEC SQL ALLOCATE DESCRIPTOR mydesc;
       EXEC SQL SELECT * INTO SQL DESCRIPTOR mydesc FROM test;
       EXEC SQL GET DESCRIPTOR mydesc :colnum=COUNT;
       EXEC SQL GET DESCRIPPTOR mydesc VALUE 1 :ip1=DATA, :ipointer1=INDICATOR;
       EXEC SQL GET DESCRIPTOR mydesc VALUE 2 :cp2=DATA, :ipointer2=INDICATOR;
    
       printf("Result (%d columns):\n", colnum);
       for (i=0;i < sqlca.sqlerrd[2];++i)
       {
          if (ipointer1[i]) printf("NULL, ");
          else printf("%d, ",ip1[i]);
    
          if (ipointer2[i]) printf("NULL, ");
          else printf("'%s', ",cp2[i]);
          printf("\n");
       }
       ECPGfree_auto_mem();
       printf("\n");
    
       EXEC SQL DEALLOCATE DESCRIPTOR mydesc;
       EXEC SQL ROLLBACK;
       EXEC SQL DISCONNECT;
       return 0;
    }