(In reply to comment #7)
> If we suppose_pType->aCreateParams.isEmpty() is useful, here's a naive patch:
> diff --git a/dbaccess/source/ui/tabledesign/FieldDescriptions.cxx
> b/dbaccess/source/ui/tabledesign/FieldDescriptions.cxx
> index 65fb772..d3495a8 100644
> --- a/dbaccess/source/ui/tabledesign/FieldDescriptions.cxx
> +++ b/dbaccess/source/ui/tabledesign/FieldDescriptions.cxx
> @@ -221,7 +221,7 @@ void OFieldDescription::FillFromTypeInfo(const
> TOTypeInfoSP& _pType,bool _bForce
>                          SetScale(::std::min<sal_Int32>(GetScale() ?
> GetScale() : DEFAULT_NUMERIC_SCALE,_pType->nMaximumScale));
>                  }
>          }
> -        if ( _pType->aCreateParams.isEmpty() )
> +        if ( _pType->aCreateParams.isEmpty() || _bForce )
>          {
>              SetPrecision(_pType->nPrecision);
>              SetScale(_pType->nMinimumScale);

To me, it looks like when changing type, the "switch" statement just
before in the code is in charge (when the type changed, thus bForce is
true, even if _bForce is not) of setting the default values. I'd
recommend looking through it, what happens when the bug is hit?

But actually, it is not immediately obvious to me what the best
behaviour should be here, actually. The bug reporter seems to suggest
"always reset to the type default, for *any* type change". But keeping
the same length (precision?) kinda makes sense, too. E.g. when going
from FLOAT(17) to VARCHAR(n), well, a FLOAT(17) "fits" in a VARCHAR(17)
(or is it VARCHAR(18) to account for the decimal separator? Need to look
at definitions...), so one could argue that n=17 (or 18 / ...) is a
rather good heuristic. A very quick glance at the code suggests that
maybe that's what is being done, very much on purpose.

Similarly, when changing from NUMERIC to DECIMAL or vice-versa, keeping
the same precision and scale again makes sense to me... Similarly, "in a
perfect world" switching from INTEGER(10) to NUMERIC, I'd say that
NUMERIC(10, 0) is as good a guess than any.

I'd also keep the previous length when switching between CHAR, VARCHAR,
VARCHAR_IGNORECASE, etc, etc.

-- 
You received this bug notification because you are a member of Desktop
Packages, which is subscribed to libreoffice in Ubuntu.
https://bugs.launchpad.net/bugs/986880

Title:
  [Upstream] field length inherited

Status in LibreOffice Productivity Suite:
  Confirmed
Status in “libreoffice” package in Ubuntu:
  Confirmed

Bug description:
  When I define a table field in LbreOfficeBase I notice that the
  following field types NUMERIC, DECIMAL, FLOAT, VARCHAR,
  VARCHAR_IGNORECASE, inherit the latest set length, that is: when I add
  a field it is set to VARCHAR (100), if I change it to FLOAT its length
  is automatically set to 17, if I come back to VARCHAR, the field
  length is not set back to 100, but still remains 17.

  ProblemType: Bug
  DistroRelease: Ubuntu 12.04
  Package: libreoffice-core 1:3.5.2-2ubuntu1
  ProcVersionSignature: Ubuntu 3.2.0-23.36-generic-pae 3.2.14
  Uname: Linux 3.2.0-23-generic-pae i686
  ApportVersion: 2.0.1-0ubuntu5
  Architecture: i386
  CasperVersion: 1.315
  Date: Sun Apr 22 13:13:28 2012
  ExecutablePath: /usr/lib/libreoffice/program/soffice.bin
  LiveMediaBuild: Edubuntu 12.04 LTS "Precise Pangolin" - Beta i386 (20120420)
  ProcEnviron:
   PATH=(custom, no user)
   LANG=it_IT.UTF-8
   SHELL=/bin/bash
  SourcePackage: libreoffice
  UpgradeStatus: No upgrade log present (probably fresh install)

To manage notifications about this bug go to:
https://bugs.launchpad.net/df-libreoffice/+bug/986880/+subscriptions

-- 
Mailing list: https://launchpad.net/~desktop-packages
Post to     : desktop-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~desktop-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to