Hi!

I've written a function that I want to use in a query.  When I write the
query using SQL Object + SQL Builder I get wrong SQL generated.

The correct output would be (wrapped and with parens and quotes fixed
from SO's generated code):

================================================================================
SELECT neolab.v_resultados_resumo.id, neolab.v_resultados_resumo.cliente_id,
neolab.v_resultados_resumo.nao_conformidade_id,
neolab.v_resultados_resumo.segmento_id,
neolab.v_resultados_resumo.cliente_nome,
neolab.v_resultados_resumo.material_coletado_id,
neolab.v_resultados_resumo.material_coletado,
neolab.v_resultados_resumo.amostra_id, neolab.v_resultados_resumo.id,
neolab.v_resultados_resumo.analise, neolab.v_resultados_resumo.situacao,
neolab.v_resultados_resumo.data_cadastro,
neolab.v_resultados_resumo.previsao_entrega,
neolab.v_resultados_resumo.entregue_em,
neolab.v_resultados_resumo.recebido_em,
neolab.v_resultados_resumo.ref_externa,
neolab.v_resultados_resumo.nome_paciente,
neolab.v_resultados_resumo.nome_paciente_normalizado,
neolab.v_resultados_resumo.autenticacao,
neolab.v_resultados_resumo.emitir_laudo FROM neolab.v_resultados_resumo WHERE
((((neolab.v_resultados_resumo.segmento_id) = (1)) AND
(((neolab.v_resultados_resumo.data_cadastro) >= ('2006-04-17 00:00:00')) AND
((neolab.v_resultados_resumo.data_cadastro) <= ('2007-04-23 00:00:00')))) AND
((neolab.v_resultados_resumo.nome_paciente_normalizado) LIKE
(f_v_texto('jo%')))) ORDER BY id;
================================================================================

The query starts like this:

================================================================================
        amostras = model.VResultadoResumo.select(
            AND(model.VResultadoResumo.q.segmentoID == toxicologia.id,
                model.VResultadoResumo.q.dataCadastro >= data_inicial,
                model.VResultadoResumo.q.dataCadastro <= data_final))

        if situacao == u'pendentes':
            amostras = amostras.filter(
                model.VResultadoResumo.q.entregueEm==None)
        elif situacao == u'prontos':
            amostras = amostras.filter(
                model.VResultadoResumo.q.entregueEm!=None)

        if nome_paciente:
            amostras = amostras.filter(
                model.VResultadoResumo.q.nomePacienteNormalizado.startswith(
                    func.f_v_texto(nome_paciente)))
================================================================================

Here, my function on the databse is "f_v_texto" at PostgreSQL's public
schema.  nome_paciente is a unicode string containing, for this test
case, 'jo'. 

>From PostgreSQL's log the generated query is (just wrapped to fit on the
screen):

================================================================================
SELECT neolab.v_resultados_resumo.id,
neolab.v_resultados_resumo.cliente_id,
neolab.v_resultados_resumo.nao_conformidade_id,
neolab.v_resultados_resumo.segmento_id,
neolab.v_resultados_resumo.cliente_nome,
neolab.v_resultados_resumo.material_coletado_id,
neolab.v_resultados_resumo.material_coletado,
neolab.v_resultados_resumo.amostra_id, neolab.v_resultados_resumo.id,
neolab.v_resultados_resumo.analise, neolab.v_resultados_resumo.situacao,
neolab.v_resultados_resumo.data_cadastro,
neolab.v_resultados_resumo.previsao_entrega,
neolab.v_resultados_resumo.entregue_em,
neolab.v_resultados_resumo.recebido_em,
neolab.v_resultados_resumo.ref_externa,
neolab.v_resultados_resumo.nome_paciente,
neolab.v_resultados_resumo.nome_paciente_normalizado,
neolab.v_resultados_resumo.autenticacao,
neolab.v_resultados_resumo.emitir_laudo FROM neolab.v_resultados_resumo
WHERE ((((neolab.v_resultados_resumo.segmento_id) = (1)) AND
(((neolab.v_resultados_resumo.data_cadastro) >= ('2006-04-17 00:00:00'))
AND ((neolab.v_resultados_resumo.data_cadastro) <= ('2007-04-23
00:00:00')))) AND
((neolab.v_resultados_resumo.nome_paciente_normalizado) LIKE
('_v_texto('jo'%'))) ORDER BY id
================================================================================

It is missing the 'f' in 'f_v_texto' and misses one closing parenthesis.
Also, I don't know why it is quoting the function name.


Did I do something wrong?  Is it a bug?  Should I change my code somehow
to have it working?

Just to be sure to have all what is available for SQL Object in, I've
updated to 0.10dev_r2576 and the problem is still there.  I'll go back
to 0.8.2 for production.

-- 
Jorge Godoy      <[EMAIL PROTECTED]>


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
sqlobject-discuss mailing list
sqlobject-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss

Reply via email to