Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
97b4e5ad
Commit
97b4e5ad
authored
Apr 05, 2002
by
Bruce Momjian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add INSERT(..., DEFAULT, ).
Rod Taylor
parent
aab0b8f5
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
123 additions
and
16 deletions
+123
-16
src/backend/nodes/copyfuncs.c
src/backend/nodes/copyfuncs.c
+13
-1
src/backend/nodes/equalfuncs.c
src/backend/nodes/equalfuncs.c
+10
-1
src/backend/parser/analyze.c
src/backend/parser/analyze.c
+20
-4
src/backend/parser/gram.y
src/backend/parser/gram.y
+22
-5
src/backend/parser/parse_target.c
src/backend/parser/parse_target.c
+12
-2
src/include/nodes/nodes.h
src/include/nodes/nodes.h
+2
-1
src/include/nodes/parsenodes.h
src/include/nodes/parsenodes.h
+9
-1
src/test/regress/expected/insert.out
src/test/regress/expected/insert.out
+20
-0
src/test/regress/parallel_schedule
src/test/regress/parallel_schedule
+1
-0
src/test/regress/serial_schedule
src/test/regress/serial_schedule
+2
-1
src/test/regress/sql/insert.sql
src/test/regress/sql/insert.sql
+12
-0
No files found.
src/backend/nodes/copyfuncs.c
View file @
97b4e5ad
...
...
@@ -15,7 +15,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.17
4 2002/03/29 19:06:08 tgl
Exp $
* $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.17
5 2002/04/05 11:56:48 momjian
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -1947,6 +1947,15 @@ _copyFuncWithArgs(FuncWithArgs *from)
return
newnode
;
}
static
InsertDefault
*
_copyInsertDefault
(
InsertDefault
*
from
)
{
InsertDefault
*
newnode
=
makeNode
(
InsertDefault
);
return
newnode
;
}
static
ClosePortalStmt
*
_copyClosePortalStmt
(
ClosePortalStmt
*
from
)
{
...
...
@@ -3055,6 +3064,9 @@ copyObject(void *from)
case
T_FuncWithArgs
:
retval
=
_copyFuncWithArgs
(
from
);
break
;
case
T_InsertDefault
:
retval
=
_copyInsertDefault
(
from
);
break
;
default:
elog
(
ERROR
,
"copyObject: don't know how to copy node type %d"
,
...
...
src/backend/nodes/equalfuncs.c
View file @
97b4e5ad
...
...
@@ -20,7 +20,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.12
2 2002/03/29 19:06:08 tgl
Exp $
* $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.12
3 2002/04/05 11:56:50 momjian
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -773,6 +773,12 @@ _equalFuncWithArgs(FuncWithArgs *a, FuncWithArgs *b)
&&
equal
(
a
->
funcargs
,
b
->
funcargs
);
}
static
bool
_equalInsertDefault
(
InsertDefault
*
a
,
InsertDefault
*
b
)
{
return
true
;
}
static
bool
_equalClosePortalStmt
(
ClosePortalStmt
*
a
,
ClosePortalStmt
*
b
)
{
...
...
@@ -2215,6 +2221,9 @@ equal(void *a, void *b)
case
T_FuncWithArgs
:
retval
=
_equalFuncWithArgs
(
a
,
b
);
break
;
case
T_InsertDefault
:
retval
=
_equalInsertDefault
(
a
,
b
);
break
;
default:
elog
(
WARNING
,
"equal: don't know whether nodes of type %d are equal"
,
...
...
src/backend/parser/analyze.c
View file @
97b4e5ad
...
...
@@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.22
6 2002/04/02 06:30:34 tgl
Exp $
* $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.22
7 2002/04/05 11:56:51 momjian
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -518,13 +518,29 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt,
TargetEntry
*
tle
=
(
TargetEntry
*
)
lfirst
(
tl
);
ResTarget
*
col
;
Assert
(
!
tle
->
resdom
->
resjunk
);
if
(
icolumns
==
NIL
||
attnos
==
NIL
)
elog
(
ERROR
,
"INSERT has more expressions than target columns"
);
col
=
(
ResTarget
*
)
lfirst
(
icolumns
);
Assert
(
IsA
(
col
,
ResTarget
));
updateTargetListEntry
(
pstate
,
tle
,
col
->
name
,
lfirsti
(
attnos
),
/*
* When the value is to be set to the column default we can simply
* drop it now and handle it later on using methods for missing
* columns.
*/
if
(
!
IsA
(
tle
,
InsertDefault
))
{
Assert
(
IsA
(
col
,
ResTarget
));
Assert
(
!
tle
->
resdom
->
resjunk
);
updateTargetListEntry
(
pstate
,
tle
,
col
->
name
,
lfirsti
(
attnos
),
col
->
indirection
);
}
else
{
icolumns
=
lremove
(
icolumns
,
icolumns
);
attnos
=
lremove
(
attnos
,
attnos
);
qry
->
targetList
=
lremove
(
tle
,
qry
->
targetList
);
}
icolumns
=
lnext
(
icolumns
);
attnos
=
lnext
(
attnos
);
}
...
...
src/backend/parser/gram.y
View file @
97b4e5ad
...
...
@@ -11,7 +11,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.
299 2002/04/01 04:35:38 tgl
Exp $
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.
300 2002/04/05 11:56:53 momjian
Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
...
...
@@ -203,6 +203,7 @@ static bool set_name_needs_quotes(const char *name);
from_clause, from_list, opt_array_bounds, qualified_name_list,
any_name, any_name_list, expr_list, dotted_name, attrs,
target_list, update_target_list, insert_column_list,
insert_target_list,
def_list, opt_indirection, group_clause, TriggerFuncArgs,
select_limit, opt_select_limit
...
...
@@ -263,7 +264,7 @@ static bool set_name_needs_quotes(const char *name);
%type <node> table_ref
%type <jexpr> joined_table
%type <range> relation_expr
%type <target> target_el, update_target_el
%type <target> target_el,
insert_target_el,
update_target_el
%type <typnam> Typename, SimpleTypename, ConstTypename
GenericType, Numeric, Character, ConstDatetime, ConstInterval, Bit
...
...
@@ -3504,7 +3505,7 @@ InsertStmt: INSERT INTO qualified_name insert_rest
}
;
insert_rest: VALUES '(' target_list ')'
insert_rest: VALUES '('
insert_
target_list ')'
{
$$ = makeNode(InsertStmt);
$$->cols = NIL;
...
...
@@ -3525,7 +3526,7 @@ insert_rest: VALUES '(' target_list ')'
$$->targetList = NIL;
$$->selectStmt = $1;
}
| '(' insert_column_list ')' VALUES '(' target_list ')'
| '(' insert_column_list ')' VALUES '('
insert_
target_list ')'
{
$$ = makeNode(InsertStmt);
$$->cols = $2;
...
...
@@ -5244,7 +5245,6 @@ c_expr: columnref
s->val.type = T_String;
s->val.val.str = "now";
s->typename = makeTypeName(xlateSqlType("text"));
d = makeTypeName(xlateSqlType("timetz"));
if (($3 < 0) || ($3 > 13))
elog(ERROR,"CURRENT_TIME(%d) precision must be between %d and %d",
...
...
@@ -5721,6 +5721,23 @@ update_target_el: ColId opt_indirection '=' a_expr
}
;
insert_target_list: insert_target_list ',' insert_target_el
{ $$ = lappend($1, $3); }
| insert_target_el
{ $$ = makeList1($1); }
;
insert_target_el: target_el { $$ = $1; }
| DEFAULT {
InsertDefault *def = makeNode(InsertDefault);
$$ = makeNode(ResTarget);
$$->name = NULL;
$$->indirection = NULL;
$$->val = (Node *)def;
}
;
/*****************************************************************************
*
* Names and constants
...
...
src/backend/parser/parse_target.c
View file @
97b4e5ad
...
...
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.8
1 2002/04/02 08:51:52 inoue
Exp $
* $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.8
2 2002/04/05 11:56:53 momjian
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -175,9 +175,19 @@ transformTargetList(ParseState *pstate, List *targetlist)
false
));
}
}
else
if
(
IsA
(
res
->
val
,
InsertDefault
))
{
InsertDefault
*
newnode
=
makeNode
(
InsertDefault
);
/*
* If this is a DEFAULT element, we make a junk entry
* which will get dropped on return to transformInsertStmt().
*/
p_target
=
lappend
(
p_target
,
newnode
);
}
else
{
/* Everything else but ColumnRef */
/* Everything else but ColumnRef
and InsertDefault
*/
p_target
=
lappend
(
p_target
,
transformTargetEntry
(
pstate
,
res
->
val
,
...
...
src/include/nodes/nodes.h
View file @
97b4e5ad
...
...
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $Id: nodes.h,v 1.10
3 2002/03/22 02:56:36 tgl
Exp $
* $Id: nodes.h,v 1.10
4 2002/04/05 11:56:54 momjian
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -229,6 +229,7 @@ typedef enum NodeTag
T_PrivGrantee
,
T_FuncWithArgs
,
T_PrivTarget
,
T_InsertDefault
,
/*
* TAGS FOR FUNCTION-CALL CONTEXT AND RESULTINFO NODES (see fmgr.h)
...
...
src/include/nodes/parsenodes.h
View file @
97b4e5ad
...
...
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $Id: parsenodes.h,v 1.16
7 2002/04/01 04:35:40 tgl
Exp $
* $Id: parsenodes.h,v 1.16
8 2002/04/05 11:56:54 momjian
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -359,6 +359,14 @@ typedef struct ResTarget
* assign */
}
ResTarget
;
/*
* Empty node used as a marker for Default Columns
*/
typedef
struct
InsertDefault
{
NodeTag
type
;
}
InsertDefault
;
/*
* SortGroupBy - for ORDER BY clause
*/
...
...
src/test/regress/expected/insert.out
0 → 100644
View file @
97b4e5ad
--
-- insert with DEFAULT in the target_list
--
create table inserttest (col1 int4, col2 int4 NOT NULL, col3 text default 'testing');
insert into inserttest (col1, col2, col3) values (DEFAULT, DEFAULT, DEFAULT);
ERROR: ExecAppend: Fail to add null value in not null attribute col2
insert into inserttest (col2, col3) values (3, DEFAULT);
insert into inserttest (col1, col2, col3) values (DEFAULT, 5, DEFAULT);
insert into inserttest values (DEFAULT, 5, 'test');
insert into inserttest values (DEFAULT, 7);
select * from inserttest;
col1 | col2 | col3
------+------+---------
| 3 | testing
| 5 | testing
| 5 | test
| 7 | testing
(4 rows)
drop table inserttest;
src/test/regress/parallel_schedule
View file @
97b4e5ad
...
...
@@ -21,6 +21,7 @@ test: horology
# ----------
# These four each depend on the previous one
# ----------
test: insert
test: create_function_1
test: create_type
test: create_table
...
...
src/test/regress/serial_schedule
View file @
97b4e5ad
# $Header: /cvsroot/pgsql/src/test/regress/serial_schedule,v 1.
8 2002/03/19 02:18:24
momjian Exp $
# $Header: /cvsroot/pgsql/src/test/regress/serial_schedule,v 1.
9 2002/04/05 11:56:55
momjian Exp $
# This should probably be in an order similar to parallel_schedule.
test: boolean
test: char
...
...
@@ -37,6 +37,7 @@ test: type_sanity
test: opr_sanity
test: geometry
test: horology
test: insert
test: create_function_1
test: create_type
test: create_table
...
...
src/test/regress/sql/insert.sql
0 → 100644
View file @
97b4e5ad
--
-- insert with DEFAULT in the target_list
--
create
table
inserttest
(
col1
int4
,
col2
int4
NOT
NULL
,
col3
text
default
'testing'
);
insert
into
inserttest
(
col1
,
col2
,
col3
)
values
(
DEFAULT
,
DEFAULT
,
DEFAULT
);
insert
into
inserttest
(
col2
,
col3
)
values
(
3
,
DEFAULT
);
insert
into
inserttest
(
col1
,
col2
,
col3
)
values
(
DEFAULT
,
5
,
DEFAULT
);
insert
into
inserttest
values
(
DEFAULT
,
5
,
'test'
);
insert
into
inserttest
values
(
DEFAULT
,
7
);
select
*
from
inserttest
;
drop
table
inserttest
;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment