<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> <base href="https://hibernate.atlassian.net" />
<title>Message Title</title>
</head>
<body class="jira" style="color: #333; font-family: Arial, sans-serif; font-size: 14px; line-height: 1.429">
<table id="background-table" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; background-color: #f5f5f5; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt">
<!-- header here -->
<tr>
<td id="header-pattern-container" style="padding: 0px; border-collapse: collapse; padding: 10px 20px">
<table id="header-pattern" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt">
<tr>
<td id="header-avatar-image-container" valign="top" style="padding: 0px; border-collapse: collapse; vertical-align: top; width: 32px; padding-right: 8px"> <img id="header-avatar-image" class="image_fix" src="https://secure.gravatar.com/avatar/71981c9f6b89bada08afac7477ac2dec?d=mm&s=48" height="32" width="32" border="0" style="border-radius: 3px; vertical-align: top" />
</td>
<td id="header-text-container" valign="middle" style="padding: 0px; border-collapse: collapse; vertical-align: middle; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px"> <a class="user-hover" rel="crancran" id="email_crancran" href="https://hibernate.atlassian.net/secure/ViewProfile.jspa?name=crancran" style="color:#6c797f;; color: #3b73af; text-decoration: none">Chris Cranford</a> <strong>edited a comment</strong> on an issue
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td id="email-content-container" style="padding: 0px; border-collapse: collapse; padding: 0 20px">
<table id="email-content-table" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; border-spacing: 0; border-collapse: separate">
<tr>
<!-- there needs to be content in the cell for it to render in some clients -->
<td class="email-content-rounded-top mobile-expand" style="padding: 0px; border-collapse: collapse; color: #fff; padding: 0 15px 0 16px; height: 15px; background-color: #fff; border-left: 1px solid #ccc; border-top: 1px solid #ccc; border-right: 1px solid #ccc; border-bottom: 0; border-top-right-radius: 5px; border-top-left-radius: 5px; height: 10px; line-height: 10px; padding: 0 15px 0 16px; mso-line-height-rule: exactly">
</td>
</tr>
<tr>
<td id="text-paragraph-pattern-top" class="email-content-main mobile-expand comment-top-special-margin comment-top-pattern" style="padding: 0px; border-collapse: collapse; border-left: 1px solid #ccc; border-right: 1px solid #ccc; border-top: 0; border-bottom: 0; padding: 0 15px 15px 16px; background-color: #fff; border-bottom: 1px solid #ccc; border-bottom: none; padding-bottom: 0px">
<table class="text-paragraph-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 2px">
<tr>
<td class="text-paragraph-pattern-container mobile-resize-text" style="padding: 0px; border-collapse: collapse; padding: 0px; padding-left: 16px; padding-bottom: 10px; border-left: 1px solid #ccc; padding-top: 10px"> <span class="diffcontext">bq. Which query? Sorry if I'm getting confused. Is this proof that the SQL query needs to be different or that - no matter what SQL you use - that amount of bind variables is problematic on SQL Server?</span> <span class="diffremovedchars" style="background-color:#ffe7e7;text-decoration:line-through;"><br /><br /></span> <span class="diffaddedchars" style="background-color:#ddfade;"><br /><br /></span> <span class="diffcontext">The SQL query needs to be different for efficiency sake. It doesn't appear to be the volume of bind parameters because when I rewrote the solution to use the _Exists In Subquery Values_ clause, the same number of bind parameters are used as the original SQL query, but runs executes considerably faster (25-40ms versus 6000-7500ms).</span> <span class="diffremovedchars" style="background-color:#ffe7e7;text-decoration:line-through;"><br /><br /></span> <span class="diffaddedchars" style="background-color:#ddfade;"><br /><br /></span> <span class="diffcontext">I pin-pointed the issue in {{CriteriaObjectsInitializer}}, the method {{initializeObjects}} uses a list of the entity IDs to populate a disjunction of IN expressions, where the number of IDs included within an IN expression is capped at 500. Whether I provide my own criteria or whether I allow the {{CriteriaObjectsInitializer}} to create it's own, it is the appended disjunction of the IN expressions that is problematic.</span> <span class="diffremovedchars" style="background-color:#ffe7e7;text-decoration:line-through;"><br /><br /></span> <span class="diffaddedchars" style="background-color:#ddfade;"><br /><br /></span> <span class="diffcontext">For SQL Server, the criteria's output on SQL server becomes:</span> <span class="diffremovedchars" style="background-color:#ffe7e7;text-decoration:line-through;"><br /><br /></span> <span class="diffaddedchars" style="background-color:#ddfade;"><br /><br /></span> <span class="diffcontext">{code}</span> <span class="diffremovedchars" style="background-color:#ffe7e7;text-decoration:line-through;"><br /></span> <span class="diffaddedchars" style="background-color:#ddfade;"><br /></span> <span class="diffcontext"> WHERE ( (ITEM_ID = ? AND PLANT_ID = ?) OR (ITEM_ID = ? AND PLANT_ID = ?) OR ... <more composite key pairs> )</span> <span class="diffremovedchars" style="background-color:#ffe7e7;text-decoration:line-through;"><br /></span> <span class="diffaddedchars" style="background-color:#ddfade;"><br /></span> <span class="diffcontext">{code}</span> <span class="diffremovedchars" style="background-color:#ffe7e7;text-decoration:line-through;"><br /><br /></span> <span class="diffaddedchars" style="background-color:#ddfade;"><br /><br /></span> <span class="diffcontext">When I tested other database platforms, that is where I noticed Oracle 9i's generated SQL and sought to find whatever was considered SQL Server 2008's equivalent because Oracle 9i was performing so well. That is where I stumbled across the new _Exists In Subquery Values_ clause for SQL Server 2008 and 2012.</span> <span class="diffremovedchars" style="background-color:#ffe7e7;text-decoration:line-through;"> <br /><br /></span> <span class="diffaddedchars" style="background-color:#ddfade;"> <br /><br /></span> <span class="diffcontext">The {{InExpression}} criterion is designed to check whether the dialect supports {{supportsRowValueConstructorSyntaxInInList}} or if the number of columns being expressed for the clause is a single field regardless of dialect. In the case of where the entity's ID isn't a composite or where the dialect supports {{supportsRowValueConstructorSyntaxInInList = true}} regardless of the entity ID's field count, the output SQL is:</span> <span class="diffremovedchars" style="background-color:#ffe7e7;text-decoration:line-through;"><br /><br /></span> <span class="diffaddedchars" style="background-color:#ddfade;"><br /><br /></span> <span class="diffcontext">{code:title=</span> <span class="diffremovedchars" style="background-color:#ffe7e7;text-decoration:line-through;">Oracle 9i</span> <span class="diffaddedchars" style="background-color:#ddfade;">Single Field</span> <span class="diffcontext">}</span> <span class="diffremovedchars" style="background-color:#ffe7e7;text-decoration:line-through;"><br /></span> <span class="diffaddedchars" style="background-color:#ddfade;"><br /></span> <span class="diffcontext"> WHERE</span> <span class="diffaddedchars" style="background-color:#ddfade;"> FIELD IN</span> <span class="diffcontext"> (</span> <span class="diffaddedchars" style="background-color:#ddfade;">?, ?, ?, ?, ... up to page size keys)<br />{code}<br /><br />{code:title=supportsRowValueConstructorSyntaxInInList concept}<br /> WHERE (</span> <span class="diffcontext">ITEM_ID,PLANT_ID) IN ((?,?),(?,?),(?,?),... up to page size pairs)</span> <span class="diffremovedchars" style="background-color:#ffe7e7;text-decoration:line-through;"><br /></span> <span class="diffaddedchars" style="background-color:#ddfade;"><br /></span> <span class="diffcontext">{code}</span> <span class="diffremovedchars" style="background-color:#ffe7e7;text-decoration:line-through;"><br /><br /><br /></span> <span class="diffaddedchars" style="background-color:#ddfade;"><br /><br />The former is obviously supported on any single SQL Server platform; however the later isn't. <br /><br />So what I did was the following:<br /><br />{code:title=Dialect.java}<br />public boolean supportsMultiColumnInMarshalledAsExistsWithSubqueryValues() {<br /> return false;<br />}<br />{code}<br />{code:title=SQLServer2008Dialect.java}<br />@Override<br />public boolean supportsMultiColumnInMarshalledAsExistsWithSubqueryValues() {<br /> return true;<br />}<br />{code}<br />{code:title=InExpression.java}<br />public String toSqlString( Criteria criteria, CriteriaQuery criteriaQuery )<br /> throws HibernateException {<br /> if ( criteriaQuery.getFactory().getDialect()<br /> .supportsRowValueConstructorSyntaxInInList() || columns.length<=1) {<br /> /* do the default stuff it has been doing before */<br /> }<br /> else if( criteriaQuery.getFactory().getDialect().supportsMultiColumnInMarshalledAsExistsWithSubqueryValues() )<br /> {<br /> /* create the new clause for SQL Server 2008 */<br /> }<br /> else {<br /> /* do the original else clause stuff */<br /> }<br />}<br />{code}<br /><br /></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="email-content-main mobile-expand " style="padding: 0px; border-collapse: collapse; border-left: 1px solid #ccc; border-right: 1px solid #ccc; border-top: 0; border-bottom: 0; padding: 0 15px 15px 16px; background-color: #fff">
<table id="page-title-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt">
<tr>
<td id="page-title-pattern-first-line" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; padding-top: 16px"> <a href="https://hibernate.atlassian.net/browse/HSEARCH" style="color: #3b73af; text-decoration: none">Hibernate Search</a> / <a href="https://hibernate.atlassian.net/browse/HSEARCH-1367" style="color: #3b73af; text-decoration: none"><img src="https://hibernate.atlassian.net/images/icons/issuetypes/bug.png" height="16" width="16" border="0" align="absmiddle" alt="Bug" /></a> <a href="https://hibernate.atlassian.net/browse/HSEARCH-1367" style="color: #3b73af; text-decoration: none">HSEARCH-1367</a>
</td>
</tr>
<tr>
<td style="vertical-align: top;; padding: 0px; border-collapse: collapse; padding-right: 5px; font-size: 20px; line-height: 30px; mso-line-height-rule: exactly" id="page-title-pattern-header-container"> <span id="page-title-pattern-header" style="font-family: Arial, sans-serif; padding: 0; font-size: 20px; line-height: 30px; mso-text-raise: 2px; mso-line-height-rule: exactly; vertical-align: middle"> <a href="https://hibernate.atlassian.net/browse/HSEARCH-1367" style="color: #3b73af; text-decoration: none">FullTextQuery with max results of 250 takes considerable time to load entities</a> </span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="email-content-main mobile-expand " style="padding: 0px; border-collapse: collapse; border-left: 1px solid #ccc; border-right: 1px solid #ccc; border-top: 0; border-bottom: 0; padding: 0 15px 15px 16px; background-color: #fff">
<table id="actions-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px">
<tr>
<td id="actions-pattern-container" valign="middle" style="padding: 0px; border-collapse: collapse; padding: 0 0 0 24px; vertical-align: middle; padding-left: 0px">
<table align="left" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt">
<tr>
<td class="actions-pattern-action-icon-container" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 0px; vertical-align: middle"> <a href="https://hibernate.atlassian.net/browse/HSEARCH-1367#add-comment" target="_blank" title="{getText($action.text)}" style="color: #3b73af; text-decoration: none"> <img class="actions-pattern-action-icon-image" src="https://hibernate.atlassian.net/images/mail/comment-icon.png" alt="Add Comment" title="{Add Comment}-icon" height="16" width="16" border="0" style="vertical-align: middle" /> </a>
</td>
<td class="actions-pattern-action-text-container" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 4px; padding-left: 5px"> <a href="https://hibernate.atlassian.net/browse/HSEARCH-1367#add-comment" target="_blank" title="Add Comment" style="color: #3b73af; text-decoration: none">Add Comment</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<!-- there needs to be content in the cell for it to render in some clients -->
<tr>
<td class="email-content-rounded-bottom mobile-expand" style="padding: 0px; border-collapse: collapse; color: #fff; padding: 0 15px 0 16px; height: 5px; line-height: 5px; background-color: #fff; border-top: 0; border-left: 1px solid #ccc; border-bottom: 1px solid #ccc; border-right: 1px solid #ccc; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; mso-line-height-rule: exactly">
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td id="footer-pattern" style="padding: 0px; border-collapse: collapse; padding: 12px 20px">
<table id="footer-pattern-container" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt">
<tr>
<td id="footer-pattern-text" class="mobile-resize-text" width="100%" style="padding: 0px; border-collapse: collapse; color: #999; font-size: 12px; line-height: 18px; font-family: Arial, sans-serif; mso-line-height-rule: exactly; mso-text-raise: 2px">
This message is automatically generated by JIRA.<br /> If you think it was sent incorrectly, please contact your JIRA administrators<br /> For more information on JIRA, see: <a style="color:#6c797f;; color: #3b73af; text-decoration: none" href="http://www.atlassian.com/software/jira">http://www.atlassian.com/software/jira</a>
</td>
<td id="footer-pattern-logo-desktop-container" valign="top" style="padding: 0px; border-collapse: collapse; padding-left: 20px; vertical-align: top">
<table style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt">
<tr>
<td id="footer-pattern-logo-desktop-padding" style="padding: 0px; border-collapse: collapse; padding-top: 3px"> <img id="footer-pattern-logo-desktop" src="https://hibernate.atlassian.net/images/mail/footer-desktop-logo.png" alt="JIRA logo" title="JIRA logo" width="92" height="36" class="image_fix" />
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>