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