<Jetplume>GraffitoがHSQLですべてのフォルダを返してくる問題を調べているが、どうやら、原因は、OUTER JOINを使っていることにありそうだ。フォルダの場合、
SELECT A0.CLASS_NAME,A0.LINK_TARGET_ID,A0.VERSION_NUM,A0.OBJECT_ID,A0.DELTA,A0.LANGUAGE,A0.PARENT_ID,A0.CREATION_DATE,A0.IS_LAST_VERSION,A0.TITLE,A0.CONTENT_ID,A0.NAME,A0.DESCRIPTION,A0.URI,A0.CONTENT_TYPE,A0.OWNER,A0.CONTENT_SIZE FROM CMS_OBJECT A0 LEFT OUTER JOIN CMS_OBJECT A1 ON A0.PARENT_ID=A1.OBJECT_ID WHERE ( A1.URI = ‘/graffito/site1’) AND (A0.CLASS_NAME = ‘org.apache.portals.graffito.model.impl.FolderImpl’)
を発行しているが、ドキュメントの場合は、
SELECT A0.CLASS_NAME,A0.LINK_TARGET_ID,A0.VERSION_NUM,A0.OBJECT_ID,A0.DELTA,A0.LANGUAGE,A0.PARENT_ID,A0.CREATION_DATE,A0.IS_LAST_VERSION,A0.CONTENT_ID,A0.TITLE,A0.NAME,A0.DESCRIPTION,A0.URI,A0.CONTENT_TYPE,A0.OWNER,A0.CONTENT_SIZE FROM CMS_OBJECT A0 INNER JOIN CMS_OBJECT A1 ON A0.PARENT_ID=A1.OBJECT_ID WHERE ( A1.URI = ‘/graffito/site1/category2’) AND (A0.CLASS_NAME = ‘org.apache.portals.graffito.model.impl.DocumentImpl’)
が発行されている。Graffitoが悪いのか、HSQLのバグなのか・・・。調べないとわからん。
<HSQL>MySQLでも同じものを発行してみたら、普通に期待通りの動きをしている。つまり、HSQLの問題の気がする。そもそもA1.URI = ‘/graffito/site1’という条件があるのに、nullに対してもマッチするのが意味不明。仕様なのか、バグなのか・・・。というか、バグだろう・・・。