;***********************************************************************
;Licensed Materials - Property of IBM
;
;BI and PM: UDA
;
;(C) Copyright IBM Corp. 2005, 2020
;
;U.S. Government Users Restricted Rights - Use, duplication, or disclosure 
;by GSA ADP Schedule Contract with IBM Corp.
;
;Unless specifically authorized by IBM, you may not modify any part of this
;file. Where modification is authorized, you must reproduce any copyright
;notices contained in this file and specifically identify which
;modifications have been made by your organization. YOU ARE SOLELY
;RESPONSIBLE FOR DETERMINING THE APPROPRIATENESS OF ANY MODIFICATIONS TO
;THIS FILE AND ASSUME ALL RISKS ASSOCIATED WITH THE USE AND DISTRIBUTION
;OF THE MODIFIED FILE. IBM will not provide support relating to
;unauthorized changes you make to this file.
;***********************************************************************
; $Header: //uda/main/prod/dmd/sgi/informix/cogdmif.ini#6 $
;
; Module:
;    cogdmif.ini
;
; Purpose:
;    This module contains the Informix gateway information.
;
; Notes:
;    1) Do NOT modify this file.  Doing so could result in unknown behavior
;       by the Informix gateway, possibly resulting in application aborts.
;
;    2) Informix does not support a function for performing the substring
;       function; it uses array indexing of the form 
;               <column>[ <startIndex> {,<numChars>} ]
;       If <numChars> is not specified, then only 1 character is extracted.
;       The function 'ARRAY_SUBSTR' is not really an Informix function but
;       a special function name indicating that the above array indexing
;       is to be used.
;       The following is the mapping applied by our interface for ARRAY_SUBSTR
;              ARRAY_SUBSTR( %1, %2 {, %3} )
;       maps to
;              %1[ %2 {, %3} ]
;
;    3) The following are valid entry format:
;          - [section name]:default values for both Informix Dynamic Server
;                           and Informix Extended Parallel Server
;          - [section name Database:IDS]: default values for Informix Dynamic Server
;          - [section name Database:XPS]; default values for Informix Extended
;                                         Parallel Server  
;          - [section name Database:IDS/XPS 'version']: default values for either
;                 IDS or XPS and specific version.
;               
; ************************************************************************

[Expression Results]

[Exceptions Commands]
  Call="EXECUTE PROCEDURE "

[Exceptions Clauses]

[Exceptions Tables]
  UniqueName_Prefix="coguda"
  SQL_MAX_TABLE_NAME_LEN="128"
  
[Exceptions Tables Database:IDS INFORMIX7.31]
  SQL_MAX_TABLE_NAME_LEN="18"

[Exceptions Tables Database:IDS]
  Derived=T
  Joined=T

[Exceptions Tables Database:IDS INFORMIX10.00]
  Derived=F

[Exceptions Tables Database:IDS INFORMIX9.40]
  Derived=F

[Exceptions Tables Database:IDS INFORMIX9.14]
  Derived=F

[Exceptions Tables Database:IDS INFORMIX7.31]
  Derived=F

[Exceptions Tables Database:XPS]
  ; Turn off derived table due to trakker bugs 523528, 523677 
  Derived=F
  Joined=F

[Exceptions Tables Database:XPS INFORMIX8.40]
  ; Trakker 438973 uncovered a third-party issue with multi-level nestings
  ; of derived tables, so until this issue is fixed, we cannot push derived
  ; tables to the database.
  Derived=F

[Exceptions Joins]
Inner=T
Left_Outer=T
Right_Outer=T
Full_Outer=T
Cross=F
Nested_Outer=T
Nested_Inner_To_Product=F
Left_Nested=T
Right_Nested=T
Inner_Tbl_Restrict=F
Outer_Syntax=T
Outer_Tbl_List=T
Non_Equi_Joins=T
Right_Pre="OUTER("
Right_Eql="="
Right_Post=")"
Optnl_Tbl_Join_Filter=T
;
; Allowed: (1) IN, EXISTS, ALL/ANY/SOME subqueries
;          (2) Subquery that returns only one value
;
On_Condition_Subqueries=T
On_Condition_Not_Predicate=T
On_Condition_In_Predicate=T
On_Condition_Between_Predicate=T
On_Condition_Like_Predicate=T
On_Condition_IsNull_Predicate=T
On_Condition_Or_Predicate=T

[Exceptions Joins Database:IDS]
Right_Outer=F
Left_Eql=" LEFT OUTER JOIN "
Optnl_Tbl_Restrict=F
Two_Sided_Join_Restrict=F
Two_Sided_Join_Restrict_Filter=F
Optnl_Tbl_Join_Restrict=F
Optnl_Tbl_Filter=T
Prsrv_Tbl_Join_Filter=T

[Exceptions Joins Database:XPS]
Inner=F
Full_Outer=F
Left_Pre="OUTER("
Left_Eql="="
Left_Post=")"
Optnl_Tbl_Restrict=T
Two_Sided_Join_Restrict=T
Two_Sided_Join_Restrict_Filter=T
Optnl_Tbl_Join_Restrict=T
Optnl_Tbl_Filter=F
Prsrv_Tbl_Join_Filter=F

[Exceptions Joins Database:IDS INFORMIX11.70]
Full_Outer=F

[Exceptions Joins Database:IDS INFORMIX11.50]
Full_Outer=F

[Exceptions Joins Database:IDS INFORMIX7.31]
Inner=F

[Exceptions Joins Database:IDS INFORMIX9.14]
Inner=F

[Exceptions Predicates]
Unique=
;Exists=

[Exceptions Aggregates]
  Max="max"
  Min="min"
  Sum="sum"
  Avg="avg"
  Count="count"
  Count_Star="count(*)"
  Stddev="stdev" 
  Variance="variance" 

[Exceptions OLAP Functions Database:IDS]
Olap_Max="max"
Olap_Min="min"
Olap_Sum="sum"
Olap_Avg="avg"
Olap_Count="count"
Olap_Count_Star="count(*)"
Olap_Cume_Dist="cume_dist"
Olap_Ntile="ntile"
Olap_Rank="rank"
Olap_Dense_Rank="dense_rank"
Olap_Percent_Rank="percent_rank"
Olap_Ratio_To_Report="ratio_to_report"
Olap_Row_Number="row_number"
Olap_First_Value="first_value"
Olap_Last_Value="last_value"
;Olap_Count_Default="ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING"
;Olap_Sum_Default="ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING"
;Olap_Avg_Default="ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING"
Olap_Last_Value_Default="ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING"

[Exceptions OLAP Functions Database:IDS INFORMIX11.70]
Olap_Max=
Olap_Min=
Olap_Sum=
Olap_Avg=
Olap_Count=
Olap_Count_Star=
Olap_Cume_Dist=
Olap_Ntile=
Olap_Rank=
Olap_Dense_Rank=
Olap_Percent_Rank=
Olap_Ratio_To_Report=
Olap_Row_Number=
Olap_First_Value=
Olap_Last_Value=

[Exceptions OLAP Functions Database:IDS INFORMIX11.50]
Olap_Max=
Olap_Min=
Olap_Sum=
Olap_Avg=
Olap_Count=
Olap_Count_Star=
Olap_Cume_Dist=
Olap_Ntile=
Olap_Rank=
Olap_Dense_Rank=
Olap_Percent_Rank=
Olap_Ratio_To_Report=
Olap_Row_Number=
Olap_First_Value=
Olap_Last_Value=

[Exceptions OLAP Functions Database:IDS INFORMIX10.00]
Olap_Max=
Olap_Min=
Olap_Sum=
Olap_Avg=
Olap_Count=
Olap_Count_Star=
Olap_Cume_Dist=
Olap_Ntile=
Olap_Rank=
Olap_Dense_Rank=
Olap_Percent_Rank=
Olap_Ratio_To_Report=
Olap_Row_Number=
Olap_First_Value=
Olap_Last_Value=

[Exceptions OLAP Functions Database:IDS INFORMIX9.40]
Olap_Max=
Olap_Min=
Olap_Sum=
Olap_Avg=
Olap_Count=
Olap_Count_Star=
Olap_Cume_Dist=
Olap_Ntile=
Olap_Rank=
Olap_Dense_Rank=
Olap_Percent_Rank=
Olap_Ratio_To_Report=
Olap_Row_Number=
Olap_First_Value=
Olap_Last_Value=

[Exceptions OLAP Functions Database:XPS]
Olap_Max=
Olap_Min=
Olap_Sum=
Olap_Avg=
Olap_Count=
Olap_Count_Star=
Olap_Cume_Dist=
Olap_Ntile=
Olap_Rank=
Olap_Dense_Rank=
Olap_Percent_Rank=
Olap_Ratio_To_Report=
Olap_Row_Number=
Olap_First_Value=
Olap_Last_Value=

[Exceptions Set Operators Database:IDS]
Distinct="distinct"
  ; turn off union and union all operator due to Informix bug described in 
  ; Trakker #400422 and IBM PMR 77287,004. IBM returns the wrong NULLABLE value
  ; of the output columns in a union clause. 
  ; Against Informix 12.10 beta server sql9179, sql9180 and sql 9197 has issue with null indicator flag, hence the result return -big number.
Union="union"
;Union_All=T
Intersect="intersect"
Except=" except "

[Exceptions Set Operators Database:IDS INFORMIX11.70]
  ; turn off union and union all operator due to Informix bug described in 
  ; Trakker #400422 and IBM PMR 77287,004. IBM returns the wrong NULLABLE value
  ; of the output columns in a union clause. 
Union=
Union_All=F
Intersect=
Except=

[Exceptions Set Operators Database:IDS INFORMIX10.00]
  ; turn off union and union all operator due to Informix bug described in 
  ; Trakker #400422 and IBM PMR 77287,004. IBM returns the wrong NULLABLE value
  ; of the output columns in a union clause. 
Union=
Union_All=F
Intersect=
Except=

[Exceptions Set Operators Database:IDS INFORMIX9.40]
  ; turn off union and union all operator due to Informix bug described in 
  ; Trakker #400422 and IBM PMR 77287,004. IBM returns the wrong NULLABLE value
  ; of the output columns in a union clause. 
Union=
Union_All=F
Intersect=
Except=

[Exceptions Set Operators Database:XPS]
  ; turn off union and union all operator due to Informix bug described in 
  ; Trakker #400422 and IBM PMR 77287,004. IBM returns the wrong NULLABLE value
  ; of the output columns in a union clause. 
Union=
Union_All=F
Intersect=
Except=

[Exceptions Operators]
  Neq=" <> "

[Exceptions Value Expressions]
  Octet_Length=T
  Char_Length=T
  StrCat=T
  Substring=T
  Trim=T
  Extract=C
  Current_Time=F
  Current_Timestamp=F
  LocalTime=C
  LocalTimestamp=C
  Abs=T
  Mod=T
  Ln=T
  Exp=T
  Power=C
  Sqrt=T
  Floor=C
  Nullif=T
  Upper=T
  Lower=T
  Case_Searched=T

  ;
  ; Extract=C, above, indicates that SQL'92 EXTRACT functionality
  ; is [partially] supported by the Informix Gateway through the use
  ; of the following function maps.  The entries without corresponding
  ; function names are simulated locally.
  ; ie) 'EXTRACT( YEAR FROM <dateColumn> )' can be supported by the
  ;     'if_year( <dateColumn> )' function described in the
  ;     Database Functions section.
  ;
  Extract_Year=coguda#extract_year
  Extract_Month=coguda#extract_month
  Extract_Day=coguda#extract_day
  ; Informix day only accepts date/datetime expression. Cognos SQL
  ; extract_day accepts interval in addition to date/datetime expression.
  ; Extract_Hours=
  ; Extract_Minutes=
  ; Extract_Seconds=

  Case_Simple=T
  Current_Date=C
  Cast=C

[Exceptions Value Expressions Database:IDS INFORMIX11.70]
  Ln=C
  Nullif=F

[Exceptions Value Expressions Database:IDS INFORMIX11.50]
  Ln=C
  Nullif=F

[Exceptions Value Expressions Database:IDS INFORMIX10.00]
  Ln=C

[Exceptions Value Expressions Database:IDS INFORMIX9.40]
  Ln=C

[Exceptions Value Expressions Database:IDS INFORMIX7.31]
Cast=F

[Exceptions Value Expressions Database:XPS]
  Case_Simple=F
  Current_Date=F
  Cast=F
  Ln=C
  Nullif=F
 
[Exceptions General]
  Aggregate_Value_Expr=T
  Aggregate_In_Expr=T
  Boolean_Comparison=F
  Count_Non_Distinct=T
  Count_Value_Expr=T
  Multiple_Distinct=T
  Distinct_Aggregates=T
  Group_By_Ordinal=T
  Nulls_Sort_Last=F
  Subqueries=T
  Subquery_Column_Alias=T
  Like_Value_Expr=T
  Group_By_Expr=F
  Subquery_In_Group_By=F
  Subquery_In_Aggregate=T
  Count_Blob=F
; Informix does not support order by alias/name with union clause
  Order_By_Alias=F
  Order_By_Name=F
  Group_By_Sorted=F
  Like_With_Escape=T 
  Integer_Division_Truncation=F
  Is_Null_Value_Expr=T
  Is_Null_Value_Parm=T

[Exceptions General Database:IDS]
  Correlated_Subqueries=T
  Is_Null_Value_Parm=F

[Exceptions General Database:IDS INFORMIX11.70]
  Count_Value_Expr=F
  Multiple_Distinct=F

[Exceptions General Database:IDS INFORMIX11.50]
  Count_Value_Expr=F
  Multiple_Distinct=F

[Exceptions General Database:IDS INFORMIX11.10]
  Is_Null_Value_Expr=F

[Exceptions General Database:IDS INFORMIX10.00]
  Is_Null_Value_Expr=F

[Exceptions General Database:IDS INFORMIX9.40]
  Is_Null_Value_Expr=F

[Exceptions General Database:IDS INFORMIX9.14]
  Is_Null_Value_Expr=F

[Exceptions General Database:IDS INFORMIX7.31]
  Is_Null_Value_Expr=F

[Exceptions General Database:XPS]
  Correlated_Subqueries=F
  Count_Value_Expr=F

[Exceptions General Database:XPS INFORMIX8.20]
  Correlated_Subqueries=T
  Count_Non_Distinct=F
  Is_Null_Value_Parm=F

[Exceptions General Database:XPS INFORMIX8.30]
  Correlated_Subqueries=T
  Is_Null_Value_Parm=F

[Exceptions Literals]
True_Literal_Str="T"
False_Literal_Str="F"
Unknown_Literal_Str=
Date_Literal=C
Date_Format_Str="YYYY MM DD"
Date_Literal_Str="DATE(DATETIME( %s-%s-%s ) YEAR TO DAY)"
Timestamp_Literal=C
Timestamp_Format_Str="YYYY MM DD HH MM SS FFFFF"
Timestamp_Literal_Str="DATETIME( %s-%s-%s %s:%s:%s.%s ) YEAR TO FRACTION(5)"
TimestampTZ_Literal=F
TimestampTZ_Format_Str=
TimestampTZ_Literal_Str=
Time_Literal=C
Time_Format_Str="HH MM SS FFFFF"
Time_Literal_Str="DATETIME( %s:%s:%s.%s ) HOUR TO FRACTION(5)"
TimeTZ_Literal=F
TimeTZ_Format_Str=
TimeTZ_Literal_Str=
Interval_Literal=F
Interval_Format_Str="DD HH MM SS FFFFF"
Interval_Literal_Str="INTERVAL( %s %s:%s:%s.%s ) DAY(9) TO FRACTION(5)"
IntervalYM_Literal=F
IntervalYM_Format_Str="YYYYYYYYY MM"
IntervalYM_Literal_Str="INTERVAL( %s-%s ) YEAR(9) TO MONTH"
Date_Add_Function_Str="( EXTEND(?1, YEAR TO FRACTION) + ?2 )"
Date_Sub_Function_Str="( EXTEND(?1, YEAR TO FRACTION) - ?2 )"
NChar_Literal=T

[Exceptions Literals Database:IDS]
Boolean_Literal=T

[Exceptions Literals Database:IDS INFORMIX7.31]
Boolean_Literal=F

[Exceptions Literals Database:XPS]
Boolean_Literal=F

[Exceptions Delimiters]
Catalog_Delimiter=
Schema_Delimiter="'"
Table_Delimiter=
Column_Delimiter=
Procedure_Delimiter=
Wholename_Delimiter=
 
[Exceptions Separators]
Catalog_Separator=":"
Schema_Separator="."
Table_Separator="."

[Exceptions Misc]
Session_Sort_Order=T

[Builtin Functions]
d:date(%1dcs)=DATE(%1);
n:ln(%1n)=LN(%1);
n:power(%1n,%2n)=POW(%1,%2);
n:floor(%1n)=TRUNC(%1,0);
n:absolute(%1n)=ABS(%1);
c:upshift(%1c)=UPPER(%1);
c:downshift(%1c)=LOWER(%1);
n:round(%1n,%2n)=round(%1,%2);
   
; CAST Functions
;
n:coguda#cast_bigint(%1cn)=CAST(%1 AS INT8);
n:coguda#cast_float(%1cn)=CAST(%1 AS REAL);
n:coguda#cast_real(%1cn)=CAST(%1 AS REAL);
n:coguda#cast_double_precision(%1cn {,%2n})=CAST(%1 AS DOUBLE PRECISION{(%2)});
d:coguda#cast_date(%1c)=CAST( TO_DATE(%1, '%Y-%m-%d') AS DATE );
d:coguda#cast_date(%1ds)=CAST( %1 AS DATE );
t:coguda#cast_time(%1)=CAST(%1 AS DATETIME HOUR TO FRACTION(3)); 
s:coguda#cast_timestamp(%1cnds)=CAST(%1 AS DATETIME YEAR TO FRACTION(3));

i:coguda#cast_interval(%1cni)=CAST(%1 AS INTERVAL DAY(9) TO FRACTION(3));
i:coguda#cast_interval_year(%1)=CAST(%1 AS INTERVAL YEAR(9) TO YEAR);
i:coguda#cast_interval_year_to_month(%1)=CAST(%1 AS INTERVAL YEAR(9) TO MONTH);
i:coguda#cast_interval_month(%1)=CAST(%1 AS INTERVAL MONTH(9) TO MONTH);
i:coguda#cast_interval_day(%1)=CAST(%1 AS INTERVAL DAY(9) TO DAY);
i:coguda#cast_interval_day_to_hour(%1)=CAST(%1 AS INTERVAL DAY(9) TO HOUR);
i:coguda#cast_interval_day_to_minute(%1)=CAST(%1 AS INTERVAL DAY(9) TO MINUTE);
i:coguda#cast_interval_day_to_second(%1)=CAST(%1 AS INTERVAL DAY(9) TO FRACTION(3));
i:coguda#cast_interval_hour(%1)=CAST(%1 AS INTERVAL HOUR(9) TO HOUR);
i:coguda#cast_interval_hour_to_minute(%1)=CAST(%1 AS INTERVAL HOUR(9) TO MINUTE);
i:coguda#cast_interval_hour_to_second(%1)=CAST(%1 AS INTERVAL HOUR(9) TO FRACTION(3));
i:coguda#cast_interval_minute(%1)=CAST(%1 AS INTERVAL MINUTE(9) TO MINUTE);
i:coguda#cast_interval_minute_to_second(%1)=CAST(%1 AS INTERVAL MINUTE(9) TO FRACTION(3));
i:coguda#cast_interval_second(%1)=CAST(%1 AS INTERVAL SECOND(9) TO FRACTION(3));

c:coguda#cast_char(%1b {,%2n})=CASE %1 WHEN 'T' THEN CAST('TRUE' AS CHAR{(%2)}) WHEN 'F' THEN CAST('FALSE' AS CHAR{(%2)}) END;
c:coguda#cast_char(%1ndtsic {,%2n})=CAST(%1 AS CHAR{(%2)});
c:coguda#cast_varchar(%1b {,%2n})=CASE %1 WHEN 'T' THEN CAST('TRUE' AS VARCHAR{(%2)}) WHEN 'F' THEN CAST('FALSE' AS VARCHAR{(%2)}) END;
c:coguda#cast_varchar(%1ndtsic {,%2n})=CAST(%1 AS VARCHAR{(%2)});
c:coguda#cast_nchar(%1b {,%2n})=CASE %1 WHEN 'T' THEN CAST('TRUE' AS NCHAR{(%2)}) WHEN 'F' THEN CAST('FALSE' AS NCHAR{(%2)}) END;
c:coguda#cast_nchar(%1ndtsic {,%2n})=CAST(%1 AS NCHAR{(%2)});
c:coguda#cast_varchar(%1b {,%2n})=CASE %1 WHEN 'T' THEN CAST('TRUE' AS NVARCHAR{(%2)}) WHEN 'F' THEN CAST('FALSE' AS NVARCHAR{(%2)}) END;
c:coguda#cast_nvarchar(%1ndtsic {,%2n})=CAST(%1 AS NVARCHAR{(%2)});

;Functions required to cast division of integer/numeric to a floating point
n:coguda#cast_division_float(%1cn)=CAST(%1 AS REAL);
n:coguda#cast_division_double_precision(%1cn {,%2n})=CAST(%1 AS DOUBLE PRECISION{(%2)});
   
;
; Business Functions for Date Calculations
;
s:_add_days(%1s,%2n)=((%1) + (%2) UNITS DAY);
d:_add_days(%1d,%2n)=((%1) + (%2) UNITS DAY);
n:_days_between(%1ds,%2ds)=( %1 - %2 );
n:_months_between(%1ds,%2ds)=;
n:_years_between(%1ds,%2ds)=;
n:_days_to_end_of_month(%1ds)=( DAY(( ( %1 - DAY( %1 ) UNITS DAY + 1 UNITS DAY ) + 1 UNITS MONTH - 1 UNITS DAY )) - DAY(%1) );
n:_age(%1d)=;
d:_first_of_month(%1d)=(%1 - DAY(%1) UNITS DAY + 1 UNITS DAY);
s:_first_of_month(%1s)=(%1 - DAY(%1) UNITS DAY + 1 UNITS DAY);
d:_last_of_month(%1d)=((%1 - DAY(%1) UNITS DAY + 1 UNITS DAY) + 1 UNITS MONTH - 1 UNITS DAY);
s:_last_of_month(%1s)=((%1 - DAY(%1) UNITS DAY + 1 UNITS DAY) + 1 UNITS MONTH - 1 UNITS DAY);
s:_make_timestamp(%1n,%2n,%3n)=EXTEND( MDY( %2 , %3 , %1 ) );
n:_ymdint_between(%1ds,%2ds)=;
n:_week_of_year(%1ds)=;
n:_day_of_week(%1ds, %2n)=(MOD( WEEKDAY( %1 ) - %2 + 7, 7 ) + 1);
n:_round(%1n,%2n)=ROUND(%1,%2);

;
; Additional Business Functions for Date Calculations
;
s:_add_hours(%1s,%2n)=(%1 + %2 UNITS HOUR);
t:_add_hours(%1t,%2n)=(%1 + %2 UNITS HOUR);
s:_add_minutes(%1s,%2n)=(%1 + %2 UNITS MINUTE);
t:_add_minutes(%1t,%2n)=(%1 + %2 UNITS MINUTE);
s:_add_seconds(%1s,%2n)=(%1 + %2 UNITS SECOND);
t:_add_seconds(%1t,%2n)=(%1 + %2 UNITS SECOND);
n:_hours_between(%1ds,%2ds)=;
n:_minutes_between(%1ds,%2ds)=;
n:_seconds_between(%1ds,%2ds)=;

;
; Functions required by EXTRACT.
;
n:coguda#extract_year(%1ds)=YEAR(%1);
n:coguda#extract_month(%1ds)=MONTH(%1);
n:coguda#extract_day(%1ds)=DAY(%1);
n:coguda#extract_hour(%1)=;
n:coguda#extract_minute(%1)=;
n:coguda#extract_second(%1)=;

[Builtin Functions Database:IDS]
d:_add_months(%1d,%2n)=CASE WHEN DAY((MDY(MONTH(%1), 1, YEAR(%1)) + (%2) UNITS MONTH) + 1 UNITS MONTH - 1 UNITS DAY ) < DAY(%1) then ((%1 - DAY(%1) UNITS DAY + 1 UNITS DAY) + (%2) UNITS MONTH) + 1 UNITS MONTH - 1 UNITS DAY else %1 + (%2) UNITS MONTH END;
s:_add_months(%1s,%2n)=CASE WHEN DAY((MDY(MONTH(%1), 1, YEAR(%1)) + (%2) UNITS MONTH) + 1 UNITS MONTH - 1 UNITS DAY ) < DAY(%1) then ((%1 - DAY(%1) UNITS DAY + 1 UNITS DAY) + (%2) UNITS MONTH) + 1 UNITS MONTH - 1 UNITS DAY else %1 + (%2) UNITS MONTH END;
d:_add_years(%1d,%2n)=CASE WHEN MONTH(%1) = 2 AND DAY(%1) = 29 AND NOT MOD( %2, 4 ) = 0 THEN MDY(2, 28, YEAR(%1) + (%2)) ELSE MDY(MONTH(%1), DAY(%1), YEAR(%1) + (%2)) END;
s:_add_years(%1s,%2n)=CASE WHEN MONTH(%1) = 2 AND DAY(%1) = 29 AND NOT MOD( %2, 4 ) = 0 THEN (((%1) - DAY(%1) UNITS DAY) + 1 UNITS DAY)  + (%2) UNITS YEAR + 1 UNITS MONTH - 1 UNITS DAY else (%1) + (%2) UNITS YEAR END;
n:_day_of_year(%1ds)=CAST( CAST( EXTEND( %1, YEAR TO DAY ) + 1 UNITS DAY - EXTEND( %1, YEAR TO YEAR) AS CHAR(10) ) AS INTEGER );

[Builtin Functions Database:IDS INFORMIX11.70]
n:ln(%1n)=LOGN(%1);

[Builtin Functions Database:IDS INFORMIX11.50]
n:ln(%1n)=LOGN(%1);

[Builtin Functions Database:IDS INFORMIX10.00]
n:ln(%1n)=LOGN(%1);

[Builtin Functions Database:IDS INFORMIX9.40]
n:ln(%1n)=LOGN(%1);

[Builtin Functions Database:IDS INFORMIX7.31]
ds:_add_months(%1ds,%2n)=;
ds:_add_months(%1ds,%2n)=;
ds:_add_years(%1ds,%2n)=;
n:_day_of_year(%1ds)=;
s:_add_hours(%1s,%2n)=;
t:_add_hours(%1t,%2n)=;
s:_add_minutes(%1s,%2n)=;
t:_add_minutes(%1t,%2n)=;
s:_add_seconds(%1s,%2n)=;
t:_add_seconds(%1t,%2n)=;

[Builtin Functions Database:XPS]
ds:_add_months(%1ds,%2n)=;
ds:_add_years(%1ds,%2n)=;
n:_day_of_year(%1ds)=;
s:_add_hours(%1s,%2n)=;
t:_add_hours(%1t,%2n)=;
s:_add_minutes(%1s,%2n)=;
t:_add_minutes(%1t,%2n)=;
s:_add_seconds(%1s,%2n)=;
t:_add_seconds(%1t,%2n)=;
n:ln(%1n)=LOGN(%1);

[Database Functions]
n:stddev_pop(%1n)=STDEV(%1);
n:var_pop(%1n)=VARIANCE(%1);

n:power(%1n,%2n)=POW(%1,%2);
n:sqrt(%1n)=SQRT(%1);

d:current_date()=TODAY;
t:localtime()=CURRENT HOUR TO FRACTION;
t:localtime(%1n)=CURRENT HOUR TO FRACTION(%1);
s:localtimestamp({%1n})=CURRENT;

c:dbservername()=DBSERVERNAME;
s:if_current()=CURRENT;
d:if_date(%1cns)=DATE(%1);
s:if_datetime(%1cn, %2c)=DATETIME(%1) %2;
n:if_day(%1ds)=DAY(%1);
i:if_interval(%1cn, %2c)=INTERVAL(%1) %2;
n:if_length(%1c)=LENGTH(%1);
n:if_month(%1ds)=MONTH(%1);
n:if_round(%1n {, %2n})=ROUND(%1 {, %2});
i:if_units(%1n, %2c)=(%1) UNITS %2;
c:if_user()=USER;
n:if_year(%1ds)=YEAR(%1);
c:sitename()=SITENAME;
d:today()=TODAY;
  
;
; if_substring( <columnName>, <startCol> {, <endCol>} )
; INFORMIX supports array subscripting on column names. 'if_subtring'
; provides a mapping to this syntax. You specify the starting offset
; and the ending offset within the character column. Offsets must be
; one-based numeric literals. Specifying only <startCol> extracts a
; single character.
;
c:if_substring(%1c,%2n{,%3n})=ARRAY_SUBSTR(%1,%2{,%3});
  
;
; If running with Informix servers before 7.1, the following function mapping
; must be commented out:
;	absolute, 
;	if_cos, if_sin, if_tan, if_acos, if_asin, if_atan, if_atan2, 
;	if_exp, if_logn, if_log10, 
;	if_dbinfo
;	if_trim_both, if_trim_leading, if_trim_trailing
;	truncate
;
n:if_cos(%1n)=COS(%1);
n:if_sin(%1n)=SIN(%1);
n:if_tan(%1n)=TAN(%1);
n:if_acos(%1n)=ACOS(%1);
n:if_asin(%1n)=ASIN(%1);
n:if_atan(%1n)=ATAN(%1);
n:if_atan2(%1n, %2n)=ATAN2(%1, %2);
n:if_exp(%1n)=EXP(%1);
n:if_logn(%1n)=LOGN(%1);
n:if_log10(%1n)=LOG10(%1);
  
;
; Informix dbinfo function is actually a set of functions that return
; different types of information about the database. Depends on the option
; and which server are you accessing( Informix Dynamic Server or Extended
; Parallel Server) it may have an additional third parameters. See Informix document
; for all options.
nc:if_dbinfo(%1c {, %2cdinst {, %3c}})=DBINFO(%1 {, %2 {, %3}});
  
c:if_trim_both(%1c)=TRIM(BOTH FROM %1);
c:if_trim_leading(%1c)=TRIM(LEADING FROM %1);
c:if_trim_trailing(%1c)=TRIM(TRAILING FROM %1);
  
c:truncate(%1c)=TRIM(TRAILING FROM %1);
  
;
; Entries in [Operator Addition] and [Operator Subtraction] were obtained
; from Informix Guide to SQL: Reference, Version 7.2, p. 3-30 -> 3.34
;
[Operator Addition]
Date=IV,TS
Time=
Timestamp=IV,TS
Interval=TS,TS:IV,IV:DT,TS

[Operator Subtraction]
Date=TS,IV:IV,TS:DT,IV
Time=
Timestamp=DT,IV:TS,IV:IV,DT
Interval=IV,IV

[Operator Comparison]
Date=DT,OK:TS,OK
Timestamp=TS,OK:DT,OK
Interval=IV,OK

[Directives Session]
;
; IMPORTANT!!!
;	Users can execute the following SQL statements
;
;		SET OPTIMIZATION level_option
;		SET OPTIMIZATION rows_option
;
;	where rows_option is either ALL_ROWS (server default) or FIRST_ROWS,
;	and level_option is either HIGH (server default) or LOW. (Consult
;	the Performance Guide or the Syntax Guide for the meanings of these
;	these options.)  To execute these SQL statements, assign them to the
;	the following entries (Note: these entries must not be preceded by
;	any space character):
;
;	Dop_Text="SET OPTIMIZATION level_option"
;	First_Row_Text="SET OPTIMIZATION rows_option"
;
;	NOTES:
;	(1)	Not all IDS servers support Optimization Goal and Table Ordering.
;	(2)	Users may modify the strings (i.e. level_option, rows_option) of
;		Dop_Text and First_Row_Text, but they must NOT comment out or
;		delete these entries as their presence indicates which IDS server
;		supports what.
;	(3)	The string of Dop_Text will be executed first, followed by the
;		string of First_Row_Text (if applicable).
;
Dop_Text="SET OPTIMIZATION HIGH"
Ordered_Pos=Block_Comment
Ordered_Text="ORDERED"

; Optimizer hint in Informix uses the /*+ FIRST_ROWS */ keyword
; right after SELECT statement, before Row Limit directive.  By 
; default, the first row optimizer is turned off due to performance
; issues. (Trakker 493725) To turn on first row optimization, set 
; First_Row_Text=FIRST_ROWS".
First_Row_Text=
First_Row_Pos=Block_Comment
Append_Pre_Text=""
Append_Post_Text=""
Block_Comment_Pre_Text="/*+"
Block_Comment_Post_Text="*/"

; Row Limit in Informix is achieved by adding the following line
; FIRST n
; Right after the first SELECT, but before DISTINCT
Query_Row_Limit_Pos=Append_Select
Query_Row_Limit_Text=" FIRST %d "

[Gateway Environment]
  Temporary Blobs=

  ;
  ; "Poll For Cancel Timeout"
  ;   Number of milliseconds before checking for cancel of
  ;   cursor open.
  ;       0 - disables ability to cancel a query
  ;       n - # milliseconds.
  ;   Default is 1000 (1 second)
  ;   Notes:
  ;     1) only used under WinNT/95 with Informix 7.1
  ;     2) see INFORMIX E-SQL/C Programmers Manual v7.1
  ;        on "sqlbreakcallback" function 
  ;
  Poll For Cancel Timeout=1000

  ;
  ; If the query
  ; 	SELECT owner FROM 'informix'.systables WHERE tabid = 99
  ; does NOT generate a string in the format x.yzwv where x.yzwv
  ; is normally the server version, then the user may wish to enter
  ; the server version manually.  For example, the result given by 
  ; the above query is the string INFORMIX, and the user knows that
  ; the server version is 7.10.UD1, then the entry to be added is 
  ; (note that there must be NO blanks preceding the entry!):
  ; INFORMIX=7.10.UD1
  ;
informix=7.10.UD1

[Misc]

; Default processing mode.
Processing Mode=Limited Local


; Default values for proc params
DefaultCharPrecision = 2048
DefaultVCharPrecision = 2048
DefaultDecimalPrecision = 32
DefaultDecimalScale = 8

; Release Informix cursor resources at EOD of fetch
RELEASE_IF_CURSOR_AT_EOD=T


[UDA USER OPTIONS]
; 
; NOTES:
;   1) All SQL statements to be executed must end with a semicolon (;)
;          and appear on the SAME line.
;   2) The list of statements must NOT be preceded or followed by a
;          double quote; for example
;
; Attach=SET PDQPRIORITY HIGH; SET OPTIMIZATION ALL_ROWS;
Attach=

[I18N Encoding Mapping]
PC-Latin-1=ibm-850
PC-Latin-2=ibm-852
ISO-7-Danish=ISO8859-7
646de=iso646-us
ISO-10646=iso646-us
sjis-s=ibm-932
ujis=ibm-eucJP
ksc=deckorean
866=ibm-808
1251=cp1251
1252=cp1252
KOI-8=ibm-878
thai620=ibm-1162
gb=ibm-1383
GB18030-2000=gb18030
euctw=ibm-964
rom8=ibm-1051
57372=utf-8

[Operator Cast]
AD=TT,NA:TZ,NA
TM=TS,NA
SM=IV,NA:IY,NA
IT=IV,NA:IY,NA
QD=IV,NA:IY,NA
DM=IV,NA:IY,NA
NU=IV,NA:IY,NA
FL=IV,NA:IY,NA
DB=IV,NA:IY,NA


;ODBC gatway entries
[DATABASE:INFORMIX]
DBINFO_SUBTYPE="Database:IDS"
DBINFO_SUBSECTIONS="DBNAM,DBMAJ,DBMIN"
SQL_API_SQLSPECIALCOLUMNS="FALSE"
Exec_OptimizerGoal_FirstRow="SET OPTIMIZATION FIRST_ROWS"
Exec_OptimizerGoal_AllRows="SET OPTIMIZATION ALL_ROWS"
Exec_OptimizerLevel="SET OPTIMIZATION %d "
OptimizerLevel_Translation_Tbl="0:LOW,1:HIGH,"
OptimizerLevel_Low_Range="0"
OptimizerLevel_High_Range="1"

[DATABASE:INFORMIX VERSION:11.70]
DBINFO_SUBTYPE="Database:IDS INFORMIX11.70"

[DATABASE:INFORMIX VERSION:11.50]
DBINFO_SUBTYPE="Database:IDS INFORMIX11.50"

[DATABASE:INFORMIX VERSION:11.10]
DBINFO_SUBTYPE="Database:IDS INFORMIX11.10"

[DATABASE:INFORMIX VERSION:10.00]
DBINFO_SUBTYPE="Database:IDS INFORMIX10.00"

[DATABASE:INFORMIX VERSION:09.40]
DBINFO_SUBTYPE="Database:IDS INFORMIX9.40"

[DATABASE:INFORMIX VERSION:09.14]
DBINFO_SUBTYPE="Database:IDS INFORMIX9.14"

[DATABASE:INFORMIX VERSION:07.31]
DBINFO_SUBTYPE="Database:IDS INFORMIX7.31"

[DATABASE:INFORMIX VERSION:07.12]
DBINFO_SUBTYPE="Database:IDS INFORMIX7.12"

[DATABASE:INFORMIX VERSION:08]
DBINFO_SUBTYPE="Database:XPS"

[DATABASE:XPS VERSION:08.40]
DBINFO_SUBTYPE="Database:XPS INFORMIX8.40"

[DATABASE:INFORMIX VERSION:08.30]
DBINFO_SUBTYPE="Database:XPS INFORMIX8.30"