doc: Update SQL features/conformance information to SQL:2023
authorPeter Eisentraut <[email protected]>
Wed, 5 Apr 2023 06:55:44 +0000 (08:55 +0200)
committerPeter Eisentraut <[email protected]>
Wed, 5 Apr 2023 07:20:25 +0000 (09:20 +0200)
Optional subfeatures have been changed to top-level features, so there
is a bit of a churn in the list for that.

Some existing functions have been added to the standard, so they are
moved from the "other" to the "standard" lists in their sections.

Discussion: https://www.postgresql.org/message-id/flat/63f285d9-4ec8-0c9e-4bf5-e76334ddc0af@enterprisedb.com

doc/src/sgml/datatype.sgml
doc/src/sgml/features.sgml
doc/src/sgml/func.sgml
src/backend/catalog/information_schema.sql
src/backend/catalog/sql_features.txt
src/include/catalog/catversion.h

index f6b867f344ab2d0fa052bbb3d250e3e26ebfd423..8d32a8c9c5be5c67ef45d224b8645be1eda0129a 100644 (file)
@@ -1242,8 +1242,7 @@ SELECT '52093.89'::money::numeric::float8;
     than zero and cannot exceed 10485760.
     <type>character</type> without length specifier is equivalent to
     <type>character(1)</type>. If <type>character varying</type> is used
-    without length specifier, the type accepts strings of any size. The
-    latter behavior is a <productname>PostgreSQL</productname> extension.
+    without length specifier, the type accepts strings of any size.
    </para>
 
    <para>
index b98056214f361ebf56f255b06782158f9ed8995d..575afa34760c713081a9ea8768ef09a5864ce32e 100644 (file)
@@ -14,9 +14,9 @@
  <para>
   The formal name of the SQL standard is ISO/IEC 9075 <quote>Database
   Language SQL</quote>.  A revised version of the standard is released
-  from time to time; the most recent update appearing in 2016.
-  The 2016 version is referred to as ISO/IEC 9075:2016, or simply as SQL:2016.
-  The versions prior to that were SQL:2011, SQL:2008, SQL:2006, SQL:2003,
+  from time to time; the most recent update appearing in 2023.
+  The 2023 version is referred to as ISO/IEC 9075:2023, or simply as SQL:2023.
+  The versions prior to that were SQL:2016, SQL:2011, SQL:2008, SQL:2006, SQL:2003,
   SQL:1999, and SQL-92.  Each version
   replaces the previous one, so claims of conformance to earlier
   versions have no official merit.
@@ -62,6 +62,7 @@
    <listitem><para>ISO/IEC 9075-13 Routines and Types using the Java Language (SQL/JRT)</para><indexterm><primary>SQL/JRT</primary></indexterm></listitem>
    <listitem><para>ISO/IEC 9075-14 XML-related specifications (SQL/XML)</para><indexterm><primary>SQL/XML</primary></indexterm></listitem>
    <listitem><para>ISO/IEC 9075-15 Multi-dimensional arrays (SQL/MDA)</para><indexterm><primary>SQL/MDA</primary></indexterm></listitem>
+   <listitem><para>ISO/IEC 9075-16 Property Graph Queries (SQL/PGQ)</para><indexterm><primary>SQL/PGQ</primary></indexterm></listitem>
   </itemizedlist>
 
   Note that some part numbers are not (or no longer) used.
   11, and 14.  Part 3 is covered by the ODBC driver, and part 13 is
   covered by the PL/Java plug-in, but exact conformance is currently
   not being verified for these components.  There are currently no
-  implementations of parts 4, 10, and 15
+  implementations of parts 4, 10, 15, and 16
   for <productname>PostgreSQL</productname>.
  </para>
 
  <para>
-  PostgreSQL supports most of the major features of SQL:2016.  Out of
+  PostgreSQL supports most of the major features of SQL:2023.  Out of
   177 mandatory features required for full Core conformance,
   PostgreSQL conforms to at least 170.  In addition, there is a long
   list of supported optional features.  It might be worth noting that at
   the time of writing, no current version of any database management
-  system claims full conformance to Core SQL:2016.
+  system claims full conformance to Core SQL:2023.
  </para>
 
  <para>
   In the following two sections, we provide a list of those features
   that <productname>PostgreSQL</productname> supports, followed by a
-  list of the features defined in <acronym>SQL:2016</acronym> which
+  list of the features defined in <acronym>SQL:2023</acronym> which
   are not yet supported in <productname>PostgreSQL</productname>.
   Both of these lists are approximate: There might be minor details that
   are nonconforming for a feature that is listed as supported, and
    <title>Unsupported Features</title>
 
    <para>
-    The following features defined in <acronym>SQL:2016</acronym> are not
+    The following features defined in <acronym>SQL:2023</acronym> are not
     implemented in this release of
     <productname>PostgreSQL</productname>. In a few cases, equivalent
     functionality is available.
index 918a4922348f99dd0739231723101a3d3a75a821..dc44a74eb2519ddcb25e6bef1cad8b6ac717b393 100644 (file)
@@ -2452,6 +2452,26 @@ repeat('Pg', 4) <returnvalue>PgPgPgPg</returnvalue>
        </para></entry>
       </row>
 
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        <indexterm>
+         <primary>btrim</primary>
+        </indexterm>
+        <function>btrim</function> ( <parameter>string</parameter> <type>text</type>
+        <optional>, <parameter>characters</parameter> <type>text</type> </optional> )
+        <returnvalue>text</returnvalue>
+       </para>
+       <para>
+        Removes the longest string containing only characters
+        in <parameter>characters</parameter> (a space by default)
+        from the start and end of <parameter>string</parameter>.
+       </para>
+       <para>
+        <literal>btrim('xyxtrimyyx', 'xyz')</literal>
+        <returnvalue>trim</returnvalue>
+       </para></entry>
+      </row>
+
       <row>
        <entry role="func_table_entry"><para role="func_signature">
         <indexterm>
@@ -2547,6 +2567,49 @@ repeat('Pg', 4) <returnvalue>PgPgPgPg</returnvalue>
        </para></entry>
       </row>
 
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        <indexterm>
+         <primary>lpad</primary>
+        </indexterm>
+        <function>lpad</function> ( <parameter>string</parameter> <type>text</type>,
+        <parameter>length</parameter> <type>integer</type>
+        <optional>, <parameter>fill</parameter> <type>text</type> </optional> )
+        <returnvalue>text</returnvalue>
+       </para>
+       <para>
+        Extends the <parameter>string</parameter> to length
+        <parameter>length</parameter> by prepending the characters
+        <parameter>fill</parameter> (a space by default).  If the
+        <parameter>string</parameter> is already longer than
+        <parameter>length</parameter> then it is truncated (on the right).
+       </para>
+       <para>
+        <literal>lpad('hi', 5, 'xy')</literal>
+        <returnvalue>xyxhi</returnvalue>
+       </para></entry>
+      </row>
+
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        <indexterm>
+         <primary>ltrim</primary>
+        </indexterm>
+        <function>ltrim</function> ( <parameter>string</parameter> <type>text</type>
+        <optional>, <parameter>characters</parameter> <type>text</type> </optional> )
+        <returnvalue>text</returnvalue>
+       </para>
+       <para>
+        Removes the longest string containing only characters in
+        <parameter>characters</parameter> (a space by default) from the start of
+        <parameter>string</parameter>.
+       </para>
+       <para>
+        <literal>ltrim('zzzytest', 'xyz')</literal>
+        <returnvalue>test</returnvalue>
+       </para></entry>
+      </row>
+
       <row>
        <entry role="func_table_entry"><para role="func_signature">
         <indexterm>
@@ -2650,6 +2713,49 @@ repeat('Pg', 4) <returnvalue>PgPgPgPg</returnvalue>
        </para></entry>
       </row>
 
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        <indexterm>
+         <primary>rpad</primary>
+        </indexterm>
+        <function>rpad</function> ( <parameter>string</parameter> <type>text</type>,
+        <parameter>length</parameter> <type>integer</type>
+        <optional>, <parameter>fill</parameter> <type>text</type> </optional> )
+        <returnvalue>text</returnvalue>
+       </para>
+       <para>
+        Extends the <parameter>string</parameter> to length
+        <parameter>length</parameter> by appending the characters
+        <parameter>fill</parameter> (a space by default).  If the
+        <parameter>string</parameter> is already longer than
+        <parameter>length</parameter> then it is truncated.
+       </para>
+       <para>
+        <literal>rpad('hi', 5, 'xy')</literal>
+        <returnvalue>hixyx</returnvalue>
+       </para></entry>
+      </row>
+
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        <indexterm>
+         <primary>rtrim</primary>
+        </indexterm>
+        <function>rtrim</function> ( <parameter>string</parameter> <type>text</type>
+         <optional>, <parameter>characters</parameter> <type>text</type> </optional> )
+        <returnvalue>text</returnvalue>
+       </para>
+       <para>
+        Removes the longest string containing only characters in
+        <parameter>characters</parameter> (a space by default) from the end of
+        <parameter>string</parameter>.
+       </para>
+       <para>
+        <literal>rtrim('testxxzx', 'xyz')</literal>
+        <returnvalue>test</returnvalue>
+       </para></entry>
+      </row>
+
       <row>
        <entry role="func_table_entry"><para role="func_signature">
         <indexterm>
@@ -2842,26 +2948,6 @@ repeat('Pg', 4) <returnvalue>PgPgPgPg</returnvalue>
        </para></entry>
       </row>
 
-      <row>
-       <entry role="func_table_entry"><para role="func_signature">
-        <indexterm>
-         <primary>btrim</primary>
-        </indexterm>
-        <function>btrim</function> ( <parameter>string</parameter> <type>text</type>
-        <optional>, <parameter>characters</parameter> <type>text</type> </optional> )
-        <returnvalue>text</returnvalue>
-       </para>
-       <para>
-        Removes the longest string containing only characters
-        in <parameter>characters</parameter> (a space by default)
-        from the start and end of <parameter>string</parameter>.
-       </para>
-       <para>
-        <literal>btrim('xyxtrimyyx', 'xyz')</literal>
-        <returnvalue>trim</returnvalue>
-       </para></entry>
-      </row>
-
       <row>
        <entry role="func_table_entry"><para role="func_signature">
         <indexterm>
@@ -2999,49 +3085,6 @@ repeat('Pg', 4) <returnvalue>PgPgPgPg</returnvalue>
        </para></entry>
       </row>
 
-      <row>
-       <entry role="func_table_entry"><para role="func_signature">
-        <indexterm>
-         <primary>lpad</primary>
-        </indexterm>
-        <function>lpad</function> ( <parameter>string</parameter> <type>text</type>,
-        <parameter>length</parameter> <type>integer</type>
-        <optional>, <parameter>fill</parameter> <type>text</type> </optional> )
-        <returnvalue>text</returnvalue>
-       </para>
-       <para>
-        Extends the <parameter>string</parameter> to length
-        <parameter>length</parameter> by prepending the characters
-        <parameter>fill</parameter> (a space by default).  If the
-        <parameter>string</parameter> is already longer than
-        <parameter>length</parameter> then it is truncated (on the right).
-       </para>
-       <para>
-        <literal>lpad('hi', 5, 'xy')</literal>
-        <returnvalue>xyxhi</returnvalue>
-       </para></entry>
-      </row>
-
-      <row>
-       <entry role="func_table_entry"><para role="func_signature">
-        <indexterm>
-         <primary>ltrim</primary>
-        </indexterm>
-        <function>ltrim</function> ( <parameter>string</parameter> <type>text</type>
-        <optional>, <parameter>characters</parameter> <type>text</type> </optional> )
-        <returnvalue>text</returnvalue>
-       </para>
-       <para>
-        Removes the longest string containing only characters in
-        <parameter>characters</parameter> (a space by default) from the start of
-        <parameter>string</parameter>.
-       </para>
-       <para>
-        <literal>ltrim('zzzytest', 'xyz')</literal>
-        <returnvalue>test</returnvalue>
-       </para></entry>
-      </row>
-
       <row>
        <entry role="func_table_entry"><para role="func_signature">
         <indexterm>
@@ -3505,49 +3548,6 @@ repeat('Pg', 4) <returnvalue>PgPgPgPg</returnvalue>
        </para></entry>
       </row>
 
-      <row>
-       <entry role="func_table_entry"><para role="func_signature">
-        <indexterm>
-         <primary>rpad</primary>
-        </indexterm>
-        <function>rpad</function> ( <parameter>string</parameter> <type>text</type>,
-        <parameter>length</parameter> <type>integer</type>
-        <optional>, <parameter>fill</parameter> <type>text</type> </optional> )
-        <returnvalue>text</returnvalue>
-       </para>
-       <para>
-        Extends the <parameter>string</parameter> to length
-        <parameter>length</parameter> by appending the characters
-        <parameter>fill</parameter> (a space by default).  If the
-        <parameter>string</parameter> is already longer than
-        <parameter>length</parameter> then it is truncated.
-       </para>
-       <para>
-        <literal>rpad('hi', 5, 'xy')</literal>
-        <returnvalue>hixyx</returnvalue>
-       </para></entry>
-      </row>
-
-      <row>
-       <entry role="func_table_entry"><para role="func_signature">
-        <indexterm>
-         <primary>rtrim</primary>
-        </indexterm>
-        <function>rtrim</function> ( <parameter>string</parameter> <type>text</type>
-         <optional>, <parameter>characters</parameter> <type>text</type> </optional> )
-        <returnvalue>text</returnvalue>
-       </para>
-       <para>
-        Removes the longest string containing only characters in
-        <parameter>characters</parameter> (a space by default) from the end of
-        <parameter>string</parameter>.
-       </para>
-       <para>
-        <literal>rtrim('testxxzx', 'xyz')</literal>
-        <returnvalue>test</returnvalue>
-       </para></entry>
-      </row>
-
       <row>
        <entry role="func_table_entry"><para role="func_signature">
         <indexterm>
@@ -4138,6 +4138,46 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
        </para></entry>
       </row>
 
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        <indexterm>
+         <primary>btrim</primary>
+        </indexterm>
+        <function>btrim</function> ( <parameter>bytes</parameter> <type>bytea</type>,
+        <parameter>bytesremoved</parameter> <type>bytea</type> )
+        <returnvalue>bytea</returnvalue>
+       </para>
+       <para>
+        Removes the longest string containing only bytes appearing in
+        <parameter>bytesremoved</parameter> from the start and end of
+        <parameter>bytes</parameter>.
+       </para>
+       <para>
+        <literal>btrim('\x1234567890'::bytea, '\x9012'::bytea)</literal>
+        <returnvalue>\x345678</returnvalue>
+       </para></entry>
+      </row>
+
+       <row>
+        <entry role="func_table_entry"><para role="func_signature">
+         <indexterm>
+          <primary>ltrim</primary>
+         </indexterm>
+         <function>ltrim</function> ( <parameter>bytes</parameter> <type>bytea</type>,
+         <parameter>bytesremoved</parameter> <type>bytea</type> )
+         <returnvalue>bytea</returnvalue>
+        </para>
+        <para>
+         Removes the longest string containing only bytes appearing in
+         <parameter>bytesremoved</parameter> from the start of
+         <parameter>bytes</parameter>.
+        </para>
+        <para>
+         <literal>ltrim('\x1234567890'::bytea, '\x9012'::bytea)</literal>
+         <returnvalue>\x34567890</returnvalue>
+        </para></entry>
+       </row>
+
       <row>
        <entry role="func_table_entry"><para role="func_signature">
         <indexterm>
@@ -4196,6 +4236,26 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
        </para></entry>
       </row>
 
+       <row>
+        <entry role="func_table_entry"><para role="func_signature">
+         <indexterm>
+          <primary>rtrim</primary>
+         </indexterm>
+         <function>rtrim</function> ( <parameter>bytes</parameter> <type>bytea</type>,
+         <parameter>bytesremoved</parameter> <type>bytea</type> )
+         <returnvalue>bytea</returnvalue>
+        </para>
+        <para>
+         Removes the longest string containing only bytes appearing in
+         <parameter>bytesremoved</parameter> from the end of
+         <parameter>bytes</parameter>.
+        </para>
+        <para>
+         <literal>rtrim('\x1234567890'::bytea, '\x9012'::bytea)</literal>
+         <returnvalue>\x12345678</returnvalue>
+        </para></entry>
+       </row>
+
       <row>
        <entry role="func_table_entry"><para role="func_signature">
         <indexterm>
@@ -4306,26 +4366,6 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
        </para></entry>
       </row>
 
-      <row>
-       <entry role="func_table_entry"><para role="func_signature">
-        <indexterm>
-         <primary>btrim</primary>
-        </indexterm>
-        <function>btrim</function> ( <parameter>bytes</parameter> <type>bytea</type>,
-        <parameter>bytesremoved</parameter> <type>bytea</type> )
-        <returnvalue>bytea</returnvalue>
-       </para>
-       <para>
-        Removes the longest string containing only bytes appearing in
-        <parameter>bytesremoved</parameter> from the start and end of
-        <parameter>bytes</parameter>.
-       </para>
-       <para>
-       <literal>btrim('\x1234567890'::bytea, '\x9012'::bytea)</literal>
-       <returnvalue>\x345678</returnvalue>
-      </para></entry>
-     </row>
-
       <row>
        <entry role="func_table_entry"><para role="func_signature">
         <indexterm>
@@ -4406,26 +4446,6 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
        </para></entry>
       </row>
 
-      <row>
-        <entry role="func_table_entry"><para role="func_signature">
-         <indexterm>
-          <primary>ltrim</primary>
-         </indexterm>
-         <function>ltrim</function> ( <parameter>bytes</parameter> <type>bytea</type>,
-         <parameter>bytesremoved</parameter> <type>bytea</type> )
-         <returnvalue>bytea</returnvalue>
-        </para>
-        <para>
-         Removes the longest string containing only bytes appearing in
-         <parameter>bytesremoved</parameter> from the start of
-         <parameter>bytes</parameter>.
-        </para>
-        <para>
-         <literal>ltrim('\x1234567890'::bytea, '\x9012'::bytea)</literal>
-         <returnvalue>\x34567890</returnvalue>
-        </para></entry>
-       </row>
-
       <row>
        <entry role="func_table_entry"><para role="func_signature">
         <indexterm>
@@ -4444,26 +4464,6 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
        </para></entry>
       </row>
 
-      <row>
-        <entry role="func_table_entry"><para role="func_signature">
-         <indexterm>
-          <primary>rtrim</primary>
-         </indexterm>
-         <function>rtrim</function> ( <parameter>bytes</parameter> <type>bytea</type>,
-         <parameter>bytesremoved</parameter> <type>bytea</type> )
-         <returnvalue>bytea</returnvalue>
-        </para>
-        <para>
-         Removes the longest string containing only bytes appearing in
-         <parameter>bytesremoved</parameter> from the end of
-         <parameter>bytes</parameter>.
-        </para>
-        <para>
-         <literal>rtrim('\x1234567890'::bytea, '\x9012'::bytea)</literal>
-         <returnvalue>\x12345678</returnvalue>
-        </para></entry>
-       </row>
-
       <row>
        <entry role="func_table_entry"><para role="func_signature">
         <indexterm>
@@ -18354,16 +18354,14 @@ SELECT NULLIF(value, '(none)') ...
     largest or smallest value from a list of any number of expressions.
     The expressions must all be convertible to a common data type, which
     will be the type of the result
-    (see <xref linkend="typeconv-union-case"/> for details).  NULL values
-    in the list are ignored.  The result will be NULL only if all the
-    expressions evaluate to NULL.
+    (see <xref linkend="typeconv-union-case"/> for details).
    </para>
 
    <para>
-    Note that <function>GREATEST</function> and <function>LEAST</function> are not in
-    the SQL standard, but are a common extension.  Some other databases
-    make them return NULL if any argument is NULL, rather than only when
-    all are NULL.
+    NULL values in the argument list are ignored.  The result will be NULL
+    only if all the expressions evaluate to NULL.  (This is a deviation from
+    the SQL standard.  According to the standard, the return value is NULL if
+    any argument is NULL.  Some other databases behave this way.)
    </para>
   </sect2>
  </sect1>
index 28fdbad881aa66b652176619ae9015fd38a3ab0e..1eec827c63999254275430c8aa0de4c78edec16e 100644 (file)
@@ -1770,6 +1770,7 @@ INSERT INTO sql_parts VALUES ('11', 'Information and Definition Schema (SQL/Sche
 INSERT INTO sql_parts VALUES ('13', 'Routines and Types Using the Java Programming Language (SQL/JRT)', 'NO', NULL, '');
 INSERT INTO sql_parts VALUES ('14', 'XML-Related Specifications (SQL/XML)', 'NO', NULL, '');
 INSERT INTO sql_parts VALUES ('15', 'Multi-Dimensional Arrays (SQL/MDA)', 'NO', NULL, '');
+INSERT INTO sql_parts VALUES ('16', 'Property Graph Queries (SQL/PGQ)', 'NO', NULL, '');
 
 
 /*
index bb4c135a7f6cdf5224208ad37e9314094ffe368a..e139f82272afdab4f2e78fade2c11e97076faa23 100644 (file)
@@ -6,12 +6,13 @@ B015  Embedded MUMPS                  NO
 B016   Embedded Pascal                 NO      
 B017   Embedded PL/I                   NO      
 B021   Direct SQL                      YES     
+B030   Enhanced dynamic SQL                    NO      
 B031   Basic dynamic SQL                       NO      
 B032   Extended dynamic SQL                    NO      
-B032   Extended dynamic SQL    01      <describe input statement>      NO      
 B033   Untyped SQL-invoked function arguments                  NO      
 B034   Dynamic specification of cursor attributes                      NO      
 B035   Non-extended descriptor names                   NO      
+B036   Describe input statement                        NO      
 B041   Extensions to embedded SQL exception declarations                       NO      
 B051   Enhanced execution rights                       NO      
 B111   Module language Ada                     NO      
@@ -31,7 +32,7 @@ B127  Routine language PL/I                   NO
 B128   Routine language SQL                    YES     
 B200   Polymorphic table functions                     NO      
 B201   More than one PTF generic table parameter                       NO      
-B202   PTF Copartitioning                      NO      
+B202   PTF copartitioning                      NO      
 B203   More than one copartition specification                 NO      
 B204   PRUNE WHEN EMPTY                        NO      
 B205   Pass-through columns                    NO      
@@ -166,9 +167,10 @@ F031       Basic schema manipulation       19      REVOKE statement: RESTRICT clause       YES
 F032   CASCADE drop behavior                   YES     
 F033   ALTER TABLE statement: DROP COLUMN clause                       YES     
 F034   Extended REVOKE statement                       YES     
-F034   Extended REVOKE statement       01      REVOKE statement performed by other than the owner of a schema object   YES     
-F034   Extended REVOKE statement       02      REVOKE statement: GRANT OPTION FOR clause       YES     
-F034   Extended REVOKE statement       03      REVOKE statement to revoke a privilege that the grantee has WITH GRANT OPTION   YES     
+F035   REVOKE with CASCADE                     YES     
+F036   REVOKE statement performed by non-owner                 YES     
+F037   REVOKE statement: GRANT OPTION FOR clause                       YES     
+F038   REVOKE of a WITH GRANT OPTION privilege                 YES     
 F041   Basic joined table                      YES     
 F041   Basic joined table      01      Inner join (but not necessarily the INNER keyword)      YES     
 F041   Basic joined table      02      INNER keyword   YES     
@@ -191,14 +193,14 @@ F053      OVERLAPS predicate                      YES
 F054   TIMESTAMP in DATE type precedence list                  NO      
 F081   UNION and EXCEPT in views                       YES     
 F111   Isolation levels other than SERIALIZABLE                        YES     
-F111   Isolation levels other than SERIALIZABLE        01      READ UNCOMMITTED isolation level        YES     
-F111   Isolation levels other than SERIALIZABLE        02      READ COMMITTED isolation level  YES     
-F111   Isolation levels other than SERIALIZABLE        03      REPEATABLE READ isolation level YES     
+F112   Isolation level READ UNCOMMITTED                        YES     
+F113   Isolation level READ COMMITTED                  YES     
+F114   Isolation level REPEATABLE READ                 YES     
+F120   Get diagnostics statement                       NO      
 F121   Basic diagnostics management                    NO      
-F121   Basic diagnostics management    01      GET DIAGNOSTICS statement       NO      
-F121   Basic diagnostics management    02      SET TRANSACTION statement: DIAGNOSTICS SIZE clause      NO      
 F122   Enhanced diagnostics management                 NO      
 F123   All diagnostics                 NO      
+F124   SET TRANSACTION statement: DIAGNOSTICS SIZE clause                      NO      
 F131   Grouped operations                      YES     
 F131   Grouped operations      01      WHERE, GROUP BY, and HAVING clauses supported in queries with grouped views     YES     
 F131   Grouped operations      02      Multiple tables supported in queries with grouped views YES     
@@ -214,9 +216,6 @@ F202        TRUNCATE TABLE: identity column restart option                  YES
 F221   Explicit defaults                       YES     
 F222   INSERT statement: DEFAULT VALUES clause                 YES     
 F231   Privilege tables                        YES     
-F231   Privilege tables        01      TABLE_PRIVILEGES view   YES     
-F231   Privilege tables        02      COLUMN_PRIVILEGES view  YES     
-F231   Privilege tables        03      USAGE_PRIVILEGES view   YES     
 F251   Domain support                  YES     
 F261   CASE expression                 YES     
 F261   CASE expression 01      Simple CASE     YES     
@@ -228,12 +227,13 @@ F263      Comma-separated predicates in simple CASE expression                    NO
 F271   Compound character literals                     YES     
 F281   LIKE enhancements                       YES     
 F291   UNIQUE predicate                        NO      
-F292   UNIQUE null treatment                   YES     SQL:202x draft
+F292   UNIQUE null treatment                   YES     
 F301   CORRESPONDING in query expressions                      NO      
 F302   INTERSECT table operator                        YES     
-F302   INTERSECT table operator        01      INTERSECT DISTINCT table operator       YES     
+F303   INTERSECT DISTINCT table operator                       YES     
 F302   INTERSECT table operator        02      INTERSECT ALL table operator    YES     
 F304   EXCEPT ALL table operator                       YES     
+F305   INTERSECT ALL table operator                    YES     
 F311   Schema definition statement                     YES     
 F311   Schema definition statement     01      CREATE SCHEMA   YES     
 F311   Schema definition statement     02      CREATE TABLE for persistent base tables YES     
@@ -247,34 +247,34 @@ F321      User authorization                      YES
 F341   Usage tables                    YES     
 F361   Subprogram support                      YES     
 F381   Extended schema manipulation                    YES     
-F381   Extended schema manipulation    01      ALTER TABLE statement: ALTER COLUMN clause      YES     
-F381   Extended schema manipulation    02      ALTER TABLE statement: ADD CONSTRAINT clause    YES     
-F381   Extended schema manipulation    03      ALTER TABLE statement: DROP CONSTRAINT clause   YES     
 F382   Alter column data type                  YES     
 F383   Set column not null clause                      YES     
 F384   Drop identity property clause                   YES     
 F385   Drop column generation expression clause                        YES     
 F386   Set identity column generation clause                   YES     
+F387   ALTER TABLE statement: ALTER COLUMN clause                      YES     
+F388   ALTER TABLE statement: ADD/DROP CONSTRAINT clause                       YES     
 F391   Long identifiers                        YES     
 F392   Unicode escapes in identifiers                  YES     
 F393   Unicode escapes in literals                     YES     
 F394   Optional normal form specification                      YES     
 F401   Extended joined table                   YES     
-F401   Extended joined table   01      NATURAL JOIN    YES     
-F401   Extended joined table   02      FULL OUTER JOIN YES     
-F401   Extended joined table   04      CROSS JOIN      YES     
 F402   Named column joins for LOBs, arrays, and multisets                      YES     
 F403   Partitioned join tables                 NO      
 F404   Range variable for common column names                  YES     
+F405   NATURAL JOIN                    YES     
+F406   FULL OUTER JOIN                 YES     
+F407   CROSS JOIN                      YES     
 F411   Time zone specification                 YES     differences regarding literal interpretation
 F421   National character                      YES     
 F431   Read-only scrollable cursors                    YES     
-F431   Read-only scrollable cursors    01      FETCH with explicit NEXT        YES     
-F431   Read-only scrollable cursors    02      FETCH FIRST     YES     
-F431   Read-only scrollable cursors    03      FETCH LAST      YES     
-F431   Read-only scrollable cursors    04      FETCH PRIOR     YES     
-F431   Read-only scrollable cursors    05      FETCH ABSOLUTE  YES     
-F431   Read-only scrollable cursors    06      FETCH RELATIVE  YES     
+F432   FETCH with explicit NEXT                        YES     
+F433   FETCH FIRST                     YES     
+F434   FETCH LAST                      YES     
+F435   FETCH PRIOR                     YES     
+F436   FETCH ABSOLUTE                  YES     
+F437   FETCH RELATIVE                  YES     
+F438   Scrollable cursors                      YES     
 F441   Extended set function support                   YES     
 F442   Mixed column references in set functions                        YES     
 F451   Character set definition                        NO      
@@ -298,7 +298,7 @@ F641        Row and table constructors                      YES
 F651   Catalog name qualifiers                 YES     
 F661   Simple tables                   YES     
 F671   Subqueries in CHECK constraints                 NO      intentionally omitted
-F672   Retrospective check constraints                 YES     
+F672   Retrospective CHECK constraints                 YES     
 F673   Reads SQL-data routine invocations in CHECK constraints                 NO      
 F690   Collation support                       YES     but no character set support
 F692   Extended collation support                      YES     
@@ -322,8 +322,8 @@ F812        Basic flagging                  NO
 F813   Extended flagging                       NO      
 F821   Local table references                  NO      
 F831   Full cursor update                      NO      
-F831   Full cursor update      01      Updatable scrollable cursors    NO      
-F831   Full cursor update      02      Updatable ordered cursors       NO      
+F832   Updatable scrollable cursors                    NO      
+F833   Updatable ordered cursors                       NO      
 F841   LIKE_REGEX predicate                    NO      consider regexp_like()
 F842   OCCURRENCES_REGEX function                      NO      consider regexp_matches()
 F843   POSITION_REGEX function                 NO      consider regexp_instr()
@@ -339,7 +339,7 @@ F856        Nested <fetch first clause> in <query expression>                       YES
 F857   Top-level <fetch first clause> in <query expression>                    YES     
 F858   <fetch first clause> in subqueries                      YES     
 F859   Top-level <fetch first clause> in views                 YES     
-F860   <fetch first row count> in <fetch first clause>                 YES     
+F860   Dynamic FETCH FIRST row count                   YES     
 F861   Top-level <result offset clause> in <query expression>                  YES     
 F862   <result offset clause> in subqueries                    YES     
 F863   Nested <result offset clause> in <query expression>                     YES     
@@ -347,6 +347,7 @@ F864        Top-level <result offset clause> in views                       YES
 F865   <offset row count> in <result offset clause>                    YES     
 F866   FETCH FIRST clause: PERCENT option                      NO      
 F867   FETCH FIRST clause: WITH TIES option                    YES     
+F868   ORDER BY in grouped table                       YES     
 R010   Row pattern recognition: FROM clause                    NO      
 R020   Row pattern recognition: WINDOW clause                  NO      
 R030   Row pattern recognition: full aggregate support                 NO      
@@ -363,24 +364,24 @@ S043      Enhanced reference types                        NO
 S051   Create table of type                    NO      partially supported
 S071   SQL paths in function and type name resolution                  YES     
 S081   Subtables                       NO      
+S090   Minimal array support                   YES     
 S091   Basic array support                     NO      partially supported
-S091   Basic array support     01      Arrays of built-in data types   YES     
-S091   Basic array support     02      Arrays of distinct types        NO      
-S091   Basic array support     03      Array expressions       YES     
 S092   Arrays of user-defined types                    YES     
+S093   Arrays of distinct types                        NO      
 S094   Arrays of reference types                       NO      
 S095   Array constructors by query                     YES     
 S096   Optional array bounds                   YES     
 S097   Array element assignment                        NO      
 S098   ARRAY_AGG                       YES     
+S099   Array expressions                       YES     
 S111   ONLY in query expressions                       YES     
 S151   Type predicate                  NO      see pg_typeof()
 S161   Subtype treatment                       NO      
 S162   Subtype treatment for references                        NO      
 S201   SQL-invoked routines on arrays                  YES     
-S201   SQL-invoked routines on arrays  01      Array parameters        YES     
-S201   SQL-invoked routines on arrays  02      Array as result type of functions       YES     
 S202   SQL-invoked routines on multisets                       NO      
+S203   Array parameters                        YES     
+S204   Array as result type of functions                       YES     
 S211   User-defined cast functions                     YES     
 S231   Structured type locators                        NO      
 S232   Array locators                  NO      
@@ -406,27 +407,34 @@ T022      Advanced support for BINARY and VARBINARY data types                    NO
 T023   Compound binary literals                        NO      
 T024   Spaces in binary literals                       NO      
 T031   BOOLEAN data type                       YES     
+T039   CLOB locator: non-holdable                      NO      
+T040   Concatenation of CLOBs                  NO      
 T041   Basic LOB data type support                     NO      
-T041   Basic LOB data type support     01      BLOB data type  NO      
-T041   Basic LOB data type support     02      CLOB data type  NO      
-T041   Basic LOB data type support     03      POSITION, LENGTH, LOWER, TRIM, UPPER, and SUBSTRING functions for LOB data types        NO      
-T041   Basic LOB data type support     04      Concatenation of LOB data types NO      
-T041   Basic LOB data type support     05      LOB locator: non-holdable       NO      
 T042   Extended LOB data type support                  NO      
 T043   Multiplier T                    NO      
 T044   Multiplier P                    NO      
+T045   BLOB data type                  NO      
+T046   CLOB data type                  NO      
+T047   POSITION, OCTET_LENGTH, TRIM, and SUBSTRING for BLOBs                   NO      
+T048   Concatenation of BLOBs                  NO      
+T049   BLOB locator: non-holdable                      NO      
+T050   POSITION, CHAR_LENGTH, OCTET_LENGTH, LOWER, TRIM, UPPER, and SUBSTRING CLOBs                    NO      
 T051   Row types                       NO      
 T053   Explicit aliases for all-fields reference                       NO      
+T054   GREATEST and LEAST                      YES     different null handling
+T055   String padding functions                        YES     
+T056   Multi-character TRIM functions                  YES     
 T061   UCS support                     NO      
 T071   BIGINT data type                        YES     
 T076   DECFLOAT data type                      NO      
+T081   Optional string types maximum length                    YES     
 T101   Enhanced nullability determination                      NO      
 T111   Updatable joins, unions, and columns                    NO      
 T121   WITH (excluding RECURSIVE) in query expression                  YES     
 T122   WITH (excluding RECURSIVE) in subquery                  YES     
 T131   Recursive query                 YES     
 T132   Recursive query in subquery                     YES     
-T133   Enhanced cycle mark values                      YES     SQL:202x draft
+T133   Enhanced cycle mark values                      YES     
 T141   SIMILAR predicate                       YES     
 T151   DISTINCT predicate                      YES     
 T152   DISTINCT predicate with negation                        YES     
@@ -441,22 +449,21 @@ T178      Identity columns: simple restart option                 YES
 T180   System-versioned tables                 NO      
 T181   Application-time period tables                  NO      
 T191   Referential action RESTRICT                     YES     
+T200   Trigger DDL                     NO      similar but not fully compatible
 T201   Comparable data types for referential constraints                       YES     
 T211   Basic trigger capability                        NO      
-T211   Basic trigger capability        01      Triggers activated on UPDATE, INSERT, or DELETE of one base table       YES     
-T211   Basic trigger capability        02      BEFORE triggers YES     
-T211   Basic trigger capability        03      AFTER triggers  YES     
-T211   Basic trigger capability        04      FOR EACH ROW triggers   YES     
-T211   Basic trigger capability        05      Ability to specify a search condition that must be true before the trigger is invoked   YES     
-T211   Basic trigger capability        06      Support for run-time rules for the interaction of triggers and constraints      NO      
-T211   Basic trigger capability        07      TRIGGER privilege       YES     
-T211   Basic trigger capability        08      Multiple triggers for the same event are executed in the order in which they were created in the catalog        NO      intentionally omitted
 T212   Enhanced trigger capability                     YES     
 T213   INSTEAD OF triggers                     YES     
+T214   BEFORE triggers                 YES     
+T215   AFTER triggers                  YES     
+T216   Ability to require true search condition before trigger is invoked                      YES     
+T217   TRIGGER privilege                       YES     
+T218   Multiple triggers for the same event executed in the order created                      NO      intentionally omitted
 T231   Sensitive cursors                       NO      
 T241   START TRANSACTION statement                     YES     
 T251   SET TRANSACTION statement: LOCAL option                 NO      
 T261   Chained transactions                    YES     
+T262   Multiple server transactions                    NO      
 T271   Savepoints                      YES     
 T272   Enhanced savepoint management                   NO      
 T281   SELECT privilege with column granularity                        YES     
@@ -520,7 +527,8 @@ T622        Trigonometric functions                 YES
 T623   General logarithm functions                     YES     
 T624   Common logarithm functions                      YES     
 T625   LISTAGG                 NO      
-T626   ANY_VALUE                       YES     SQL:202x draft
+T626   ANY_VALUE                       YES     
+T627   Window framed COUNT DISTINCT                    YES     
 T631   IN predicate with one list element                      YES     
 T641   Multiple column assignment                      NO      only some syntax variants supported
 T651   SQL-schema statements in SQL routines                   YES     
@@ -528,8 +536,12 @@ T652       SQL-dynamic statements in SQL routines                  NO
 T653   SQL-schema statements in external routines                      YES     
 T654   SQL-dynamic statements in external routines                     NO      
 T655   Cyclically dependent routines                   YES     
-T661   Non-decimal integer literals                    YES     SQL:202x draft
-T662   Underscores in integer literals                 YES     SQL:202x draft
+T661   Non-decimal integer literals                    YES     
+T662   Underscores in numeric literals                 YES     
+T670   Schema and data statement mixing                        YES     
+T801   JSON data type                  NO      
+T802   Enhanced JSON data type                 NO      
+T803   String-based JSON                       NO      
 T811   Basic SQL/JSON constructor functions                    NO      
 T812   SQL/JSON: JSON_OBJECTAGG                        NO      
 T813   SQL/JSON: JSON_ARRAYAGG with ORDER BY                   NO      
@@ -553,7 +565,31 @@ T836       SQL/JSON path language: starts with predicate                   YES
 T837   SQL/JSON path language: regex_like predicate                    YES     
 T838   JSON_TABLE: PLAN DEFAULT clause                 NO      
 T839   Formatted cast of datetimes to/from character strings                   NO      
-T840   Hex integer literals in SQL/JSON path language                  YES     SQL:202x draft
+T840   Hex integer literals in SQL/JSON path language                  YES     
+T851   SQL/JSON: optional keywords for default syntax                  NO      
+T860   SQL/JSON simplified accessor: column reference only                     NO      
+T861   SQL/JSON simplified accessor: case-sensitive JSON member accessor                       NO      
+T862   SQL/JSON simplified accessor: wildcard member accessor                  NO      
+T863   SQL/JSON simplified accessor: single-quoted string literal as member accessor                   NO      
+T864   SQL/JSON simplified accessor                    NO      
+T865   SQL/JSON item method: bigint()                  NO      
+T866   SQL/JSON item method: boolean()                 NO      
+T867   SQL/JSON item method: date()                    NO      
+T868   SQL/JSON item method: decimal()                 NO      
+T869   SQL/JSON item method: decimal() with precision and scale                        NO      
+T870   SQL/JSON item method: integer()                 NO      
+T871   SQL/JSON item method: number()                  NO      
+T872   SQL/JSON item method: string()                  NO      
+T873   SQL/JSON item method: time()                    NO      
+T874   SQL/JSON item method: time_tz()                 NO      
+T875   SQL/JSON item method: time precision                    NO      
+T876   SQL/JSON item method: timestamp()                       NO      
+T877   SQL/JSON item method: timestamp_tz()                    NO      
+T878   SQL/JSON item method: timestamp precision                       NO      
+T879   JSON in equality operations                     NO      
+T880   JSON in grouping operations                     NO      
+T881   JSON in ordering operations                     NO      
+T882   JSON in multiset element grouping operations                    NO      
 M001   Datalinks                       NO      
 M002   Datalinks via SQL/CLI                   NO      
 M003   Datalinks via Embedded SQL                      NO      
index f0a8ee55aeab2cabe9b29529d03e9ae2cdd8abbd..af134d2f672ba5ddec9cca9c0a022e2e1152722d 100644 (file)
@@ -57,6 +57,6 @@
  */
 
 /*                                                     yyyymmddN */
-#define CATALOG_VERSION_NO     202304042
+#define CATALOG_VERSION_NO     202304051
 
 #endif