Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Take ProjectionRole into account in subquery projections #573

Closed
timowest opened this issue Nov 27, 2013 · 5 comments
Closed

Take ProjectionRole into account in subquery projections #573

timowest opened this issue Nov 27, 2013 · 5 comments
Milestone

Comments

@timowest
Copy link
Member

@timowest timowest commented Nov 27, 2013

Subqueries need to take into account the ProjectionRole based transformations. Currently this doesn't happen and e.g. RelationalPath instances aren't handled properly.

timowest added a commit that referenced this issue Nov 27, 2013
@timowest
Copy link
Member Author

@timowest timowest commented Dec 12, 2013

Released in 3.3.0.BETA2

@timowest timowest closed this Dec 12, 2013
@sonialargher
Copy link

@sonialargher sonialargher commented Apr 1, 2014

Hi,

I'm using Querydsl_sql 3.3.2 and I have this code...

Please, look the sql select generated: at the end you'll find ', rich_mvrs.MUOVERSI_Richiedente' that represent the subquery alias point name of table. There is no fields or * specified.
Are there some mistakes in my code or is a bug?

QSQL_Domande domande = QSQL_Domande.Domande;
        QSQL_Domande domande_icef = new QSQL_Domande("dom_icef");
        QSQL_Doc doc = QSQL_Doc.Doc;
        QSQL_Familiari fam = QSQL_Familiari.Familiari;
        QSQL_DichIcef dich = QSQL_DichIcef.DichIcef;

        QSQL_MUOVERSIKmAssegnati mvrAss = QSQL_MUOVERSIKmAssegnati.MUOVERSIKmAssegnati;
        QSQL_MUOVERSIRichiedente mvrRich = QSQL_MUOVERSIRichiedente.MUOVERSIRichiedente;

        QSQL_Soggetti soggetti = QSQL_Soggetti.Soggetti;

        QSQL_CElaOUT c1 = new QSQL_CElaOUT("c1");

        QSQL_CElaIN c_elain = QSQL_CElaIN.CElaIN;

        PathBuilder<Tuple>   rich_mvrs     = new PathBuilder<Tuple>(Tuple.class, "rich_mvrs");


        SQLQuery queryUsers = queryDslJdbcTemplateViaHibernateSession.getQuery();
        queryUsers
        .from(domande)
        .innerJoin(doc).on(domande.iDDomanda.eq(doc.id))
        .innerJoin(fam).on(domande.iDDomanda.eq(fam.iDDomanda))
        .innerJoin(dich).on(fam.iDDichiarazione.eq(dich.iDDichiarazione))
        .innerJoin(soggetti).on(dich.iDSoggetto.eq(soggetti.iDSoggetto))
        .innerJoin(c_elain).on(domande.iDDomanda.eq(c_elain.iDDomanda))
        .innerJoin(c1).on(domande.iDDomanda.eq(c1.iDDomanda))
        .innerJoin(mvrAss).on(mvrAss.codiceFiscale.eq(domande.codiceFiscale));

        queryUsers.leftJoin(
                new SQLSubQuery()
                .from(mvrRich)
                .innerJoin(domande_icef).on(mvrRich.iDDomanda.eq(domande_icef.iDDomanda))
                .list(mvrRich, domande_icef.codiceFiscale), rich_mvrs )
        .on(mvrAss.codiceFiscale.eq(rich_mvrs.get(domande_icef.codiceFiscale)) );

        queryUsers.orderBy(domande.iDDomanda.asc())
        .where(domande.iDEnteErogatore.gt(0))

        .where(c_elain.node.eq("anno"))
        .where(c_elain.inputValue.eq(new Double(2012)))
        .where(c1.node.eq("mensile"))
        .where(c1.numericValue.gt(0))

        .where(domande.iDServizio.in(new Integer[]{30000, 30001}))
        .where(mvrAss.anno.eq((short)2014));

        queryUsers.where(doc.iDTpStato.goe(CostantiImpl.ID_TP_STATO_TRASMESSA))
        .where(doc.crc.isNotNull());        

        List<Tuple> result = queryUsers.list(soggetti, mvrAss, domande, rich_mvrs.get(mvrRich));

        return result;
select Soggetti.proposto_documento_accettazione_firma_grafometrica, Soggetti.id_assistito_apss, Soggetti.ID_user, Soggetti.ID_soggetto, Soggetti.deceduto_apss, Soggetti.ID_tp_stato_soggetto, Soggetti.cognome, Soggetti.ID_provincia_nascita, Soggetti.codice_fiscale, Soggetti.nome_apss, Soggetti.codice_fiscale_3, Soggetti.codice_fiscale_2, Soggetti.ID_tp_sex, Soggetti.ID_luogo_nascita, Soggetti.data_nascita, Soggetti.nome, Soggetti.comune_estero, Soggetti.validazione_apss, Soggetti.conome_apss, Soggetti.annotazioni, MUOVERSI_km_assegnati.assegno_cura, MUOVERSI_km_assegnati.km_assegnati, MUOVERSI_km_assegnati.anno, MUOVERSI_km_assegnati.reddito_garanzia, MUOVERSI_km_assegnati.codice_fiscale, Domande.lavoro_femminile, Domande.banca_pagamento, Domande.IBAN_corretto, Domande.handicap_75_certificato_da, Domande.recapito_postale, Domande.escludi_ufficio, Domande.sottoscrizione_verbale, Domande.CIN_pagamento, Domande.n_civ_residenza, Domande.sottoscritta_in_presenza, Domande.proprieta_non_occupata, Domande.n_invalidi_66_75, Domande.fax, Domande.CAB_pagamento, Domande.ID_periodo, Domande.ID_comune_residenza, Domande.ID_provincia_residenza, Domande.cap_residenza, Domande.cognome, Domande.ID_provincia_nascita, Domande.handicap_66_75_certificato_da, Domande.ID_tp_sex, Domande.canone_locazione, Domande.Codice_stato, Domande.n_invalidi_75, Domande.indirizzo_residenza, Domande.nome, Domande.IBAN, Domande.frazione_residenza, Domande.sottoscritta_con_documento, Domande.ID_comune_catastale, Domande.cognome_intestatario, Domande.un_genitore, Domande.telefono_residenza, Domande.genitori_lavoratori, Domande.ID_servizio, Domande.ID_soggetto, Domande.codice_fiscale, Domande.intestatario_pagamento, Domande.escludi_motivazione, Domande.ID_ente_erogatore, Domande.ID_luogo_nascita, Domande.e_mail, Domande.data_nascita, Domande.cellulare, Domande.Cc_pagamento, Domande.ID_tp_pagamento, Domande.nome_intestatario, Domande.ID_sportello, Domande.proprietario_residenza, Domande.ID_tp_cittadinanza, Domande.mq, Domande.estremi_contratto_locazione, Domande.in_locazione, Domande.ubicazione_banca_pagamento, Domande.ABI_pagamento, Domande.BBAN_corretto, Domande.ID_tp_monogenitore, Domande.ID_domanda, rich_mvrs.MUOVERSI_Richiedente
from Domande Domande
inner join Doc Doc
on Domande.ID_domanda = Doc.ID
inner join Familiari Familiari
on Domande.ID_domanda = Familiari.ID_domanda
inner join Dich_icef Dich_icef
on Familiari.ID_dichiarazione = Dich_icef.ID_dichiarazione
inner join Soggetti Soggetti
on Dich_icef.ID_soggetto = Soggetti.ID_soggetto
inner join C_ElaIN C_ElaIN
on Domande.ID_domanda = C_ElaIN.ID_domanda
inner join C_ElaOUT c1
on Domande.ID_domanda = c1.ID_domanda
inner join MUOVERSI_km_assegnati MUOVERSI_km_assegnati
on MUOVERSI_km_assegnati.codice_fiscale = Domande.codice_fiscale
left join (select ?, dom_icef.codice_fiscale
from MUOVERSI_Richiedente MUOVERSI_Richiedente
inner join Domande dom_icef
on MUOVERSI_Richiedente.ID_domanda = dom_icef.ID_domanda) as rich_mvrs
on MUOVERSI_km_assegnati.codice_fiscale = rich_mvrs.codice_fiscale
where Domande.ID_ente_erogatore > ? and C_ElaIN.node = ? and C_ElaIN.input_value = ? and c1.node = ? and c1.numeric_value > ? and Domande.ID_servizio in (?, ?) and MUOVERSI_km_assegnati.anno = ? and Doc.ID_tp_stato >= ? and Doc.crc is not null
order by Domande.ID_domanda asc
@timowest
Copy link
Member Author

@timowest timowest commented Apr 1, 2014

@sonialargher Could you show the output of

  Expression<?> expr = new SQLSubQuery()
        .from(mvrRich)
        .innerJoin(domande_icef).on(mvrRich.iDDomanda.eq(domande_icef.iDDomanda))
        .list(mvrRich, domande_icef.codiceFiscale);

  SQLSerializer serializer = new SQLSerializer(new Configuration(SQLTemplates.DEFAULT));
  serializer.handle(expr);
  System.out.println(serializer.toString());
@sonialargher
Copy link

@sonialargher sonialargher commented Apr 1, 2014

I try to print my subquery and I obtain the right result.
Probably my problem doesn't have anything to do whit my subquery.

select MUOVERSI_Richiedente.ID_tp_relazione, MUOVERSI_Richiedente.indennita_accomp, MUOVERSI_Richiedente.data_domanda_ammissione, MUOVERSI_Richiedente.tessera, MUOVERSI_Richiedente.richiedente_non_beneficiario, MUOVERSI_Richiedente.km_richiesti, MUOVERSI_Richiedente.richiedente_beneficiario, MUOVERSI_Richiedente.indennita_accomp_importo, MUOVERSI_Richiedente.ID_domanda, MUOVERSI_Richiedente.n_domanda_ammissione, dom_icef.codice_fiscale
from MUOVERSI_Richiedente MUOVERSI_Richiedente
inner join Domande dom_icef
on MUOVERSI_Richiedente.ID_domanda = dom_icef.ID_domanda
@timowest
Copy link
Member Author

@timowest timowest commented Apr 1, 2014

Could you maybe try to reproduce the issue with something simpler than the full query? That way I could better help to show what went wrong or provide a fix.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
2 participants