2012-10-18 4 views
0

hsqldb에 group_concat 함수를 추가하여 유닛/통합 테스트로 쿼리를 적절하게 테스트 할 수 있습니다. 쿼리는 mysql에서 제대로 작동하므로 hsqldb (잘하면)에서 작동해야한다.distinct가있는 hsqldb에 group_concat을 추가하는 방법은 무엇입니까?

 // GROUP_CONCAT 
     jdbcTemplate.update("DROP FUNCTION GROUP_CONCAT IF EXISTS;"); 
     jdbcTemplate.update(
      "create aggregate function group_concat(in val varchar(100), in flag boolean, inout buffer varchar(1000), inout counter int) " + 
      " returns varchar(1000) " + 
      " contains sql " + 
      "begin atomic " + 
      " if flag then" + 
      "  return buffer;" + 
      " else" + 
      "  if val is null then return null; end if;" + 
      "  if buffer is null then set buffer = ''; end if;" + 
      "  if counter is null then set counter = 0; end if;" + 
      "  if counter > 0 then set buffer = buffer || ','; end if;" + 
      "  set buffer = buffer + val;" + 
      "  set counter = counter + 1;" + 
      "  return null;" + 
      " end if;" + 
      "end;" 
     ); 

이 집계 함수를 추가하면 대부분의 문제가 해결됩니다. 그것은 mysql의 group_concat과 똑같이 동작 할 것이다.

group_concat(distinct column) 

별개의 키워드를 반영 할 수있는 방법이 있나요 : 그러나, 무엇 날과 같이 별개의 키워드를 사용하게됩니다하지 않습니다? 또는 고유 키워드를 피하기 위해 쿼리를 다시 작성합니까?

답변

0

HSQLDB에는 GROUP_CONCAT가 내장되어 있으며 DISTINCT를 허용합니다.

http://hsqldb.org/doc/2.0/guide/dataaccess-chapt.html#dac_aggregate_funcs

당신이 사용자 정의 집계 함수에 DISTINCT 추가 할 수 없습니다 순간

하지만 흥미로운 기능은 미래에 허용하는 것처럼이 보인다.

+0

현재 2.0.0을 사용하고 있으며 표시되지 않습니다. 어쩌면 당신은 새로운 버전을 말하는거야? 2.2.x 라인을 사용할 수 없습니다 - dbunit이 데이터를 삽입 할 때 단위 테스트가 훨씬 느려집니다. 2.0.0은 8-10 배 빠릅니다. 나는 뚜렷한 사용을 피하기 위해 동의어를 먼저 가져 오는 하위 선택과 결합하는 쿼리를 작성했습니다. 그게 문제를 해결하는 것 같지만, 느리게 만들지 않기를 바랍니다. – egervari

+0

아마도 JVM 메모리를 늘려야 할 것입니다. 2.2.9는 mem : 데이터베이스에 12 초 만에 4 백만 행을 삽입합니다. – fredt

관련 문제