Openfire: org.jivesoftware.openfire.pubsub.PubSubPersistenceManager - неверный синтаксис рядом с ключевым словом «ВЛЕВО» - PullRequest
0 голосов
/ 09 мая 2019

Любая идея о том, что может привести к тому, что эта ошибка будет постоянно создаваться в all.log и error.журнал.Openfire 4.3.2 в Windows подключен к SQL Server 2012 (SP4) - хотя это не должно иметь значения.Может ли это быть результатом неправильного SQL в таблице свойств?Где искать?У нас есть работающее веб-приложение / чат-приложение Candy.js…

2019.05.08 20:46:12 ERROR [TaskEngine-pool-16]: org.jivesoftware.openfire.pubsub.PubSubPersistenceManager - Incorrect syntax near the keyword 'LEFT'.
java.sql.BatchUpdateException: Incorrect syntax near the keyword 'LEFT'.
    at net.sourceforge.jtds.jdbc.JtdsStatement.executeBatch(JtdsStatement.java:1069) ~[jtds-1.3.1.jar:1.3.1]
    at org.apache.commons.dbcp2.DelegatingStatement.executeBatch(DelegatingStatement.java:223) ~[commons-dbcp2-2.5.0.jar:2.5.0]
    at org.apache.commons.dbcp2.DelegatingStatement.executeBatch(DelegatingStatement.java:223) ~[commons-dbcp2-2.5.0.jar:2.5.0]
    at org.jivesoftware.openfire.pubsub.PubSubPersistenceManager.purgeItems(PubSubPersistenceManager.java:1893) [xmppserver-4.3.2.jar:4.3.2]
    at org.jivesoftware.openfire.pubsub.PubSubPersistenceManager.access$000(PubSubPersistenceManager.java:57) [xmppserver-4.3.2.jar:4.3.2]
    at org.jivesoftware.openfire.pubsub.PubSubPersistenceManager$2.run(PubSubPersistenceManager.java:283) [xmppserver-4.3.2.jar:4.3.2]
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_202]
    at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_202]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_202]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_202]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_202]

1 Ответ

0 голосов
/ 10 мая 2019

Мы использовали SQL Profiler для проверки сообщения Incorrect syntax near the keyword 'LEFT'.вот что мы получили: ошибка возникла из-за следующего плохого SQL

DELETE FROM ofPubsubItem
   LEFT JOIN (SELECT id FROM ofPubsubItem WHERE serviceID= @P0  AND nodeID= @P1  ORDER BY creationDate DESC LIMIT  @P2 ) AS noDelete
            ON ofPubsubItem.id = noDelete.id
WHERE ...

Этот SQL-код некорректен, корректный будет включать 'FROM ofPubsubItem' дважды, например

DELETE FROM ofPubsubItem
FROM ofPubsubItem LEFT JOIN (SELECT id FROM ofPubsubItem WHERE serviceID= @P0  AND nodeID= @P1  ORDER BY creationDate DESC LIMIT  @P2 ) AS noDelete
            ON ofPubsubItem.id = noDelete.id
WHERE

Я собираюсьотправить отчет об ошибке в Openfire.Не уверен, что этот синтаксис SQL специфичен для ANSI или SQL Server, но предполагается, что Openfire поддерживает SQL Server.

...