Files
Viktor Szakats ff3a726edf 2021-03-31 21:26 UTC+0200 Aleksander Czajczynski (hb fki.pl)
* contrib/hbpgsql/hbpgsql.hbx
  * contrib/hbpgsql/postgres.c
  * contrib/hbpgsql/postgres.ch
    + add most new wrappers from this repository of Petr Chornyj:
      https://github.com/petr-ch/hbpgsql9
      Version guards have been added and "params" functions reworked
      to accept hashes instead of two arrays. Other minor corrections
      to fit into the contrib env.
    + add PQsslAttribute()
    * some existing functions were modified to make the parameter
      check (and fail if wrong) even if the underlying API is not
      available, instead of silently returning a default value.
    ; all of the above was build-tested only and some features
      require at least postgresql 8, 9 or 9.1

    + add PQlibVersion() -> <nVersion> (returns 0 for pre-9.1 postresql
versions)
      Ref: https://github.com/harbour/core/pull/127/ by @VerchenkoAG

    + PQEXECPARAMS(): add 4th parameter to set <resultFormat>
      Refs:
        https://www.postgresql.org/docs/9.1/static/libpq-exec.html
        https://groups.google.com/d/msg/harbour-users/hXhuVzU9pHA/RrDGLIiUAwAJ

    + add PQresStatus( <nNum> ) -> <cString>

    + added wrapper function
      PQresultErrorField( result, nFieldCode ) -> cString
      based on:
https://groups.google.com/d/msg/harbour-users/XSvRpbzfcHc/ztSL32fYpl4J
    + added PG_DIAG_* constants

    + added pg_encoding_to_char() wrapper to convert numeric
      encoding ID to string

    ! fixed to use hb_fopen() instead of fopen()

    + TPQserver():New(): all parameters are now optional
    ! TPQserver():New(): fixed to escape connect parameter values
    + TPQserver():New(): added 7th optional hash parameter to pass
custom
      connection parameters (e.g. SSL)
         https://www.postgresql.org/docs/devel/static/libpq-connect.html

  * contrib/hbpgsql/tests/test.prg
    + use pg_encoding_to_char(), plus some more feedback regarding
encodings

  * contrib/hbpgsql/tests/dbf2pg.prg
    + use VF IO
    + support more source field types

  ; synced with Viktor's 3.4 branch at https://github.com/vszakats/hb
    2017-02-15 15:14 UTC Viktor Szakats (vszakats users.noreply.github.com)
    2016-09-05 18:55 UTC+0200 Viktor Szakats (vszakats users.noreply.github.com)
    2016-09-05 10:43 UTC+0200 Viktor Szakats (vszakats users.noreply.github.com)
    2016-09-02 01:58 UTC+0200 Viktor Szakats (vszakats users.noreply.github.com)
    2016-06-20 22:50 UTC+0200 Viktor Szakats (vszakats users.noreply.github.com)
    2015-07-19 11:56 UTC+0200 Viktor Szakats (vszakats users.noreply.github.com)
    2015-04-06 18:39 UTC+0200 Viktor Szakats (vszakats users.noreply.github.com)
    2015-03-31 23:31 UTC+0200 Viktor Szakats (vszakats users.noreply.github.com)
    2014-11-29 02:47 UTC+0100 Viktor Szakats (vszakats users.noreply.github.com)
    2014-07-08 13:21 UTC+0200 Viktor Szakats (vszakats users.noreply.github.com)
    2014-02-11 18:18 UTC+0100 Viktor Szakats (vszakats users.noreply.github.com)
    ; tons of cleanups in this library, many thanks
2021-03-31 21:26:42 +02:00

76 lines
2.1 KiB
Plaintext

#require "hbpgsql"
PROCEDURE Main( cHost, cDatabase, cUser, cPass )
LOCAL nVersion
CLS
? "The function PQlibVersion() returns", nVersion := PQlibVersion()
?
IF nVersion < 90100
? "Function PQping() not supported."
QUIT
ENDIF
hb_default( @cHost, "localhost" )
hb_default( @cDatabase, "postgres" )
hb_default( @cUser, hb_UserName() )
hb_default( @cPass, "" )
/* PQping() reports the status of the server.
It accepts connection parameters identical to those of PQconnectdb().
It is not, however, necessary to supply correct user name, password,
or database name values to obtain the server status. */
HB_SYMBOL_UNUSED( cDatabase )
HB_SYMBOL_UNUSED( cUser )
HB_SYMBOL_UNUSED( cPass )
/* the ConnInfo string can be empty to use ALL default parameters */
PingTest( "" )
/* 'database' is not allowed parameter key, you can find the currently
recognized parameter key words on
https://www.postgresql.org/docs/9.1/static/libpq-connect.html */
PingTest( ;
"host = localhost" + " " + ;
"database = test" )
/* the default port for Postgres is 5432, but we can try connect to an
alternate port and see what happens. */
PingTest( ;
"host = " + cHost + " " + ;
"port = " + "3333" )
/* next attempt */
PingTest( ;
"host = " + cHost + " " + ;
"hostaddr = " + "127.0.0.1" + " " + ;
"port = " + "5432" + " " + ;
"connect_timeout = " + "10" )
RETURN
STATIC PROCEDURE PingTest( cConnInfo )
? "cConnInfo is", '"' + cConnInfo + '"'
? "PQPing( cConnInfo ) returns:", GetPingResult( PQPing( cConnInfo ) )
?
RETURN
STATIC FUNCTION GetPingResult( n )
LOCAL aMsg := { ;
{ "PQPING_OK" , "Server is accepting connections" }, ;
{ "PQPING_REJECT" , "Server is alive but rejecting connections" }, ;
{ "PQPING_NO_RESPONSE", "Could not establish connection" }, ;
{ "PQPING_NO_ATTEMPT" , "Connection not attempted (bad params)" } }
IF n >= 0 .AND. n < Len( aMsg )
RETURN aMsg[ n + 1 ][ 1 ] + " " + aMsg[ n + 1 ][ 2 ]
ENDIF
RETURN ""