* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/parser/parser.c,v 1.76 2009/01/01 17:23:46 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/parser/parser.c,v 1.77 2009/04/19 21:50:08 tgl Exp $
*
*-------------------------------------------------------------------------
*/
}
+/*
+ * pg_parse_string_token - get the value represented by a string literal
+ *
+ * Given the textual form of a SQL string literal, produce the represented
+ * value as a palloc'd string. It is caller's responsibility that the
+ * passed string does represent one single string literal.
+ *
+ * We export this function to avoid having plpgsql depend on internal details
+ * of the core grammar (such as the token code assigned to SCONST). Note
+ * that since the scanner isn't presently re-entrant, this cannot be used
+ * during use of the main parser/scanner.
+ */
+char *
+pg_parse_string_token(const char *token)
+{
+ int ctoken;
+
+ scanner_init(token);
+
+ ctoken = base_yylex();
+
+ if (ctoken != SCONST) /* caller error */
+ elog(ERROR, "expected string constant, got token code %d", ctoken);
+
+ scanner_finish();
+
+ return base_yylval.str;
+}
+
+
/*
* Intermediate filter between parser and base lexer (base_yylex in scan.l).
*
* Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/parser/parser.h,v 1.24 2009/01/01 17:24:00 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/parser/parser.h,v 1.25 2009/04/19 21:50:08 tgl Exp $
*
*-------------------------------------------------------------------------
*/
extern List *raw_parser(const char *str);
+extern char *pg_parse_string_token(const char *token);
+
#endif /* PARSER_H */
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/pl/plpgsql/src/gram.y,v 1.122 2009/04/19 18:52:57 tgl Exp $
+ * $PostgreSQL: pgsql/src/pl/plpgsql/src/gram.y,v 1.123 2009/04/19 21:50:09 tgl Exp $
*
*-------------------------------------------------------------------------
*/
/*
* Convert a string-literal token to the represented string value.
*
- * To do this, we need to invoke the core lexer. To avoid confusion between
- * the core bison/flex definitions and our own, the actual invocation is in
- * pl_funcs.c. Here we are only concerned with setting up the right errcontext
- * state, which is handled the same as in check_sql_expr().
+ * To do this, we need to invoke the core lexer. Here we are only concerned
+ * with setting up the right errcontext state, which is handled the same as
+ * in check_sql_expr().
*/
static char *
parse_string_token(const char *token)
syntax_errcontext.previous = error_context_stack->previous;
error_context_stack = &syntax_errcontext;
- result = plpgsql_parse_string_token(token);
+ result = pg_parse_string_token(token);
/* Restore former ereport callback */
error_context_stack = previous_errcontext;
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_funcs.c,v 1.77 2009/04/19 18:52:57 tgl Exp $
+ * $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_funcs.c,v 1.78 2009/04/19 21:50:09 tgl Exp $
*
*-------------------------------------------------------------------------
*/
#include <ctype.h>
-#include "parser/gramparse.h"
-#include "parser/gram.h"
#include "parser/scansup.h"
}
-/*
- * plpgsql_parse_string_token - get the value represented by a string literal
- *
- * We do not make plpgsql's lexer produce the represented value, because
- * in many cases we don't need it. Instead this function is invoked when
- * we do need it. The input is the T_STRING token as identified by the lexer.
- *
- * The result is a palloc'd string.
- *
- * Note: this is called only from plpgsql's gram.y, but we can't just put it
- * there because including parser/gram.h there would cause confusion.
- */
-char *
-plpgsql_parse_string_token(const char *token)
-{
- int ctoken;
-
- /*
- * We use the core lexer to do the dirty work. Aside from getting the
- * right results for escape sequences and so on, this helps us produce
- * appropriate warnings for escape_string_warning etc.
- */
- scanner_init(token);
-
- ctoken = base_yylex();
-
- if (ctoken != SCONST)
- elog(ERROR, "unexpected result from base lexer: %d", ctoken);
-
- scanner_finish();
-
- return base_yylval.str;
-}
-
-
/*
* Statement type as a string, for use in error messages etc.
*/
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/pl/plpgsql/src/plpgsql.h,v 1.111 2009/04/19 18:52:57 tgl Exp $
+ * $PostgreSQL: pgsql/src/pl/plpgsql/src/plpgsql.h,v 1.112 2009/04/19 21:50:09 tgl Exp $
*
*-------------------------------------------------------------------------
*/
* ----------
*/
extern void plpgsql_convert_ident(const char *s, char **output, int numidents);
-extern char *plpgsql_parse_string_token(const char *token);
extern const char *plpgsql_stmt_typename(PLpgSQL_stmt *stmt);
extern void plpgsql_dumptree(PLpgSQL_function *func);
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/pl/plpgsql/src/scan.l,v 1.68 2009/04/19 18:52:57 tgl Exp $
+ * $PostgreSQL: pgsql/src/pl/plpgsql/src/scan.l,v 1.69 2009/04/19 21:50:09 tgl Exp $
*
*-------------------------------------------------------------------------
*/
static int xcdepth = 0; /* depth of nesting in slash-star comments */
static char *dolqstart; /* current $foo$ quote start string */
-extern bool standard_conforming_strings;
+extern PGDLLIMPORT bool standard_conforming_strings;
bool plpgsql_SpaceScanned = false;
%}