Fixes to escape SQL keywords when used as column names
This commit is contained in:
parent
74be55668f
commit
b240169fc7
|
@ -12,7 +12,7 @@
|
|||
Transform ADL to Hibernate
|
||||
|
||||
$Author: sb $
|
||||
$Revision: 1.9 $
|
||||
$Revision: 1.10 $
|
||||
-->
|
||||
|
||||
<!--
|
||||
|
@ -44,6 +44,72 @@
|
|||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
|
||||
<!-- define upper and lower case letters to enable case conversion -->
|
||||
<xsl:variable name="ucase">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
|
||||
<xsl:variable name="lcase">abcdefghijklmnopqrstuvwxyz</xsl:variable>
|
||||
<!-- define SQL keywords to police these out of field names -->
|
||||
<xsl:variable name="sqlkeywords-multiline">
|
||||
ADD EXCEPT PERCENT
|
||||
ALL EXEC PLAN
|
||||
ALTER EXECUTE PRECISION
|
||||
AND EXISTS PRIMARY
|
||||
ANY EXIT PRINT
|
||||
AS FETCH PROC
|
||||
ASC FILE PROCEDURE
|
||||
AUTHORIZATION FILLFACTOR PUBLIC
|
||||
BACKUP FOR RAISERROR
|
||||
BEGIN FOREIGN READ
|
||||
BETWEEN FREETEXT READTEXT
|
||||
BREAK FREETEXTTABLE RECONFIGURE
|
||||
BROWSE FROM REFERENCES
|
||||
BULK FULL REPLICATION
|
||||
BY FUNCTION RESTORE
|
||||
CASCADE GOTO RESTRICT
|
||||
CASE GRANT RETURN
|
||||
CHECK GROUP REVOKE
|
||||
CHECKPOINT HAVING RIGHT
|
||||
CLOSE HOLDLOCK ROLLBACK
|
||||
CLUSTERED IDENTITY ROWCOUNT
|
||||
COALESCE IDENTITY_INSERT ROWGUIDCOL
|
||||
COLLATE IDENTITYCOL RULE
|
||||
COLUMN IF SAVE
|
||||
COMMIT IN SCHEMA
|
||||
COMPUTE INDEX SELECT
|
||||
CONSTRAINT INNER SESSION_USER
|
||||
CONTAINS INSERT SET
|
||||
CONTAINSTABLE INTERSECT SETUSER
|
||||
CONTINUE INTO SHUTDOWN
|
||||
CONVERT IS SOME
|
||||
CREATE JOIN STATISTICS
|
||||
CROSS KEY SYSTEM_USER
|
||||
CURRENT KILL TABLE
|
||||
CURRENT_DATE LEFT TEXTSIZE
|
||||
CURRENT_TIME LIKE THEN
|
||||
CURRENT_TIMESTAMP LINENO TO
|
||||
CURRENT_USER LOAD TOP
|
||||
CURSOR NATIONAL TRAN
|
||||
DATABASE NOCHECK TRANSACTION
|
||||
DBCC NONCLUSTERED TRIGGER
|
||||
DEALLOCATE NOT TRUNCATE
|
||||
DECLARE NULL TSEQUAL
|
||||
DEFAULT NULLIF UNION
|
||||
DELETE OF UNIQUE
|
||||
DENY OFF UPDATE
|
||||
DESC OFFSETS UPDATETEXT
|
||||
DISK ON USE
|
||||
DISTINCT OPEN USER
|
||||
DISTRIBUTED OPENDATASOURCE VALUES
|
||||
DOUBLE OPENQUERY VARYING
|
||||
DROP OPENROWSET VIEW
|
||||
DUMMY OPENXML WAITFOR
|
||||
DUMP OPTION WHEN
|
||||
ELSE OR WHERE
|
||||
END ORDER WHILE
|
||||
ERRLVL OUTER WITH
|
||||
ESCAPE OVER WRITETEXT
|
||||
</xsl:variable>
|
||||
<xsl:variable name="sqlkeywords" select="concat(' ', normalize-space($sqlkeywords-multiline), ' ')"/>
|
||||
|
||||
<xsl:template match="adl:application">
|
||||
<hibernate-mapping>
|
||||
<xsl:attribute name="namespace">
|
||||
|
@ -63,7 +129,7 @@
|
|||
* THIS FILE IS AUTOMATICALLY GENERATED AND SHOULD NOT
|
||||
* BE MANUALLY EDITED.
|
||||
*
|
||||
* Generated using adl2hibernate.xslt revision <xsl:value-of select="substring('$Revision: 1.9 $', 12)"/>
|
||||
* Generated using adl2hibernate.xslt revision <xsl:value-of select="substring('$Revision: 1.10 $', 12)"/>
|
||||
*
|
||||
***************************************************************************
|
||||
</xsl:comment>
|
||||
|
@ -114,14 +180,9 @@
|
|||
<xsl:value-of select="adl:property[position()=1]/@name"/>
|
||||
</xsl:attribute>
|
||||
<xsl:attribute name="column">
|
||||
<xsl:choose>
|
||||
<xsl:when test="adl:property[position()=1]/@column">
|
||||
<xsl:value-of select="adl:property[position()=1]/@column"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="adl:property[position()=1]/@name"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
<xsl:call-template name="property-column-name">
|
||||
<xsl:with-param name="property" select="adl:property[position()=1]"/>
|
||||
</xsl:call-template>
|
||||
</xsl:attribute>
|
||||
<xsl:attribute name="type">
|
||||
<xsl:call-template name="csharp-base-type">
|
||||
|
@ -193,14 +254,9 @@
|
|||
<xsl:value-of select="@name"/>
|
||||
</xsl:attribute>
|
||||
<xsl:attribute name="column">
|
||||
<xsl:choose>
|
||||
<xsl:when test="@column">
|
||||
<xsl:value-of select="@column"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="@name"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
<xsl:call-template name="property-column-name">
|
||||
<xsl:with-param name="property" select="."/>
|
||||
</xsl:call-template>
|
||||
</xsl:attribute>
|
||||
<xsl:attribute name="type">
|
||||
<xsl:call-template name="csharp-type">
|
||||
|
@ -216,14 +272,9 @@
|
|||
<xsl:value-of select="@name"/>
|
||||
</xsl:attribute>
|
||||
<xsl:attribute name="column">
|
||||
<xsl:choose>
|
||||
<xsl:when test="@column">
|
||||
<xsl:value-of select="@column"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="@name"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
<xsl:call-template name="property-column-name">
|
||||
<xsl:with-param name="property" select="."/>
|
||||
</xsl:call-template>
|
||||
</xsl:attribute>
|
||||
<xsl:attribute name="class">
|
||||
<xsl:value-of select="@entity"/>
|
||||
|
@ -271,7 +322,9 @@
|
|||
</xsl:attribute>
|
||||
<xsl:if test="@column">
|
||||
<xsl:attribute name="column">
|
||||
<xsl:value-of select="@column"/>
|
||||
<xsl:call-template name="property-column-name">
|
||||
<xsl:with-param name="property" select="."/>
|
||||
</xsl:call-template>
|
||||
</xsl:attribute>
|
||||
</xsl:if>
|
||||
</many-to-one>
|
||||
|
@ -315,14 +368,9 @@
|
|||
<xsl:value-of select="@entity"/>
|
||||
</xsl:attribute>
|
||||
<xsl:attribute name="column">
|
||||
<xsl:choose>
|
||||
<xsl:when test="@column">
|
||||
<xsl:value-of select="@column"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="@name"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
<xsl:call-template name="property-column-name">
|
||||
<xsl:with-param name="property" select="."/>
|
||||
</xsl:call-template>
|
||||
</xsl:attribute>
|
||||
<xsl:if test="@farkey">
|
||||
<xsl:attribute name="property-ref">
|
||||
|
@ -454,14 +502,9 @@
|
|||
</xsl:call-template>
|
||||
</xsl:attribute>
|
||||
<xsl:attribute name="column">
|
||||
<xsl:choose>
|
||||
<xsl:when test="@column">
|
||||
<xsl:value-of select="@column"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="@name"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
<xsl:call-template name="property-column-name">
|
||||
<xsl:with-param name="property" select="."/>
|
||||
</xsl:call-template>
|
||||
</xsl:attribute>
|
||||
<xsl:apply-templates select="adl:documentation"/>
|
||||
</property>
|
||||
|
@ -473,6 +516,31 @@
|
|||
</xsl:comment>
|
||||
</xsl:template>
|
||||
|
||||
<!-- consistent, repeatable way of getting the column name for a given property -->
|
||||
<xsl:template name="property-column-name">
|
||||
<!-- a property element -->
|
||||
<xsl:param name="property"/>
|
||||
<xsl:variable name="unescaped">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$property/@column">
|
||||
<xsl:value-of select="$property/@column"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="$property/@name"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
<xsl:choose>
|
||||
<xsl:when test="contains( $sqlkeywords, concat(' ', translate( $unescaped, $lcase, $ucase),' '))">
|
||||
<xsl:value-of select="concat( '[', $unescaped, ']')"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="$unescaped"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
|
||||
<!--
|
||||
horrible, horrible hackery. Compare two strings and return
|
||||
* 0 if they are identical,
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
Convert ADL to MS-SQL
|
||||
|
||||
$Author: sb $
|
||||
$Revision: 1.11 $
|
||||
$Revision: 1.12 $
|
||||
-->
|
||||
|
||||
<xsl:output indent="no" encoding="UTF-8" method="text"/>
|
||||
|
@ -28,13 +28,80 @@
|
|||
<xsl:param name="abstract-key-name-convention" select="Id"/>
|
||||
<xsl:param name="database"/>
|
||||
|
||||
<!-- define upper and lower case letters to enable case conversion -->
|
||||
<xsl:variable name="ucase">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
|
||||
<xsl:variable name="lcase">abcdefghijklmnopqrstuvwxyz</xsl:variable>
|
||||
<!-- define SQL keywords to police these out of field names -->
|
||||
<xsl:variable name="sqlkeywords-multiline">
|
||||
ADD EXCEPT PERCENT
|
||||
ALL EXEC PLAN
|
||||
ALTER EXECUTE PRECISION
|
||||
AND EXISTS PRIMARY
|
||||
ANY EXIT PRINT
|
||||
AS FETCH PROC
|
||||
ASC FILE PROCEDURE
|
||||
AUTHORIZATION FILLFACTOR PUBLIC
|
||||
BACKUP FOR RAISERROR
|
||||
BEGIN FOREIGN READ
|
||||
BETWEEN FREETEXT READTEXT
|
||||
BREAK FREETEXTTABLE RECONFIGURE
|
||||
BROWSE FROM REFERENCES
|
||||
BULK FULL REPLICATION
|
||||
BY FUNCTION RESTORE
|
||||
CASCADE GOTO RESTRICT
|
||||
CASE GRANT RETURN
|
||||
CHECK GROUP REVOKE
|
||||
CHECKPOINT HAVING RIGHT
|
||||
CLOSE HOLDLOCK ROLLBACK
|
||||
CLUSTERED IDENTITY ROWCOUNT
|
||||
COALESCE IDENTITY_INSERT ROWGUIDCOL
|
||||
COLLATE IDENTITYCOL RULE
|
||||
COLUMN IF SAVE
|
||||
COMMIT IN SCHEMA
|
||||
COMPUTE INDEX SELECT
|
||||
CONSTRAINT INNER SESSION_USER
|
||||
CONTAINS INSERT SET
|
||||
CONTAINSTABLE INTERSECT SETUSER
|
||||
CONTINUE INTO SHUTDOWN
|
||||
CONVERT IS SOME
|
||||
CREATE JOIN STATISTICS
|
||||
CROSS KEY SYSTEM_USER
|
||||
CURRENT KILL TABLE
|
||||
CURRENT_DATE LEFT TEXTSIZE
|
||||
CURRENT_TIME LIKE THEN
|
||||
CURRENT_TIMESTAMP LINENO TO
|
||||
CURRENT_USER LOAD TOP
|
||||
CURSOR NATIONAL TRAN
|
||||
DATABASE NOCHECK TRANSACTION
|
||||
DBCC NONCLUSTERED TRIGGER
|
||||
DEALLOCATE NOT TRUNCATE
|
||||
DECLARE NULL TSEQUAL
|
||||
DEFAULT NULLIF UNION
|
||||
DELETE OF UNIQUE
|
||||
DENY OFF UPDATE
|
||||
DESC OFFSETS UPDATETEXT
|
||||
DISK ON USE
|
||||
DISTINCT OPEN USER
|
||||
DISTRIBUTED OPENDATASOURCE VALUES
|
||||
DOUBLE OPENQUERY VARYING
|
||||
DROP OPENROWSET VIEW
|
||||
DUMMY OPENXML WAITFOR
|
||||
DUMP OPTION WHEN
|
||||
ELSE OR WHERE
|
||||
END ORDER WHILE
|
||||
ERRLVL OUTER WITH
|
||||
ESCAPE OVER WRITETEXT
|
||||
</xsl:variable>
|
||||
<xsl:variable name="sqlkeywords" select="concat(' ', normalize-space($sqlkeywords-multiline), ' ')"/>
|
||||
|
||||
|
||||
<xsl:template match="adl:application">
|
||||
-------------------------------------------------------------------------------------------------
|
||||
--
|
||||
-- Application Description Language framework
|
||||
--
|
||||
-- Database for application <xsl:value-of select="@name"/> version <xsl:value-of select="@version"/>
|
||||
-- Generated for MS-SQL 2000+ using adl2mssql.xslt <xsl:value-of select="substring('$Revision: 1.11 $', 12)"/>
|
||||
-- Generated for MS-SQL 2000+ using adl2mssql.xslt <xsl:value-of select="substring('$Revision: 1.12 $', 12)"/>
|
||||
--
|
||||
-- Code generator (c) 2007 Cygnet Solutions Ltd
|
||||
--
|
||||
|
@ -523,7 +590,9 @@
|
|||
|
||||
<!-- consistent, repeatable way of getting the column name for a given property -->
|
||||
<xsl:template name="property-column-name">
|
||||
<!-- a property element -->
|
||||
<xsl:param name="property"/>
|
||||
<xsl:variable name="unescaped">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$property/@column">
|
||||
<xsl:value-of select="$property/@column"/>
|
||||
|
@ -532,6 +601,15 @@
|
|||
<xsl:value-of select="$property/@name"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
<xsl:choose>
|
||||
<xsl:when test="contains( $sqlkeywords, concat(' ', translate( $unescaped, $lcase, $ucase),' '))">
|
||||
<xsl:value-of select="concat( '[', $unescaped, ']')"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="$unescaped"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="primary-key-name">
|
||||
|
|
|
@ -12,8 +12,8 @@
|
|||
Transform ADL into velocity view templates
|
||||
|
||||
$Author: sb $
|
||||
$Revision: 1.11 $
|
||||
$Date: 2008-03-12 13:46:10 $
|
||||
$Revision: 1.12 $
|
||||
$Date: 2008-03-19 15:37:48 $
|
||||
-->
|
||||
<!-- WARNING WARNING WARNING: Do NOT reformat this file!
|
||||
Whitespace (or lack of it) is significant! -->
|
||||
|
@ -44,7 +44,7 @@
|
|||
stored to CVS -->
|
||||
|
||||
<xsl:variable name="transform-rev1"
|
||||
select="substring( '$Revision: 1.11 $', 11)"/>
|
||||
select="substring( '$Revision: 1.12 $', 11)"/>
|
||||
<xsl:variable name="transform-revision"
|
||||
select="substring( $transform-rev1, 0, string-length( $transform-rev1) - 1)"/>
|
||||
|
||||
|
@ -925,7 +925,7 @@
|
|||
<xsl:value-of select="//adl:definition[@name=$definition]/@size"/>
|
||||
</xsl:variable>
|
||||
<input type="text">
|
||||
<xsl:attribute name="class">
|
||||
<xsl:variable name="cssclass">
|
||||
<xsl:if test="$property/@required='true'">required </xsl:if>
|
||||
<xsl:choose>
|
||||
<xsl:when test="//adl:definition[@name=$definition]/@pattern">
|
||||
|
@ -939,6 +939,9 @@
|
|||
<xsl:when test="$definedtype='money'">validate-number</xsl:when>
|
||||
<xsl:when test="$definedtype='date'">date-field validate-date</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
<xsl:attribute name="class">
|
||||
<xsl:value-of select="normalize-space( cssclass)"/>
|
||||
</xsl:attribute>
|
||||
<xsl:attribute name="id">
|
||||
<xsl:value-of select="concat( 'instance_', @name)"/>
|
||||
|
@ -1031,7 +1034,7 @@
|
|||
<xsl:variable name="class">
|
||||
<xsl:if test="$property/@required='true'">required </xsl:if>date-field validate-date
|
||||
</xsl:variable>
|
||||
${FormHelper.TextField( "instance.<xsl:value-of select="$property/@name"/>", "%{class='<xsl:value-of select="$class"/>', textformat='d', size='10', maxlength='10'}")}
|
||||
${FormHelper.TextField( "instance.<xsl:value-of select="$property/@name"/>", "%{class='<xsl:value-of select="normalize-space( $class)"/>', textformat='d', size='10', maxlength='10'}")}
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:variable name="class">
|
||||
|
|
Loading…
Reference in a new issue