aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Stark <stark@mit.edu>2013-07-29 23:43:44 +0100
committerGreg Stark <stark@mit.edu>2013-07-29 23:44:11 +0100
commit69b7d59a744134e33bbe51dab44dd4113c83b7fb (patch)
treee3d4ce55850315694f7a6a3d070a4c7ab2a26620
parentc62736cc37f6812d1ebb41ea5a86ffe60564a1f0 (diff)
downloadpostgresql-69b7d59a744134e33bbe51dab44dd4113c83b7fb.tar.gz
postgresql-69b7d59a744134e33bbe51dab44dd4113c83b7fb.zip
Sync ECPG with WITH ORDINALITY changes
-rw-r--r--src/interfaces/ecpg/preproc/parse.pl1
-rw-r--r--src/interfaces/ecpg/preproc/parser.c3
-rw-r--r--src/interfaces/ecpg/test/expected/sql-parser.c20
-rw-r--r--src/interfaces/ecpg/test/expected/sql-parser.stderr16
-rw-r--r--src/interfaces/ecpg/test/sql/parser.pgc6
5 files changed, 10 insertions, 36 deletions
diff --git a/src/interfaces/ecpg/preproc/parse.pl b/src/interfaces/ecpg/preproc/parse.pl
index f4b51d679ac..09310b330fe 100644
--- a/src/interfaces/ecpg/preproc/parse.pl
+++ b/src/interfaces/ecpg/preproc/parse.pl
@@ -43,6 +43,7 @@ my %replace_token = (
# or in the block
my %replace_string = (
'WITH_TIME' => 'with time',
+ 'WITH_ORDINALITY' => 'with ordinality',
'NULLS_FIRST' => 'nulls first',
'NULLS_LAST' => 'nulls last',
'TYPECAST' => '::',
diff --git a/src/interfaces/ecpg/preproc/parser.c b/src/interfaces/ecpg/preproc/parser.c
index 2ce9dd91c01..c18615e2b05 100644
--- a/src/interfaces/ecpg/preproc/parser.c
+++ b/src/interfaces/ecpg/preproc/parser.c
@@ -108,6 +108,9 @@ filtered_base_yylex(void)
case TIME:
cur_token = WITH_TIME;
break;
+ case ORDINALITY:
+ cur_token = WITH_ORDINALITY;
+ break;
default:
/* save the lookahead token for next time */
lookahead_token = next_token;
diff --git a/src/interfaces/ecpg/test/expected/sql-parser.c b/src/interfaces/ecpg/test/expected/sql-parser.c
index 876bbf34a15..a4a6d864bfb 100644
--- a/src/interfaces/ecpg/test/expected/sql-parser.c
+++ b/src/interfaces/ecpg/test/expected/sql-parser.c
@@ -58,25 +58,7 @@ if (sqlca.sqlcode < 0) sqlprint();}
#line 20 "parser.pgc"
- { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into T values ( 1 , null )", ECPGt_EOIT, ECPGt_EORT);
-#line 22 "parser.pgc"
-
-if (sqlca.sqlwarn[0] == 'W') sqlprint();
-#line 22 "parser.pgc"
-
-if (sqlca.sqlcode < 0) sqlprint();}
-#line 22 "parser.pgc"
-
- { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into T values ( 1 , 1 )", ECPGt_EOIT, ECPGt_EORT);
-#line 23 "parser.pgc"
-
-if (sqlca.sqlwarn[0] == 'W') sqlprint();
-#line 23 "parser.pgc"
-
-if (sqlca.sqlcode < 0) sqlprint();}
-#line 23 "parser.pgc"
-
- { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into T values ( 1 , 2 )", ECPGt_EOIT, ECPGt_EORT);
+ { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into t select 1 , nullif ( y - 1 , 0 ) from generate_series ( 1 , 3 ) with ordinality as series ( x , y )", ECPGt_EOIT, ECPGt_EORT);
#line 24 "parser.pgc"
if (sqlca.sqlwarn[0] == 'W') sqlprint();
diff --git a/src/interfaces/ecpg/test/expected/sql-parser.stderr b/src/interfaces/ecpg/test/expected/sql-parser.stderr
index 0959fa1e726..af68c43db49 100644
--- a/src/interfaces/ecpg/test/expected/sql-parser.stderr
+++ b/src/interfaces/ecpg/test/expected/sql-parser.stderr
@@ -10,23 +10,11 @@
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ecpg_execute on line 20: OK: CREATE TABLE
[NO_PID]: sqlca: code: 0, state: 00000
-[NO_PID]: ecpg_execute on line 22: query: insert into T values ( 1 , null ); with 0 parameter(s) on connection regress1
+[NO_PID]: ecpg_execute on line 22: query: insert into t select 1 , nullif ( y - 1 , 0 ) from generate_series ( 1 , 3 ) with ordinality as series ( x , y ); with 0 parameter(s) on connection regress1
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ecpg_execute on line 22: using PQexec
[NO_PID]: sqlca: code: 0, state: 00000
-[NO_PID]: ecpg_execute on line 22: OK: INSERT 0 1
-[NO_PID]: sqlca: code: 0, state: 00000
-[NO_PID]: ecpg_execute on line 23: query: insert into T values ( 1 , 1 ); with 0 parameter(s) on connection regress1
-[NO_PID]: sqlca: code: 0, state: 00000
-[NO_PID]: ecpg_execute on line 23: using PQexec
-[NO_PID]: sqlca: code: 0, state: 00000
-[NO_PID]: ecpg_execute on line 23: OK: INSERT 0 1
-[NO_PID]: sqlca: code: 0, state: 00000
-[NO_PID]: ecpg_execute on line 24: query: insert into T values ( 1 , 2 ); with 0 parameter(s) on connection regress1
-[NO_PID]: sqlca: code: 0, state: 00000
-[NO_PID]: ecpg_execute on line 24: using PQexec
-[NO_PID]: sqlca: code: 0, state: 00000
-[NO_PID]: ecpg_execute on line 24: OK: INSERT 0 1
+[NO_PID]: ecpg_execute on line 22: OK: INSERT 0 3
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ecpg_execute on line 26: query: select Item2 from T order by Item2 nulls last; with 0 parameter(s) on connection regress1
[NO_PID]: sqlca: code: 0, state: 00000
diff --git a/src/interfaces/ecpg/test/sql/parser.pgc b/src/interfaces/ecpg/test/sql/parser.pgc
index e7115b94726..f569e43a1d5 100644
--- a/src/interfaces/ecpg/test/sql/parser.pgc
+++ b/src/interfaces/ecpg/test/sql/parser.pgc
@@ -19,9 +19,9 @@ int main() {
EXEC SQL CREATE TABLE T ( Item1 int, Item2 int );
- EXEC SQL INSERT INTO T VALUES ( 1, null );
- EXEC SQL INSERT INTO T VALUES ( 1, 1 );
- EXEC SQL INSERT INTO T VALUES ( 1, 2 );
+ EXEC SQL INSERT INTO t
+ SELECT 1,nullif(y-1,0)
+ FROM generate_series(1,3) WITH ORDINALITY AS series(x,y);
EXEC SQL SELECT Item2 INTO :item:ind FROM T ORDER BY Item2 NULLS LAST;