From: Joe Conway Date: Tue, 24 Feb 2004 05:26:27 +0000 (+0000) Subject: pply quote_literal to the start_with argument of connectby. Fixes problem X-Git-Tag: REL7_3_6~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7ce7e3f03699e87517826275a4ed2c2f2c5a177a;p=thirdparty%2Fpostgresql.git pply quote_literal to the start_with argument of connectby. Fixes problem reported by David Garamond when working with bytea parent and child keys. --- diff --git a/contrib/tablefunc/tablefunc.c b/contrib/tablefunc/tablefunc.c index 4fd3846820b..cc8fd613a47 100644 --- a/contrib/tablefunc/tablefunc.c +++ b/contrib/tablefunc/tablefunc.c @@ -66,6 +66,7 @@ static Tuplestorestate *build_tuplestore_recursively(char *key_fld, MemoryContext per_query_ctx, AttInMetadata *attinmeta, Tuplestorestate *tupstore); +static char *quote_literal_cstr(char *rawstr); typedef struct { @@ -779,12 +780,12 @@ build_tuplestore_recursively(char *key_fld, return tupstore; /* Build initial sql statement */ - appendStringInfo(sql, "SELECT %s, %s FROM %s WHERE %s = '%s' AND %s IS NOT NULL", + appendStringInfo(sql, "SELECT %s, %s FROM %s WHERE %s = %s AND %s IS NOT NULL", key_fld, parent_key_fld, relname, parent_key_fld, - start_with, + quote_literal_cstr(start_with), key_fld); /* Retrieve the desired rows */ @@ -1087,3 +1088,21 @@ make_crosstab_tupledesc(TupleDesc spi_tupdesc, int num_catagories) return tupdesc; } + +/* + * Return a properly quoted literal value. + * Uses quote_literal in quote.c + */ +static char * +quote_literal_cstr(char *rawstr) +{ + text *rawstr_text; + text *result_text; + char *result; + + rawstr_text = DatumGetTextP(DirectFunctionCall1(textin, CStringGetDatum(rawstr))); + result_text = DatumGetTextP(DirectFunctionCall1(quote_literal, PointerGetDatum(rawstr_text))); + result = DatumGetCString(DirectFunctionCall1(textout, PointerGetDatum(result_text))); + + return result; +}