]> granicus.if.org Git - postgresql/commitdiff
Integer binary operators, from Marko Kreen <marko@l-t.ee>. Renamed bitxor
authorPeter Eisentraut <peter_e@gmx.net>
Tue, 24 Oct 2000 20:16:48 +0000 (20:16 +0000)
committerPeter Eisentraut <peter_e@gmx.net>
Tue, 24 Oct 2000 20:16:48 +0000 (20:16 +0000)
operator to '#' for consistency.  Parser still needs work.

doc/src/sgml/oper.sgml
src/backend/utils/adt/int.c
src/backend/utils/adt/int8.c
src/include/catalog/pg_operator.h
src/include/catalog/pg_proc.h
src/include/utils/builtins.h
src/include/utils/int8.h

index 495f3caefc6ecf11c965f6f4ac08188a1dc49e76..deb3d33cde837f56842af35509bc25edee9329fd 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/Attic/oper.sgml,v 1.20 2000/10/04 15:47:45 petere Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/Attic/oper.sgml,v 1.21 2000/10/24 20:13:31 petere Exp $
 -->
 
  <Chapter Id="operators">
@@ -493,6 +493,36 @@ logical union
        <ENTRY>Cube root</ENTRY>
        <ENTRY>||/ 27.0</ENTRY>
        </ROW>
+       <ROW>
+       <ENTRY> & </ENTRY>
+       <ENTRY>Binary AND</ENTRY>
+       <ENTRY>91 & 15</ENTRY>
+       </ROW>
+       <ROW>
+       <ENTRY> | </ENTRY>
+       <ENTRY>Binary OR</ENTRY>
+       <ENTRY>32 | 3</ENTRY>
+       </ROW>
+       <ROW>
+       <ENTRY> # </ENTRY>
+       <ENTRY>Binary XOR</ENTRY>
+       <ENTRY>15 # 4</ENTRY>
+       </ROW>
+       <ROW>
+       <ENTRY> ~ </ENTRY>
+       <ENTRY>Binary NOT</ENTRY>
+       <ENTRY>~1</ENTRY>
+       </ROW>
+       <ROW>
+       <ENTRY> &lt;&lt; </ENTRY>
+       <ENTRY>Binary shift left</ENTRY>
+       <ENTRY>1 &lt;&lt; 4</ENTRY>
+       </ROW>
+       <ROW>
+       <ENTRY> &gt;&gt; </ENTRY>
+       <ENTRY>Binary shift right</ENTRY>
+       <ENTRY>8 &gt;&gt; 2</ENTRY>
+       </ROW>
       </TBODY>
      </TGROUP>
     </TABLE>
index b1153c30d1763f40225d4578abe41a9b1cb4297c..4f786784eb7ae3ff0e652c28bfa9c47d953408a7 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/adt/int.c,v 1.42 2000/08/01 18:29:35 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/adt/int.c,v 1.43 2000/10/24 20:14:35 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -843,3 +843,121 @@ int4smaller(PG_FUNCTION_ARGS)
 
        PG_RETURN_INT32((arg1 < arg2) ? arg1 : arg2);
 }
+
+/* Binary arithmetics
+ *
+ *             int[24]and              - returns arg1 & arg2
+ *             int[24]or               - returns arg1 | arg2
+ *             int[24]xor              - returns arg1 # arg2
+ *             int[24]not              - returns ~arg1
+ *             int[24]shl              - returns arg1 << arg2
+ *             int[24]shr              - returns arg1 >> arg2
+ */
+
+Datum
+int4and(PG_FUNCTION_ARGS)
+{
+       int32           arg1 = PG_GETARG_INT32(0);
+       int32           arg2 = PG_GETARG_INT32(1);
+
+       PG_RETURN_INT32(arg1 & arg2);
+}
+
+Datum
+int4or(PG_FUNCTION_ARGS)
+{
+       int32           arg1 = PG_GETARG_INT32(0);
+       int32           arg2 = PG_GETARG_INT32(1);
+
+       PG_RETURN_INT32(arg1 | arg2);
+}
+
+Datum
+int4xor(PG_FUNCTION_ARGS)
+{
+       int32           arg1 = PG_GETARG_INT32(0);
+       int32           arg2 = PG_GETARG_INT32(1);
+
+       PG_RETURN_INT32(arg1 ^ arg2);
+}
+
+Datum
+int4shl(PG_FUNCTION_ARGS)
+{
+       int32           arg1 = PG_GETARG_INT32(0);
+       int32           arg2 = PG_GETARG_INT32(1);
+
+       PG_RETURN_INT32(arg1 << arg2);
+}
+
+Datum
+int4shr(PG_FUNCTION_ARGS)
+{
+       int32           arg1 = PG_GETARG_INT32(0);
+       int32           arg2 = PG_GETARG_INT32(1);
+
+       PG_RETURN_INT32(arg1 >> arg2);
+}
+
+Datum
+int4not(PG_FUNCTION_ARGS)
+{
+       int32           arg1 = PG_GETARG_INT32(0);
+
+       PG_RETURN_INT32(~arg1);
+}
+
+Datum
+int2and(PG_FUNCTION_ARGS)
+{
+       int16           arg1 = PG_GETARG_INT16(0);
+       int16           arg2 = PG_GETARG_INT16(1);
+
+       PG_RETURN_INT16(arg1 & arg2);
+}
+
+Datum
+int2or(PG_FUNCTION_ARGS)
+{
+       int16           arg1 = PG_GETARG_INT16(0);
+       int16           arg2 = PG_GETARG_INT16(1);
+
+       PG_RETURN_INT16(arg1 | arg2);
+}
+
+Datum
+int2xor(PG_FUNCTION_ARGS)
+{
+       int16           arg1 = PG_GETARG_INT16(0);
+       int16           arg2 = PG_GETARG_INT16(1);
+
+       PG_RETURN_INT16(arg1 ^ arg2);
+}
+
+Datum
+int2not(PG_FUNCTION_ARGS)
+{
+       int16           arg1 = PG_GETARG_INT16(0);
+
+       PG_RETURN_INT16(~arg1);
+}
+
+
+Datum
+int2shl(PG_FUNCTION_ARGS)
+{
+       int16           arg1 = PG_GETARG_INT16(0);
+       int32           arg2 = PG_GETARG_INT32(1);
+
+       PG_RETURN_INT16(arg1 << arg2);
+}
+
+Datum
+int2shr(PG_FUNCTION_ARGS)
+{
+       int16           arg1 = PG_GETARG_INT16(0);
+       int32           arg2 = PG_GETARG_INT32(1);
+
+       PG_RETURN_INT16(arg1 >> arg2);
+}
+
index b88fc5c45b06b9eaea3b804fe298231040459ea9..bc4b64b9ec4df4ab607340f5a2ade67fb52746d5 100644 (file)
@@ -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.24 2000/07/28 05:07:41 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/adt/int8.c,v 1.25 2000/10/24 20:14:35 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -591,6 +591,68 @@ int48div(PG_FUNCTION_ARGS)
        PG_RETURN_INT64(val1 / val2);
 }
 
+/* Binary arithmetics
+ *
+ *             int8and         - returns arg1 & arg2
+ *             int8or          - returns arg1 | arg2
+ *             int8xor         - returns arg1 # arg2
+ *             int8not         - returns ~arg1
+ *             int8shl         - returns arg1 << arg2
+ *             int8shr         - returns arg1 >> arg2
+ */
+
+Datum
+int8and(PG_FUNCTION_ARGS)
+{
+       int64           arg1 = PG_GETARG_INT64(0);
+       int64           arg2 = PG_GETARG_INT64(1);
+
+       PG_RETURN_INT64(arg1 & arg2);
+}
+
+Datum
+int8or(PG_FUNCTION_ARGS)
+{
+       int64           arg1 = PG_GETARG_INT64(0);
+       int64           arg2 = PG_GETARG_INT64(1);
+
+       PG_RETURN_INT64(arg1 | arg2);
+}
+
+Datum
+int8xor(PG_FUNCTION_ARGS)
+{
+       int64           arg1 = PG_GETARG_INT64(0);
+       int64           arg2 = PG_GETARG_INT64(1);
+
+       PG_RETURN_INT64(arg1 ^ arg2);
+}
+
+Datum
+int8not(PG_FUNCTION_ARGS)
+{
+       int64           arg1 = PG_GETARG_INT64(0);
+
+       PG_RETURN_INT64(~arg1);
+}
+
+Datum
+int8shl(PG_FUNCTION_ARGS)
+{
+       int64           arg1 = PG_GETARG_INT64(0);
+       int32           arg2 = PG_GETARG_INT32(1);
+
+       PG_RETURN_INT64(arg1 << arg2);
+}
+
+Datum
+int8shr(PG_FUNCTION_ARGS)
+{
+       int64           arg1 = PG_GETARG_INT64(0);
+       int32           arg2 = PG_GETARG_INT32(1);
+
+       PG_RETURN_INT64(arg1 >> arg2);
+}
 
 /*----------------------------------------------------------
  *     Conversion operators.
index cf97d29516cc532a6a5b66d2a184de30eb1d2b7b..219652fbea7b8ba96babf7d7ea485331439d0ad9 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_operator.h,v 1.82 2000/09/15 18:45:27 tgl Exp $
+ * $Id: pg_operator.h,v 1.83 2000/10/24 20:15:45 petere Exp $
  *
  * NOTES
  *       the genbki.sh script reads this file and generates .bki
@@ -727,7 +727,7 @@ DATA(insert OID = 1788 (  "<="        PGUID 0 b t f 1560 1560       16 1789 1787    0        0 bitle
 DATA(insert OID = 1789 (  ">="   PGUID 0 b t f 1560 1560       16 1788 1786    0        0 bitge scalargtsel scalargtjoinsel ));
 DATA(insert OID = 1791 (  "&"    PGUID 0 b t f 1560 1560 1560 1791    0        0        0 bitand - - ));
 DATA(insert OID = 1792 (  "|"    PGUID 0 b t f 1560 1560 1560 1792    0        0        0 bitor - - ));
-DATA(insert OID = 1793 (  "^"    PGUID 0 b t f 1560 1560 1560 1793    0        0        0 bitxor - - ));
+DATA(insert OID = 1793 (  "#"    PGUID 0 b t f 1560 1560 1560 1793    0        0        0 bitxor - - ));
 DATA(insert OID = 1794 (  "~"    PGUID 0 l t f    0 1560 1560    0    0        0        0 bitnot - - ));
 DATA(insert OID = 1795 (  "<<"   PGUID 0 b t f 1560   23 1560    0    0        0        0 bitshiftleft - - ));
 DATA(insert OID = 1796 (  ">>"   PGUID 0 b t f 1560   23 1560    0    0        0        0 bitshiftright - - ));
@@ -754,6 +754,27 @@ DATA(insert OID = 1871 ( ">"          PGUID 0 b t f  20  21  16  1864 1872   0  0 int8
 DATA(insert OID = 1872 ( "<="     PGUID 0 b t f  20  21  16  1867 1871   0  0 int82le scalarltsel scalarltjoinsel ));
 DATA(insert OID = 1873 ( ">="     PGUID 0 b t f  20  21  16  1866 1870   0  0 int82ge scalargtsel scalargtjoinsel ));
 
+DATA(insert OID = 1874 ( "&"      PGUID 0 b t f  21  21  21  1874    0   0  0 int2and - - ));
+DATA(insert OID = 1875 ( "|"      PGUID 0 b t f  21  21  21  1875    0   0  0 int2or - - ));
+DATA(insert OID = 1876 ( "#"      PGUID 0 b t f  21  21  21  1876    0   0  0 int2xor - - ));
+DATA(insert OID = 1877 ( "~"      PGUID 0 l t f   0  21  21     0    0   0  0 int2not - - ));
+DATA(insert OID = 1878 ( "<<"     PGUID 0 b t f  21  23  21     0    0   0  0 int2shl - - ));
+DATA(insert OID = 1879 ( ">>"     PGUID 0 b t f  21  23  21     0    0   0  0 int2shr - - ));
+
+DATA(insert OID = 1880 ( "&"      PGUID 0 b t f  23  23  23  1880    0   0  0 int4and - - ));
+DATA(insert OID = 1881 ( "|"      PGUID 0 b t f  23  23  23  1881    0   0  0 int4or - - ));
+DATA(insert OID = 1882 ( "#"      PGUID 0 b t f  23  23  23  1882    0   0  0 int4xor - - ));
+DATA(insert OID = 1883 ( "~"      PGUID 0 l t f   0  23  23     0    0   0  0 int4not - - ));
+DATA(insert OID = 1884 ( "<<"     PGUID 0 b t f  23  23  23     0    0   0  0 int4shl - - ));
+DATA(insert OID = 1885 ( ">>"     PGUID 0 b t f  23  23  23     0    0   0  0 int4shr - - ));
+
+DATA(insert OID = 1886 ( "&"      PGUID 0 b t f  20  20  20  1886    0   0  0 int8and - - ));
+DATA(insert OID = 1887 ( "|"      PGUID 0 b t f  20  20  20  1887    0   0  0 int8or - - ));
+DATA(insert OID = 1888 ( "#"      PGUID 0 b t f  20  20  20  1888    0   0  0 int8xor - - ));
+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 - - ));
+
 /*
  * function prototypes
  */
index 66ffa87e47308a29c86bc5da4fe0fc2e1eef4e8e..1748e1ea947966cd60224dfa397638f3f66adaf4 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_proc.h,v 1.169 2000/10/11 15:31:13 pjw Exp $
+ * $Id: pg_proc.h,v 1.170 2000/10/24 20:15:45 petere Exp $
  *
  * NOTES
  *       The script catalog/genbki.sh reads this file and generates .bki
@@ -2513,6 +2513,44 @@ DESCR("less-than-or-equal");
 DATA(insert OID = 1861 (  int82ge                 PGUID 12 f t t t 2 f 16 "20 21" 100 0 0 100  int82ge - ));
 DESCR("greater-than-or-equal");
 
+DATA(insert OID = 1892 (  int2and                 PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2and - ));
+DESCR("binary and");
+DATA(insert OID = 1893 (  int2or                  PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2or - ));
+DESCR("binary or");
+DATA(insert OID = 1894 (  int2xor                 PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2xor - ));
+DESCR("binary xor");
+DATA(insert OID = 1895 (  int2not                 PGUID 12 f t t t 1 f 21 "21" 100 0 0 100  int2not - ));
+DESCR("binary not");
+DATA(insert OID = 1896 (  int2shl                 PGUID 12 f t t t 2 f 21 "21 23" 100 0 0 100  int2shl - ));
+DESCR("binary shift left");
+DATA(insert OID = 1897 (  int2shr                 PGUID 12 f t t t 2 f 21 "21 23" 100 0 0 100  int2shr - ));
+DESCR("binary shift right");
+
+DATA(insert OID = 1898 (  int4and                 PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4and - ));
+DESCR("binary and");
+DATA(insert OID = 1899 (  int4or                  PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4or - ));
+DESCR("binary or");
+DATA(insert OID = 1900 (  int4xor                 PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4xor - ));
+DESCR("binary xor");
+DATA(insert OID = 1901 (  int4not                 PGUID 12 f t t t 1 f 23 "23" 100 0 0 100  int4not - ));
+DESCR("binary not");
+DATA(insert OID = 1902 (  int4shl                 PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4shl - ));
+DESCR("binary shift left");
+DATA(insert OID = 1903 (  int4shr                 PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4shr - ));
+DESCR("binary shift right");
+
+DATA(insert OID = 1904 (  int8and                 PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8and - ));
+DESCR("binary and");
+DATA(insert OID = 1905 (  int8or                  PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8or - ));
+DESCR("binary or");
+DATA(insert OID = 1906 (  int8xor                 PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8xor - ));
+DESCR("binary xor");
+DATA(insert OID = 1907 (  int8not                 PGUID 12 f t t t 1 f 20 "20" 100 0 0 100  int8not - ));
+DESCR("binary not");
+DATA(insert OID = 1908 (  int8shl                 PGUID 12 f t t t 2 f 20 "20 23" 100 0 0 100  int8shl - ));
+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");
 
 /*
  * prototypes for functions pg_proc.c
index c3b9b2d0bc9f996d2a9dca434a828969e402ec71..446c33cc420684f505bfbcd66a797d53017f1eeb 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: builtins.h,v 1.139 2000/09/25 16:36:36 tgl Exp $
+ * $Id: builtins.h,v 1.140 2000/10/24 20:16:47 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -127,6 +127,19 @@ extern Datum int2smaller(PG_FUNCTION_ARGS);
 extern Datum int4larger(PG_FUNCTION_ARGS);
 extern Datum int4smaller(PG_FUNCTION_ARGS);
 
+extern Datum int4and(PG_FUNCTION_ARGS);
+extern Datum int4or(PG_FUNCTION_ARGS);
+extern Datum int4xor(PG_FUNCTION_ARGS);
+extern Datum int4not(PG_FUNCTION_ARGS);
+extern Datum int4shl(PG_FUNCTION_ARGS);
+extern Datum int4shr(PG_FUNCTION_ARGS);
+extern Datum int2and(PG_FUNCTION_ARGS);
+extern Datum int2or(PG_FUNCTION_ARGS);
+extern Datum int2xor(PG_FUNCTION_ARGS);
+extern Datum int2not(PG_FUNCTION_ARGS);
+extern Datum int2shl(PG_FUNCTION_ARGS);
+extern Datum int2shr(PG_FUNCTION_ARGS);
+
 /* name.c */
 extern Datum namein(PG_FUNCTION_ARGS);
 extern Datum nameout(PG_FUNCTION_ARGS);
index 83791f281bb6ab6fc50ab395e6b8e3b19f07daf4..9ebe8efc6dd41a83380fa472e2c2add814be63e4 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: int8.h,v 1.23 2000/07/28 05:07:44 tgl Exp $
+ * $Id: int8.h,v 1.24 2000/10/24 20:16:48 petere Exp $
  *
  * NOTES
  * These data types are supported on all 64-bit architectures, and may
@@ -76,6 +76,13 @@ extern Datum int8mod(PG_FUNCTION_ARGS);
 extern Datum int8larger(PG_FUNCTION_ARGS);
 extern Datum int8smaller(PG_FUNCTION_ARGS);
 
+extern Datum int8and(PG_FUNCTION_ARGS);
+extern Datum int8or(PG_FUNCTION_ARGS);
+extern Datum int8xor(PG_FUNCTION_ARGS);
+extern Datum int8not(PG_FUNCTION_ARGS);
+extern Datum int8shl(PG_FUNCTION_ARGS);
+extern Datum int8shr(PG_FUNCTION_ARGS);
+
 extern Datum int84pl(PG_FUNCTION_ARGS);
 extern Datum int84mi(PG_FUNCTION_ARGS);
 extern Datum int84mul(PG_FUNCTION_ARGS);