SmartClient Version: SNAPSHOT_v13.0d_2021-11-14/Enterprise Development Only (built 2021-11-14)
SmartClient Version: v12.1p_2021-11-13/Enterprise Development Only (built 2021-11-13)
Hello, I think I have found a bug, when there's a customSelectExpression (which uses aliases generated when joining to include fields) and I use a summary function.
It seems that the joins aren't always included when filtering.
I've put together a test case based on the sqlIncludeVia sample.
moneyTransfer.ds.xml:
If you run it, you'll see a (working) summary fetch, without filtering ,which doesn't make any join:
Then, if you filter on the last column (paymentCurrencySymbol) ie select '€' in the filterEditor, you'll see a summary fetch with the only necessary join:
But if you filter on the sourceCode_symbol, you'll see a summary fetch error because it lacks the necessary join:
In the past it was working, ie this works:
SmartClient Version: v12.1p_2021-03-21/Enterprise Development Only (built 2021-03-21)
and this version doesn't work:
SmartClient Version: v12.1p_2021-03-25/Enterprise Development Only (built 2021-03-25)
SmartClient Version: v12.1p_2021-11-13/Enterprise Development Only (built 2021-11-13)
Hello, I think I have found a bug, when there's a customSelectExpression (which uses aliases generated when joining to include fields) and I use a summary function.
It seems that the joins aren't always included when filtering.
I've put together a test case based on the sqlIncludeVia sample.
moneyTransfer.ds.xml:
Code:
<DataSource isSampleDS="true"
ID="moneyTransfer"
serverType="sql"
tableName="moneyTransfer"
>
<fields>
<field name="id" type="integer" primaryKey="true" />
<field name="name" type="text" />
<field name="sourceCurrencyId" foreignKey="currency.id" relatedTableAlias="source"/>
<field name="sourceCurrencySymbol" includeFrom="currency.symbol" includeVia="sourceCurrencyId" />
<field name="paymentAmount" type="float" />
<field name="paymentCurrencyId" foreignKey="currency.id" relatedTableAlias="payment" />
<field name="paymentCurrencySymbol" includeFrom="currency.symbol" includeVia="paymentCurrencyId" />
<field name="sourceCode_symbol" type="text" customSelectExpression="CONCAT(source.code,' - ',source.symbol)" />
</fields>
</DataSource>
Code:
isc.ListGrid.create({
ID: "moneyTransferList",
dataSource: moneyTransfer,
width: 700,
height: 224,
showGridSummary: true,
showFilterEditor: true,
alternateRecordStyles: true,
autoFetchData: true,
dataPageSize: 50,
canEdit: true,
editEvent: "click",
canRemoveRecords: true,
filterOnKeypress: true,
filterLocalData: false,
summaryRowDataSource: "moneyTransfer",
summaryRowFetchRequestProperties: {
summaryFunctions: {
"name": "count"
}
},
fields: [
{ name: "name" },
{ name: "paymentAmount" },
{
name: "sourceCode_symbol",
filterEditorProperties: {
optionDataSource: "currency",
displayField: "symbol",
valueField: "symbol",
editorType: "SelectItem",
textMatchStyle: "substring",
sortField: "code_symbol"
}
},
{
name: "paymentCurrencySymbol",
width: 170,
filterEditorProperties: {
optionDataSource: "currency",
displayField: "symbol",
valueField: "symbol",
editorType: "SelectItem",
textMatchStyle: "substring",
sortField: "symbol"
}
}
]
});
Code:
=== 2021-11-15 10:18:43,053 [c-10] INFO RequestContext - URL: '/isomorphic/IDACall', User-Agent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36': Safari with Accept-Encoding header
=== 2021-11-15 10:18:43,097 [c-10] INFO IDACall - Performing 1 operation(s) [UA: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36]
=== 2021-11-15 10:18:43,097 [c-10] INFO DSRequest - Executing moneyTransferList_summaryRow->moneyTransfer.fetch rows: 0->1 with
criteria: {}
=== 2021-11-15 10:18:43,098 [c-10] INFO SQLWhereClause - empty condition
=== 2021-11-15 10:18:43,099 [c-10] INFO SQLDataSource - 1163: Executing query on 'HSQLDB':
SELECT
LIMIT 0 1 COUNT(moneyTransfer.name) AS name
FROM
moneyTransfer
WHERE
(
'1'='1'
)
=== 2021-11-15 10:18:43,100 [c-10] INFO DSResponse - DSResponse: List with 1 items
=== 2021-11-15 10:18:43,100 [c-10] INFO Compression - /isomorphic/IDACall: 198 -> 165
=== 2021-11-15 10:18:44,064 [ec-6] INFO RequestContext - URL: '/isomorphic/system/reference/skin/images/opener_opened.png', User-Agent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36': Safari with Accept-Encoding header
=== 2021-11-15 10:18:44,065 [ec-6] INFO Download - File /Users/bosticco/librerie/isc/SmartClient_v121p_2021-11-13_Enterprise/smartclientSDK/isomorphic/system/reference/skin/images/opener_opened.png not found, sending 404
Code:
=== 2021-11-15 10:20:01,668 [ec-3] INFO RequestContext - URL: '/isomorphic/IDACall', User-Agent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36': Safari with Accept-Encoding header
=== 2021-11-15 10:20:01,707 [ec-3] INFO IDACall - Performing 1 operation(s) [UA: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36]
=== 2021-11-15 10:20:01,707 [ec-3] INFO DSRequest - Executing moneyTransferList_summaryRow->moneyTransfer.fetch rows: 0->1 with
criteria: {paymentCurrencySymbol:"€"}
=== 2021-11-15 10:20:01,710 [ec-3] INFO SQLDataSource - 1163: Executing query on 'HSQLDB':
SELECT
LIMIT 0 1 COUNT(moneyTransfer.name) AS name
FROM
moneyTransfer, currency payment
WHERE
(
LOWER(payment.symbol) LIKE '%€%' ESCAPE '\'
AND payment.symbol IS NOT NULL
)
AND moneyTransfer.paymentCurrencyId = payment.id
=== 2021-11-15 10:20:01,711 [ec-3] INFO DSResponse - DSResponse: List with 1 items
=== 2021-11-15 10:20:01,713 [ec-3] INFO Compression - /isomorphic/IDACall: 198 -> 164
=== 2021-11-15 10:20:02,071 [ec-6] INFO RequestContext - URL: '/isomorphic/system/reference/skin/images/opener_opened.png', User-Agent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36': Safari with Accept-Encoding header
=== 2021-11-15 10:20:02,072 [ec-6] INFO Download - File /Users/bosticco/librerie/isc/SmartClient_v121p_2021-11-13_Enterprise/smartclientSDK/isomorphic/system/reference/skin/images/opener_opened.png not found, sending 404
Code:
=== 2021-11-15 10:21:27,511 [ec-8] INFO RequestContext - URL: '/isomorphic/IDACall', User-Agent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36': Safari with Accept-Encoding header
=== 2021-11-15 10:21:27,514 [ec-8] INFO IDACall - Performing 1 operation(s) [UA: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36]
=== 2021-11-15 10:21:27,514 [ec-8] INFO DSRequest - Executing moneyTransferList_summaryRow->moneyTransfer.fetch rows: 0->1 with
criteria: {sourceCode_symbol:"€"}
=== 2021-11-15 10:21:27,515 [ec-8] INFO SQLDataSource - 1163: Executing query on 'HSQLDB':
SELECT
LIMIT 0 1 COUNT(moneyTransfer.name) AS name
FROM
moneyTransfer
WHERE
(
LOWER(CONCAT(source.code,' - ',source.symbol)) LIKE '%€%' ESCAPE '\'
AND CONCAT(source.code,' - ',source.symbol) IS NOT NULL
)
=== 2021-11-15 10:21:27,517 [ec-8] WARN RequestContext - dsRequest.execute() failed:
java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: SOURCE.CODE
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.executeQuery(Unknown Source)
at org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208)
at com.isomorphic.sql.SQLDataSource.executeWindowedSelect(SQLDataSource.java:2583)
at com.isomorphic.sql.SQLDataSource.SQLExecute(SQLDataSource.java:1812)
at com.isomorphic.sql.SQLDataSource.processRequest(SQLDataSource.java:441)
at com.isomorphic.sql.SQLDataSource.executeFetch(SQLDataSource.java:386)
at com.isomorphic.datasource.DataSource.execute(DataSource.java:2499)
at com.isomorphic.application.AppBase.executeDefaultDSOperation(AppBase.java:658)
at com.isomorphic.application.AppBase.executeAppOperation(AppBase.java:555)
at com.isomorphic.application.AppBase.execute(AppBase.java:498)
at com.isomorphic.datasource.DSRequest.execute(DSRequest.java:3071)
at com.isomorphic.servlet.IDACall.handleDSRequest(IDACall.java:226)
at com.isomorphic.servlet.IDACall.processRPCTransaction(IDACall.java:183)
at com.isomorphic.servlet.IDACall.processRequest(IDACall.java:148)
at com.isomorphic.servlet.IDACall._processRequest(IDACall.java:119)
at com.isomorphic.servlet.IDACall.doPost(IDACall.java:79)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)
at com.isomorphic.servlet.BaseServlet.service(BaseServlet.java:178)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.isomorphic.servlet.URIRegexFilter.ignore(URIRegexFilter.java:483)
at com.isomorphic.servlet.URIRegexFilter.ignore(URIRegexFilter.java:478)
at com.isomorphic.servlet.URIRegexFilter.matchedRule(URIRegexFilter.java:441)
at com.isomorphic.servlet.URIRegexFilter._doFilter(URIRegexFilter.java:349)
at com.isomorphic.servlet.BaseFilter.doFilter(BaseFilter.java:91)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.isomorphic.js.JSSyntaxScannerFilter._doFilter(JSSyntaxScannerFilter.java:262)
at com.isomorphic.servlet.BaseFilter.doFilter(BaseFilter.java:91)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.isomorphic.servlet.CompressionFilter._doFilter(CompressionFilter.java:263)
at com.isomorphic.servlet.BaseFilter.doFilter(BaseFilter.java:91)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:196)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:364)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:624)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:831)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1650)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: SOURCE.CODE
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.ExpressionColumn.checkColumnsResolved(Unknown Source)
at org.hsqldb.QueryExpression.resolve(Unknown Source)
at org.hsqldb.ParserDQL.compileCursorSpecification(Unknown Source)
at org.hsqldb.ParserCommand.compilePart(Unknown Source)
at org.hsqldb.ParserCommand.compileStatements(Unknown Source)
at org.hsqldb.Session.executeDirectStatement(Unknown Source)
at org.hsqldb.Session.execute(Unknown Source)
... 56 more
=== 2021-11-15 10:21:27,519 [ec-8] INFO Compression - /isomorphic/IDACall: 189 -> 166
=== 2021-11-15 10:21:28,074 [ec-9] INFO RequestContext - URL: '/isomorphic/system/reference/skin/images/opener_opened.png', User-Agent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36': Safari with Accept-Encoding header
=== 2021-11-15 10:21:28,075 [ec-9] INFO Download - File /Users/bosticco/librerie/isc/SmartClient_v121p_2021-11-13_Enterprise/smartclientSDK/isomorphic/system/reference/skin/images/opener_opened.png not found, sending 404
SmartClient Version: v12.1p_2021-03-21/Enterprise Development Only (built 2021-03-21)
and this version doesn't work:
SmartClient Version: v12.1p_2021-03-25/Enterprise Development Only (built 2021-03-25)
Comment