Thread: Request for builtin function: Double_quote
Folks, Given the amount of qoute nesting we do in Postgres, I thought that we need a function that handles automatic doubling of quotes within strings. I've written one in PL/pgSQL (below). I'd really love to see this turned into a builtin C function. -Josh CREATE FUNCTION double_quote(text) returns text as ' DECLARE bad_string ALIAS for $1; good_string text; current_pos INT; old_pos INT; BEGIN IF bad_string IS NULL or bad_string = '''' THEN RETURN bad_string; END IF; good_string:= bad_string; current_pos := STRPOS(good_string, chr(39)); WHILE current_pos > 0 LOOP old_pos := current_pos; good_string := SUBSTR(good_string, 1, (current_pos - 1)) || repeat(chr(39), 2) || SUBSTR(good_string, (current_pos + 1)); current_pos := STRPOS(SUBSTR(good_string, (old_pos + 2)), chr(39)); IF current_pos > 0 THEN current_pos := current_pos + old_pos + 1; END IF; END LOOP; RETURN good_string; END;' LANGUAGE 'plpgsql' WITH (ISCACHABLE, ISSTRICT);
Josh, I'm not sure what you mean by 'builtin C function'. There is one already size_t PQescapeString (char *to, const char *from, size_t length); Or do you mean a String Function like substring(string [from integer] [for integer]) I would rather call it 'builtin sql function'. Regards, Christoph > > Folks, > > Given the amount of qoute nesting we do in Postgres, I thought that we need a > function that handles automatic doubling of quotes within strings. I've > written one in PL/pgSQL (below). I'd really love to see this turned into a > builtin C function. > > -Josh >
Josh Berkus <josh@agliodbs.com> writes: > Given the amount of qoute nesting we do in Postgres, I thought that we need a > function that handles automatic doubling of quotes within strings. I've > written one in PL/pgSQL (below). I'd really love to see this turned into a > builtin C function. What does this do that isn't already done by quote_literal? regards, tom lane
Chris, Tom: Yes, thank you Chris, I meant a builtin SQL function. > > Given the amount of qoute nesting we do in Postgres, I thought that > we need a > > function that handles automatic doubling of quotes within strings. > I've > > written one in PL/pgSQL (below). I'd really love to see this > turned into a > > builtin C function. > > What does this do that isn't already done by quote_literal? Well, first off, quote_literal isn't in the documentation under "Functions and Operators". So this is the first I've heard about it -- or probably anyone else outside the core team. How long has it been around? Second, double_quote does not return the outside quotes, just the inside ones ... it's for passing string values to EXECUTE statements. However, now that I know that quote_literal exists,I can simplify the double_quote statement considerably. Therefore, I withdraw my initial request, and request instead that quote_literal be added to the function documentation in String Functions and Operators. I will event supply text for the functions table: function returns quote_literal(string text) text explain Returns the entire string passed to it, including quote marks. Useful for nesting quotes, such as in the EXECUTEing dynamic queries. example result quote_literal('O''Reilly') 'O''Reilly' -Josh Berkus -Josh Berkus
"Josh Berkus" <josh@agliodbs.com> writes: > Well, first off, quote_literal isn't in the documentation under > "Functions and Operators". So this is the first I've heard about it > -- or probably anyone else outside the core team. How long has it > been around? Awhile; however, the only documentation was in the discussion of EXECUTE in the pl/pgsql chapter of the Programmer's Guide, which is probably not the best place. > Therefore, I withdraw my initial request, and request instead that > quote_literal be added to the function documentation in String > Functions and Operators. Done; I also added its sister function quote_ident. See the devel docs at http://candle.pha.pa.us/main/writings/pgsql/sgml/functions-string.html regards, tom lane
Tom, > Done; I also added its sister function quote_ident. See the devel > docs at > http://candle.pha.pa.us/main/writings/pgsql/sgml/functions-string.html Tante Grazie. -- -Josh Berkus