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
3751b495
Commit
3751b495
authored
Aug 27, 1997
by
Vadim B. Mikheev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Number of tuples inserted/affected by INSERT/UPDATE/DELETE...
parent
40ac5a69
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
116 additions
and
85 deletions
+116
-85
src/backend/executor/execMain.c
src/backend/executor/execMain.c
+21
-20
src/backend/tcop/dest.c
src/backend/tcop/dest.c
+21
-49
src/backend/tcop/pquery.c
src/backend/tcop/pquery.c
+4
-1
src/include/nodes/execnodes.h
src/include/nodes/execnodes.h
+3
-1
src/include/tcop/dest.h
src/include/tcop/dest.h
+2
-2
src/interfaces/libpq/fe-exec.c
src/interfaces/libpq/fe-exec.c
+63
-11
src/interfaces/libpq/libpq-fe.h
src/interfaces/libpq/libpq-fe.h
+2
-1
No files found.
src/backend/executor/execMain.c
View file @
3751b495
...
...
@@ -26,7 +26,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.
19 1997/08/22 14:28:20
vadim Exp $
* $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.
20 1997/08/27 09:02:24
vadim Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -65,7 +65,7 @@ static TupleTableSlot *ExecutePlan(EState *estate, Plan *plan,
int
numberTuples
,
ScanDirection
direction
,
void
(
*
printfunc
)());
static
void
ExecRetrieve
(
TupleTableSlot
*
slot
,
void
(
*
printfunc
)(),
Relation
intoRelationDesc
);
EState
*
estate
);
static
void
ExecAppend
(
TupleTableSlot
*
slot
,
ItemPointer
tupleid
,
EState
*
estate
);
static
void
ExecDelete
(
TupleTableSlot
*
slot
,
ItemPointer
tupleid
,
...
...
@@ -171,6 +171,8 @@ ExecutorRun(QueryDesc *queryDesc, EState *estate, int feature, int count)
plan
=
queryDesc
->
plantree
;
dest
=
queryDesc
->
dest
;
destination
=
(
void
(
*
)())
DestToFunction
(
dest
);
estate
->
es_processed
=
0
;
estate
->
es_lastoid
=
InvalidOid
;
#if 0
/*
...
...
@@ -665,7 +667,6 @@ ExecutePlan(EState *estate,
ScanDirection
direction
,
void
(
*
printfunc
)())
{
Relation
intoRelationDesc
;
JunkFilter
*
junkfilter
;
TupleTableSlot
*
slot
;
...
...
@@ -674,12 +675,6 @@ ExecutePlan(EState *estate,
int
current_tuple_count
;
TupleTableSlot
*
result
;
/* ----------------
* get information
* ----------------
*/
intoRelationDesc
=
estate
->
es_into_relation_descriptor
;
/* ----------------
* initialize local variables
* ----------------
...
...
@@ -782,7 +777,7 @@ ExecutePlan(EState *estate,
case
CMD_SELECT
:
ExecRetrieve
(
slot
,
/* slot containing tuple */
printfunc
,
/* print function */
intoRelationDesc
);
/* "into" relation
*/
estate
);
/*
*/
result
=
slot
;
break
;
...
...
@@ -853,7 +848,7 @@ ExecutePlan(EState *estate,
static
void
ExecRetrieve
(
TupleTableSlot
*
slot
,
void
(
*
printfunc
)(),
Relation
intoRelationDesc
)
EState
*
estate
)
{
HeapTuple
tuple
;
TupleDesc
attrtype
;
...
...
@@ -869,8 +864,9 @@ ExecRetrieve(TupleTableSlot *slot,
* insert the tuple into the "into relation"
* ----------------
*/
if
(
intoRelationDesc
!=
NULL
)
{
heap_insert
(
intoRelationDesc
,
tuple
);
if
(
estate
->
es_into_relation_descriptor
!=
NULL
)
{
heap_insert
(
estate
->
es_into_relation_descriptor
,
tuple
);
IncrAppended
();
}
...
...
@@ -880,6 +876,7 @@ ExecRetrieve(TupleTableSlot *slot,
*/
(
*
printfunc
)(
tuple
,
attrtype
);
IncrRetrieved
();
(
estate
->
es_processed
)
++
;
}
/* ----------------------------------------------------------------
...
...
@@ -947,7 +944,6 @@ ExecAppend(TupleTableSlot *slot,
newId
=
heap_insert
(
resultRelationDesc
,
/* relation desc */
tuple
);
/* heap tuple */
IncrAppended
();
UpdateAppendOid
(
newId
);
/* ----------------
* process indices
...
...
@@ -961,6 +957,8 @@ ExecAppend(TupleTableSlot *slot,
if
(
numIndices
>
0
)
{
ExecInsertIndexTuples
(
slot
,
&
(
tuple
->
t_ctid
),
estate
,
false
);
}
(
estate
->
es_processed
)
++
;
estate
->
es_lastoid
=
newId
;
}
/* ----------------------------------------------------------------
...
...
@@ -989,10 +987,12 @@ ExecDelete(TupleTableSlot *slot,
* delete the tuple
* ----------------
*/
heap_delete
(
resultRelationDesc
,
/* relation desc */
tupleid
);
/* item pointer to tuple */
if
(
heap_delete
(
resultRelationDesc
,
/* relation desc */
tupleid
)
)
/* item pointer to tuple */
return
;
IncrDeleted
();
(
estate
->
es_processed
)
++
;
/* ----------------
* Note: Normally one would think that we have to
...
...
@@ -1094,6 +1094,7 @@ ExecReplace(TupleTableSlot *slot,
}
IncrReplaced
();
(
estate
->
es_processed
)
++
;
/* ----------------
* Note: instead of having to update the old index tuples
...
...
src/backend/tcop/dest.c
View file @
3751b495
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/tcop/dest.c,v 1.
7 1997/08/19 21:34:02 momjian
Exp $
* $Header: /cvsroot/pgsql/src/backend/tcop/dest.c,v 1.
8 1997/08/27 09:03:14 vadim
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -43,8 +43,7 @@
#include "commands/async.h"
static
Oid
GetAppendOid
(
void
);
static
void
ResetAppendOid
(
void
);
static
char
CommandInfo
[
32
]
=
{
0
};
/* ----------------
* output functions
...
...
@@ -87,8 +86,6 @@ void (*DestToFunction(CommandDest dest))(HeapTuple, TupleDesc)
return
donothing
;
}
#define IS_INSERT_TAG(tag) (*tag == 'I' && *(tag+1) == 'N')
/* ----------------
* EndCommand - tell destination that no more tuples will arrive
* ----------------
...
...
@@ -106,14 +103,8 @@ EndCommand(char *commandTag, CommandDest dest)
* ----------------
*/
pq_putnchar
(
"C"
,
1
);
/* pq_putint(0, 4); */
if
(
IS_INSERT_TAG
(
commandTag
))
{
sprintf
(
buf
,
"%s %d"
,
commandTag
,
GetAppendOid
());
sprintf
(
buf
,
"%s%s"
,
commandTag
,
CommandInfo
);
pq_putstr
(
buf
);
}
else
pq_putstr
(
commandTag
);
pq_flush
();
break
;
...
...
@@ -239,7 +230,7 @@ BeginCommand(char *pname,
* because nothing needs to be sent to the fe.
* ----------------
*/
ResetAppendOid
()
;
CommandInfo
[
0
]
=
0
;
if
(
isIntoPortal
)
return
;
...
...
@@ -318,41 +309,22 @@ BeginCommand(char *pname,
}
}
static
Oid
AppendOid
;
static
void
ResetAppendOid
(
void
)
{
AppendOid
=
InvalidOid
;
}
#define MULTI_TUPLE_APPEND -1
void
Update
AppendOid
(
Oid
newoid
)
Update
CommandInfo
(
int
operation
,
Oid
lastoid
,
uint32
tuples
)
{
/*
* First update after AppendOid was reset (at command beginning).
*/
if
(
AppendOid
==
InvalidOid
)
AppendOid
=
newoid
;
/*
* Already detected a multiple tuple append, return a void oid ;)
*/
else
if
(
AppendOid
==
MULTI_TUPLE_APPEND
)
switch
(
operation
)
{
case
CMD_INSERT
:
if
(
tuples
>
1
)
lastoid
=
InvalidOid
;
sprintf
(
CommandInfo
,
" %u %u"
,
lastoid
,
tuples
);
break
;
case
CMD_DELETE
:
case
CMD_UPDATE
:
sprintf
(
CommandInfo
,
" %u"
,
tuples
);
break
;
default
:
CommandInfo
[
0
]
=
0
;
}
return
;
/*
* Oid has been assigned once before, tag this as a multiple tuple
* append.
*/
else
AppendOid
=
MULTI_TUPLE_APPEND
;
}
static
Oid
GetAppendOid
(
void
)
{
if
(
AppendOid
==
MULTI_TUPLE_APPEND
)
return
InvalidOid
;
return
AppendOid
;
}
src/backend/tcop/pquery.c
View file @
3751b495
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/tcop/pquery.c,v 1.
6 1997/08/19 21:34:07 momjian
Exp $
* $Header: /cvsroot/pgsql/src/backend/tcop/pquery.c,v 1.
7 1997/08/27 09:03:15 vadim
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -322,6 +322,9 @@ ProcessQueryDesc(QueryDesc *queryDesc)
*/
ExecutorRun
(
queryDesc
,
state
,
EXEC_RUN
,
0
);
/* save infos for EndCommand */
UpdateCommandInfo
(
operation
,
state
->
es_lastoid
,
state
->
es_processed
);
/* ----------------
* now, we close down all the scans and free allocated resources...
* with ExecutorEnd()
...
...
src/include/nodes/execnodes.h
View file @
3751b495
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: execnodes.h,v 1.
7 1997/08/06 03:42:02 momjian
Exp $
* $Id: execnodes.h,v 1.
8 1997/08/27 09:04:52 vadim
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -197,6 +197,8 @@ typedef struct EState {
TupleTable
es_tupleTable
;
JunkFilter
*
es_junkFilter
;
int
*
es_refcount
;
uint32
es_processed
;
/* # of tuples processed */
Oid
es_lastoid
;
/* last oid processed (by INSERT) */
}
EState
;
/* ----------------
...
...
src/include/tcop/dest.h
View file @
3751b495
...
...
@@ -26,7 +26,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: dest.h,v 1.
6 1997/08/19 21:40:06 momjian
Exp $
* $Id: dest.h,v 1.
7 1997/08/27 09:05:09 vadim
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -69,6 +69,6 @@ extern void NullCommand(CommandDest dest);
extern
void
BeginCommand
(
char
*
pname
,
int
operation
,
TupleDesc
attinfo
,
bool
isIntoRel
,
bool
isIntoPortal
,
char
*
tag
,
CommandDest
dest
);
extern
void
Update
AppendOid
(
Oid
newoid
);
extern
void
Update
CommandInfo
(
int
operation
,
Oid
lastoid
,
uint32
tuples
);
#endif
/* DEST_H */
src/interfaces/libpq/fe-exec.c
View file @
3751b495
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.3
3 1997/07/12 20:31:47 momjian
Exp $
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.3
4 1997/08/27 09:05:23 vadim
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -1532,18 +1532,70 @@ char* PQcmdStatus(PGresult *res) {
if the last command was an INSERT, return the oid string
if not, return ""
*/
const
char
*
PQoidStatus
(
PGresult
*
res
)
{
if
(
!
res
)
{
fprintf
(
stderr
,
"PQoidStatus() -- pointer to PQresult is null"
);
static
char
oidStatus
[
32
]
=
{
0
};
const
char
*
PQoidStatus
(
PGresult
*
res
)
{
if
(
!
res
)
{
fprintf
(
stderr
,
"PQoidStatus () -- pointer to PQresult is null"
);
return
NULL
;
}
oidStatus
[
0
]
=
0
;
if
(
!
res
->
cmdStatus
)
return
oidStatus
;
if
(
strncmp
(
res
->
cmdStatus
,
"INSERT"
,
6
)
==
0
)
{
char
*
p
=
res
->
cmdStatus
+
7
;
char
*
e
;
for
(
e
=
p
;
*
e
!=
' '
&&
*
e
;
)
e
++
;
sprintf
(
oidStatus
,
"%.*s"
,
e
-
p
,
p
);
}
return
oidStatus
;
}
/*
PQcmdTuples -
if the last command was an INSERT/UPDATE/DELETE, return number
of inserted/affected tuples, if not, return ""
*/
const
char
*
PQcmdTuples
(
PGresult
*
res
)
{
if
(
!
res
)
{
fprintf
(
stderr
,
"PQcmdTuples () -- pointer to PQresult is null"
);
return
NULL
;
}
if
(
!
res
->
cmdStatus
)
if
(
!
res
->
cmdStatus
)
return
""
;
if
(
strncmp
(
res
->
cmdStatus
,
"INSERT"
,
6
)
==
0
)
{
return
res
->
cmdStatus
+
7
;
}
else
if
(
strncmp
(
res
->
cmdStatus
,
"INSERT"
,
6
)
==
0
||
strncmp
(
res
->
cmdStatus
,
"DELETE"
,
6
)
==
0
||
strncmp
(
res
->
cmdStatus
,
"UPDATE"
,
6
)
==
0
)
{
char
*
p
=
res
->
cmdStatus
+
6
;
if
(
*
p
==
0
)
{
fprintf
(
stderr
,
"PQcmdTuples (%s) -- short input from server"
,
res
->
cmdStatus
);
return
NULL
;
}
p
++
;
if
(
*
(
res
->
cmdStatus
)
!=
'I'
)
/* UPDATE/DELETE */
return
(
p
);
while
(
*
p
!=
' '
&&
*
p
)
p
++
;
/* INSERT: skip oid */
if
(
*
p
==
0
)
{
fprintf
(
stderr
,
"PQcmdTuples (INSERT) -- there's no # of tuples"
);
return
NULL
;
}
p
++
;
return
(
p
);
}
return
""
;
}
...
...
src/interfaces/libpq/libpq-fe.h
View file @
3751b495
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: libpq-fe.h,v 1.
19 1997/05/09 03:28:54 scrappy
Exp $
* $Id: libpq-fe.h,v 1.
20 1997/08/27 09:05:24 vadim
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -225,6 +225,7 @@ extern Oid PQftype(PGresult *res, int field_num);
extern
short
PQfsize
(
PGresult
*
res
,
int
field_num
);
extern
char
*
PQcmdStatus
(
PGresult
*
res
);
extern
const
char
*
PQoidStatus
(
PGresult
*
res
);
extern
const
char
*
PQcmdTuples
(
PGresult
*
res
);
extern
char
*
PQgetvalue
(
PGresult
*
res
,
int
tup_num
,
int
field_num
);
extern
int
PQgetlength
(
PGresult
*
res
,
int
tup_num
,
int
field_num
);
extern
int
PQgetisnull
(
PGresult
*
res
,
int
tup_num
,
int
field_num
);
...
...
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