Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit9abd055

Browse files
author
Hiroshi Inoue
committed
1) Fix SQLForeignKeys() in multibyte mode.
2) Fix a bug with NUMERIC scale in case of Parse statement option.3) Remove a no longer needed loop in CC_send_query().Hiroshi Inoue
1 parent531126c commit9abd055

File tree

6 files changed

+315
-91
lines changed

6 files changed

+315
-91
lines changed

‎src/interfaces/odbc/connection.c

Lines changed: 22 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@
1414
*/
1515
/* Multibyte supportEiji Tokuya 2001-03-15 */
1616

17+
#include<stdio.h>
18+
#include<string.h>
19+
#include<ctype.h>
20+
1721
#include"connection.h"
1822

1923
#include"environ.h"
@@ -27,9 +31,6 @@
2731
#include"multibyte.h"
2832
#endif
2933

30-
#include<stdio.h>
31-
#include<string.h>
32-
3334
#ifdefWIN32
3435
#include<odbcinst.h>
3536
#endif
@@ -277,6 +278,10 @@ memcpy(&(rv->connInfo.drivers), &globals, sizeof(globals));
277278
rv->pg_version_number=.0;
278279
rv->pg_version_major=0;
279280
rv->pg_version_minor=0;
281+
#ifdefMULTIBYTE
282+
rv->client_encoding=NULL;
283+
rv->server_encoding=NULL;
284+
#endif/* MULTIBYTE */
280285

281286

282287
/* Initialize statement options to defaults */
@@ -302,6 +307,12 @@ CC_Destructor(ConnectionClass *self)
302307

303308
mylog("after CC_Cleanup\n");
304309

310+
#ifdefMULTIBYTE
311+
if (self->client_encoding)
312+
free(self->client_encoding);
313+
if (self->server_encoding)
314+
free(self->server_encoding);
315+
#endif/* MULTIBYTE */
305316
/* Free up statement holders */
306317
if (self->stmts)
307318
{
@@ -510,6 +521,9 @@ CC_connect(ConnectionClass *self, char do_password)
510521
charmsgbuffer[ERROR_MSG_LENGTH];
511522
charsalt[5];
512523
staticchar*func="CC_connect";
524+
#ifdefMULTIBYTE
525+
char*encoding;
526+
#endif/* MULTIBYTE */
513527

514528
mylog("%s: entering...\n",func);
515529

@@ -537,7 +551,9 @@ CC_connect(ConnectionClass *self, char do_password)
537551
ci->drivers.bools_as_char);
538552

539553
#ifdefMULTIBYTE
540-
check_client_encoding(ci->drivers.conn_settings);
554+
encoding=check_client_encoding(ci->drivers.conn_settings);
555+
if (encoding&&strcmp(encoding,"OTHER"))
556+
self->client_encoding=strdup(encoding);
541557
qlog(" extra_systable_prefixes='%s', conn_settings='%s' conn_encoding='%s'\n",
542558
ci->drivers.extra_systable_prefixes,
543559
ci->drivers.conn_settings,
@@ -1041,7 +1057,6 @@ CC_send_query(ConnectionClass *self, char *query, QueryInfo *qi)
10411057
CC_set_no_trans(self);
10421058
ReadyToReturn= TRUE;
10431059
retres=NULL;
1044-
break;
10451060
}
10461061
else
10471062
{
@@ -1059,6 +1074,7 @@ CC_send_query(ConnectionClass *self, char *query, QueryInfo *qi)
10591074
QR_set_status(res,PGRES_COMMAND_OK);
10601075
QR_set_command(res,cmdbuffer);
10611076
query_completed= TRUE;
1077+
mylog("send_query: returning res = %u\n",res);
10621078
if (!before_64)
10631079
break;
10641080
/*
@@ -1069,71 +1085,14 @@ CC_send_query(ConnectionClass *self, char *query, QueryInfo *qi)
10691085
* an 'I' is received
10701086
*/
10711087

1072-
10731088
if (empty_reqs==0)
10741089
{
10751090
SOCK_put_string(sock,"Q ");
10761091
SOCK_flush_output(sock);
10771092
empty_reqs++;
10781093
}
1079-
break;
1080-
1081-
while (!clear)
1082-
{
1083-
id=SOCK_get_char(sock);
1084-
mylog("got clear id = '%c'\n",id);
1085-
switch (id)
1086-
{
1087-
case'I':
1088-
(void)SOCK_get_char(sock);
1089-
clear= TRUE;
1090-
break;
1091-
case'Z':
1092-
break;
1093-
case'C':
1094-
SOCK_get_string(sock,cmdbuffer,ERROR_MSG_LENGTH);
1095-
qlog("Command response: '%s'\n",cmdbuffer);
1096-
break;
1097-
case'N':
1098-
msg_truncated=SOCK_get_string(sock,cmdbuffer,ERROR_MSG_LENGTH);
1099-
if (QR_command_successful(res))
1100-
QR_set_status(res,PGRES_NONFATAL_ERROR);
1101-
QR_set_notice(res,cmdbuffer);/* will dup this string */
1102-
qlog("NOTICE from backend during clear: '%s'\n",cmdbuffer);
1103-
while (msg_truncated)
1104-
msg_truncated=SOCK_get_string(sock,cmdbuffer,ERROR_MSG_LENGTH);
1105-
break;
1106-
case'E':
1107-
msg_truncated=SOCK_get_string(sock,msgbuffer,ERROR_MSG_LENGTH);
1108-
mylog("ERROR from backend during clear: '%s'\n",msgbuffer);
1109-
qlog("ERROR from backend during clear: '%s'\n",msgbuffer);
1110-
1111-
/*
1112-
* We must report this type of error as
1113-
* well (practically for reference
1114-
* integrity violation error reporting,
1115-
* from PostgreSQL 7.0). (Zoltan Kovacs,
1116-
* 04/26/2000)
1117-
*/
1118-
self->errormsg=msgbuffer;
1119-
if (!strncmp(self->errormsg,"FATAL",5))
1120-
{
1121-
self->errornumber=CONNECTION_SERVER_REPORTED_ERROR;
1122-
CC_set_no_trans(self);
1123-
}
1124-
else
1125-
self->errornumber=CONNECTION_SERVER_REPORTED_WARNING;
1126-
QR_set_status(res,PGRES_FATAL_ERROR);
1127-
QR_set_aborted(res, TRUE);
1128-
while (msg_truncated)
1129-
msg_truncated=SOCK_get_string(sock,cmdbuffer,ERROR_MSG_LENGTH);
1130-
break;
1131-
}
1132-
}
1133-
1134-
mylog("send_query: returning res = %u\n",res);
1135-
break;
11361094
}
1095+
break;
11371096
case'Z':/* Backend is ready for new query (6.4) */
11381097
if (empty_reqs==0)
11391098
{

‎src/interfaces/odbc/connection.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,10 @@ struct ConnectionClass_
274274
floatpg_version_number;
275275
Int2pg_version_major;
276276
Int2pg_version_minor;
277+
#ifdefMULTIBYTE
278+
char*client_encoding;
279+
char*server_encoding;
280+
#endif/* MULTIBYTE */
277281
};
278282

279283

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp