Commit dd4ca824 authored by Bruce Momjian's avatar Bruce Momjian

Reports missing values as bad.

BAD:  INSERT INTO tab (col1, col2) VALUES ('val1');
GOOD: INSERT INTO tab (col1, col2) VALUES ('val1', 'val2');

Regress tests against DEFAULT and normal values as they're managed
slightly different.

Rod Taylor
parent e9751234
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.231 2002/04/17 20:57:56 tgl Exp $ * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.232 2002/04/24 02:22:54 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -547,10 +547,12 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt, ...@@ -547,10 +547,12 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt,
} }
/* /*
* XXX It is possible that the targetlist has fewer entries than were * Ensure that the targetlist has the same number of entries
* in the columns list. We do not consider this an error. Perhaps we * that were present in the columns list. Don't do the check
* should, if the columns list was explicitly given? * for select statements.
*/ */
if (stmt->cols != NIL && (icolumns != NIL || attnos != NIL))
elog(ERROR, "INSERT has more target columns than expressions");
/* done building the range table and jointree */ /* done building the range table and jointree */
qry->rtable = pstate->p_rtable; qry->rtable = pstate->p_rtable;
...@@ -3247,7 +3249,7 @@ analyzeCreateSchemaStmt(CreateSchemaStmt *stmt) ...@@ -3247,7 +3249,7 @@ analyzeCreateSchemaStmt(CreateSchemaStmt *stmt)
} }
} }
result = NIL; result = NIL;
result = nconc(result, cxt.tables); result = nconc(result, cxt.tables);
result = nconc(result, cxt.views); result = nconc(result, cxt.views);
result = nconc(result, cxt.grants); result = nconc(result, cxt.grants);
......
...@@ -17,4 +17,24 @@ select * from inserttest; ...@@ -17,4 +17,24 @@ select * from inserttest;
| 7 | testing | 7 | testing
(4 rows) (4 rows)
--
-- insert with similar expression / target_list values (all fail)
--
insert into inserttest (col1, col2, col3) values (DEFAULT, DEFAULT);
ERROR: INSERT has more target columns than expressions
insert into inserttest (col1, col2, col3) values (1, 2);
ERROR: INSERT has more target columns than expressions
insert into inserttest (col1) values (1, 2);
ERROR: INSERT has more expressions than target columns
insert into inserttest (col1) values (DEFAULT, DEFAULT);
ERROR: INSERT has more expressions than target columns
select * from inserttest;
col1 | col2 | col3
------+------+---------
| 3 | testing
| 5 | testing
| 5 | test
| 7 | testing
(4 rows)
drop table inserttest; drop table inserttest;
...@@ -8,5 +8,15 @@ insert into inserttest (col1, col2, col3) values (DEFAULT, 5, DEFAULT); ...@@ -8,5 +8,15 @@ insert into inserttest (col1, col2, col3) values (DEFAULT, 5, DEFAULT);
insert into inserttest values (DEFAULT, 5, 'test'); insert into inserttest values (DEFAULT, 5, 'test');
insert into inserttest values (DEFAULT, 7); insert into inserttest values (DEFAULT, 7);
select * from inserttest;
--
-- insert with similar expression / target_list values (all fail)
--
insert into inserttest (col1, col2, col3) values (DEFAULT, DEFAULT);
insert into inserttest (col1, col2, col3) values (1, 2);
insert into inserttest (col1) values (1, 2);
insert into inserttest (col1) values (DEFAULT, DEFAULT);
select * from inserttest; select * from inserttest;
drop table inserttest; drop table inserttest;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment