• David Ostrovsky's avatar
    ORowSetValue: clean up sign/unsigned union member · 2bd856e6
    David Ostrovsky yazdı
    Also switch BOOLEAN constructor from sal_Bool to bool.
    
    old/new signed/unsigned storage situation:
    
    -------------------------------------------------------
     SQL type | signed    | unsigned old     | unsigned new
    -------------------------------------------------------
     TINYINT  | sal_Int8  | sal_Int16        | sal_uInt8
     SMALLINT | sal_Int16 | sal_Int32        | sal_uInt16
     INTEGER  | sal_Int32 | sal_Int64        | sal_uInt32
     BIGINT   | sal_Int64 | pValue (String*) | sal_uInt64
    -------------------------------------------------------
    
    When sticking an UNSIGNED TINYINT into an Any,
    silently promote it to UNSIGNED SMALLINT (that is sal_uInt16),
    else Any would take it as a sal_Bool and normalise to
    sal_True (1) or sal_False (0).
    
    When constructing an ORowSetValue from a sal_Bool,
    silently keep it as an unsigned 8 bit integer
    (that is understand it as a sal_uInt8).
    This will work in most cases,
    since when asked back for a bool or sal_Bool,
    we'll give back the right value.
    Only code looking at the type tag could possibly
    make a "wrong" decision.
    The main (hopefully only?) path
    through which this would happen is
    through an implementation of
      XParameters::setBoolean
      XRowUpdate::updateBoolean
    that would use its sal_Bool argument
    to construct an ORowSetValue.
    So make sure each implementation
    constructs a proper BOOLEAN so as not to get confused.
    
    For authorship/copyright purposes, this patch is a cooperation between
     Lionel Elie Mamane <lionel@mamane.lu>
    and
     David Ostrovsky <david@ostrovsky.org>
    
    Change-Id: I3f1f08716127147f077bff4edb6ec558b1b09e09
    2bd856e6
Module_connectivity.mk 3.8 KB