Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    Problem with ValueMap on integer field with Postgres

    Hi,

    I'm having trouble with using a ValueMap on an integer field backing against Postgres. Specifically sorting on that field will produce an SQL exception due to a badly formed CASE statement.

    The field definition is:

    <field name='type' type='integer' canSort='false'>
    <validators>
    <validator type="isOneOf" />
    </validators>
    <valueMap>
    <value ID="1">Direct</value>
    <value ID="101">Assigned</value>
    <value ID="102">Alert</value>
    <value ID="103">Message</value>
    </valueMap>
    </field>

    And when sort is called on this field it produces this order by clause in the SQL

    ORDER BY CASE notification.type WHEN '1' THEN 'Direct' WHEN '101' THEN 'Assigned' WHEN '102' THEN 'Alert' WHEN '103' THEN 'Message' ELSE notification.type END

    Which breaks because the type of 'Direct' is textual while the default return notification.type is an int.

    Is there a way to get this working without changing that field on the database?

    Cheers,
    Evan

    SmartClient Version: v11.1p_2017-07-09/PowerEdition

    <DataSource
    ID='notification'
    serverType='sql'
    dataSourceVersion='1'
    dbName='zizdc'
    schema='dbo'
    tableName='notification'
    ignoreTextMatchStyleCaseSensitive='true'
    allowAdvancedCriteria='true'
    sequenceMode='jdbcDriver'
    useAnsiJoins='true'>
    <fields>
    <field name='notification_id' type='uuid' primaryKey='true'
    autoGenerated='true' hidden='true' ignoreTextMatchStyle='true' />
    <field name='from_user_id' type='uuid' foreignKey='fm90usr.s_userid'
    hidden='true' ignoreTextMatchStyle='true' joinType='outer' />
    <field name='from_user_id__s_name' includeFrom='fm90usr.s_name'
    includeVia='from_user_id' title = 'From' />
    <field name='type' type='integer' canSort='false'>
    <validators>
    <validator type="isOneOf" />
    </validators>
    <valueMap>
    <value ID="1">Direct</value>
    <value ID="101">Assigned</value>
    <value ID="102">Alert</value>
    <value ID="103">Message</value>
    </valueMap>
    </field>
    <field name='subject' length='256' type='text' />
    <field name='message' type='text' />
    <field name='issued' type='datetime' />
    <field name='only_approved' type='boolean' hidden='true' />
    <field name='actioned_user_ids_as_string' type='text' hidden = 'true' />
    <field name='recipient_user_ids_as_string' type='text' hidden = 'true' />
    <field name='_z' type='custom' customSQL='true' hidden='true' />
    <field name='_customStyle' type='custom' customSQL='true' hidden='true' />
    </fields>
    <operationBindings>
    <binding operationType="fetch" serverMethod="fetch"
    customCriteriaFields='recipient_s_userid'>
    <serverObject lookupStyle="spring" bean="requestFilters" />
    </binding>
    <binding operationType="add" serverMethod="add">
    <serverObject lookupStyle="spring" bean="localOnlySupportedOperations" />
    </binding>
    <binding operationType="update" serverMethod="update">
    <serverObject lookupStyle="spring" bean="methodNotSupportedOperations" />
    </binding>
    <binding operationType="remove" serverMethod="remove">
    <serverObject lookupStyle="spring" bean="methodNotSupportedOperations" />
    </binding>
    </operationBindings>
    </DataSource>



    SELECT notification.notification_id, notification.from_user_id, notification.type, notification.subject, notification.message, notification.issued, notification.only_approved, notification.actioned_user_ids_as_string, notification.recipient_user_ids_as_string, a0.s_name AS from_user_id__s_name
    FROM dbo.notification
    LEFT OUTER JOIN dbo.fm90usr a0 ON notification.from_user_id = a0.s_userid
    WHERE ((notification.recipient_user_ids_as_string LIKE '%9288723d-9fb0-4770-90d1-51c69ec10b1b%'
    AND notification.recipient_user_ids_as_string IS NOT NULL)
    AND NOT(notification.actioned_user_ids_as_string LIKE '%9288723d-9fb0-4770-90d1-51c69ec10b1b%'
    AND notification.actioned_user_ids_as_string IS NOT NULL))
    ORDER BY CASE notification.type WHEN '1' THEN 'Direct' WHEN '101' THEN 'Assigned' WHEN '102' THEN 'Alert' WHEN '103' THEN 'Message' ELSE notification.type END
    OFFSET 0 LIMIT 75

    Click image for larger version

Name:	valuemap.png
Views:	103
Size:	4.0 KB
ID:	249028

    unexpected exception execuring request
    org.postgresql.util.PSQLException: ERROR: invalid input syntax for integer: "Direct"
    Position: 747
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2270) ~[postgresql-9.4-1201-jdbc41.jar:9.4]
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1998) ~[postgresql-9.4-1201-jdbc41.jar:9.4]
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) ~[postgresql-9.4-1201-jdbc41.jar:9.4]
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:570) ~[postgresql-9.4-1201-jdbc41.jar:9.4]
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:406) ~[postgresql-9.4-1201-jdbc41.jar:9.4]
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:286) ~[postgresql-9.4-1201-jdbc41.jar:9.4]
    at org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208) ~[commons-dbcp-1.4.jar:1.4]
    at com.isomorphic.sql.SQLDataSource.executeWindowedSelect(SQLDataSource.java:2493) ~[isomorphic-sql-11.1-p20170709.jar:?]
    at com.isomorphic.sql.SQLDataSource.SQLExecute(SQLDataSource.java:1750) ~[isomorphic-sql-11.1-p20170709.jar:?]
    at com.isomorphic.sql.SQLDataSource.processRequest(SQLDataSource.java:434) ~[isomorphic-sql-11.1-p20170709.jar:?]
    at com.isomorphic.sql.SQLDataSource.executeFetch(SQLDataSource.java:379) ~[isomorphic-sql-11.1-p20170709.jar:?]
    at com.isomorphic.datasource.DataSource.execute(DataSource.java:2224) ~[isomorphic-core-rpc-11.1-p20170709.jar:?]
    at com.isomorphic.application.AppBase.executeDefaultDSOperation(AppBase.java:629) ~[isomorphic-core-rpc-11.1-p20170709.jar:?]
    at com.isomorphic.application.AppBase.executeAppOperation(AppBase.java:546) ~[isomorphic-core-rpc-11.1-p20170709.jar:?]
    at com.isomorphic.application.AppBase.execute(AppBase.java:489) ~[isomorphic-core-rpc-11.1-p20170709.jar:?]
    at com.isomorphic.datasource.DSRequest.execute(DSRequest.java:2813) ~[isomorphic-core-rpc-11.1-p20170709.jar:?]
    at systems.prosolve.documentcontrol.sc.impl.SimpleDsRequestAugmentations.execute(SimpleDsRequestAugmentations.java:83) [classes/:?]
    at systems.prosolve.documentcontrol.sc.impl.SimpleDsRequestAugmentations.fetch(SimpleDsRequestAugmentations.java:42) [classes/:?]
    at sun.reflect.GeneratedMethodAccessor209.invoke(Unknown Source) ~[?:?]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_72]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_72]
    at com.isomorphic.base.Reflection.adaptArgsAndInvoke(Reflection.java:873) [isomorphic-core-rpc-11.1-p20170709.jar:?]
    at com.isomorphic.datasource.DataSourceDMI.execute(DataSourceDMI.java:434) [isomorphic-core-rpc-11.1-p20170709.jar:?]
    at com.isomorphic.datasource.DataSourceDMI.execute(DataSourceDMI.java:64) [isomorphic-core-rpc-11.1-p20170709.jar:?]
    at com.isomorphic.datasource.DSRequest.execute(DSRequest.java:2809) [isomorphic-core-rpc-11.1-p20170709.jar:?]
    at com.isomorphic.servlet.IDACall.handleDSRequest(IDACall.java:230) [isomorphic-core-rpc-11.1-p20170709.jar:?]
    at com.isomorphic.servlet.IDACall.processRPCTransaction(IDACall.java:187) [isomorphic-core-rpc-11.1-p20170709.jar:?]
    at com.isomorphic.servlet.IDACall.processRequest(IDACall.java:152) [isomorphic-core-rpc-11.1-p20170709.jar:?]
    at com.isomorphic.servlet.IDACall._processRequest(IDACall.java:119) [isomorphic-core-rpc-11.1-p20170709.jar:?]
    at com.isomorphic.servlet.IDACall.doPost(IDACall.java:79) [isomorphic-core-rpc-11.1-p20170709.jar:?]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) [servlet-api.jar:?]
    at com.isomorphic.servlet.BaseServlet.service(BaseServlet.java:176) [isomorphic-core-rpc-11.1-p20170709.jar:?]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) [servlet-api.jar:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) [catalina.jar:8.0.30]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:8.0.30]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat-websocket.jar:8.0.30]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) [catalina.jar:8.0.30]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:8.0.30]
    at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176) [urlrewritefilter-4.0.3.jar:4.0.3]
    at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145) [urlrewritefilter-4.0.3.jar:4.0.3]
    at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92) [urlrewritefilter-4.0.3.jar:4.0.3]
    at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394) [urlrewritefilter-4.0.3.jar:4.0.3]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) [catalina.jar:8.0.30]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:8.0.30]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:124) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.access.channel.ChannelProcessingFilter.doFilter(ChannelProcessingFilter.java:157) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177) [spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) [spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) [spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) [catalina.jar:8.0.30]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:8.0.30]
    at systems.prosolve.ziz.pageid.RemoteIpFilter.doFilter(RemoteIpFilter.java:35) [classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) [catalina.jar:8.0.30]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:8.0.30]
    at systems.prosolve.ziz.pageid.PageIdFilter.doFilter(PageIdFilter.java:50) [classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) [catalina.jar:8.0.30]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:8.0.30]
    at org.springframework.web.multipart.support.MultipartFilter.doFilterInternal(MultipartFilter.java:122) [spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) [catalina.jar:8.0.30]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:8.0.30]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) [catalina.jar:8.0.30]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) [catalina.jar:8.0.30]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) [catalina.jar:8.0.30]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) [catalina.jar:8.0.30]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) [catalina.jar:8.0.30]
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) [catalina.jar:8.0.30]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) [catalina.jar:8.0.30]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:521) [catalina.jar:8.0.30]
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1096) [tomcat-coyote.jar:8.0.30]
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674) [tomcat-coyote.jar:8.0.30]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) [tomcat-coyote.jar:8.0.30]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) [tomcat-coyote.jar:8.0.30]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_72]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_72]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-util.jar:8.0.30]
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_72]

    #2
    This was a problem specific to sorting by valueMapped integer fields when the backend database is either Postgres or HSQLDB. We have fixed this now on all branches back to 9.1 / 4.1 - please try with today's build, or one from over the weekend, and let us know if you still see an issue.

    Thanks,
    Isomorphic Software Support

    Comment

    Working...
    X