[
https://issues.apache.org/jira/browse/EMPIREDB-209?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14108236#comment-14108236
]
Shaun Forbes commented on EMPIREDB-209:
---------------------------------------
Hey Rainer,
I believe the database metadata method getIdentifierQuoteString() is the method
to call to determine what character to use to quote the alias name (I've never
seen anything but ' used myself, so I'm not 100% sure if this is the correct
method).
The driver.appendElementName() uses the identifiers required to quote the
column name itself, so for example in SQL Server
select order as order from ...
should be
select [order] as 'order' from ...
not
select [order] as [order] from ...
as I believe your suggestion would generate.
The reason I added the method to the DBDatabaseDriver class rather than the
DBAliasExpr class is because I try to grab the identifier quote value once
during the attachDatabase method, and store it as a variable in the
DBDriverClass, then the DBAliasExpr is delegating to the DBDatabaseDriver class
to handle the DB specific logic (i.e. should the alias be quoted) of adding the
alias to the SQL.
I guess it would be just as valid (possible more so, since it'd keep the alias
specific logic in the alias class) to move the decision to the DBAliasExpr
class and just have the driver provide the information required for the alias
class to make the decision.
The value for the quote identifier could also be setup as a new SQL phrase I
guess, but I don't know if this is how it's done for values that the database
can provide itself, via the metadata, compared to values that you have to hard
code in the db specific driver.
This is why I didn't bother including my code in the initial report, since I'd
figured you guys would have a better understanding of where it should be done
as I haven't been using empire-db for long.
Cheers,
Shaun
PS. BTW, I believe that at least the SQL Server driver also need to be updated
to include 'order' as a reserved word.
> Using a reserved word as a column alias in a select statement.
> --------------------------------------------------------------
>
> Key: EMPIREDB-209
> URL: https://issues.apache.org/jira/browse/EMPIREDB-209
> Project: Empire-DB
> Issue Type: New Feature
> Components: Core
> Affects Versions: empire-db-2.4.2
> Reporter: Shaun Forbes
> Priority: Minor
> Labels: newbie
>
> I believe it's possible in sql to use a reserved word as an alias in a select
> statement if it's correctly quoted (it is for the databases I've tested
> anyway).
> Checking for and quoting reserved word aliases does not currently appear to
> be implemented.
> To overcome this limitation I've added an method to the DBDatabaseDriver
> class to add the alias and perform any required quoting and altered the
> DBAliasExpr class to delegate the adding of the alias to the DBDatabaseDriver
> class.
> The character I'm using for quoting is determined from the
> getIdentifierQuoteString() method of the database connection metadata class,
> and I've used the detectQuoteName(String name) method in DBDatabaseDriver to
> determine if the alias needs to be quoted.
> Patches available if required.
--
This message was sent by Atlassian JIRA
(v6.2#6252)