From ba17165f55fefd342c0c79fee75b7cb1a830214b Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Thu, 7 Jun 2001 00:09:32 +0000 Subject: [PATCH] This adds unary plus capability. No grammar changes, per Tom's request. Marko Kreen --- src/backend/commands/command.c | 14 ++++++++++++- src/backend/utils/adt/float.c | 20 ++++++++++++++++--- src/backend/utils/adt/int.c | 18 ++++++++++++++++- src/backend/utils/adt/int8.c | 10 +++++++++- src/backend/utils/adt/numeric.c | 15 +++++++++++++- src/include/catalog/pg_operator.h | 9 ++++++++- src/include/catalog/pg_proc.h | 15 +++++++++++++- src/include/utils/builtins.h | 7 ++++++- src/include/utils/int8.h | 3 ++- .../jdbc/org/postgresql/Connection.java | 4 ++-- 10 files changed, 102 insertions(+), 13 deletions(-) diff --git a/src/backend/commands/command.c b/src/backend/commands/command.c index b6e745c465..e50b9407b7 100644 --- a/src/backend/commands/command.c +++ b/src/backend/commands/command.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.131 2001/05/30 13:00:03 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.132 2001/06/07 00:09:28 momjian Exp $ * * NOTES * The PerformAddAttribute() code, like most of the relation @@ -176,6 +176,12 @@ PerformPortalFetch(char *name, if (!portal->atEnd) { ExecutorRun(queryDesc, estate, EXEC_FOR, (long) count); + /* + * I use CMD_UPDATE, because no CMD_MOVE or the like + * exists, and I would like to provide the same + * kind of info as CMD_UPDATE + */ + UpdateCommandInfo(CMD_UPDATE, 0, estate->es_processed); if (estate->es_processed > 0) portal->atStart = false; /* OK to back up now */ if (count <= 0 || (int) estate->es_processed < count) @@ -187,6 +193,12 @@ PerformPortalFetch(char *name, if (!portal->atStart) { ExecutorRun(queryDesc, estate, EXEC_BACK, (long) count); + /* + * I use CMD_UPDATE, because no CMD_MOVE or the like + * exists, and I would like to provide the same + * kind of info as CMD_UPDATE + */ + UpdateCommandInfo(CMD_UPDATE, 0, estate->es_processed); if (estate->es_processed > 0) portal->atEnd = false; /* OK to go forward now */ if (count <= 0 || (int) estate->es_processed < count) diff --git a/src/backend/utils/adt/float.c b/src/backend/utils/adt/float.c index da8ed2e29d..8e5408af31 100644 --- a/src/backend/utils/adt/float.c +++ b/src/backend/utils/adt/float.c @@ -8,16 +8,16 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/float.c,v 1.73 2001/06/02 20:18:30 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/float.c,v 1.74 2001/06/07 00:09:29 momjian Exp $ * *------------------------------------------------------------------------- */ /*---------- * OLD COMMENTS * Basic float4 ops: - * float4in, float4out, float4abs, float4um + * float4in, float4out, float4abs, float4um, float4up * Basic float8 ops: - * float8in, float8out, float8abs, float8um + * float8in, float8out, float8abs, float8um, float8up * Arithmetic operators: * float4pl, float4mi, float4mul, float4div * float8pl, float8mi, float8mul, float8div @@ -340,6 +340,13 @@ float4um(PG_FUNCTION_ARGS) PG_RETURN_FLOAT4((float4) -arg1); } +Datum +float4up(PG_FUNCTION_ARGS) +{ + float4 arg = PG_GETARG_FLOAT4(0); + PG_RETURN_FLOAT4(arg); +} + Datum float4larger(PG_FUNCTION_ARGS) { @@ -399,6 +406,13 @@ float8um(PG_FUNCTION_ARGS) PG_RETURN_FLOAT8(result); } +Datum +float8up(PG_FUNCTION_ARGS) +{ + float8 arg = PG_GETARG_FLOAT8(0); + PG_RETURN_FLOAT8(arg); +} + Datum float8larger(PG_FUNCTION_ARGS) { diff --git a/src/backend/utils/adt/int.c b/src/backend/utils/adt/int.c index 00c99805c9..e04ae89cea 100644 --- a/src/backend/utils/adt/int.c +++ b/src/backend/utils/adt/int.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/int.c,v 1.46 2001/03/22 03:59:51 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/int.c,v 1.47 2001/06/07 00:09:29 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -563,6 +563,14 @@ int4um(PG_FUNCTION_ARGS) PG_RETURN_INT32(-arg); } +Datum +int4up(PG_FUNCTION_ARGS) +{ + int32 arg = PG_GETARG_INT32(0); + + PG_RETURN_INT32(arg); +} + Datum int4pl(PG_FUNCTION_ARGS) { @@ -615,6 +623,14 @@ int2um(PG_FUNCTION_ARGS) PG_RETURN_INT16(-arg); } +Datum +int2up(PG_FUNCTION_ARGS) +{ + int16 arg = PG_GETARG_INT16(0); + + PG_RETURN_INT16(arg); +} + Datum int2pl(PG_FUNCTION_ARGS) { diff --git a/src/backend/utils/adt/int8.c b/src/backend/utils/adt/int8.c index 3f286069b7..055c8439fa 100644 --- a/src/backend/utils/adt/int8.c +++ b/src/backend/utils/adt/int8.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/int8.c,v 1.29 2001/03/22 03:59:51 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/int8.c,v 1.30 2001/06/07 00:09:29 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -412,6 +412,14 @@ int8um(PG_FUNCTION_ARGS) PG_RETURN_INT64(-val); } +Datum +int8up(PG_FUNCTION_ARGS) +{ + int64 val = PG_GETARG_INT64(0); + + PG_RETURN_INT64(val); +} + Datum int8pl(PG_FUNCTION_ARGS) { diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c index 99df5331bf..bb0e8b2b7e 100644 --- a/src/backend/utils/adt/numeric.c +++ b/src/backend/utils/adt/numeric.c @@ -5,7 +5,7 @@ * * 1998 Jan Wieck * - * $Header: /cvsroot/pgsql/src/backend/utils/adt/numeric.c,v 1.41 2001/05/03 19:00:36 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/numeric.c,v 1.42 2001/06/07 00:09:29 momjian Exp $ * * ---------- */ @@ -405,6 +405,19 @@ numeric_uminus(PG_FUNCTION_ARGS) } +Datum +numeric_uplus(PG_FUNCTION_ARGS) +{ + Numeric num = PG_GETARG_NUMERIC(0); + Numeric res; + + res = (Numeric) palloc(num->varlen); + memcpy(res, num, num->varlen); + + PG_RETURN_NUMERIC(res); +} + + Datum numeric_sign(PG_FUNCTION_ARGS) { diff --git a/src/include/catalog/pg_operator.h b/src/include/catalog/pg_operator.h index 7f201ea471..9e408a2c03 100644 --- a/src/include/catalog/pg_operator.h +++ b/src/include/catalog/pg_operator.h @@ -8,7 +8,7 @@ * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: pg_operator.h,v 1.88 2001/03/22 04:00:39 momjian Exp $ + * $Id: pg_operator.h,v 1.89 2001/06/07 00:09:29 momjian Exp $ * * NOTES * the genbki.sh script reads this file and generates .bki @@ -794,6 +794,13 @@ DATA(insert OID = 1889 ( "~" PGUID 0 l t f 0 20 20 0 0 0 0 int8not DATA(insert OID = 1890 ( "<<" PGUID 0 b t f 20 23 20 0 0 0 0 int8shl - - )); DATA(insert OID = 1891 ( ">>" PGUID 0 b t f 20 23 20 0 0 0 0 int8shr - - )); +DATA(insert OID = 1916 ( "+" PGUID 0 l t f 0 20 20 0 0 0 0 int8up - - )); +DATA(insert OID = 1917 ( "+" PGUID 0 l t f 0 21 21 0 0 0 0 int2up - - )); +DATA(insert OID = 1918 ( "+" PGUID 0 l t f 0 23 23 0 0 0 0 int4up - - )); +DATA(insert OID = 1919 ( "+" PGUID 0 l t f 0 700 700 0 0 0 0 float4up - - )); +DATA(insert OID = 1920 ( "+" PGUID 0 l t f 0 701 701 0 0 0 0 float8up - - )); +DATA(insert OID = 1921 ( "+" PGUID 0 l t f 0 1700 1700 0 0 0 0 numeric_uplus - - )); + /* * function prototypes */ diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h index 83e1e504cc..1208e68692 100644 --- a/src/include/catalog/pg_proc.h +++ b/src/include/catalog/pg_proc.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: pg_proc.h,v 1.188 2001/05/24 09:29:29 petere Exp $ + * $Id: pg_proc.h,v 1.189 2001/06/07 00:09:30 momjian Exp $ * * NOTES * The script catalog/genbki.sh reads this file and generates .bki @@ -2614,6 +2614,19 @@ DESCR("binary shift left"); DATA(insert OID = 1909 ( int8shr PGUID 12 f t t t 2 f 20 "20 23" 100 0 0 100 int8shr - )); DESCR("binary shift right"); +DATA(insert OID = 1910 ( int8up PGUID 12 f t t t 1 f 20 "20" 100 0 0 100 int8up - )); +DESCR("unary plus"); +DATA(insert OID = 1911 ( int2up PGUID 12 f t t t 1 f 21 "21" 100 0 0 100 int2up - )); +DESCR("unary plus"); +DATA(insert OID = 1912 ( int4up PGUID 12 f t t t 1 f 23 "23" 100 0 0 100 int4up - )); +DESCR("unary plus"); +DATA(insert OID = 1913 ( float4up PGUID 12 f t t t 1 f 700 "700" 100 0 0 100 float4up - )); +DESCR("unary plus"); +DATA(insert OID = 1914 ( float8up PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 float8up - )); +DESCR("unary plus"); +DATA(insert OID = 1915 ( numeric_uplus PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100 numeric_uplus - )); +DESCR("unary plus"); + /* * prototypes for functions pg_proc.c */ diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h index 45eb702324..53a12d67fc 100644 --- a/src/include/utils/builtins.h +++ b/src/include/utils/builtins.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: builtins.h,v 1.148 2001/03/22 04:01:11 momjian Exp $ + * $Id: builtins.h,v 1.149 2001/06/07 00:09:31 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -96,6 +96,7 @@ extern Datum int42le(PG_FUNCTION_ARGS); extern Datum int42gt(PG_FUNCTION_ARGS); extern Datum int42ge(PG_FUNCTION_ARGS); extern Datum int4um(PG_FUNCTION_ARGS); +extern Datum int4up(PG_FUNCTION_ARGS); extern Datum int4pl(PG_FUNCTION_ARGS); extern Datum int4mi(PG_FUNCTION_ARGS); extern Datum int4mul(PG_FUNCTION_ARGS); @@ -103,6 +104,7 @@ extern Datum int4div(PG_FUNCTION_ARGS); extern Datum int4abs(PG_FUNCTION_ARGS); extern Datum int4inc(PG_FUNCTION_ARGS); extern Datum int2um(PG_FUNCTION_ARGS); +extern Datum int2up(PG_FUNCTION_ARGS); extern Datum int2pl(PG_FUNCTION_ARGS); extern Datum int2mi(PG_FUNCTION_ARGS); extern Datum int2mul(PG_FUNCTION_ARGS); @@ -184,10 +186,12 @@ extern Datum float8in(PG_FUNCTION_ARGS); extern Datum float8out(PG_FUNCTION_ARGS); extern Datum float4abs(PG_FUNCTION_ARGS); extern Datum float4um(PG_FUNCTION_ARGS); +extern Datum float4up(PG_FUNCTION_ARGS); extern Datum float4larger(PG_FUNCTION_ARGS); extern Datum float4smaller(PG_FUNCTION_ARGS); extern Datum float8abs(PG_FUNCTION_ARGS); extern Datum float8um(PG_FUNCTION_ARGS); +extern Datum float8up(PG_FUNCTION_ARGS); extern Datum float8larger(PG_FUNCTION_ARGS); extern Datum float8smaller(PG_FUNCTION_ARGS); extern Datum float4pl(PG_FUNCTION_ARGS); @@ -532,6 +536,7 @@ extern Datum numeric_out(PG_FUNCTION_ARGS); extern Datum numeric(PG_FUNCTION_ARGS); extern Datum numeric_abs(PG_FUNCTION_ARGS); extern Datum numeric_uminus(PG_FUNCTION_ARGS); +extern Datum numeric_uplus(PG_FUNCTION_ARGS); extern Datum numeric_sign(PG_FUNCTION_ARGS); extern Datum numeric_round(PG_FUNCTION_ARGS); extern Datum numeric_trunc(PG_FUNCTION_ARGS); diff --git a/src/include/utils/int8.h b/src/include/utils/int8.h index 4130bec64f..2b96d83791 100644 --- a/src/include/utils/int8.h +++ b/src/include/utils/int8.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: int8.h,v 1.25 2001/01/24 19:43:28 momjian Exp $ + * $Id: int8.h,v 1.26 2001/06/07 00:09:32 momjian Exp $ * * NOTES * These data types are supported on all 64-bit architectures, and may @@ -66,6 +66,7 @@ extern Datum int28le(PG_FUNCTION_ARGS); extern Datum int28ge(PG_FUNCTION_ARGS); extern Datum int8um(PG_FUNCTION_ARGS); +extern Datum int8up(PG_FUNCTION_ARGS); extern Datum int8pl(PG_FUNCTION_ARGS); extern Datum int8mi(PG_FUNCTION_ARGS); extern Datum int8mul(PG_FUNCTION_ARGS); diff --git a/src/interfaces/jdbc/org/postgresql/Connection.java b/src/interfaces/jdbc/org/postgresql/Connection.java index 521005e3c9..357a4ee9e4 100644 --- a/src/interfaces/jdbc/org/postgresql/Connection.java +++ b/src/interfaces/jdbc/org/postgresql/Connection.java @@ -10,7 +10,7 @@ import org.postgresql.largeobject.*; import org.postgresql.util.*; /** - * $Id: Connection.java,v 1.16 2001/06/01 20:57:58 momjian Exp $ + * $Id: Connection.java,v 1.17 2001/06/07 00:09:32 momjian Exp $ * * This abstract class is used by org.postgresql.Driver to open either the JDBC1 or * JDBC2 versions of the Connection class. @@ -505,7 +505,7 @@ public abstract class Connection recv_status = pg_stream.ReceiveString(receive_sbuf,8192,getEncoding()); // Now handle the update count correctly. - if(recv_status.startsWith("INSERT") || recv_status.startsWith("UPDATE") || recv_status.startsWith("DELETE")) { + if(recv_status.startsWith("INSERT") || recv_status.startsWith("UPDATE") || recv_status.startsWith("DELETE") || recv_status.startsWith("MOVE")) { try { update_count = Integer.parseInt(recv_status.substring(1+recv_status.lastIndexOf(' '))); } catch(NumberFormatException nfe) {