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
[email protected]
https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss