@@ -150,4 +150,247 @@ public function testRepeadParamsQuery()
150150 $ result = $ traced ->getSqlWithParams ();
151151 $ this ->assertEquals ($ expected , $ result );
152152 }
153+ /**
154+ * Big query generate regex error
155+ */
156+ public function testBigQuery ()
157+ {
158+ $ params = [
159+ ':id_segmento ' => 1 ,
160+ ':id_part ' => 1 ,
161+ ':inativo ' => 1 ,
162+ ':ativo ' => 1
163+ ];
164+ $ query = 'select sum(qtd) as total from (
165+ select count(*) as qtd from (
166+ select distinct vw.id_modulo, vw.id_envio, vw.id_form,
167+ vw.versao, vw.id_sistema, vw.id_grupo
168+ from vw_forms_disponiveis vw
169+ where vw.id_part = :id_part
170+ and vw.id_servico = :id_segmento
171+ and vw.concluido = :inativo
172+ ) as forms
173+
174+ union
175+ select distinct count(pesq.*) as qtd from
176+ pesquisa.avaliacao_modulo_disponivel pesq
177+ join envio e
178+ on e.id_envio = pesq.id_envio
179+ and e.id_servico = pesq.id_servico
180+ join rodada r
181+ on e.id_envio = r.id_envio
182+ join part_form pf
183+ on r.ano = pf.ano
184+ and r.id_rodada = pf.id_rodada
185+ and pf.id_modulo = r.id_modulo
186+ where pf.id_part = :id_part
187+ and (
188+ r.data_fim > date(now())
189+ or pf.data_excecao_fim > date(now())
190+ )
191+ and (
192+ r.data_ini <= date(now())
193+ or pf.data_excecao_ini <= date(now())
194+ )
195+ and e.id_servico = :id_segmento
196+ and pesq.id_modulo = :inativo
197+
198+ union
199+ select distinct count(p.id_pesquisa) as qtd
200+ from pesquisas.pesquisa p
201+ join pesquisas.publicacao as pub
202+ on pub.id_pesquisa = p.id_pesquisa
203+ left join pesquisas.resposta r
204+ on r.id_pesquisa = p.id_pesquisa
205+ and r.id_publicacao = pub.id_publicacao
206+ and r.id_part = :id_part
207+ where pub.id_servico = :id_segmento
208+ and pub.excluido = :inativo
209+ and p.excluido = :inativo
210+ and r.id_resposta is null
211+ and pub.data_ini <= date(now())
212+ and pub.data_fim >= date (now())
213+ and (
214+ p.resp_primeira_publicacao = :inativo
215+ or (
216+ pub.id_publicacao in (
217+ select r2.id_publicacao
218+ from pesquisas.resposta r2
219+ where r2.id_part = :id_part
220+ and r2.id_pesquisa = p.id_pesquisa
221+ )
222+ )
223+ or (
224+ not exists (
225+ select r2.id_pesquisa
226+ from pesquisas.resposta r2
227+ where r2.id_part = :id_part
228+ and r2.id_pesquisa = p.id_pesquisa
229+ )
230+ )
231+ )
232+ and (
233+ pub.todos_parts = :ativo
234+ or :id_part in (
235+ select id_part
236+ from pesquisas.publicacao_part pp
237+ where pp.id_pesquisa = pub.id_pesquisa
238+ and pp.id_publicacao = pub.id_publicacao
239+ and pp.id_part = :id_part
240+ )
241+ )
242+
243+ union
244+ select count(es.*) as qtd from especial.solicitacao es
245+ join especial.dados_solicitacao d
246+ on es.id_servico = d.id_servico
247+ and es.ano = d.ano
248+ join especial.liberacao el
249+ on el.ano = d.ano
250+ and el.id_servico = d.id_servico
251+ and el.id_part = es.id_part
252+ left join especial.prorrogados p
253+ on p.ano = el.ano
254+ and p.id_servico = el.id_servico
255+ and p.id_part = el.id_part
256+ where es.id_usu is null -- possui resp
257+ and el.id_servico = :id_segmento
258+ and el.id_part = :id_part
259+ and (
260+ el.id_part in (8005, 8012)
261+ or
262+ d.liberada = :ativo
263+ )
264+ and ((d.data_ini <= date(now()) and d.data_fim >= date(now()))
265+ or (
266+ d.data_ini_excecao <= date(now())
267+ and d.data_fim_excecao >= date(now())
268+ and p.id_part not in (
269+ select s.id_part from especial.solicitacao s
270+ where s.data < d.data_ini_excecao
271+ and s.id_part = el.id_part and s.ano = d.ano
272+ and s.id_servico = d.id_servico
273+ )
274+ )
275+ or (p.data_fim >= date(now()))
276+ )
277+ ) as resultados_em_aberto ' ;
278+ $ expected = 'select sum(qtd) as total from (
279+ select count(*) as qtd from (
280+ select distinct vw.id_modulo, vw.id_envio, vw.id_form,
281+ vw.versao, vw.id_sistema, vw.id_grupo
282+ from vw_forms_disponiveis vw
283+ where vw.id_part = <1>
284+ and vw.id_servico = <1>
285+ and vw.concluido = <1>
286+ ) as forms
287+
288+ union
289+ select distinct count(pesq.*) as qtd from
290+ pesquisa.avaliacao_modulo_disponivel pesq
291+ join envio e
292+ on e.id_envio = pesq.id_envio
293+ and e.id_servico = pesq.id_servico
294+ join rodada r
295+ on e.id_envio = r.id_envio
296+ join part_form pf
297+ on r.ano = pf.ano
298+ and r.id_rodada = pf.id_rodada
299+ and pf.id_modulo = r.id_modulo
300+ where pf.id_part = <1>
301+ and (
302+ r.data_fim > date(now())
303+ or pf.data_excecao_fim > date(now())
304+ )
305+ and (
306+ r.data_ini <= date(now())
307+ or pf.data_excecao_ini <= date(now())
308+ )
309+ and e.id_servico = <1>
310+ and pesq.id_modulo = <1>
311+
312+ union
313+ select distinct count(p.id_pesquisa) as qtd
314+ from pesquisas.pesquisa p
315+ join pesquisas.publicacao as pub
316+ on pub.id_pesquisa = p.id_pesquisa
317+ left join pesquisas.resposta r
318+ on r.id_pesquisa = p.id_pesquisa
319+ and r.id_publicacao = pub.id_publicacao
320+ and r.id_part = <1>
321+ where pub.id_servico = <1>
322+ and pub.excluido = <1>
323+ and p.excluido = <1>
324+ and r.id_resposta is null
325+ and pub.data_ini <= date(now())
326+ and pub.data_fim >= date (now())
327+ and (
328+ p.resp_primeira_publicacao = <1>
329+ or (
330+ pub.id_publicacao in (
331+ select r2.id_publicacao
332+ from pesquisas.resposta r2
333+ where r2.id_part = <1>
334+ and r2.id_pesquisa = p.id_pesquisa
335+ )
336+ )
337+ or (
338+ not exists (
339+ select r2.id_pesquisa
340+ from pesquisas.resposta r2
341+ where r2.id_part = <1>
342+ and r2.id_pesquisa = p.id_pesquisa
343+ )
344+ )
345+ )
346+ and (
347+ pub.todos_parts = <1>
348+ or <1> in (
349+ select id_part
350+ from pesquisas.publicacao_part pp
351+ where pp.id_pesquisa = pub.id_pesquisa
352+ and pp.id_publicacao = pub.id_publicacao
353+ and pp.id_part = <1>
354+ )
355+ )
356+
357+ union
358+ select count(es.*) as qtd from especial.solicitacao es
359+ join especial.dados_solicitacao d
360+ on es.id_servico = d.id_servico
361+ and es.ano = d.ano
362+ join especial.liberacao el
363+ on el.ano = d.ano
364+ and el.id_servico = d.id_servico
365+ and el.id_part = es.id_part
366+ left join especial.prorrogados p
367+ on p.ano = el.ano
368+ and p.id_servico = el.id_servico
369+ and p.id_part = el.id_part
370+ where es.id_usu is null -- possui resp
371+ and el.id_servico = <1>
372+ and el.id_part = <1>
373+ and (
374+ el.id_part in (8005, 8012)
375+ or
376+ d.liberada = <1>
377+ )
378+ and ((d.data_ini <= date(now()) and d.data_fim >= date(now()))
379+ or (
380+ d.data_ini_excecao <= date(now())
381+ and d.data_fim_excecao >= date(now())
382+ and p.id_part not in (
383+ select s.id_part from especial.solicitacao s
384+ where s.data < d.data_ini_excecao
385+ and s.id_part = el.id_part and s.ano = d.ano
386+ and s.id_servico = d.id_servico
387+ )
388+ )
389+ or (p.data_fim >= date(now()))
390+ )
391+ ) as resultados_em_aberto ' ;
392+ $ traced = new TracedStatement ($ query , $ params );
393+ $ result = $ traced ->getSqlWithParams ();
394+ $ this ->assertEquals ($ expected , $ result );
395+ }
153396}
0 commit comments