<!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/df12d7792bd3b7be3a4edf12cabd58cb?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="steve" id="email_steve" href="https://hibernate.atlassian.net/secure/ViewProfile.jspa?name=steve" style="color:#6c797f;; color: #3b73af; text-decoration: none">Steve Ebersole</a> <strong>updated</strong> 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 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 0 16px; background-color: #fff">
<table class="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 class="page-title-pattern-first-line " style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; padding-top: 10px"> <a href="https://hibernate.atlassian.net/browse/HHH" style="color: #3b73af; text-decoration: none">Hibernate ORM</a> / <a href="https://hibernate.atlassian.net/browse/HHH-9768" style="color: #3b73af; text-decoration: none"><img src="cid:jira-generated-image-static-bug-7fc2985e-f699-4f4a-91b8-d5d8d3b15959" height="16" width="16" border="0" align="absmiddle" alt="Bug" style="vertical-align: text-bottom" /></a> <a href="https://hibernate.atlassian.net/browse/HHH-9768" style="color: #3b73af; text-decoration: none">HHH-9768</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" class="page-title-pattern-header-container"> <span class="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/HHH-9768" style="color: #3b73af; text-decoration: none">Maintain explicit list of ANSI SQL keywords</a> </span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="email-content-main mobile-expand wrapper-special-margin" 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 0 16px; background-color: #fff; padding-top: 10px; padding-bottom: 5px">
<table class="keyvalue-table" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt">
<tr>
<th style="color: #707070; font: normal 14px/20px Arial, sans-serif; text-align: left; vertical-align: top; padding: 2px 0">
Change By:
</th>
<td style="padding: 0px; border-collapse: collapse; font: normal 14px/20px Arial, sans-serif; padding: 2px 0 2px 5px; vertical-align: top"> <a class="user-hover" rel="steve" id="email_steve" href="https://hibernate.atlassian.net/secure/ViewProfile.jspa?name=steve" style="color:#6c797f;; color: #3b73af; text-decoration: none">Steve Ebersole</a>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="email-content-main mobile-expand issue-description-container" 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 0 16px; background-color: #fff; padding-top: 5px; padding-bottom: 10px">
<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: 0 0 10px 0"> <span class="diffcontext">Proper keyword quoting depends on being able to recognize identifiers as matching a keyword, which in turn relies on having a complete definition of what identifiers are keywords.</span> <span class="diffaddedchars" style="background-color:#ddfade;"> <br /><br /></span> <span class="diffcontext"> The</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"> baseline for the set</span> <span class="diffaddedchars" style="background-color:#ddfade;"> solution here is mutli-part. <br /><br />First, I added a static list</span> <span class="diffcontext"> of</span> <span class="diffaddedchars" style="background-color:#ddfade;"> SQL:2003</span> <span class="diffcontext"> keywords</span> <span class="diffaddedchars" style="background-color:#ddfade;"> as {{org.hibernate.engine.jdbc.env.spi.AnsiSqlKeywords#sql2003}}.<br /><br />Second I added a new {{Dialect}} method:<br />{code:title=Dialect.java}<br /> /**<br /> * Hook into auto-quoting of identifiers that</span> <span class="diffcontext"> are</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"> those</span> <span class="diffaddedchars" style="background-color:#ddfade;"> deemed to be keywords. By default we<br /> * return all of the following here:<ul><br /> * <li>all keywords as</span> <span class="diffcontext"> defined by ANSI SQL</span> <span class="diffaddedchars" style="background-color:#ddfade;">:2003 specification</li><br /> * <li>all "extra" keywords reported by the JDBC driver </li><br /> * <li>all Dialect-registered "extra" keywords</li><br /> * </ul><br /> * <p/><br /> * Subclasses are free to override this as they see fit</span> <span class="diffcontext">.</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"> {{jav</span> <span class="diffaddedchars" style="background-color:#ddfade;"> Just be aware that overriding this<br /> * does affect what identifiers are auto-quoted based on being seen as a keyword</span> <span class="diffcontext">.</span> <span class="diffaddedchars" style="background-color:#ddfade;"> <br /> * <p/><br /> * NOTE: The code that ultimately consumes these and uses them stores them in a case-insensitive<br /> * Set, so case here does not matter.<br /> *<br /> * @see org.hibernate.engine.jdbc.env.spi.AnsiSqlKeywords#sql2003()<br /> * @see java.</span> <span class="diffcontext">sql.DatabaseMetaData#getSQLKeywords</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;">}} is meant to augment the ANSI SQL</span> <span class="diffcontext"> (</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;">2003</span> <span class="diffcontext">)</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"> standard</span> <span class="diffaddedchars" style="background-color:#ddfade;"><br /> * @see #registerKeyword<br /> */<br /> public Set<String> determineKeywordsForAutoQuoting(Set<String> databaseMetadataReportedKeywords) {<br /> final Set<String></span> <span class="diffcontext"> keywords</span> <span class="diffaddedchars" style="background-color:#ddfade;"> = new HashSet<String>();<br /> keywords</span> <span class="diffcontext">.</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"> We also have</span> <span class="diffaddedchars" style="background-color:#ddfade;">addAll( AnsiSqlKeywords.INSTANCE.sql2003() );<br /> keywords.addAll( databaseMetadataReportedKeywords );<br /> keywords.addAll( sqlKeywords );<br /> return keywords;<br /> }<br /></span> <span class="diffcontext"> {</span> <span class="diffaddedchars" style="background-color:#ddfade;">code}<br /><br />Third, the</span> <span class="diffcontext">{</span> <span class="diffaddedchars" style="background-color:#ddfade;">{IdentifierHelper}} obtained from {{JdbcEnvironment}} calls this new {{</span> <span class="diffcontext">Dialect</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;">#getKeywords</span> <span class="diffcontext">}}</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"> which in turn should augment that combined set</span> <span class="diffaddedchars" style="background-color:#ddfade;"> method to handle proper quoting</span> <span class="diffcontext">.</span> <span class="diffremovedchars" style="background-color: #ffe7e7; text-decoration:line-through;"> But at them moment we do not maintain that baseline set.</span> <span class="diffcontext"><br /><br />----<br /><br />Original description<br /><br />{quote}<br />Hibernate gets the "extra" keywords froma jav.sql.DatabaseMetaData.getSQLKeywords(), but that doesn't get the ANSI 2003 keywords. It does not seem to track the ANSI SQL keywords unless explicitly specified by the dialect. <br /><br />There's a comment in JdbcEnvironmentImpl:<br />// todo : should really maintain a standard list of know ANSI-SQL defined keywords somewhere (currently rely on Dialect)<br />private final Set<String> reservedWords = new HashSet<String>();<br /><br />Should these keywords be added directly to Dialect, or should they be dialect-specific?<br /><br />This can be reproduced using SQLServer2012Dialect:<br />* org.hibernate.test.collection.original.CollectionTest fails if the table mapping for "User" entity is removed from hibernate-core/src/test/java/org/hibernate/test/collection/original/UserPermissions.hbm.xml (USER is an ANSI SQL reserved word);<br />* ASTParserLoadingTest.testJPAQLQualifiedIdentificationVariablesControl() fails if the column mapping for VariousKeywordPropertyEntity.key is removed from hibernate-core/src/test/java/org/hibernate/test/hql/VariousKeywordPropertyEntity.hbm.xml<br />* {quote}</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 0 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: 10px 0 10px 24px; vertical-align: middle; padding-left: 0">
<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/HHH-9768#add-comment" target="_blank" title="Add Comment" style="color: #3b73af; text-decoration: none"> <img class="actions-pattern-action-icon-image" src="cid:jira-generated-image-static-comment-icon-6079dc34-85c0-4d81-aaf1-4675dfe21f7f" alt="Add Comment" title="Add Comment" 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/HHH-9768#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 was sent by Atlassian JIRA <span id="footer-build-information">(v6.5-OD-01-120#65000-<span title="0dc1796b325ae7e85b1dca228885a3417f39097a" data-commit-id="0dc1796b325ae7e85b1dca228885a3417f39097a}">sha1:0dc1796</span>)</span>
</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="cid:jira-generated-image-static-footer-desktop-logo-cb538ad6-37d3-4096-8912-37c6aa60d069" alt="Atlassian logo" title="Atlassian logo" width="169" height="36" class="image_fix" />
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>