In Applied Sweepers, the big problem of linking between the two databases is now solved, and the solution is reasonably good.

I don't believe there's any ASL-specific special purpose code in here, but there is code which addresses the issue of one-one joins between databases which may need to be revisited. Also, if a 'database' parameter is passed, link tables get the prefix '$database.dbo.', which I think is an MS SQL Server specific convention.
This commit is contained in:
sb 2008-02-13 15:56:31 +00:00
parent 9fa2d42bfe
commit afc5be9d35
3 changed files with 80 additions and 25 deletions

View file

@ -13,7 +13,7 @@
<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --> <!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
<!-- <!--
$Revision: 1.9 $ $Revision: 1.10 $
--> -->
<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --> <!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
@ -142,15 +142,11 @@
name: the name of this application name: the name of this application
version: the version number of this application version: the version number of this application
assembly: C# implementation detail, DEPRECATED: should not be here
namespace: C# implementation detail, DEPRECATED: should not be here
xmlns: XML namespace, in case required xmlns: XML namespace, in case required
--> -->
<!ELEMENT application ( documentation?, content?, typedef*, group*, entity*)> <!ELEMENT application ( documentation?, content?, typedef*, group*, entity*)>
<!ATTLIST application <!ATTLIST application
name CDATA #REQUIRED name CDATA #REQUIRED
assembly CDATA #IMPLIED
namespace CDATA #IMPLIED
version CDATA #IMPLIED version CDATA #IMPLIED
xmlns CDATA #IMPLIED> xmlns CDATA #IMPLIED>
@ -270,7 +266,9 @@
if type='list', the name of the entity that has a foreign if type='list', the name of the entity that has a foreign
key link to this entity key link to this entity
farkey: if type='list', the name of farside key in the listed farkey: if type='list', the name of farside key in the listed
entity entity; if type='entity' and the farside field to join to
is not the farside primary key, then the name of that
farside field
required: whether this propery is required (i.e. 'not null'). required: whether this propery is required (i.e. 'not null').
size: fieldwidth of the property if specified. size: fieldwidth of the property if specified.
concrete: if set to 'false', this property is not stored in the concrete: if set to 'false', this property is not stored in the

View file

@ -8,8 +8,8 @@
Transform ADL into entity classes Transform ADL into entity classes
$Author: sb $ $Author: sb $
$Revision: 1.4 $ $Revision: 1.5 $
$Date: 2008-02-06 17:24:53 $ $Date: 2008-02-13 15:56:31 $
--> -->
<!-- WARNING WARNING WARNING: Do NOT reformat this file! <!-- WARNING WARNING WARNING: Do NOT reformat this file!
@ -45,15 +45,13 @@
<xsl:template match="adl:entity[@foreign='true']"/> <xsl:template match="adl:entity[@foreign='true']"/>
<xsl:template match="adl:entity"> <xsl:template match="adl:entity">
<xsl:message terminate="no">Matched entity with name <xsl:value-of select="@name"/>
</xsl:message>
<!-- what's all this about? the objective is to get the revision number of the <!-- what's all this about? the objective is to get the revision number of the
transform into the output, /without/ getting that revision number overwritten transform into the output, /without/ getting that revision number overwritten
with the revision number of the generated file if the generated file is with the revision number of the generated file if the generated file is
stored to CVS --> stored to CVS -->
<xsl:variable name="transform-rev1" <xsl:variable name="transform-rev1"
select="substring( '$Revision: 1.4 $', 11)"/> select="substring( '$Revision: 1.5 $', 11)"/>
<xsl:variable name="transform-revision" <xsl:variable name="transform-revision"
select="substring( $transform-rev1, 0, string-length( $transform-rev1) - 1)"/> select="substring( $transform-rev1, 0, string-length( $transform-rev1) - 1)"/>
@ -337,11 +335,11 @@
</xsl:choose> </xsl:choose>
</xsl:when> </xsl:when>
<xsl:when test="normalize-space( $nullable-decoration) = '?'"> = null</xsl:when> <xsl:when test="normalize-space( $nullable-decoration) = '?'"> = null</xsl:when>
<xsl:when test="$base-type = 'boolean'"> = false</xsl:when> <xsl:when test="$base-type = 'Boolean'"> = false</xsl:when>
<xsl:when test="$base-type = 'int'"> = 0</xsl:when> <xsl:when test="$base-type = 'int'"> = 0</xsl:when>
<xsl:when test="$csharp-type = 'Decimal'"> = 0.0M</xsl:when> <xsl:when test="$csharp-type = 'Decimal'"> = 0.0M</xsl:when>
<xsl:when test="$base-type = 'real'"> = 0.0</xsl:when> <xsl:when test="$base-type = 'real'"> = 0.0</xsl:when>
<xsl:when test="$base-type='string'"> = null</xsl:when> <xsl:when test="$base-type='String'"> = null</xsl:when>
</xsl:choose> </xsl:choose>
</xsl:variable> </xsl:variable>
@ -427,6 +425,29 @@
} }
} }
<xsl:if test="parent::adl:key and @type='entity'">
/* generate primitive value getter/setter for key property of type entity (experimental) */
<xsl:variable name="csharp-base-type">
<xsl:call-template name="csharp-base-type">
<xsl:with-param name="property" select="."/>
</xsl:call-template>
</xsl:variable>
private <xsl:value-of select="concat( $csharp-base-type, ' _', @name, '_Value')"/> <xsl:choose>
<xsl:when test="$csharp-base-type = 'Boolean'"> = false</xsl:when>
<xsl:when test="$csharp-base-type = 'int'"> = 0</xsl:when>
<xsl:when test="$csharp-base-type = 'Decimal'"> = 0.0M</xsl:when>
<xsl:when test="$csharp-base-type = 'real'"> = 0.0</xsl:when>
<xsl:when test="$csharp-base-type='String'"> = null</xsl:when>
<xsl:otherwise>[unknown? <xsl:value-of select="$csharp-base-type"/>]
</xsl:otherwise>
</xsl:choose>;
public virtual <xsl:value-of select="concat( $csharp-base-type, ' ', @name, '_Value')"/> {
get { return <xsl:value-of select="concat( '_', @name, '_Value')"/>; }
set { <xsl:value-of select="concat( '_', @name, '_Value')"/> = value; }
}
</xsl:if>
</xsl:template> </xsl:template>
<xsl:template match="adl:help"> <xsl:template match="adl:help">

View file

@ -12,7 +12,7 @@
Transform ADL to Hibernate Transform ADL to Hibernate
$Author: sb $ $Author: sb $
$Revision: 1.5 $ $Revision: 1.6 $
--> -->
<!-- <!--
@ -35,6 +35,15 @@
<xsl:include href="csharp-type-include.xslt"/> <xsl:include href="csharp-type-include.xslt"/>
<xsl:variable name="dbprefix">
<xsl:choose>
<xsl:when test="string-length( $database) > 0">
<xsl:value-of select="concat( $database, '.dbo.')"/>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:template match="adl:application"> <xsl:template match="adl:application">
<hibernate-mapping> <hibernate-mapping>
<xsl:attribute name="namespace"> <xsl:attribute name="namespace">
@ -53,7 +62,7 @@
* THIS FILE IS AUTOMATICALLY GENERATED AND SHOULD NOT * THIS FILE IS AUTOMATICALLY GENERATED AND SHOULD NOT
* BE MANUALLY EDITED. * BE MANUALLY EDITED.
* *
* Generated using adl2hibernate-mapping.xsl revision <xsl:value-of select="substring('$Revision: 1.5 $', 12)"/> * Generated using adl2hibernate-mapping.xsl revision <xsl:value-of select="substring('$Revision: 1.6 $', 12)"/>
* *
*************************************************************************** ***************************************************************************
</xsl:comment> </xsl:comment>
@ -100,9 +109,6 @@
</xsl:when> </xsl:when>
<xsl:when test="count( adl:property) = 1"> <xsl:when test="count( adl:property) = 1">
<id> <id>
<xsl:attribute name="name">
<xsl:value-of select="adl:property[position()=1]/@name"/>
</xsl:attribute>
<xsl:attribute name="column"> <xsl:attribute name="column">
<xsl:choose> <xsl:choose>
<xsl:when test="adl:property[position()=1]/@column"> <xsl:when test="adl:property[position()=1]/@column">
@ -120,12 +126,32 @@
</xsl:attribute> </xsl:attribute>
<xsl:choose> <xsl:choose>
<xsl:when test="adl:property[position()=1]/adl:generator"> <xsl:when test="adl:property[position()=1]/adl:generator">
<xsl:attribute name="name">
<xsl:value-of select="adl:property[position()=1]/@name"/>
</xsl:attribute>
<xsl:apply-templates select="adl:property[position()=1]/adl:generator"/> <xsl:apply-templates select="adl:property[position()=1]/adl:generator"/>
</xsl:when> </xsl:when>
<xsl:when test="adl:property[position()=1 and @type='entity']"> <xsl:when test="adl:property[position()=1 and @type='entity']">
<xsl:attribute name="name">
<xsl:value-of select="concat( adl:property[position()=1]/@name, '_Value')"/>
</xsl:attribute>
<xsl:variable name="entityname" select="adl:property[position()=1]/@entity"/>
<xsl:variable name="farkey">
<xsl:choose>
<xsl:when test="adl:property[position()=1]/@farkey">
<xsl:value-of select="adl:property[position()=1]/@farkey"/>
</xsl:when>
<xsl:when test="//adl:entity[@name=$entityname]/adl:key/adl:property">
<xsl:value-of select="//adl:entity[@name=$entityname]/adl:key/adl:property[position()=1]/@name"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="'[unkown?]'"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<generator class="foreign"> <generator class="foreign">
<param name="property"> <param name="property">
<xsl:value-of select="adl:property[position()=1]/@name"/> <xsl:value-of select="$farkey"/>
</param> </param>
</generator> </generator>
</xsl:when> </xsl:when>
@ -220,7 +246,7 @@
<!-- a property of type entity translates to a Hibernate many-to-one, <!-- a property of type entity translates to a Hibernate many-to-one,
unless it's part of the key, in which case it translates as one-to-one. unless it's part of the key, in which case it translates as one-to-one.
TODO: Check this logic! --> TODO: Check this logic! -->
<xsl:choose> <!-- xsl:choose>
<xsl:when test="parent::adl:key"> <xsl:when test="parent::adl:key">
<one-to-one> <one-to-one>
<xsl:attribute name="name"> <xsl:attribute name="name">
@ -229,6 +255,11 @@
<xsl:attribute name="class"> <xsl:attribute name="class">
<xsl:value-of select="@entity"/> <xsl:value-of select="@entity"/>
</xsl:attribute> </xsl:attribute>
<xsl:if test="@farkey">
<xsl:attribute name="property-ref">
<xsl:value-of select="@farkey"/>
</xsl:attribute>
</xsl:if>
<xsl:choose> <xsl:choose>
<xsl:when test="@cascade='manual'"/> <xsl:when test="@cascade='manual'"/>
<xsl:when test="@cascade"> <xsl:when test="@cascade">
@ -240,7 +271,7 @@
<xsl:apply-templates select="adl:documentation"/> <xsl:apply-templates select="adl:documentation"/>
</one-to-one> </one-to-one>
</xsl:when> </xsl:when>
<xsl:otherwise> <xsl:otherwise -->
<many-to-one> <many-to-one>
<xsl:attribute name="name"> <xsl:attribute name="name">
<xsl:value-of select="@name"/> <xsl:value-of select="@name"/>
@ -258,6 +289,11 @@
</xsl:otherwise> </xsl:otherwise>
</xsl:choose> </xsl:choose>
</xsl:attribute> </xsl:attribute>
<xsl:if test="@farkey">
<xsl:attribute name="property-ref">
<xsl:value-of select="@farkey"/>
</xsl:attribute>
</xsl:if>
<xsl:choose> <xsl:choose>
<xsl:when test="@cascade='manual'"/> <xsl:when test="@cascade='manual'"/>
<xsl:when test="@cascade"> <xsl:when test="@cascade">
@ -268,8 +304,8 @@
</xsl:choose> </xsl:choose>
<xsl:apply-templates select="adl:documentation"/> <xsl:apply-templates select="adl:documentation"/>
</many-to-one> </many-to-one>
</xsl:otherwise> <!-- /xsl:otherwise>
</xsl:choose> </xsl:choose -->
</xsl:template> </xsl:template>
<xsl:template match="adl:property[@type='list']"> <xsl:template match="adl:property[@type='list']">
@ -330,10 +366,10 @@
<xsl:variable name="tablename"> <xsl:variable name="tablename">
<xsl:choose> <xsl:choose>
<xsl:when test="$comparison =-1"> <xsl:when test="$comparison =-1">
<xsl:value-of select="concat( 'ln_', ../@name, '_', @entity)"/> <xsl:value-of select="concat( $dbprefix, 'ln_', ../@name, '_', @entity)"/>
</xsl:when> </xsl:when>
<xsl:otherwise> <xsl:otherwise>
<xsl:value-of select="concat( 'ln_', @entity, '_', ../@name)"/> <xsl:value-of select="concat( $dbprefix, 'ln_', @entity, '_', ../@name)"/>
</xsl:otherwise> </xsl:otherwise>
</xsl:choose> </xsl:choose>
</xsl:variable> </xsl:variable>