00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifdef WIN32
00030 #include <windows.h>
00031 #endif
00032
00033 #include <stdio.h>
00034 #include <stdlib.h>
00035 #include <stdint.h>
00036 #include <string.h>
00037 #include <sys/types.h>
00038 #include "libpq-fe.h"
00039
00040
00041 #include <netinet/in.h>
00042 #include <arpa/inet.h>
00043
00044
00045 static void
00046 exit_nicely(PGconn *conn)
00047 {
00048 PQfinish(conn);
00049 exit(1);
00050 }
00051
00052
00053
00054
00055
00056
00057 static void
00058 show_binary_results(PGresult *res)
00059 {
00060 int i,
00061 j;
00062 int i_fnum,
00063 t_fnum,
00064 b_fnum;
00065
00066
00067 i_fnum = PQfnumber(res, "i");
00068 t_fnum = PQfnumber(res, "t");
00069 b_fnum = PQfnumber(res, "b");
00070
00071 for (i = 0; i < PQntuples(res); i++)
00072 {
00073 char *iptr;
00074 char *tptr;
00075 char *bptr;
00076 int blen;
00077 int ival;
00078
00079
00080 iptr = PQgetvalue(res, i, i_fnum);
00081 tptr = PQgetvalue(res, i, t_fnum);
00082 bptr = PQgetvalue(res, i, b_fnum);
00083
00084
00085
00086
00087
00088 ival = ntohl(*((uint32_t *) iptr));
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098 blen = PQgetlength(res, i, b_fnum);
00099
00100 printf("tuple %d: got\n", i);
00101 printf(" i = (%d bytes) %d\n",
00102 PQgetlength(res, i, i_fnum), ival);
00103 printf(" t = (%d bytes) '%s'\n",
00104 PQgetlength(res, i, t_fnum), tptr);
00105 printf(" b = (%d bytes) ", blen);
00106 for (j = 0; j < blen; j++)
00107 printf("\\%03o", bptr[j]);
00108 printf("\n\n");
00109 }
00110 }
00111
00112 int
00113 main(int argc, char **argv)
00114 {
00115 const char *conninfo;
00116 PGconn *conn;
00117 PGresult *res;
00118 const char *paramValues[1];
00119 int paramLengths[1];
00120 int paramFormats[1];
00121 uint32_t binaryIntVal;
00122
00123
00124
00125
00126
00127
00128 if (argc > 1)
00129 conninfo = argv[1];
00130 else
00131 conninfo = "dbname = postgres";
00132
00133
00134 conn = PQconnectdb(conninfo);
00135
00136
00137 if (PQstatus(conn) != CONNECTION_OK)
00138 {
00139 fprintf(stderr, "Connection to database failed: %s",
00140 PQerrorMessage(conn));
00141 exit_nicely(conn);
00142 }
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156 paramValues[0] = "joe's place";
00157
00158 res = PQexecParams(conn,
00159 "SELECT * FROM test1 WHERE t = $1",
00160 1,
00161 NULL,
00162 paramValues,
00163 NULL,
00164 NULL,
00165 1);
00166
00167 if (PQresultStatus(res) != PGRES_TUPLES_OK)
00168 {
00169 fprintf(stderr, "SELECT failed: %s", PQerrorMessage(conn));
00170 PQclear(res);
00171 exit_nicely(conn);
00172 }
00173
00174 show_binary_results(res);
00175
00176 PQclear(res);
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189 binaryIntVal = htonl((uint32_t) 2);
00190
00191
00192 paramValues[0] = (char *) &binaryIntVal;
00193 paramLengths[0] = sizeof(binaryIntVal);
00194 paramFormats[0] = 1;
00195
00196 res = PQexecParams(conn,
00197 "SELECT * FROM test1 WHERE i = $1::int4",
00198 1,
00199 NULL,
00200 paramValues,
00201 paramLengths,
00202 paramFormats,
00203 1);
00204
00205 if (PQresultStatus(res) != PGRES_TUPLES_OK)
00206 {
00207 fprintf(stderr, "SELECT failed: %s", PQerrorMessage(conn));
00208 PQclear(res);
00209 exit_nicely(conn);
00210 }
00211
00212 show_binary_results(res);
00213
00214 PQclear(res);
00215
00216
00217 PQfinish(conn);
00218
00219 return 0;
00220 }