[ https://issues.apache.org/jira/browse/GUACAMOLE-525?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16397087#comment-16397087 ]
Nick Couchman commented on GUACAMOLE-525: ----------------------------------------- {quote} The list of keywords for MSSQL server 2008 and newer does not include LIMIT. {quote} {quote} This saddens me. {quote} <facepalm> It gets better: https://stackoverflow.com/questions/971964/limit-10-20-in-sql-server Apparently the support for various work-arounds is spotty, too - some of them only work in 2005 or newer, some in 2012. This is going to make it so much fun to come up with a solution that works across different TSQL-type databases and different versions. Looks like it impacts password history and user history. I initially wasn't able to reproduce the issue because I didn't have password history enabled - it wasn't until I looked closer at the error that I saw that's where it occurred during user creation. > Creating user results in "Incorrect syntax near 'LIMIT'" > -------------------------------------------------------- > > Key: GUACAMOLE-525 > URL: https://issues.apache.org/jira/browse/GUACAMOLE-525 > Project: Guacamole > Issue Type: Bug > Components: guacamole-auth-jdbc-sqlserver > Affects Versions: 0.9.14 > Environment: MSSQL 2012 > Reporter: Tommy Larsen > Priority: Major > > New installation with 0.9.14 authenticating against MSSQL server 2012. > guacamole_db set to compatibility mode "SQL Server 2005 (90)". > No problem logging in as guacadmin, but when trying to create a user, I get > "Incorrect syntax near 'LIMIT'". Validation of the query shown in > catalina.out by debugging in SQL management studio confirms the error. > The list of keywords for MSSQL server 2008 and newer does not include LIMIT. > Catalina.out error message: > {code:none} > 10:59:06.579 [http-nio-8080-exec-9] ERROR o.a.g.rest.RESTExceptionWrapper - > Unexpected internal error: > ### Error querying database. Cause: > com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near > 'LIMIT'. > ### The error may exist in > org/apache/guacamole/auth/jdbc/user/PasswordRecordMapper.xml > ### The error may involve defaultParameterMap > ### The error occurred while setting parameters > ### SQL: SELECT [guacamole_user_password_history].user_id, > [guacamole_user_password_history].password_hash, > [guacamole_user_password_history].password_salt, > [guacamole_user_password_history].password_date FROM > [guacamole_user_password_history] JOIN [guacamole_user] ON > [guacamole_user_password_history].user_id = [guacamole_user].user_id > WHERE [guacamole_user].username = ? ORDER BY > [guacamole_user_password_history].password_date DESC LIMIT ? > ### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax > near 'LIMIT'. > Mar 12, 2018 10:59:06 AM com.sun.jersey.spi.container.ContainerResponse > logException > SEVERE: Mapped exception to response: 500 (Internal Server Error) > org.apache.guacamole.rest.APIException > at > org.apache.guacamole.rest.RESTExceptionWrapper.invoke(RESTExceptionWrapper.java:202) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:498) > at > com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60) > at > com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185) > at > com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) > at > com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302) > at > com.sun.jersey.server.impl.uri.rules.SubLocatorRule.accept(SubLocatorRule.java:137) > at > com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) > at > com.sun.jersey.server.impl.uri.rules.SubLocatorRule.accept(SubLocatorRule.java:137) > at > com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) > at > com.sun.jersey.server.impl.uri.rules.SubLocatorRule.accept(SubLocatorRule.java:137) > at > com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) > at > com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) > at > com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) > at > com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) > at > com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1511) > at > com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1442) > at > com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1391) > at > com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1381) > at > com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416) > at > com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538) > at > com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) > at > com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:263) > at > com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:178) > at > com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91) > at > com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:62) > at > com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:118) > at > com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) > at > org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) > at > org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522) > at > org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095) > at > org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672) > at > org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) > at > org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) > at > org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) > at java.lang.Thread.run(Thread.java:748) > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)