[Dbix-class] how to avoid "select =>... as => ..." syntax with simple but long queries e.g. M fields from N tables with decodes and sql-date operations

Igor Longagnani i.longagnani at synervis.it
Wed Dec 27 14:01:42 GMT 2006


Hi,
a newbie is here again :)
I come from a DBIx::Class RTFM session and I am a little sad because it
doesnt seem helpful with simple stuff like

select
    T1.field1,T1.field2,T2,field3,...,TN.fieldM             ---  (M
fields from N tables)
from
    T1 table1,...TN tableN
where
    joins....and conditions...

I can make nice joins and conditions through the  "search" syntax...
BUT
n cases like the one cited above it seems like you have to use the
"select" syntax to pick fields you need:

        select =3D> qw/ fields...../
        as =3D> qw/alias of fields/

When you have "VERY LONG" number of fields and tables, this last syntax
becomes quite "error-prone".

I am using a "well-formed" and consistent set of DBIx::Classes built
from an Oracle schema, with relations
and has_xxx methods and so on ... Catalyst 5.7006 framework environment.

Any suggestion for something like the following?  I am somehow stuck,
hoping not to have to re-type in "Perl-DBix-Class-mode" this sql which i
didnt built the first time myself :)
Especially for things like (TO_CHAR(SYSDATE, 'J') - TO_CHAR(RF.FIRMADT,
'J')) or some other DECODE?
I even thought to work on the "Controller side" methods of Catalyst to
make some operations, but still i would like to avoid to "prefetch" a
huge amount of data when not strictly necessary and still I'd like to
avoid the "select...as ..." syntax which would force me to re-type every
single field twice ( the as section as well ).

Thanks in advance for your support and ...below follows some SQL to
translate into DBIx::Syntax...
... maybe not all fields are necesasry but most of them are.
Igor

        SELECT DISTINCT
EE.CENTER, R.ALTNO, R.CODPAT , EE.USERID, EE.RAGIONE_SOCIALE,
R.COD_PROGETTO, TO_CHAR(R.FIRMADT,'DD/MM/YYYY'), R.FIRMA,  IQ.DATA,
IQ.NF_PROTOCOLLO_ITA_FILE,     IQ.NF_PROTOCOLLO_ITA, IQ.FILE_NAME,
R.MVALUTAZIONE , IQ.PROPOSTA_RIF, IQ.PROGR, IQ.ID_INFO, =

I.SOTTOTIPO_INT, R.STATO_EVC, R.NOTE_EVC, 'SERVIZIO',  R.FIRMADT,
(TO_CHAR(SYSDATE, 'J') - TO_CHAR(R.FIRMADT, 'J')), R.CLONATO,    =

TO_NUMBER(DECODE(RF.PROGRESSIVO_RICHIESTA,NULL,
'-1',RF.PROGRESSIVO_RICHIESTA,RF.PROGRESSIVO_RICHIESTA)),
DECODE(TO_CHAR(RF.FIRMADT,'DD/MM/YYYY'),NULL,TO_CHAR(R.FIRMADT,'DD/MM/YYYY'=
),
TO_CHAR(RF.FIRMADT,'DD/MM/YYYY'), TO_CHAR(RF.FIRMADT,'DD/MM/YYYY'))        =

,(TO_CHAR(SYSDATE, 'J') - TO_CHAR(RF.FIRMADT, 'J')), =

RF.CONT_INT,RF.STATO_EVC,RF.NOTE_EVC,
TO_DATE(DECODE(TO_CHAR(RF.FIRMADT,'DD/MM/YYYY'),NULL,TO_CHAR(R.FIRMADT,'DD/=
MM/YYYY'),
TO_CHAR(RF.FIRMADT,'DD/MM/YYYY'),TO_CHAR(RF.FIRMADT,'DD/MM/YYYY')),'DD/MM/Y=
YYY')
,
TO_NUMBER(DECODE(RF.STATO_EVC,NULL,R.STATO_EVC,RF.STATO_EVC,RF.STATO_EVC)),
EE.ID_ESERCENTE
        FROM
ANA_ESERCENTI_EE EE , RICHIESTE R, INF_QUANTITATIVE IQ,
RICHIESTE_COORDINATE C, INTERVENTO I, RICHIESTE_FIRMA RF
       WHERE
R.CENTER =3D IQ.CENTER
    AND R.ALTNO =3D IQ.ALTNO
    AND R.CODPAT =3D IQ.CODPAT
    AND R.CENTER =3D I.CENTER
    AND R.ALTNO =3D I.ALTNO
    AND R.CODPAT =3D I.CODPAT
    AND TO_CHAR(R.CENTER) =3D EE.CENTER
    AND R.CENTER=3DC.CENTER
    AND R.ALTNO=3DC.ALTNO
    AND R.CODPAT=3DC.CODPAT
    AND RF.CENTER(+)=3DIQ.CENTER
    AND RF.ALTNO(+)=3DIQ.ALTNO
    AND RF.CODPAT(+)=3DIQ.CODPAT
    AND RF.FIRMA(+)=3DIQ.ID_INFO
    AND RF.FIRMA_PROGR(+)=3DIQ.PROGR
    AND I.ID_INT=3DIQ.PROGR
    AND C.VISITNUM=3D0 AND C.ESAM=3D0
     AND R.FIRMA IS NOT NULL
    AND I.DELETED IS NULL






-- =

Igor Longagnani c/o Synervis
-------------------------------------------------------------------
e-mail: i.longagnani at synervis.it             phone : +39 059 558442

sede operativa: via Pirandello, 49/51 - 41043 Formigine (Mo) Italia

-------------- next part --------------
A non-text attachment was scrubbed...
Name: i.longagnani.vcf
Type: text/x-vcard
Size: 159 bytes
Desc: not available
Url : http://lists.scsys.co.uk/pipermail/dbix-class/attachments/20061227/cc=
925f92/i.longagnani.vcf


More information about the Dbix-class mailing list