diff --git a/doc/src/sgml/features.sgml b/doc/src/sgml/features.sgml new file mode 100644 index 0000000000000000000000000000000000000000..f69c4c3b5ffebbee6dd1be87e127b950769f4956 --- /dev/null +++ b/doc/src/sgml/features.sgml @@ -0,0 +1,1811 @@ +<!-- +$Header: /cvsroot/pgsql/doc/src/sgml/features.sgml,v 2.1 2002/06/15 02:59:55 thomas Exp $ +--> + + <appendix id="features"> + <title>SQL99 Feature List</title> + + <sect1 id="features-sql99"> + <title>Supported Features</title> + + <para> + <acronym>SQL92</acronym> defined three feature sets for + compliance: basic, intermediate, and advanced. Most database + products claiming <acronym>SQL</acronym> standards compliance were + compliant at only the basic level, since the entire set of + intermediate and advanced features was either to voluminous or in + conflict with legacy behaviors. + </para> + + <para> + <acronym>SQL99</acronym> defines a large set of individual + features rather than the ineffectively broad three levels found in + <acronym>SQL92</acronym>. We list the entire set of features + defined in the standard, with comments on those features not yet + implemented in <productname>PostgreSQL</productname>. + + <informaltable> + <tgroup cols="3"> + <thead> + <row> + <entry>Identifier</entry> + <entry>Description</entry> + <entry>Comment</entry> + </row> + </thead> + <tbody> + <row> + <entry>E011</entry> + <entry>Numeric data types</entry> + <entry></entry> + </row> + <row> + <entry>E011-01</entry> + <entry>INTEGER and SMALLINT data types</entry> + <entry></entry> + </row> + <row> + <entry>E011-02</entry> + <entry>REAL, DOUBLE PRECISON, and FLOAT data types</entry> + <entry></entry> + </row> + <row> + <entry>E011-03</entry> + <entry>DECIMAL and NUMERIC data types</entry> + <entry></entry> + </row> + <row> + <entry>E011-04</entry> + <entry>Arithmetic operators</entry> + <entry></entry> + </row> + <row> + <entry>E011-05</entry> + <entry>Numeric comparison</entry> + <entry></entry> + </row> + <row> + <entry>E011-06</entry> + <entry>Implicit casting among the numeric data types</entry> + <entry></entry> + </row> + <row> + <entry>E021</entry> + <entry>Character data types</entry> + <entry></entry> + </row> + <row> + <entry>E021-01</entry> + <entry>CHARACTER data type</entry> + <entry></entry> + </row> + <row> + <entry>E021-02</entry> + <entry>CHARACTER VARYING data type</entry> + <entry></entry> + </row> + <row> + <entry>E021-03</entry> + <entry>Character literals</entry> + <entry></entry> + </row> + <row> + <entry>E021-04</entry> + <entry>CHARACTER_LENGTH function</entry> + <entry></entry> + </row> + <row> + <entry>E021-05</entry> + <entry>OCTET_LENGTH function</entry> + <entry></entry> + </row> + <row> + <entry>E021-06</entry> + <entry>SUBSTRING function</entry> + <entry></entry> + </row> + <row> + <entry>E021-07</entry> + <entry>Character concatenation</entry> + <entry></entry> + </row> + <row> + <entry>E021-08</entry> + <entry>UPPER and LOWER functions</entry> + <entry></entry> + </row> + <row> + <entry>E021-09</entry> + <entry>TRIM function</entry> + <entry></entry> + </row> + <row> + <entry>E021-10</entry> + <entry>Implicit casting among the character data types</entry> + <entry></entry> + </row> + <row> + <entry>E021-11</entry> + <entry>POSITION function</entry> + <entry></entry> + </row> + <row> + <entry>E011-12</entry> + <entry>Character comparison</entry> + <entry></entry> + </row> + <row> + <entry>E031</entry> + <entry>Identifiers</entry> + <entry></entry> + </row> + <row> + <entry>E031-01</entry> + <entry>Delimited identifiers</entry> + <entry></entry> + </row> + <row> + <entry>E031-02</entry> + <entry>Lower case identifiers</entry> + <entry></entry> + </row> + <row> + <entry>E031-03</entry> + <entry>Trailing underscore</entry> + <entry></entry> + </row> + <row> + <entry>E051</entry> + <entry>Basic query specification</entry> + <entry></entry> + </row> + <row> + <entry>E051-01</entry> + <entry>SELECT DISTINCT</entry> + <entry></entry> + </row> + <row> + <entry>E051-02</entry> + <entry>GROUP BY clause</entry> + <entry></entry> + </row> + <row> + <entry>E051-04</entry> + <entry>GROUP BY can contain columns not in <select list></entry> + <entry></entry> + </row> + <row> + <entry>E051-05</entry> + <entry>Select list items can be renamed</entry> + <entry></entry> + </row> + <row> + <entry>E051-06</entry> + <entry>HAVING clause</entry> + <entry></entry> + </row> + <row> + <entry>E051-07</entry> + <entry>Qualified * in select list</entry> + <entry></entry> + </row> + <row> + <entry>E051-08</entry> + <entry>Correlation names in the FROM clause</entry> + <entry></entry> + </row> + <row> + <entry>E051-09</entry> + <entry>Rename columns in the FROM clause</entry> + <entry></entry> + </row> + <row> + <entry>E061</entry> + <entry>Basic predicates and search conditions</entry> + <entry></entry> + </row> + <row> + <entry>E061-01</entry> + <entry>Comparison predicate</entry> + <entry></entry> + </row> + <row> + <entry>E061-02</entry> + <entry>BETWEEN predicate</entry> + <entry></entry> + </row> + <row> + <entry>E061-03</entry> + <entry>IN predicate with list of values</entry> + <entry></entry> + </row> + <row> + <entry>E061-04</entry> + <entry>LIKE predicate</entry> + <entry></entry> + </row> + <row> + <entry>E061-05</entry> + <entry>LIKE predicate ESCAPE clause</entry> + <entry></entry> + </row> + <row> + <entry>E061-06</entry> + <entry>NULL predicate</entry> + <entry></entry> + </row> + <row> + <entry>E061-07</entry> + <entry>Quantified comparison predicate</entry> + <entry></entry> + </row> + <row> + <entry>E061-08</entry> + <entry>EXISTS predicate</entry> + <entry></entry> + </row> + <row> + <entry>E061-09</entry> + <entry>Subqueries in comparison predicate</entry> + <entry></entry> + </row> + <row> + <entry>E061-11</entry> + <entry>Subqueries in IN predicate</entry> + <entry></entry> + </row> + <row> + <entry>E061-12</entry> + <entry>Subqueries in quantified comparison predicate</entry> + <entry></entry> + </row> + <row> + <entry>E061-13</entry> + <entry>Correlated subqueries</entry> + <entry></entry> + </row> + <row> + <entry>E061-14</entry> + <entry>Search condition</entry> + <entry></entry> + </row> + <row> + <entry>E071</entry> + <entry>Basic query expressions</entry> + <entry></entry> + </row> + <row> + <entry>E071-01</entry> + <entry>UNION DISTINCT table operator</entry> + <entry></entry> + </row> + <row> + <entry>E071-02</entry> + <entry>UNION ALL table operator</entry> + <entry></entry> + </row> + <row> + <entry>E071-03</entry> + <entry>EXCEPT DISTINCT table operator</entry> + <entry></entry> + </row> + <row> + <entry>E071-05</entry> + <entry>Columns combined via table operators need not have + exactly the same data type</entry> + <entry></entry> + </row> + <row> + <entry>E071-06</entry> + <entry>Table operators in subqueries</entry> + <entry></entry> + </row> + <row> + <entry>E081</entry> + <entry>Basic Privileges</entry> + <entry></entry> + </row> + <row> + <entry>E081-01</entry> + <entry>SELECT privilege</entry> + <entry></entry> + </row> + <row> + <entry>E081-02</entry> + <entry>DELETE privilege</entry> + <entry></entry> + </row> + <row> + <entry>E081-03</entry> + <entry>INSERT privilege at the table level</entry> + <entry></entry> + </row> + <row> + <entry>E081-04</entry> + <entry>UPDATE privilege at the table level</entry> + <entry></entry> + </row> + <row> + <entry>E081-05</entry> + <entry>UPDATE privilege at the column level</entry> + <entry></entry> + </row> + <row> + <entry>E081-06</entry> + <entry>REFERENCES privilege at the table level</entry> + <entry></entry> + </row> + <row> + <entry>E081-07</entry> + <entry>REFERENCES privilege at the column level</entry> + <entry></entry> + </row> + <row> + <entry>E081-08</entry> + <entry>WITH GRANT OPTION</entry> + <entry></entry> + </row> + <row> + <entry>E091</entry> + <entry>Set functions</entry> + <entry></entry> + </row> + <row> + <entry>E091-01</entry> + <entry>AVG</entry> + <entry></entry> + </row> + <row> + <entry>E091-02</entry> + <entry>COUNT</entry> + <entry></entry> + </row> + <row> + <entry>E091-03</entry> + <entry>MAX</entry> + <entry></entry> + </row> + <row> + <entry>E091-04</entry> + <entry>MIN</entry> + <entry></entry> + </row> + <row> + <entry>E091-05</entry> + <entry>SUM</entry> + <entry></entry> + </row> + <row> + <entry>E091-06</entry> + <entry>ALL quantifier</entry> + <entry></entry> + </row> + <row> + <entry>E091-07</entry> + <entry>DISTINCT quantifier</entry> + <entry></entry> + </row> + <row> + <entry>E101</entry> + <entry>Basic data manipulation</entry> + <entry></entry> + </row> + <row> + <entry>E101-01</entry> + <entry>INSERT statement</entry> + <entry></entry> + </row> + <row> + <entry>E101-03</entry> + <entry>Searched UPDATE statement</entry> + <entry></entry> + </row> + <row> + <entry>E101-04</entry> + <entry>Searched DELETE statement</entry> + <entry></entry> + </row> + <row> + <entry>E111</entry> + <entry>Single row SELECT statement</entry> + <entry></entry> + </row> + <row> + <entry>E121</entry> + <entry>Basic cursor support</entry> + <entry></entry> + </row> + <row> + <entry>E121-01</entry> + <entry>DECLARE CURSOR</entry> + <entry></entry> + </row> + <row> + <entry>E121-02</entry> + <entry>ORDER BY columns need not be in select list</entry> + <entry></entry> + </row> + <row> + <entry>E121-03</entry> + <entry>Value expressions in ORDER BY clause</entry> + <entry></entry> + </row> + <row> + <entry>E121-04</entry> + <entry>OPEN statement</entry> + <entry></entry> + </row> + <row> + <entry>E121-06</entry> + <entry>Positioned UPDATE statement</entry> + <entry></entry> + </row> + <row> + <entry>E121-07</entry> + <entry>Positioned DELETE statement</entry> + <entry></entry> + </row> + <row> + <entry>E121-08</entry> + <entry>CLOSE statement</entry> + <entry></entry> + </row> + <row> + <entry>E121-10</entry> + <entry>FETCH statement implicit NEXT</entry> + <entry></entry> + </row> + <row> + <entry>E121-17</entry> + <entry>WITH HOLD cursors</entry> + <entry></entry> + </row> + <row> + <entry>E131</entry> + <entry>Null value support (nulls in lieu of values)</entry> + <entry></entry> + </row> + <row> + <entry>E141</entry> + <entry>Basic integrity constraints</entry> + <entry></entry> + </row> + <row> + <entry>E141-01</entry> + <entry>NOT NULL constraints</entry> + <entry></entry> + </row> + <row> + <entry>E141-02</entry> + <entry>UNIQUE constraints of NOT NULL columns</entry> + <entry></entry> + </row> + <row> + <entry>E141-03</entry> + <entry>PRIMARY KEY constraints</entry> + <entry></entry> + </row> + <row> + <entry>E141-04</entry> + <entry>Basic FOREIGN KEY constraint with the NO ACTION default + for both referential delete action and referential update + action</entry> + <entry></entry> + </row> + <row> + <entry>E141-06</entry> + <entry>CHECK constraints</entry> + <entry></entry> + </row> + <row> + <entry>E141-07</entry> + <entry>Column defaults</entry> + <entry></entry> + </row> + <row> + <entry>E141-08</entry> + <entry>NOT NULL inferred on PRIMARY KEY</entry> + <entry></entry> + </row> + <row> + <entry>E141-10</entry> + <entry>Names in a foreign key can be specified in any order</entry> + <entry></entry> + </row> + <row> + <entry>E151</entry> + <entry>Transaction support</entry> + <entry></entry> + </row> + <row> + <entry>E151-01</entry> + <entry>COMMIT statement</entry> + <entry></entry> + </row> + <row> + <entry>E151-02</entry> + <entry>ROLLBACK statement</entry> + <entry></entry> + </row> + <row> + <entry>E152</entry> + <entry>Basic SET TRANSACTION statement</entry> + <entry></entry> + </row> + <row> + <entry>E152-01</entry> + <entry>SET TRANSACTION statement: ISOLATION LEVEL SERIALIZABLE + clause</entry> + <entry></entry> + </row> + <row> + <entry>E152-02</entry> + <entry>SET TRANSACTION statement: READ ONLY and READ WRITE clauses</entry> + <entry></entry> + </row> + <row> + <entry>E153</entry> + <entry>Updatable queries with subqueries</entry> + <entry></entry> + </row> + <row> + <entry>E161</entry> + <entry>SQL comments using leading double minus</entry> + <entry></entry> + </row> + <row> + <entry>E171</entry> + <entry>SQLSTATE support</entry> + <entry></entry> + </row> + <row> + <entry>E182</entry> + <entry>Module language</entry> + <entry></entry> + </row> + <row> + <entry>F021</entry> + <entry>Basic information schema</entry> + <entry></entry> + </row> + <row> + <entry>F021-01</entry> + <entry>COLUMNS view</entry> + <entry></entry> + </row> + <row> + <entry>F021-02</entry> + <entry>TABLES view</entry> + <entry></entry> + </row> + <row> + <entry>F021-03</entry> + <entry>VIEWS view</entry> + <entry></entry> + </row> + <row> + <entry>F021-04</entry> + <entry>TABLE_CONSTRAINTS view</entry> + <entry></entry> + </row> + <row> + <entry>F021-05</entry> + <entry>REFERENTIAL_ CONSTRAINTS view</entry> + <entry></entry> + </row> + <row> + <entry>F021-06</entry> + <entry>CHECK_CONSTRAINTS view</entry> + <entry></entry> + </row> + <row> + <entry>F031</entry> + <entry>Basic schema manipulation</entry> + <entry></entry> + </row> + <row> + <entry>F031-01</entry> + <entry>CREATE TABLE statement to create persistent base + tables</entry> + <entry></entry> + </row> + <row> + <entry>F031-02</entry> + <entry>CREATE VIEW statement</entry> + <entry></entry> + </row> + <row> + <entry>F031-03</entry> + <entry>GRANT statement</entry> + <entry></entry> + </row> + <row> + <entry>F031-04</entry> + <entry>ALTER TABLE statement COLUMN clause</entry> + <entry></entry> + </row> + <row> + <entry>F031-13</entry> + <entry>DROP TABLE statement clause</entry> + <entry></entry> + </row> + <row> + <entry>F031-16</entry> + <entry>DROP VIEW statement RESTRICT clause</entry> + <entry></entry> + </row> + <row> + <entry>F031-19</entry> + <entry>REVOKE statement RESTRICT clause</entry> + <entry></entry> + </row> + <row> + <entry>F041</entry> + <entry>Basic joined table</entry> + <entry></entry> + </row> + <row> + <entry>F041-01</entry> + <entry>Inner join (but not necessarily the INNER keyword)</entry> + <entry></entry> + </row> + <row> + <entry>F041-02</entry> + <entry>INNER keyword</entry> + <entry></entry> + </row> + <row> + <entry>F041-03</entry> + <entry>LEFT OUTER JOIN</entry> + <entry></entry> + </row> + <row> + <entry>F041-04</entry> + <entry>RIGHT OUTER JOIN</entry> + <entry></entry> + </row> + <row> + <entry>F041-05</entry> + <entry>Outer joins can be nested</entry> + <entry></entry> + </row> + <row> + <entry>F041-07</entry> + <entry>The inner table in a left or right outer join can also be + used in an inner join</entry> + <entry></entry> + </row> + <row> + <entry>F041-08</entry> + <entry>All comparison operators are supported + (rather than just =)</entry> + <entry></entry> + </row> + <row> + <entry>F051</entry> + <entry>Basic date and time</entry> + <entry></entry> + </row> + <row> + <entry>F051-01</entry> + <entry>DATE data type (including support of DATE literal)</entry> + <entry></entry> + </row> + <row> + <entry>F051-02</entry> + <entry>TIME data type (including support of TIME literal) with + fractional seconds precision of at least 0</entry> + <entry></entry> + </row> + <row> + <entry>F051-03</entry> + <entry>TIMESTAMP data type (including support of TIMESTAMP + literal) with fractional seconds precision of at least + 0 and 6</entry> + <entry></entry> + </row> + <row> + <entry>F051-04</entry> + <entry>Comparison predicate on DATE TIMESTAMP data types</entry> + <entry></entry> + </row> + <row> + <entry>F051-05</entry> + <entry>Explicit CAST between datetime types and character types</entry> + <entry></entry> + </row> + <row> + <entry>F051-06</entry> + <entry>CURRENT_DATE</entry> + <entry></entry> + </row> + <row> + <entry>F051-07</entry> + <entry>LOCALTIME</entry> + <entry></entry> + </row> + <row> + <entry>F051-08</entry> + <entry>LOCALTIMESTAMP</entry> + <entry></entry> + </row> + <row> + <entry>F081</entry> + <entry>UNION and EXCEPT in views</entry> + <entry></entry> + </row> + <row> + <entry>F131</entry> + <entry>Grouped operations</entry> + <entry></entry> + </row> + <row> + <entry>F131-01</entry> + <entry>WHERE, GROUP BY and HAVING clauses supported in queries + with grouped views</entry> + <entry></entry> + </row> + <row> + <entry>F131-02</entry> + <entry>Multiple tables supported in queries with grouped views</entry> + <entry></entry> + </row> + <row> + <entry>F131-03</entry> + <entry>Set functions supported in queries with grouped views</entry> + <entry></entry> + </row> + <row> + <entry>F131-04</entry> + <entry>Subqueries with GROUP BY and HAVING clauses and grouped views</entry> + <entry></entry> + </row> + <row> + <entry>F131-05</entry> + <entry>Single row SELECT with GROUP BY and HAVING clauses and grouped views</entry> + <entry></entry> + </row> + <row> + <entry>F181</entry> + <entry>Multiple module support</entry> + <entry></entry> + </row> + <row> + <entry>F201</entry> + <entry>CAST function</entry> + <entry></entry> + </row> + <row> + <entry>F221</entry> + <entry>Explicit defaults</entry> + <entry></entry> + </row> + <row> + <entry>F261</entry> + <entry>CASE expression</entry> + <entry></entry> + </row> + <row> + <entry>F261-01</entry> + <entry>Simple CASE</entry> + <entry></entry> + </row> + <row> + <entry>F261-02</entry> + <entry>Searched CASE</entry> + <entry></entry> + </row> + <row> + <entry>F261-03</entry> + <entry>NULLIF</entry> + <entry></entry> + </row> + <row> + <entry>F261-04</entry> + <entry>COALESCE</entry> + <entry></entry> + </row> + <row> + <entry>F311</entry> + <entry>Schema definition statement</entry> + <entry></entry> + </row> + <row> + <entry>F311-01</entry> + <entry>CREATE SCHEMA</entry> + <entry></entry> + </row> + <row> + <entry>F311-02</entry> + <entry>CREATE TABLE for persistent base tables</entry> + <entry></entry> + </row> + <row> + <entry>F311-03</entry> + <entry>CREATE VIEW</entry> + <entry></entry> + </row> + <row> + <entry>F311-04</entry> + <entry>CREATE VIEW: WITH CHECK OPTION</entry> + <entry></entry> + </row> + <row> + <entry>F311-05</entry> + <entry>GRANT statement</entry> + <entry></entry> + </row> + <row> + <entry>F471</entry> + <entry>Scalar subquery values</entry> + <entry></entry> + </row> + <row> + <entry>F481</entry> + <entry>Expanded NULL predicate</entry> + <entry></entry> + </row> + <row> + <entry>F501</entry> + <entry>Features and conformance views</entry> + <entry></entry> + </row> + <row> + <entry>F501-01</entry> + <entry>SQL_FEATURES view</entry> + <entry></entry> + </row> + <row> + <entry>F501-02</entry> + <entry>SQL_SIZING view</entry> + <entry></entry> + </row> + <row> + <entry>F501-03</entry> + <entry>SQL_LANGUAGES view</entry> + <entry></entry> + </row> + <row> + <entry>F812</entry> + <entry>Basic flagging</entry> + <entry></entry> + </row> + <row> + <entry>S011</entry> + <entry>Distinct data types</entry> + <entry></entry> + </row> + <row> + <entry>S011-01</entry> + <entry>USER_DEFINED_TYPES view</entry> + <entry></entry> + </row> + <row> + <entry>T321</entry> + <entry>Basic SQL-invoked routines</entry> + <entry></entry> + </row> + <row> + <entry>T321-01</entry> + <entry>User-defined functions with no overloading</entry> + <entry></entry> + </row> + <row> + <entry>T321-02</entry> + <entry>User-defined stored procedures with no overloading</entry> + <entry></entry> + </row> + <row> + <entry>T321-03</entry> + <entry>Function invocation</entry> + <entry></entry> + </row> + <row> + <entry>T321-04</entry> + <entry>CALL statement</entry> + <entry></entry> + </row> + <row> + <entry>T321-05</entry> + <entry>RETURN statement</entry> + <entry></entry> + </row> + <row> + <entry>T321-06</entry> + <entry>ROUTINES view</entry> + <entry></entry> + </row> + <row> + <entry>T321-07</entry> + <entry>PARAMETERS view</entry> + <entry></entry> + </row> + <row> + <entry>F032</entry> + <entry>CASCADE drop behavior</entry> + <entry></entry> + </row> + <row> + <entry>F033</entry> + <entry>ALTER TABLE statement: DROP COLUMN clause</entry> + <entry></entry> + </row> + <row> + <entry>F034</entry> + <entry>Extended REVOKE statement</entry> + <entry></entry> + </row> + <row> + <entry>F034-01</entry> + <entry>REVOKE statement performed by other than the owner of a schema object</entry> + <entry></entry> + </row> + <row> + <entry>F034-02</entry> + <entry>REVOKE statement: GRANT OPTION FOR clause</entry> + <entry></entry> + </row> + <row> + <entry>F034-03</entry> + <entry>REVOKE statement to revoke a privilege that the grantee has WITH GRANT OPTION</entry> + <entry></entry> + </row> + <row> + <entry>F052</entry> + <entry>Intervals and datetime arithmetic</entry> + <entry></entry> + </row> + <row> + <entry>F111</entry> + <entry>Isolation levels other than SERIALIZABLE</entry> + <entry></entry> + </row> + <row> + <entry>F111-01</entry> + <entry>READ UNCOMMITTED isolation level</entry> + <entry></entry> + </row> + <row> + <entry>F111-02</entry> + <entry>READ COMMITTED isolation level</entry> + <entry></entry> + </row> + <row> + <entry>F111-03</entry> + <entry>REPEATABLE READ isolation level</entry> + <entry></entry> + </row> + <row> + <entry>F121</entry> + <entry>Basic diagnostics management</entry> + <entry></entry> + </row> + <row> + <entry>F121-01</entry> + <entry>GET DIAGNOSTICS statement</entry> + <entry></entry> + </row> + <row> + <entry>F121-02</entry> + <entry>SET TRANSACTION statement: DIAGNOSTICS SIZE clause</entry> + <entry></entry> + </row> + <row> + <entry>F171</entry> + <entry>Multiple schemas per user</entry> + <entry></entry> + </row> + <row> + <entry>F191</entry> + <entry>Referential delete actions</entry> + <entry></entry> + </row> + <row> + <entry>F222</entry> + <entry>INSERT statement: DEFAULT VALUES clause</entry> + <entry></entry> + </row> + <row> + <entry>F231</entry> + <entry>Privilege Tables</entry> + <entry></entry> + </row> + <row> + <entry>F231-01</entry> + <entry>TABLE_PRIVILEGES view</entry> + <entry></entry> + </row> + <row> + <entry>F231-02</entry> + <entry>COLUMN_PRIVILEGES view</entry> + <entry></entry> + </row> + <row> + <entry>F231-03</entry> + <entry>USAGE_PRIVILEGES view</entry> + <entry></entry> + </row> + <row> + <entry>F251</entry> + <entry>Domain support</entry> + <entry></entry> + </row> + <row> + <entry>F271</entry> + <entry>Compound character literals</entry> + <entry></entry> + </row> + <row> + <entry>F281</entry> + <entry>LIKE enhancements</entry> + <entry></entry> + </row> + <row> + <entry>F291</entry> + <entry>UNIQUE predicate</entry> + <entry></entry> + </row> + <row> + <entry>F301</entry> + <entry>CORRESPONDING in query expressions</entry> + <entry></entry> + </row> + <row> + <entry>F302</entry> + <entry>INTERSECT table operator</entry> + <entry></entry> + </row> + <row> + <entry>F302-01</entry> + <entry>INTERSECT DISTINCT table operator</entry> + <entry></entry> + </row> + <row> + <entry>F302-02</entry> + <entry>INTERSECT ALL table operator</entry> + <entry></entry> + </row> + <row> + <entry>F304</entry> + <entry>EXCEPT ALL table operator</entry> + <entry></entry> + </row> + <row> + <entry>F321</entry> + <entry>User authorization</entry> + <entry></entry> + </row> + <row> + <entry>F341</entry> + <entry>Usage tables</entry> + <entry></entry> + </row> + <row> + <entry>F361</entry> + <entry>Subprogram support</entry> + <entry></entry> + </row> + <row> + <entry>F381</entry> + <entry>Extended schema manipulation</entry> + <entry></entry> + </row> + <row> + <entry>F381-01</entry> + <entry>ALTER TABLE statement: ALTER COLUMN clause</entry> + <entry></entry> + </row> + <row> + <entry>F381-02</entry> + <entry>ALTER TABLE statement: ADD CONSTRAINT clause</entry> + <entry></entry> + </row> + <row> + <entry>F381-03</entry> + <entry>ALTER TABLE statement: DROP CONSTRAINT clause</entry> + <entry></entry> + </row> + <row> + <entry>F391</entry> + <entry>Long identifiers</entry> + <entry></entry> + </row> + <row> + <entry>F401</entry> + <entry>Extended joined table</entry> + <entry></entry> + </row> + <row> + <entry>F401-01</entry> + <entry>NATURAL JOIN</entry> + <entry></entry> + </row> + <row> + <entry>F401-02</entry> + <entry>FULL OUTER JOIN</entry> + <entry></entry> + </row> + <row> + <entry>F401-03</entry> + <entry>UNION JOIN</entry> + <entry></entry> + </row> + <row> + <entry>F401-04</entry> + <entry>CROSS JOIN</entry> + <entry></entry> + </row> + <row> + <entry>F411</entry> + <entry>Time zone specification</entry> + <entry></entry> + </row> + <row> + <entry>F421</entry> + <entry>National character</entry> + <entry></entry> + </row> + <row> + <entry>F431</entry> + <entry>Read-only scrollable cursors</entry> + <entry></entry> + </row> + <row> + <entry>F431-01</entry> + <entry>FETCH with explicit NEXT</entry> + <entry></entry> + </row> + <row> + <entry>F431-02</entry> + <entry>FETCH FIRST</entry> + <entry></entry> + </row> + <row> + <entry>F431-03</entry> + <entry>FETCH LAST</entry> + <entry></entry> + </row> + <row> + <entry>F431-04</entry> + <entry>FETCH PRIOR</entry> + <entry></entry> + </row> + <row> + <entry>F431-05</entry> + <entry>FETCH ABSOLUTE</entry> + <entry></entry> + </row> + <row> + <entry>F431-06</entry> + <entry>FETCH RELATIVE</entry> + <entry></entry> + </row> + <row> + <entry>F441</entry> + <entry>Extended set function support</entry> + <entry></entry> + </row> + <row> + <entry>F451</entry> + <entry>Character set definition</entry> + <entry></entry> + </row> + <row> + <entry>F461</entry> + <entry>Named character sets</entry> + <entry></entry> + </row> + <row> + <entry>F491</entry> + <entry>Constraint management</entry> + <entry></entry> + </row> + <row> + <entry>F502</entry> + <entry>Enhanced documentation tables</entry> + <entry></entry> + </row> + <row> + <entry>F502-01</entry> + <entry>SQL_SIZING_PROFILES view</entry> + <entry></entry> + </row> + <row> + <entry>F502-02</entry> + <entry>SQL_IMPLEMENTATION_INFO view</entry> + <entry></entry> + </row> + <row> + <entry>F502-03</entry> + <entry>SQL_PACKAGES view</entry> + <entry></entry> + </row> + <row> + <entry>F511</entry> + <entry>BIT data type</entry> + <entry></entry> + </row> + <row> + <entry>F521</entry> + <entry>Assertions</entry> + <entry></entry> + </row> + <row> + <entry>F531</entry> + <entry>Temporary tables</entry> + <entry></entry> + </row> + <row> + <entry>F555</entry> + <entry>Enhanced seconds precision</entry> + <entry></entry> + </row> + <row> + <entry>F561</entry> + <entry>Full value expressions</entry> + <entry></entry> + </row> + <row> + <entry>F571</entry> + <entry>Truth value tests</entry> + <entry></entry> + </row> + <row> + <entry>F591</entry> + <entry>Derived tables</entry> + <entry></entry> + </row> + <row> + <entry>F611</entry> + <entry>Indicator data types</entry> + <entry></entry> + </row> + <row> + <entry>F641</entry> + <entry>Row and table constructors</entry> + <entry></entry> + </row> + <row> + <entry>F651</entry> + <entry>Catalog name qualifiers</entry> + <entry></entry> + </row> + <row> + <entry>F661</entry> + <entry>Simple tables</entry> + <entry></entry> + </row> + <row> + <entry>F671</entry> + <entry>Subqueries in CHECK</entry> + <entry></entry> + </row> + <row> + <entry>F691</entry> + <entry>Collation and translation</entry> + <entry></entry> + </row> + <row> + <entry>F701</entry> + <entry>Referential update actions</entry> + <entry></entry> + </row> + <row> + <entry>F711</entry> + <entry>ALTER domain</entry> + <entry></entry> + </row> + <row> + <entry>F721</entry> + <entry>Deferrable constraints</entry> + <entry></entry> + </row> + <row> + <entry>F731</entry> + <entry>INSERT column privileges</entry> + <entry></entry> + </row> + <row> + <entry>F741</entry> + <entry>Referential MATCH types</entry> + <entry></entry> + </row> + <row> + <entry>F751</entry> + <entry>View CHECK enhancements</entry> + <entry></entry> + </row> + <row> + <entry>F761</entry> + <entry>Session management</entry> + <entry></entry> + </row> + <row> + <entry>F771</entry> + <entry>Connection management</entry> + <entry></entry> + </row> + <row> + <entry>F781</entry> + <entry>Self-referencing operations</entry> + <entry></entry> + </row> + <row> + <entry>F791</entry> + <entry>Insensitive cursors</entry> + <entry></entry> + </row> + <row> + <entry>F801</entry> + <entry>Full set function</entry> + <entry></entry> + </row> + <row> + <entry>F811</entry> + <entry>Extended flagging</entry> + <entry></entry> + </row> + <row> + <entry>F813</entry> + <entry>Extended flagging for "Core SQL Flagging" and "Catalog + Lookup" only</entry> + <entry></entry> + </row> + <row> + <entry>F821</entry> + <entry>Local table references</entry> + <entry></entry> + </row> + <row> + <entry>F831</entry> + <entry>Full cursor update</entry> + <entry></entry> + </row> + <row> + <entry>F831-01</entry> + <entry>Updateable scrollable cursors</entry> + <entry></entry> + </row> + <row> + <entry>F831-02</entry> + <entry>Updateable ordered cursors</entry> + <entry></entry> + </row> + <row> + <entry>S023</entry> + <entry>Basic structured types</entry> + <entry></entry> + </row> + <row> + <entry>S024</entry> + <entry>Enhanced structured types</entry> + <entry></entry> + </row> + <row> + <entry>S041</entry> + <entry>Basic reference types</entry> + <entry></entry> + </row> + <row> + <entry>S043</entry> + <entry>Enhanced reference types</entry> + <entry></entry> + </row> + <row> + <entry>S051</entry> + <entry>Create table of type</entry> + <entry></entry> + </row> + <row> + <entry>S071</entry> + <entry>SQL paths in function and type name resolution</entry> + <entry></entry> + </row> + <row> + <entry>S081</entry> + <entry>Subtables</entry> + <entry></entry> + </row> + <row> + <entry>S091</entry> + <entry>Basic array support</entry> + <entry></entry> + </row> + <row> + <entry>S091-01</entry> + <entry>Arrays of built-in data types</entry> + <entry></entry> + </row> + <row> + <entry>S091-02</entry> + <entry>Arrays of distinct types</entry> + <entry></entry> + </row> + <row> + <entry>S091-03</entry> + <entry>Array expressions</entry> + <entry></entry> + </row> + <row> + <entry>S092</entry> + <entry>Arrays of user-defined types</entry> + <entry></entry> + </row> + <row> + <entry>S094</entry> + <entry>Arrays of reference types</entry> + <entry></entry> + </row> + <row> + <entry>S111</entry> + <entry>ONLY in query expressions</entry> + <entry></entry> + </row> + <row> + <entry>S151</entry> + <entry>Type predicate</entry> + <entry></entry> + </row> + <row> + <entry>S161</entry> + <entry>Subtype treatment</entry> + <entry></entry> + </row> + <row> + <entry>S201</entry> + <entry>SQL routines on arrays</entry> + <entry></entry> + </row> + <row> + <entry>S201-01</entry> + <entry>Array parameters</entry> + <entry></entry> + </row> + <row> + <entry>S201-02</entry> + <entry>Array as result type of functions</entry> + <entry></entry> + </row> + <row> + <entry>S211</entry> + <entry>User-defined cast functions</entry> + <entry></entry> + </row> + <row> + <entry>S231</entry> + <entry>Structured type locators</entry> + <entry></entry> + </row> + <row> + <entry>S232</entry> + <entry>Array locators</entry> + <entry></entry> + </row> + <row> + <entry>S241</entry> + <entry>Transform functions</entry> + <entry></entry> + </row> + <row> + <entry>S251</entry> + <entry>User-defined orderings</entry> + <entry></entry> + </row> + <row> + <entry>S261</entry> + <entry>Specific type method</entry> + <entry></entry> + </row> + <row> + <entry>T011</entry> + <entry>Timestamp in Information Schema</entry> + <entry></entry> + </row> + <row> + <entry>T031</entry> + <entry>BOOLEAN data type</entry> + <entry></entry> + </row> + <row> + <entry>T041</entry> + <entry>Basic LOB data type support</entry> + <entry></entry> + </row> + <row> + <entry>T041-01</entry> + <entry>BLOB data type</entry> + <entry></entry> + </row> + <row> + <entry>T041-02</entry> + <entry>CLOB data type</entry> + <entry></entry> + </row> + <row> + <entry>T041-03</entry> + <entry>POSITION, LENGTH, LOWER, TRIM, UPPER, and SUBSTRING + functions for LOB data types</entry> + <entry></entry> + </row> + <row> + <entry>T041-04</entry> + <entry>Concatenation of LOB data types</entry> + <entry></entry> + </row> + <row> + <entry>T041-05</entry> + <entry>LOB locator: non-holdable</entry> + <entry></entry> + </row> + <row> + <entry>T042</entry> + <entry>Extended LOB data type support</entry> + <entry></entry> + </row> + <row> + <entry>T051</entry> + <entry>Row types</entry> + <entry></entry> + </row> + <row> + <entry>T111</entry> + <entry>Updatable joins, unions, and columns</entry> + <entry></entry> + </row> + <row> + <entry>T121</entry> + <entry>WITH (excluding RECURSIVE) in query expression</entry> + <entry></entry> + </row> + <row> + <entry>T131</entry> + <entry>Recursive query</entry> + <entry></entry> + </row> + <row> + <entry>T141</entry> + <entry>SIMILAR predicate</entry> + <entry></entry> + </row> + <row> + <entry>T151</entry> + <entry>DISTINCT predicate</entry> + <entry></entry> + </row> + <row> + <entry>T171</entry> + <entry>LIKE clause in table definition</entry> + <entry></entry> + </row> + <row> + <entry>T191</entry> + <entry>Referential action RESTRICT</entry> + <entry></entry> + </row> + <row> + <entry>T201</entry> + <entry>Comparable data types for referential constraints</entry> + <entry></entry> + </row> + <row> + <entry>T211</entry> + <entry>Basic trigger capability</entry> + <entry></entry> + </row> + <row> + <entry>T211-01</entry> + <entry>Triggers activated on UPDATE, INSERT, or DELETE of one + base table</entry> + <entry></entry> + </row> + <row> + <entry>T211-02</entry> + <entry>BEFORE triggers</entry> + <entry></entry> + </row> + <row> + <entry>T211-03</entry> + <entry>AFTER triggers</entry> + <entry></entry> + </row> + <row> + <entry>T211-04</entry> + <entry>FOR EACH ROW triggers</entry> + <entry></entry> + </row> + <row> + <entry>T211-05</entry> + <entry>Ability to specify a search condition that must be true + before the trigger is invoked</entry> + <entry></entry> + </row> + <row> + <entry>T211-06</entry> + <entry>Support for run-time rules for the interaction of triggers + and constraints</entry> + <entry></entry> + </row> + <row> + <entry>T211-07</entry> + <entry>TRIGGER privilege</entry> + <entry></entry> + </row> + <row> + <entry>T211-08</entry> + <entry>Multiple triggers for the same the event are executed in + the order in which they were created</entry> + <entry></entry> + </row> + <row> + <entry>T212</entry> + <entry>Enhanced trigger capability</entry> + <entry></entry> + </row> + <row> + <entry>T231</entry> + <entry>SENSITIVE cursors</entry> + <entry></entry> + </row> + <row> + <entry>T241</entry> + <entry>START TRANSACTION statement</entry> + <entry></entry> + </row> + <row> + <entry>T251</entry> + <entry>SET TRANSACTION statement: LOCAL option</entry> + <entry></entry> + </row> + <row> + <entry>T261</entry> + <entry>Chained transactions</entry> + <entry></entry> + </row> + <row> + <entry>T271</entry> + <entry>Savepoints</entry> + <entry></entry> + </row> + <row> + <entry>T281</entry> + <entry>SELECT privilege with column granularity</entry> + <entry></entry> + </row> + <row> + <entry>T301</entry> + <entry>Functional Dependencies</entry> + <entry></entry> + </row> + <row> + <entry>T312</entry> + <entry>OVERLAY function</entry> + <entry></entry> + </row> + <row> + <entry>T322</entry> + <entry>Overloading of SQL-invoked functions and procedures</entry> + <entry></entry> + </row> + <row> + <entry>T323</entry> + <entry>Explicit security for external routines</entry> + <entry></entry> + </row> + <row> + <entry>T331</entry> + <entry>Basic roles</entry> + <entry></entry> + </row> + <row> + <entry>T332</entry> + <entry>Extended roles</entry> + <entry></entry> + </row> + <row> + <entry>T351</entry> + <entry>Bracketed SQL comments (/*...*/ comments)</entry> + <entry></entry> + </row> + <row> + <entry>T401</entry> + <entry>INSERT into a cursor</entry> + <entry></entry> + </row> + <row> + <entry>T411</entry> + <entry>UPDATE statement: SET ROW option</entry> + <entry></entry> + </row> + <row> + <entry>T431</entry> + <entry>CUBE and ROLLUP operations</entry> + <entry></entry> + </row> + <row> + <entry>T441</entry> + <entry>ABS and MOD functions</entry> + <entry></entry> + </row> + <row> + <entry>T461</entry> + <entry>Symmetric BETWEEN predicate</entry> + <entry></entry> + </row> + <row> + <entry>T471</entry> + <entry>Result sets return value</entry> + <entry></entry> + </row> + <row> + <entry>T491</entry> + <entry>LATERAL derived table</entry> + <entry></entry> + </row> + <row> + <entry>T501</entry> + <entry>Enhanced EXISTS predicate</entry> + <entry></entry> + </row> + <row> + <entry>T511</entry> + <entry>Transaction counts</entry> + <entry></entry> + </row> + <row> + <entry>T541</entry> + <entry>Updatable table references</entry> + <entry></entry> + </row> + <row> + <entry>T551</entry> + <entry>Optional key words for default syntax</entry> + <entry></entry> + </row> + <row> + <entry>T561</entry> + <entry>Holdable locators</entry> + <entry></entry> + </row> + <row> + <entry>T571</entry> + <entry>Array-returning external SQL-invoked functions</entry> + <entry></entry> + </row> + <row> + <entry>T581</entry> + <entry>Regular expression substring function</entry> + <entry></entry> + </row> + <row> + <entry>T591</entry> + <entry>UNIQUE constraints of possibly null columns</entry> + <entry></entry> + </row> + <row> + <entry>T601</entry> + <entry>Local cursor references</entry> + <entry></entry> + </row> + </tbody> + </tgroup> + </informaltable> + </para> + </sect1> + </appendix> + +<!-- Keep this comment at the end of the file +Local variables: +mode:sgml +sgml-omittag:nil +sgml-shorttag:t +sgml-minimize-attributes:nil +sgml-always-quote-attributes:t +sgml-indent-step:1 +sgml-indent-data:t +sgml-parent-document:nil +sgml-default-dtd-file:"./reference.ced" +sgml-exposed-tags:nil +sgml-local-catalogs:("/usr/lib/sgml/catalog") +sgml-local-ecat-files:nil +End: +--> diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml index 33d0d4ea67155fbeb0f85a7db04fb6eec2124efe..d8c5998fb84a1567734b3ce37cae70a0df86eb93 100644 --- a/doc/src/sgml/filelist.sgml +++ b/doc/src/sgml/filelist.sgml @@ -1,4 +1,4 @@ -<!-- $Header: /cvsroot/pgsql/doc/src/sgml/filelist.sgml,v 1.18 2002/06/13 05:54:00 momjian Exp $ --> +<!-- $Header: /cvsroot/pgsql/doc/src/sgml/filelist.sgml,v 1.19 2002/06/15 02:59:55 thomas Exp $ --> <!entity history SYSTEM "history.sgml"> <!entity info SYSTEM "info.sgml"> @@ -23,16 +23,17 @@ <!entity array SYSTEM "array.sgml"> <!entity datatype SYSTEM "datatype.sgml"> <!entity datetime SYSTEM "datetime.sgml"> +<!entity features SYSTEM "features.sgml"> <!entity func SYSTEM "func.sgml"> <!entity indices SYSTEM "indices.sgml"> <!entity inherit SYSTEM "inherit.sgml"> +<!entity keywords SYSTEM "keywords.sgml"> <!entity manage SYSTEM "manage.sgml"> <!entity mvcc SYSTEM "mvcc.sgml"> <!entity perform SYSTEM "perform.sgml"> <!entity queries SYSTEM "queries.sgml"> <!entity syntax SYSTEM "syntax.sgml"> <!entity typeconv SYSTEM "typeconv.sgml"> -<!entity keywords SYSTEM "keywords.sgml"> <!-- reference pages --> <!entity % allfiles SYSTEM "ref/allfiles.sgml"> diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 1e7e5bcde61eb815ea6b3a280919322cfca372eb..976147f5c2abac3ff35c8cb04f8d5f2cb2f89895 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/func.sgml,v 1.101 2002/06/11 16:00:17 thomas Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/func.sgml,v 1.102 2002/06/15 02:59:55 thomas Exp $ PostgreSQL documentation --> @@ -2703,17 +2703,17 @@ PostgreSQL documentation </row> <row> - <entry><function>current_time</function></entry> - <entry><type>time</type></entry> - <entry>Time of day; see <link linkend="functions-datetime-current">below</link> - </entry> - <entry></entry> - <entry></entry> + <entry><function>current_time</function></entry> + <entry><type>time with time zone</type></entry> + <entry>Time of day; see <link linkend="functions-datetime-current">below</link> + </entry> + <entry></entry> + <entry></entry> </row> <row> <entry><function>current_timestamp</function></entry> - <entry><type>timestamp</type></entry> + <entry><type>timestamp with time zone</type></entry> <entry>Date and time; see <link linkend="functions-datetime-current">below</link> </entry> <entry></entry> @@ -2790,6 +2790,24 @@ PostgreSQL documentation <entry><literal>true</literal></entry> </row> + <row> + <entry><function>localtime</function></entry> + <entry><type>time</type></entry> + <entry>Time of day; see <link linkend="functions-datetime-current">below</link> + </entry> + <entry></entry> + <entry></entry> + </row> + + <row> + <entry><function>localtimestamp</function></entry> + <entry><type>timestamp</type></entry> + <entry>Date and time; see <link linkend="functions-datetime-current">below</link> + </entry> + <entry></entry> + <entry></entry> + </row> + <row> <entry><function>now</function>()</entry> <entry><type>timestamp</type></entry> @@ -3264,40 +3282,37 @@ SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40'); <para> The following functions are available to obtain the current date and/or time: -<synopsis> + <synopsis> CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_TIME ( <replaceable>precision</replaceable> ) CURRENT_TIMESTAMP ( <replaceable>precision</replaceable> ) -</synopsis> - <function>CURRENT_TIME</function> and - <function>CURRENT_TIMESTAMP</function> can optionally be given - a precision parameter, which causes the result to be rounded - to that many fractional digits. Without a precision parameter, - the result is given to full available precision. - </para> - - <note> - <para> - Prior to <productname>PostgreSQL</productname> 7.2, the precision parameters - were unimplemented, and the result was always given in integer - seconds. +LOCALTIME +LOCALTIMESTAMP +LOCALTIME ( <replaceable>precision</replaceable> ) +LOCALTIMESTAMP ( <replaceable>precision</replaceable> ) + </synopsis> + <function>CURRENT_TIME</function>, + <function>CURRENT_TIMESTAMP</function>, + <function>LOCALTIME</function>, and + <function>LOCALTIMESTAMP</function> + can optionally be given + a precision parameter, which causes the result to be rounded + to that many fractional digits. Without a precision parameter, + the result is given to the full available precision. </para> - </note> - <note> - <para> - The <acronym>SQL99</acronym> standard requires these functions to - be written without any parentheses, unless a precision parameter - is given. As of <productname>PostgreSQL</productname> 7.2, an empty pair of - parentheses can be written, but this is deprecated and may be - removed in a future release. - </para> - </note> + <note> + <para> + Prior to <productname>PostgreSQL</productname> 7.2, the precision + parameters were unimplemented, and the result was always given + in integer seconds. + </para> + </note> - <informalexample> -<screen> + <informalexample> + <screen> SELECT CURRENT_TIME; <computeroutput>14:39:53.662522-05</computeroutput> @@ -3309,6 +3324,9 @@ SELECT CURRENT_TIMESTAMP; SELECT CURRENT_TIMESTAMP(2); <computeroutput>2001-12-23 14:39:53.66-05</computeroutput> + +SELECT LOCALTIMESTAMP; +<computeroutput>2001-12-23 14:39:53.662522</computeroutput> </screen> </informalexample> diff --git a/doc/src/sgml/user.sgml b/doc/src/sgml/user.sgml index f8da13ded6ff18dc921df6eb464b33926678e8e3..79ed594ff7eff9223c9a1c074afdb00be322e0a5 100644 --- a/doc/src/sgml/user.sgml +++ b/doc/src/sgml/user.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/Attic/user.sgml,v 1.29 2001/05/12 22:51:36 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/Attic/user.sgml,v 1.30 2002/06/15 02:59:55 thomas Exp $ --> <book id="user"> @@ -31,6 +31,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/user.sgml,v 1.29 2001/05/12 22:51:36 &datetime; &keywords; + &features; &biblio; diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index bfbf23e3df797fa94e19ed5fad2a054b879ed984..b4ff1fcf50fc28971f2b9aee58b137a8faa3268f 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -11,7 +11,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.322 2002/06/13 14:16:43 thomas Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.323 2002/06/15 03:00:03 thomas Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -259,7 +259,6 @@ static void doNegateFloat(Value *v); %type <list> row_descriptor, row_list, in_expr_nodes %type <node> row_expr %type <node> case_expr, case_arg, when_clause, case_default -%type <boolean> opt_empty_parentheses %type <list> when_clause_list %type <ival> sub_type %type <list> OptCreateAs, CreateAsList @@ -347,7 +346,7 @@ static void doNegateFloat(Value *v); KEY, LANCOMPILER, LANGUAGE, LEADING, LEFT, LEVEL, LIKE, LIMIT, LISTEN, - LOAD, LOCAL, LOCATION, LOCK_P, + LOAD, LOCAL, LOCALTIME, LOCALTIMESTAMP, LOCATION, LOCK_P, MATCH, MAXVALUE, MINUTE_P, MINVALUE, MODE, MONTH_P, MOVE, @@ -5461,7 +5460,7 @@ c_expr: columnref n->agg_distinct = FALSE; $$ = (Node *)n; } - | CURRENT_DATE opt_empty_parentheses + | CURRENT_DATE { /* * Translate as "'now'::text::date". @@ -5487,7 +5486,7 @@ c_expr: columnref $$ = (Node *)makeTypeCast((Node *)s, d); } - | CURRENT_TIME opt_empty_parentheses + | CURRENT_TIME { /* * Translate as "'now'::text::timetz". @@ -5530,7 +5529,7 @@ c_expr: columnref $$ = (Node *)makeTypeCast((Node *)s, d); } - | CURRENT_TIMESTAMP opt_empty_parentheses + | CURRENT_TIMESTAMP { /* * Translate as "'now'::text::timestamptz". @@ -5574,7 +5573,94 @@ c_expr: columnref $$ = (Node *)makeTypeCast((Node *)s, d); } - | CURRENT_USER opt_empty_parentheses + | LOCALTIME + { + /* + * Translate as "'now'::text::time". + * See comments for CURRENT_DATE. + */ + A_Const *s = makeNode(A_Const); + TypeName *d; + + s->val.type = T_String; + s->val.val.str = "now"; + s->typename = SystemTypeName("text"); + + d = SystemTypeName("time"); + /* SQL99 mandates a default precision of zero for TIME + * fields in schemas. However, for LOCALTIME + * let's preserve the microsecond precision we + * might see from the system clock. - thomas 2001-12-07 + */ + d->typmod = 6; + + $$ = (Node *)makeTypeCast((Node *)s, d); + } + | LOCALTIME '(' Iconst ')' + { + /* + * Translate as "'now'::text::time(n)". + * See comments for CURRENT_DATE. + */ + A_Const *s = makeNode(A_Const); + TypeName *d; + + s->val.type = T_String; + s->val.val.str = "now"; + s->typename = SystemTypeName("text"); + d = SystemTypeName("time"); + if (($3 < 0) || ($3 > MAX_TIME_PRECISION)) + elog(ERROR, "LOCALTIME(%d) precision must be between %d and %d", + $3, 0, MAX_TIME_PRECISION); + d->typmod = $3; + + $$ = (Node *)makeTypeCast((Node *)s, d); + } + | LOCALTIMESTAMP + { + /* + * Translate as "'now'::text::timestamp". + * See comments for CURRENT_DATE. + */ + A_Const *s = makeNode(A_Const); + TypeName *d; + + s->val.type = T_String; + s->val.val.str = "now"; + s->typename = SystemTypeName("text"); + + d = SystemTypeName("timestamp"); + /* SQL99 mandates a default precision of 6 for timestamp. + * Also, that is about as precise as we will get since + * we are using a microsecond time interface. + * - thomas 2001-12-07 + */ + d->typmod = 6; + + $$ = (Node *)makeTypeCast((Node *)s, d); + } + | LOCALTIMESTAMP '(' Iconst ')' + { + /* + * Translate as "'now'::text::timestamp(n)". + * See comments for CURRENT_DATE. + */ + A_Const *s = makeNode(A_Const); + TypeName *d; + + s->val.type = T_String; + s->val.val.str = "now"; + s->typename = SystemTypeName("text"); + + d = SystemTypeName("timestamp"); + if (($3 < 0) || ($3 > MAX_TIMESTAMP_PRECISION)) + elog(ERROR, "LOCALTIMESTAMP(%d) precision must be between %d and %d", + $3, 0, MAX_TIMESTAMP_PRECISION); + d->typmod = $3; + + $$ = (Node *)makeTypeCast((Node *)s, d); + } + | CURRENT_USER { FuncCall *n = makeNode(FuncCall); n->funcname = SystemFuncName("current_user"); @@ -5583,7 +5669,7 @@ c_expr: columnref n->agg_distinct = FALSE; $$ = (Node *)n; } - | SESSION_USER opt_empty_parentheses + | SESSION_USER { FuncCall *n = makeNode(FuncCall); n->funcname = SystemFuncName("session_user"); @@ -5592,7 +5678,7 @@ c_expr: columnref n->agg_distinct = FALSE; $$ = (Node *)n; } - | USER opt_empty_parentheses + | USER { FuncCall *n = makeNode(FuncCall); n->funcname = SystemFuncName("current_user"); @@ -5966,9 +6052,6 @@ attrs: '.' attr_name { $$ = lcons(makeString($2), $3); } ; -opt_empty_parentheses: '(' ')' { $$ = TRUE; } - | /*EMPTY*/ { $$ = TRUE; } - ; /***************************************************************************** * @@ -6572,6 +6655,8 @@ reserved_keyword: | INTO | LEADING | LIMIT + | LOCALTIME + | LOCALTIMESTAMP | NEW | NOT | NULL_P diff --git a/src/backend/parser/keywords.c b/src/backend/parser/keywords.c index dca44c448f988c37ae4c38ec6781a93500a02e25..0f441290ea896f62106852b48f232de3e00a6962 100644 --- a/src/backend/parser/keywords.c +++ b/src/backend/parser/keywords.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.113 2002/06/11 15:41:37 thomas Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.114 2002/06/15 03:00:03 thomas Exp $ * *------------------------------------------------------------------------- */ @@ -172,6 +172,8 @@ static const ScanKeyword ScanKeywords[] = { {"listen", LISTEN}, {"load", LOAD}, {"local", LOCAL}, + {"localtime", LOCALTIME}, + {"localtimestamp", LOCALTIMESTAMP}, {"location", LOCATION}, {"lock", LOCK_P}, {"match", MATCH}, diff --git a/src/interfaces/odbc/convert.c b/src/interfaces/odbc/convert.c index 39a430aff3f2d20ca2b9a0146dfa76bac19bdfae..60fdc54f9c34febf35ee5be89b9793b93f3215bf 100644 --- a/src/interfaces/odbc/convert.c +++ b/src/interfaces/odbc/convert.c @@ -103,6 +103,8 @@ char *mapFuncs[][2] = { {"CURRENT_DATE", "current_date" }, {"CURRENT_TIME", "current_time" }, {"CURRENT_TIMESTAMP", "current_timestamp" }, + {"LOCALTIME", "localtime" }, + {"LOCALTIMESTAMP", "localtimestamp" }, {"CURRENT_USER", "cast(current_user as text)" }, {"SESSION_USER", "cast(session_user as text)" }, {"CURDATE", "current_date" },