mirror of https://github.com/postgres/postgres
current_timestamp, current_date for ODBC compatibility. Add more functions to odbc.sql catalog extension, use new CREATE OR REPLACE FUNCTION. Document iODBC/unixODBC build options.REL7_2_STABLE
parent
839b9bc011
commit
ec5c62874d
@ -1,139 +1,212 @@ |
|||||||
-- PostgreSQL catalog extensions for ODBC compliance |
-- PostgreSQL catalog extensions for ODBC compatibility |
||||||
-- $Header: /cvsroot/pgsql/src/interfaces/odbc/Attic/odbc.sql,v 1.1 2000/09/18 20:11:37 petere Exp $ |
-- $Header: /cvsroot/pgsql/src/interfaces/odbc/Attic/odbc.sql,v 1.2 2001/10/09 22:32:33 petere Exp $ |
||||||
|
|
||||||
|
-- ODBC functions are described here: |
||||||
|
-- <http://msdn.microsoft.com/library/en-us/odbc/htm/odbcscalar_functions.asp> |
||||||
|
|
||||||
-- In the current driver, ODBC functions must map directly into a |
-- Note: If we format this file consistently we can automatically |
||||||
-- Postgres function. So in some cases we must create a compatible |
-- generate a corresponding "drop script". Start "CREATE" in the first |
||||||
-- function. |
-- column, and keep everything up to and including the argument list on |
||||||
|
-- the same line. See also the makefile rule. |
||||||
|
|
||||||
|
|
||||||
-- truncate on the left |
-- String Functions |
||||||
CREATE FUNCTION ltrunc(text, integer) |
-- ++++++++++++++++ |
||||||
RETURNS text |
-- |
||||||
AS 'SELECT substring($1 FROM 1 FOR $2)' |
-- Built-in: ASCII, BIT_LENGTH, CHAR_LENGTH, CHARACTER_LENGTH, LTRIM, |
||||||
LANGUAGE 'SQL'; |
-- OCTET_LENGTH, POSITION, REPEAT, RTRIM, SUBSTRING |
||||||
|
-- Missing: DIFFERENCE, REPLACE, SOUNDEX, LENGTH (ODBC sense) |
||||||
|
-- Keyword problems: CHAR, LEFT, RIGHT |
||||||
|
|
||||||
-- truncate on the right |
|
||||||
CREATE FUNCTION rtrunc(text, integer) |
|
||||||
RETURNS text |
|
||||||
AS 'SELECT substring($1 FROM (char_length($1)-($2)+1) FOR $2)' |
|
||||||
LANGUAGE 'SQL'; |
|
||||||
|
|
||||||
CREATE FUNCTION space(integer) |
-- CHAR(code) |
||||||
RETURNS text |
CREATE OR REPLACE FUNCTION "char"(integer) RETURNS text AS ' |
||||||
AS 'SELECT lpad('''', $1, '' '')' |
SELECT chr($1); |
||||||
LANGUAGE 'SQL'; |
' LANGUAGE SQL; |
||||||
|
|
||||||
-- |
|
||||||
-- Mathematical functions |
|
||||||
-- |
|
||||||
|
|
||||||
CREATE FUNCTION truncate(numeric,integer) |
-- CONCAT(string1, string2) |
||||||
RETURNS numeric |
CREATE OR REPLACE FUNCTION concat(text, text) RETURNS text AS ' |
||||||
AS 'SELECT trunc($1, $2)' |
SELECT $1 || $2; |
||||||
LANGUAGE 'SQL'; |
' LANGUAGE SQL; |
||||||
|
|
||||||
|
|
||||||
|
-- INSERT(string1, start, len, string2) |
||||||
|
CREATE OR REPLACE FUNCTION insert(text, integer, integer, text) RETURNS text AS ' |
||||||
|
SELECT substring($1 from 1 for $2) || $4 || substring($1 from $2 + $3 + 1); |
||||||
|
' LANGUAGE SQL; |
||||||
|
|
||||||
|
|
||||||
|
-- LCASE(string) |
||||||
|
CREATE OR REPLACE FUNCTION lcase(text) RETURNS text AS ' |
||||||
|
SELECT lower($1); |
||||||
|
' LANGUAGE SQL; |
||||||
|
|
||||||
|
|
||||||
|
-- LEFT(string, count) |
||||||
|
CREATE OR REPLACE FUNCTION "left"(text, integer) RETURNS text AS ' |
||||||
|
SELECT substring($1 for $2); |
||||||
|
' LANGUAGE SQL; |
||||||
|
|
||||||
|
|
||||||
|
-- LOCATE(substring, string[, start]) |
||||||
|
CREATE OR REPLACE FUNCTION locate(text, text) RETURNS integer AS ' |
||||||
|
SELECT position($1 in $2); |
||||||
|
' LANGUAGE SQL; |
||||||
|
CREATE OR REPLACE FUNCTION locate(text, text, integer) RETURNS integer AS ' |
||||||
|
SELECT position($1 in substring($2 from $3)) + $3 - 1; |
||||||
|
' LANGUAGE SQL; |
||||||
|
|
||||||
|
|
||||||
|
-- RIGHT(string, count) |
||||||
|
CREATE OR REPLACE FUNCTION "right"(text, integer) RETURNS text AS ' |
||||||
|
SELECT substring($1 from char_length($1) - $2 + 1); |
||||||
|
' LANGUAGE SQL; |
||||||
|
|
||||||
|
|
||||||
|
-- SPACE(count) |
||||||
|
CREATE OR REPLACE FUNCTION space(integer) RETURNS text AS ' |
||||||
|
SELECT repeat('' '', $1); |
||||||
|
' LANGUAGE SQL; |
||||||
|
|
||||||
|
|
||||||
|
-- UCASE(string) |
||||||
|
CREATE OR REPLACE FUNCTION ucase(text) RETURNS text AS ' |
||||||
|
SELECT upper($1); |
||||||
|
' LANGUAGE SQL; |
||||||
|
|
||||||
|
|
||||||
|
-- Numeric Functions |
||||||
|
-- +++++++++++++++++ |
||||||
-- |
-- |
||||||
-- Date/time functions for v7.0 |
-- Built-in: ABS, ACOS, ASIN, ATAN, ATAN2, COS, COT, DEGRESS, EXP, |
||||||
|
-- FLOOR, MOD, PI, RADIANS, ROUND, SIGN, SIN, SQRT, TAN |
||||||
|
-- Missing: LOG (ODBC sense) |
||||||
|
|
||||||
|
|
||||||
|
-- CEILING(num) |
||||||
|
CREATE OR REPLACE FUNCTION ceiling(numeric) RETURNS numeric AS ' |
||||||
|
SELECT ceil($1); |
||||||
|
' LANGUAGE SQL; |
||||||
|
|
||||||
|
|
||||||
|
-- LOG10(num) |
||||||
|
CREATE OR REPLACE FUNCTION log10(double precision) RETURNS double precision AS ' |
||||||
|
SELECT log($1); |
||||||
|
' LANGUAGE SQL; |
||||||
|
CREATE OR REPLACE FUNCTION log10(numeric) RETURNS numeric AS ' |
||||||
|
SELECT log($1); |
||||||
|
' LANGUAGE SQL; |
||||||
|
|
||||||
|
|
||||||
|
-- POWER(num, num) |
||||||
|
CREATE OR REPLACE FUNCTION power(double precision, double precision) |
||||||
|
RETURNS double precision AS ' |
||||||
|
SELECT pow($1, $2); |
||||||
|
' LANGUAGE SQL; |
||||||
|
CREATE OR REPLACE FUNCTION power(numeric, numeric) |
||||||
|
RETURNS numeric AS ' |
||||||
|
SELECT pow($1, $2); |
||||||
|
' LANGUAGE SQL; |
||||||
|
|
||||||
|
|
||||||
|
-- RAND([seed]) |
||||||
|
CREATE OR REPLACE FUNCTION rand() RETURNS double precision AS ' |
||||||
|
SELECT random(); |
||||||
|
' LANGUAGE SQL; |
||||||
|
CREATE OR REPLACE FUNCTION rand(double precision) RETURNS double precision AS ' |
||||||
|
SELECT setseed($1); |
||||||
|
SELECT random(); |
||||||
|
' LANGUAGE SQL; |
||||||
|
|
||||||
|
|
||||||
|
-- TRUNCATE(num, places) |
||||||
|
CREATE OR REPLACE FUNCTION truncate(numeric, integer) RETURNS numeric AS ' |
||||||
|
SELECT trunc($1, $2); |
||||||
|
' LANGUAGE SQL; |
||||||
|
|
||||||
|
|
||||||
|
-- Time, Date, and Interval Functions |
||||||
|
-- ++++++++++++++++++++++++++++++++++ |
||||||
-- |
-- |
||||||
|
-- Built-in: CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, EXTRACT, NOW |
||||||
|
-- Missing: none |
||||||
|
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION curdate() RETURNS date AS ' |
||||||
|
SELECT current_date; |
||||||
|
' LANGUAGE SQL; |
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION curtime() RETURNS time with time zone AS ' |
||||||
|
SELECT current_time; |
||||||
|
' LANGUAGE SQL; |
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION dayname(timestamp) RETURNS text AS ' |
||||||
|
SELECT to_char($1,''Day''); |
||||||
|
' LANGUAGE SQL; |
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION dayofmonth(timestamp) RETURNS integer AS ' |
||||||
|
SELECT CAST(EXTRACT(day FROM $1) AS integer); |
||||||
|
' LANGUAGE SQL; |
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION dayofweek(timestamp) RETURNS integer AS ' |
||||||
|
SELECT CAST(EXTRACT(dow FROM $1) AS integer) + 1; |
||||||
|
' LANGUAGE SQL; |
||||||
|
|
||||||
CREATE FUNCTION curdate() |
CREATE OR REPLACE FUNCTION dayofyear(timestamp) RETURNS integer AS ' |
||||||
RETURNS date |
SELECT CAST(EXTRACT(doy FROM $1) AS integer); |
||||||
AS 'SELECT CAST(''now'' AS date)' |
' LANGUAGE SQL; |
||||||
LANGUAGE 'SQL'; |
|
||||||
|
CREATE OR REPLACE FUNCTION hour(timestamp) RETURNS integer AS ' |
||||||
CREATE FUNCTION curtime() |
SELECT CAST(EXTRACT(hour FROM $1) AS integer); |
||||||
RETURNS time |
' LANGUAGE SQL; |
||||||
AS 'SELECT CAST(''now'' AS time)' |
|
||||||
LANGUAGE 'SQL'; |
CREATE OR REPLACE FUNCTION minute(timestamp) RETURNS integer AS ' |
||||||
|
SELECT CAST(EXTRACT(minute FROM $1) AS integer); |
||||||
CREATE FUNCTION dayname(timestamp) |
' LANGUAGE SQL; |
||||||
RETURNS text |
|
||||||
AS 'SELECT to_char($1,''Day'')' |
CREATE OR REPLACE FUNCTION month(timestamp) RETURNS integer AS ' |
||||||
LANGUAGE 'SQL'; |
SELECT CAST(EXTRACT(month FROM $1) AS integer); |
||||||
|
' LANGUAGE SQL; |
||||||
CREATE FUNCTION dayofmonth(timestamp) |
|
||||||
RETURNS integer |
CREATE OR REPLACE FUNCTION monthname(timestamp) RETURNS text AS ' |
||||||
AS 'SELECT CAST(date_part(''day'', $1) AS integer)' |
SELECT to_char($1, ''Month''); |
||||||
LANGUAGE 'SQL'; |
' LANGUAGE SQL; |
||||||
|
|
||||||
CREATE FUNCTION dayofweek(timestamp) |
CREATE OR REPLACE FUNCTION quarter(timestamp) RETURNS integer AS ' |
||||||
RETURNS integer |
SELECT CAST(EXTRACT(quarter FROM $1) AS integer); |
||||||
AS 'SELECT ( CAST(date_part(''dow'', $1) AS integer) + 1)' |
' LANGUAGE SQL; |
||||||
LANGUAGE 'SQL'; |
|
||||||
|
CREATE OR REPLACE FUNCTION second(timestamp) RETURNS integer AS ' |
||||||
CREATE FUNCTION dayofyear(timestamp) |
SELECT CAST(EXTRACT(second FROM $1) AS integer); |
||||||
RETURNS integer |
' LANGUAGE SQL; |
||||||
AS 'SELECT CAST(date_part(''doy'', $1) AS integer)' |
|
||||||
LANGUAGE 'SQL'; |
|
||||||
|
|
||||||
CREATE FUNCTION hour(timestamp) |
|
||||||
RETURNS integer |
|
||||||
AS 'SELECT CAST(date_part(''hour'', $1) AS integer)' |
|
||||||
LANGUAGE 'SQL'; |
|
||||||
|
|
||||||
CREATE FUNCTION minute(timestamp) |
|
||||||
RETURNS integer |
|
||||||
AS 'SELECT CAST(date_part(''minute'', $1) AS integer)' |
|
||||||
LANGUAGE 'SQL'; |
|
||||||
|
|
||||||
CREATE FUNCTION odbc_month(timestamp) |
|
||||||
RETURNS integer |
|
||||||
AS 'SELECT CAST(date_part(''month'', $1) AS integer)' |
|
||||||
LANGUAGE 'SQL'; |
|
||||||
|
|
||||||
CREATE FUNCTION monthname(timestamp) |
|
||||||
RETURNS text |
|
||||||
AS 'SELECT to_char($1, ''Month'')' |
|
||||||
LANGUAGE 'SQL'; |
|
||||||
|
|
||||||
CREATE FUNCTION quarter(timestamp) |
|
||||||
RETURNS integer |
|
||||||
AS 'SELECT CAST(date_part(''quarter'', $1) AS integer)' |
|
||||||
LANGUAGE 'SQL'; |
|
||||||
|
|
||||||
CREATE FUNCTION second(timestamp) |
|
||||||
RETURNS integer |
|
||||||
AS 'SELECT CAST(date_part(''second'', $1) AS integer)' |
|
||||||
LANGUAGE 'SQL'; |
|
||||||
|
|
||||||
/* |
/* |
||||||
-- The first argument is an integer constant denoting the units |
-- The first argument is an integer constant denoting the units |
||||||
-- of the second argument. Until we know the actual values, we |
-- of the second argument. Until we know the actual values, we |
||||||
-- cannot implement these. - thomas 2000-04-11 |
-- cannot implement these. - thomas 2000-04-11 |
||||||
CREATE FUNCTION timestampadd(integer,integer,timestamp) |
xCREATE OR REPLACE FUNCTION timestampadd(integer, integer, timestamp) |
||||||
RETURNS timestamp |
RETURNS timestamp AS ' |
||||||
AS 'SELECT CAST(($3 + ($2 * $1)) AS timestamp)' |
SELECT CAST(($3 + ($2 * $1)) AS timestamp); |
||||||
LANGUAGE 'SQL'; |
' LANGUAGE SQL; |
||||||
|
|
||||||
CREATE FUNCTION timestampdiff(integer,integer,timestamp) |
xCREATE OR REPLACE FUNCTION timestampdiff(integer, integer, timestamp) |
||||||
RETURNS timestamp |
RETURNS timestamp AS ' |
||||||
AS 'SELECT CAST(($3 + ($2 * $1)) AS timestamp)' |
SELECT CAST(($3 + ($2 * $1)) AS timestamp); |
||||||
LANGUAGE 'SQL'; |
' LANGUAGE SQL; |
||||||
*/ |
*/ |
||||||
|
|
||||||
CREATE FUNCTION week(timestamp) |
CREATE OR REPLACE FUNCTION week(timestamp) RETURNS integer AS ' |
||||||
RETURNS integer |
SELECT CAST(EXTRACT(week FROM $1) AS integer); |
||||||
AS 'SELECT CAST(date_part(''week'', $1) AS integer)' |
' LANGUAGE SQL; |
||||||
LANGUAGE 'SQL'; |
|
||||||
|
|
||||||
CREATE FUNCTION year(timestamp) |
CREATE OR REPLACE FUNCTION year(timestamp) RETURNS integer AS ' |
||||||
RETURNS integer |
SELECT CAST(EXTRACT(year FROM $1) AS integer); |
||||||
AS 'SELECT CAST(date_part(''year'', $1) AS integer)' |
' LANGUAGE SQL; |
||||||
LANGUAGE 'SQL'; |
|
||||||
|
|
||||||
-- |
|
||||||
-- System functions. |
|
||||||
-- |
|
||||||
|
|
||||||
/* |
|
||||||
CREATE FUNCTION database() |
|
||||||
RETURNS text |
|
||||||
AS 'SELECT ...' |
|
||||||
LANGUAGE 'SQL'; |
|
||||||
*/ |
|
||||||
|
|
||||||
CREATE FUNCTION odbc_user() |
-- System Functions |
||||||
RETURNS text |
-- ++++++++++++++++ |
||||||
AS 'SELECT CAST(USER AS text)' |
-- |
||||||
LANGUAGE 'SQL'; |
-- Built-in: USER |
||||||
|
-- Missing: DATABASE, IFNULL |
||||||
|
|||||||
Loading…
Reference in new issue