Make scanner accept dot as standalone symbol
authorMarko Kreen <markokr@gmail.com>
Mon, 29 Jun 2009 13:37:58 +0000 (13:37 +0000)
committerMarko Kreen <markokr@gmail.com>
Mon, 29 Jun 2009 13:37:58 +0000 (13:37 +0000)
Currently PL/Proxy fails to parse following query:

  select (ret_numtuple(1)).num, (ret_numtuple(1)).name;

The fix is to add "." to the SQLSYM rule in the lexer.  This should be OK
because an identifier chain will always be longer than a single dot, so flex
will prefer it over parsing the single dot.

Patch by Peter Eisentraut

expected/plproxy_select.out
sql/plproxy_select.sql
src/scanner.l

index f8317a2881ff827e866defdcd1207c655767f86e..352c8291314bde84bf2ffa75a357088230f478dd 100644 (file)
@@ -47,3 +47,28 @@ select * from get_zero();
         0
 (1 row)
 
+\c test_part
+create table numbers (
+    num int,
+    name text
+);
+insert into numbers values (1, 'one');
+insert into numbers values (2, 'two');
+create function ret_numtuple(int)
+returns numbers as $x$
+    select num, name from numbers where num = $1;
+$x$ language sql;
+\c regression
+create type numbers_type as (num int, name text);
+create function get_one()
+returns setof numbers_type as $x$
+    cluster 'testcluster';
+    run on all;
+    select (ret_numtuple(1)).num, (ret_numtuple(1)).name;
+$x$ language plproxy;
+select * from get_one();
+ num | name 
+-----+------
+   1 | one
+(1 row)
+
index 529ccc2ab8dd755a44ca5fc2c085d0c22a9d6455..6bf0f0064cdd5d1a7eb2ac059750df7aaf7df513 100644 (file)
@@ -44,3 +44,28 @@ returns setof integer as $x$
 $x$ language plproxy;
 
 select * from get_zero();
+
+\c test_part
+create table numbers (
+    num int,
+    name text
+);
+insert into numbers values (1, 'one');
+insert into numbers values (2, 'two');
+
+create function ret_numtuple(int)
+returns numbers as $x$
+    select num, name from numbers where num = $1;
+$x$ language sql;
+
+\c regression
+create type numbers_type as (num int, name text);
+
+create function get_one()
+returns setof numbers_type as $x$
+    cluster 'testcluster';
+    run on all;
+    select (ret_numtuple(1)).num, (ret_numtuple(1)).name;
+$x$ language plproxy;
+
+select * from get_one();
index 8f54b7f01cbb34e380cabb6e960b01b6fe21f9a4..cb203b7db041bc02a03fd16f8183ca09e3f43bf9 100644 (file)
@@ -162,7 +162,7 @@ SQLNUM              [0-9][.0-9]*
  *
  * Excludes: [$'";`]
  */
-SQLSYM         [-!#%&()*+,/:<=>?@\[\]^{|}~]
+SQLSYM         [-!#%&()*+,/:<=>?@\[\]^{|}~.]
 
 /* Dollar quote ID */
 DOLQ_START      [a-z\200-\377_]