Committed by =?UTF-8?q?Dagfinn=20Ilmari=20Manns=C3=A5ker?= <[email protected]>
Subject: [DBD::Pg 3/8] Fix quoting of UTF-8 values
---
Pg.xs | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/Pg.xs b/Pg.xs
index 60f843b..2616552 100644
--- a/Pg.xs
+++ b/Pg.xs
@@ -9,6 +9,7 @@
*/
+#define NEED_newSVpvn_flags
#include "Pg.h"
@@ -215,6 +216,7 @@ quote(dbh, to_quote_sv, type_sv=Nullsv)
CODE:
{
+ bool utf8;
D_imp_dbh(dbh);
SvGETMAGIC(to_quote_sv);
@@ -267,16 +269,18 @@ quote(dbh, to_quote_sv, type_sv=Nullsv)
}
/* At this point, type_info points to a valid struct,
one way or another */
+ utf8 = imp_dbh->client_encoding_utf8 && PG_BYTEA !=
type_info->type_id;
if (SvMAGICAL(to_quote_sv))
(void)mg_get(to_quote_sv);
+
+ /* avoid up- or down-grading the argument */
+ to_quote_sv = pg_rightgraded_sv(aTHX_ to_quote_sv,
utf8);
to_quote = SvPV(to_quote_sv, len);
/* Need good debugging here */
quoted = type_info->quote(to_quote, len, &retlen,
imp_dbh->pg_server_version >= 80100 ? 1 : 0);
- RETVAL = newSVpvn(quoted, retlen);
- if (SvUTF8(to_quote_sv)) /* What about overloaded
objects? */
- SvUTF8_on(RETVAL);
+ RETVAL = newSVpvn_utf8(quoted, retlen, utf8);
Safefree (quoted);
}
}
--
1.8.4