Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
40cad8b6
Commit
40cad8b6
authored
Apr 25, 1999
by
Tom Lane
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
My first cut at libpq revision didn't handle MULTIBYTE correctly,
but I think it's OK now...
parent
fad6f292
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
53 additions
and
78 deletions
+53
-78
src/backend/access/common/printtup.c
src/backend/access/common/printtup.c
+4
-23
src/backend/commands/async.c
src/backend/commands/async.c
+2
-2
src/backend/libpq/pqformat.c
src/backend/libpq/pqformat.c
+42
-46
src/backend/tcop/dest.c
src/backend/tcop/dest.c
+2
-3
src/include/libpq/pqformat.h
src/include/libpq/pqformat.h
+3
-4
No files found.
src/backend/access/common/printtup.c
View file @
40cad8b6
...
...
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/common/printtup.c,v 1.4
3 1999/04/25 03:19:2
3 tgl Exp $
* $Header: /cvsroot/pgsql/src/backend/access/common/printtup.c,v 1.4
4 1999/04/25 19:27:4
3 tgl Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -25,10 +25,6 @@
#include "libpq/pqformat.h"
#include "utils/syscache.h"
#ifdef MULTIBYTE
#include "mb/pg_wchar.h"
#endif
static
void
printtup_setup
(
DestReceiver
*
self
,
TupleDesc
typeinfo
);
static
void
printtup
(
HeapTuple
tuple
,
TupleDesc
typeinfo
,
DestReceiver
*
self
);
static
void
printtup_cleanup
(
DestReceiver
*
self
);
...
...
@@ -157,14 +153,10 @@ printtup(HeapTuple tuple, TupleDesc typeinfo, DestReceiver* self)
StringInfoData
buf
;
int
i
,
j
,
k
,
outputlen
;
k
;
char
*
outputstr
;
Datum
attr
;
bool
isnull
;
#ifdef MULTIBYTE
unsigned
char
*
p
;
#endif
/* Set or update my derived attribute info, if needed */
if
(
myState
->
attrinfo
!=
typeinfo
||
...
...
@@ -213,24 +205,13 @@ printtup(HeapTuple tuple, TupleDesc typeinfo, DestReceiver* self)
{
outputstr
=
(
char
*
)
(
*
fmgr_faddr
(
&
thisState
->
finfo
))
(
attr
,
thisState
->
typelem
,
typeinfo
->
attrs
[
i
]
->
atttypmod
);
#ifdef MULTIBYTE
p
=
pg_server_to_client
(
outputstr
,
strlen
(
outputstr
));
outputlen
=
strlen
(
p
);
pq_sendint
(
&
buf
,
outputlen
+
VARHDRSZ
,
VARHDRSZ
);
pq_sendbytes
(
&
buf
,
p
,
outputlen
);
#else
outputlen
=
strlen
(
outputstr
);
pq_sendint
(
&
buf
,
outputlen
+
VARHDRSZ
,
VARHDRSZ
);
pq_sendbytes
(
&
buf
,
outputstr
,
outputlen
);
#endif
pq_sendcountedtext
(
&
buf
,
outputstr
,
strlen
(
outputstr
));
pfree
(
outputstr
);
}
else
{
outputstr
=
"<unprintable>"
;
outputlen
=
strlen
(
outputstr
);
pq_sendint
(
&
buf
,
outputlen
+
VARHDRSZ
,
VARHDRSZ
);
pq_sendbytes
(
&
buf
,
outputstr
,
outputlen
);
pq_sendcountedtext
(
&
buf
,
outputstr
,
strlen
(
outputstr
));
}
}
...
...
src/backend/commands/async.c
View file @
40cad8b6
...
...
@@ -6,7 +6,7 @@
* Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.4
5 1999/04/25 03:19:08
tgl Exp $
* $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.4
6 1999/04/25 19:27:43
tgl Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -803,7 +803,7 @@ NotifyMyFrontEnd(char *relname, int32 listenerPID)
pq_beginmessage
(
&
buf
);
pq_sendbyte
(
&
buf
,
'A'
);
pq_sendint
(
&
buf
,
listenerPID
,
sizeof
(
int32
));
pq_sendstring
(
&
buf
,
relname
,
strlen
(
relname
)
);
pq_sendstring
(
&
buf
,
relname
);
pq_endmessage
(
&
buf
);
/* NOTE: we do not do pq_flush() here. For a self-notify, it will
* happen at the end of the transaction, and for incoming notifies
...
...
src/backend/libpq/pqformat.c
View file @
40cad8b6
...
...
@@ -15,7 +15,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: pqformat.c,v 1.
1 1999/04/25 03:19:22
tgl Exp $
* $Id: pqformat.c,v 1.
2 1999/04/25 19:27:44
tgl Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -26,7 +26,7 @@
* pq_sendbyte - append a raw byte to a StringInfo buffer
* pq_sendint - append a binary integer to a StringInfo buffer
* pq_sendbytes - append raw data to a StringInfo buffer
* pq_send
text
- append a text string (with MULTIBYTE conversion)
* pq_send
countedtext
- append a text string (with MULTIBYTE conversion)
* pq_sendstring - append a null-terminated text string (with MULTIBYTE)
* pq_endmessage - send the completed message to the frontend
* Note: it is also possible to append data to the StringInfo buffer using
...
...
@@ -36,9 +36,8 @@
* Message input:
* pq_getint - get an integer from connection
* pq_getstr - get a null terminated string from connection
* pq_getnchar - get n characters from connection, and null-terminate
* pq_getstr and pq_getnchar perform MULTIBYTE conversion on the collected
* string. Use the raw pqcomm.c routines pq_getstring and pq_getbytes
* pq_getstr performs MULTIBYTE conversion on the collected string.
* Use the raw pqcomm.c routines pq_getstring or pq_getbytes
* to fetch data without conversion.
*/
#include "postgres.h"
...
...
@@ -48,6 +47,7 @@
#ifdef MULTIBYTE
#include "mb/pg_wchar.h"
#endif
#include <string.h>
#ifdef HAVE_ENDIAN_H
#include <endian.h>
#endif
...
...
@@ -110,36 +110,49 @@ pq_sendbytes(StringInfo buf, const char *data, int datalen)
}
/* --------------------------------
* pq_send
text
- append a text string (with MULTIBYTE conversion)
* pq_send
countedtext
- append a text string (with MULTIBYTE conversion)
*
*
NB: passed text string must be null-terminated, even though we expect
*
the caller to hand us the length (this is just because the caller
*
usually knows the length anyway). In this routine, the data sent to
* t
he frontend is NOT null-terminated
.
*
The data sent to the frontend by this routine is a 4-byte count field
*
(the count includes itself, by convention) followed by the string.
*
The passed text string need not be null-terminated, and the data sent
* t
o the frontend isn't either
.
* --------------------------------
*/
void
pq_sendtext
(
StringInfo
buf
,
const
char
*
str
,
int
slen
)
pq_send
counted
text
(
StringInfo
buf
,
const
char
*
str
,
int
slen
)
{
#ifdef MULTIBYTE
str
=
(
const
char
*
)
pg_server_to_client
(
str
,
slen
);
const
char
*
p
;
p
=
(
const
char
*
)
pg_server_to_client
((
unsigned
char
*
)
str
,
slen
);
if
(
p
!=
str
)
/* actual conversion has been done? */
{
str
=
p
;
slen
=
strlen
(
str
);
}
#endif
pq_sendint
(
buf
,
slen
+
4
,
4
);
appendBinaryStringInfo
(
buf
,
str
,
slen
);
}
/* --------------------------------
* pq_sendstring - append a null-terminated text string (with MULTIBYTE)
*
* NB: passed text string must be null-terminated, even though we expect
* the caller to hand us the length (this is just because the caller
* usually knows the length anyway).
* NB: passed text string must be null-terminated, and so is the data
* sent to the frontend.
* --------------------------------
*/
void
pq_sendstring
(
StringInfo
buf
,
const
char
*
str
,
int
slen
)
pq_sendstring
(
StringInfo
buf
,
const
char
*
str
)
{
int
slen
=
strlen
(
str
);
#ifdef MULTIBYTE
str
=
(
const
char
*
)
pg_server_to_client
(
str
,
slen
);
const
char
*
p
;
p
=
(
const
char
*
)
pg_server_to_client
((
unsigned
char
*
)
str
,
slen
);
if
(
p
!=
str
)
/* actual conversion has been done? */
{
str
=
p
;
slen
=
strlen
(
str
);
}
#endif
appendBinaryStringInfo
(
buf
,
str
,
slen
+
1
);
}
...
...
@@ -258,35 +271,18 @@ pq_getstr(char *s, int maxlen)
c
=
pq_getstring
(
s
,
maxlen
);
#ifdef MULTIBYTE
p
=
(
char
*
)
pg_client_to_server
((
unsigned
char
*
)
s
,
maxlen
);
if
(
s
!=
p
)
/* actual conversion has been done? */
strcpy
(
s
,
p
);
#endif
return
c
;
}
/* --------------------------------
* pq_getnchar - get n characters from connection, and null-terminate
*
* returns 0 if OK, EOF if trouble
* --------------------------------
*/
int
pq_getnchar
(
char
*
s
,
int
len
)
{
int
c
;
#ifdef MULTIBYTE
char
*
p
;
#endif
c
=
pq_getbytes
(
s
,
len
);
s
[
len
]
=
'\0'
;
#ifdef MULTIBYTE
p
=
(
char
*
)
pg_client_to_server
((
unsigned
char
*
)
s
,
len
+
1
);
if
(
s
!=
p
)
/* actual conversion has been done? */
p
=
(
char
*
)
pg_client_to_server
((
unsigned
char
*
)
s
,
strlen
(
s
));
if
(
p
!=
s
)
/* actual conversion has been done? */
{
int
newlen
=
strlen
(
p
);
if
(
newlen
<
maxlen
)
strcpy
(
s
,
p
);
else
{
strncpy
(
s
,
p
,
maxlen
);
s
[
maxlen
-
1
]
=
'\0'
;
}
}
#endif
return
c
;
...
...
src/backend/tcop/dest.c
View file @
40cad8b6
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/tcop/dest.c,v 1.2
6 1999/04/25 03:19:09
tgl Exp $
* $Header: /cvsroot/pgsql/src/backend/tcop/dest.c,v 1.2
7 1999/04/25 19:27:45
tgl Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -155,8 +155,7 @@ BeginCommand(char *pname,
for
(
i
=
0
;
i
<
natts
;
++
i
)
{
pq_sendstring
(
&
buf
,
attrs
[
i
]
->
attname
.
data
,
strlen
(
attrs
[
i
]
->
attname
.
data
));
pq_sendstring
(
&
buf
,
attrs
[
i
]
->
attname
.
data
);
pq_sendint
(
&
buf
,
(
int
)
attrs
[
i
]
->
atttypid
,
sizeof
(
attrs
[
i
]
->
atttypid
));
pq_sendint
(
&
buf
,
attrs
[
i
]
->
attlen
,
...
...
src/include/libpq/pqformat.h
View file @
40cad8b6
...
...
@@ -5,7 +5,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: pqformat.h,v 1.
1 1999/04/25 03:19:14
tgl Exp $
* $Id: pqformat.h,v 1.
2 1999/04/25 19:27:47
tgl Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -19,13 +19,12 @@
extern
void
pq_sendbyte
(
StringInfo
buf
,
int
byt
);
extern
void
pq_sendbytes
(
StringInfo
buf
,
const
char
*
data
,
int
datalen
);
extern
void
pq_sendtext
(
StringInfo
buf
,
const
char
*
str
,
int
slen
);
extern
void
pq_sendstring
(
StringInfo
buf
,
const
char
*
str
,
int
slen
);
extern
void
pq_send
counted
text
(
StringInfo
buf
,
const
char
*
str
,
int
slen
);
extern
void
pq_sendstring
(
StringInfo
buf
,
const
char
*
str
);
extern
void
pq_sendint
(
StringInfo
buf
,
int
i
,
int
b
);
extern
void
pq_endmessage
(
StringInfo
buf
);
extern
int
pq_getint
(
int
*
result
,
int
b
);
extern
int
pq_getstr
(
char
*
s
,
int
maxlen
);
extern
int
pq_getnchar
(
char
*
s
,
int
len
);
#endif
/* PQFORMAT_H */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment