

The possible mappings between the Postgres95 data types and the Foundation classes are described in the following table.


Base types	Array	String	Number	Data	Date	Object

    bool	YES	YES	YES(2)	NO	NO	(3)
    bytea	YES	YES	NO	YES	NO	(4)

    char	YES	YES	YES	NO	NO	(3)
    char2	YES	YES	YES	NO	NO	(3)
    char4	YES	YES	YES	NO	NO	(3)
    char8	YES	YES	YES	NO	NO	(3)
    char16	YES	YES	YES	NO	NO	(3)
    filename	YES	YES	YES	NO	NO	(3)

    abstime	YES	YES	YES	NO	YES	(3)
    date	YES	YES	NO	NO	YES	(3)
    reltime	YES	YES	NO	NO	YES	(3)
    time	YES	YES	NO	NO	NO	(3)
    tinterval	YES	YES	NO	NO	NO	(3)
    abstime	YES	YES	NO	NO	NO	(3)

    float4	YES	YES	YES	NO	NO	(3)
    float8	YES	YES	YES	NO	NO	(3)
    
    int2	YES	YES	YES	NO	NO	(3)
    int4	YES	YES	YES	NO	NO	(3)
    int28	YES	YES	YES	NO	NO	(3)
    
    oid		YES	YES	YES	YES(1)	NO	(4)
    oid8	YES	YES	YES	NO	NO	(3)
    oidint2	YES	YES	YES	NO	NO	(3)
    oidint4	YES	YES	YES	NO	NO	(3)
    oidchar16	YES	YES	YES	NO	NO	(3)
    
    varchar	NO	YES	YES	NO	NO	(3)
    text	YES	YES	YES	NO	NO	(3)

    cid		YES	YES	YES	NO	NO	(3)
    tid		YES	YES	YES	NO	NO	(3)
    xid		YES	YES	YES	NO	NO	(3)
    regproc	YES	YES	YES	NO	NO	(3)
    aclitem	YES	YES	YES	NO	NO	(3)

    box		YES	YES	NO	NO	NO	(3)
    lseg	YES	YES	NO	NO	NO	(3)
    path	YES	YES	NO	NO	NO	(3)
    point	YES	YES	NO	NO	NO	(3)
    polygon	YES	YES	NO	NO	NO	(3)

1. uses inversion (large objects) -  the Oid is the Oid of a large object.
2. true/false are in the form "t" and "f".
3. uses initWithStringType: if the external type is not "inversion" (alias for oid).
4. uses initWithDataType: if the external type is "invserion" (alias for oid).

Values for array types are handled in the following way: if the value class in NSArray and the valueType is not empty, representing "elementClassName.elementValueType", each element in the string that camed from Postgres95 (the array is parsed as property list) is converted to the base class "elementClassName" with the valueType "elementValueType". WARNING: use this for mappings different from those noted 1 and 4. WARNING: this kind of mapping is not supportted in the upper layers to coerce array elements. (THIS FEATURE IS PLANNED BUT NOT YET IMPLEMENTED).


PROBLEMS NOT SOLVED

1. General procedure to support mapping of user defined type to new or existing classes (one should not have to subclass NSArray to support a new type).

2. ORDER BY does not accept aliases for field names ! 
   (fiexd by modifying [Postgres95SQLExpression orderByClauseForFetchOrder]

3. FROM table alias HOLDLOCK generates syntax error !
   possible solution: modify [Postgres95SQLExpression fromClause] not to alias
   attributes from qualifier's entity if locking is in effect

4. Channel does not take into account char(nn). It treats it like char simple.

5. To use blobs as inversion objects you must add a rule on DELETE on that 
   column to delete the large objects - they are not reference counted.
   
   You must execute:
	SELECT lo_unlink(int4in(int4out(FiledName))) FROM Table;
   on each column that contains the Oid of a inversion object at the
   DELETE time for a record.



