From: Fabien COELHO <coelho@cri.ensmp.fr>
To: Tatsuo Ishii <ishii@sraoss.co.jp>
Cc: tgl@sss.pgh.pa.us, rafia.sabih@enterprisedb.com, michael.paquier@gmail.com, Langote_Amit_f8@lab.ntt.co.jp, robertmhaas@gmail.com, pavel.stehule@gmail.com, PostgreSQL Developers <pgsql-hackers@postgresql.org>
Subject: Re: pgbench - allow to store select results into variables
Date: Mon, 17 Apr 2017 20:00:07 +0900 (JST)
Message-ID: <alpine.DEB.2.20.1704171959080.1741@lancre> (raw)
In-Reply-To: <20170417.181123.1539611157606514675.t-ishii@sraoss.co.jp>
References: <alpine.DEB.2.20.1704090529570.26549@lancre>
<20170410.083219.1414201047665260666.t-ishii@sraoss.co.jp>
<alpine.DEB.2.20.1704171524050.4025@lancre>
<20170417.181123.1539611157606514675.t-ishii@sraoss.co.jp>
List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-hackers>
Hello,
> I think you'd better to change the following comments because there's
> no psqlscan.l or psqlscanslash.l in pgbench source tree.
>
> + * underscore. Keep this in sync with the definition of variable_char in
> + * psqlscan.l and psqlscanslash.l.
Here is a v3 with a more precise comment.
--
Fabien.
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackersAttachments:
[text/x-diff] pgbench-utf8-vars-3.patch (3.2K, ../alpine.DEB.2.20.1704171959080.1741@lancre/2-pgbench-utf8-vars-3.patch)
download | inline diff:diff --git a/doc/src/sgml/ref/pgbench.sgml b/doc/src/sgml/ref/pgbench.sgmlindex 1eee8dc..502d31b 100644--- a/doc/src/sgml/ref/pgbench.sgml+++ b/doc/src/sgml/ref/pgbench.sgml@@ -825,6 +825,8 @@ pgbench <optional> <replaceable>options</> </optional> <replaceable>dbname</>
<para>
Sets variable <replaceable>varname</> to a value calculated
from <replaceable>expression</>.
+ The variable name must consist of letters (including non-Latin letters),+ digits, and underscores.
The expression may contain integer constants such as <literal>5432</>,
double constants such as <literal>3.14159</>,
references to variables <literal>:</><replaceable>variablename</>,
diff --git a/src/bin/pgbench/exprscan.l b/src/bin/pgbench/exprscan.lindex dc1367b..1862fe4 100644--- a/src/bin/pgbench/exprscan.l+++ b/src/bin/pgbench/exprscan.l@@ -58,9 +58,9 @@ extern void expr_yyset_column(int column_no, yyscan_t yyscanner);
%option prefix="expr_yy"
/* Character classes */
-alpha [a-zA-Z_]+alpha [a-zA-Z\200-\377_]
digit [0-9]
-alnum [a-zA-Z0-9_]+alnum [A-Za-z\200-\377_0-9]
/* {space} + {nonspace} + {newline} should cover all characters */
space [ \t\r\f\v]
nonspace [^ \t\r\f\v\n]
diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.cindex ae36247..44ae29e 100644--- a/src/bin/pgbench/pgbench.c+++ b/src/bin/pgbench/pgbench.c@@ -1020,19 +1020,38 @@ makeVariableNumeric(Variable *var)
return true;
}
-/* check whether the name consists of alphabets, numerals and underscores. */+/*+ * Check whether a variable's name is allowed.+ *+ * We allow any non-ASCII character, as well as ASCII letters, digits, and+ * underscore.+ *+ * Keep this in sync with the definitions of variable name characters in+ * "src/fe_utils/psqlscan.l", "src/bin/psql/psqlscanslash.l" and+ * "src/bin/pgbench/exprscan.l".+ *+ * Note: this static function is copied from "src/bin/psql/variables.c"+ */
static bool
-isLegalVariableName(const char *name)+valid_variable_name(const char *name)
{
- int i;+ const unsigned char *ptr = (const unsigned char *) name;- for (i = 0; name[i] != '\0'; i++)+ /* Mustn't be zero-length */+ if (*ptr == '\0')+ return false;++ while (*ptr)
{
- if (!isalnum((unsigned char) name[i]) && name[i] != '_')+ if (IS_HIGHBIT_SET(*ptr) ||+ strchr("ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz"+ "_0123456789", *ptr) != NULL)+ ptr++;+ else
return false;
}
- return (i > 0); /* must be non-empty */+ return true;
}
/*
@@ -1054,7 +1073,7 @@ lookupCreateVariable(CState *st, const char *context, char *name)
* Check for the name only when declaring a new variable to avoid
* overhead.
*/
- if (!isLegalVariableName(name))+ if (!valid_variable_name(name))
{
fprintf(stderr, "%s: invalid variable name: \"%s\"\n",
context, name);
@@ -1148,7 +1167,7 @@ parseVariable(const char *sql, int *eaten)
do
{
i++;
- } while (isalnum((unsigned char) sql[i]) || sql[i] == '_');+ } while (IS_HIGHBIT_SET(sql[i]) || isalnum((unsigned char) sql[i]) || sql[i] == '_');
if (i == 1)
return NULL;
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-hackers@postgresql.org
Cc: coelho@cri.ensmp.fr, ishii@sraoss.co.jp
Subject: Re: pgbench - allow to store select results into variables
In-Reply-To: <alpine.DEB.2.20.1704171959080.1741@lancre>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox