dbTalk Databases Forums  

AS 2005 / Can't build dimensions when RDBMS is Sybase

microsoft.public.sqlserver.olap microsoft.public.sqlserver.olap


Discuss AS 2005 / Can't build dimensions when RDBMS is Sybase in the microsoft.public.sqlserver.olap forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Steve G
 
Posts: n/a

Default AS 2005 / Can't build dimensions when RDBMS is Sybase - 11-23-2005 , 10:56 AM






I use a Sybase (12.5.2) OLEDB datasource for feeding dimension data to our
SQL Server 2005 Analysis Services Cubes. If I try to process any dimension I
see that the SQL generated by SSAS is something like:


SELECT [dbo_o_v_ccy_pair].[ccy_pair_id] AS
[dbo_o_v_ccy_pairccy_pair_id0_0],[dbo_o_v_ccy_pair].[ccy_pair_name] AS
[dbo_o_v_ccy_pairccy_pair_name0_1],[dbo_o_v_ccy_pair].[is_offshore_ccy] AS
[dbo_o_v_ccy_pairis_offshore_ccy0_2],[dbo_o_v_ccy_pair].[start_name] AS
[dbo_o_v_ccy_pairstart_name0_3],[dbo_o_v_ccy_pair].[region_id] AS
[dbo_o_v_ccy_pairregion_id0_4],[dbo_o_v_ccy_pair].[is_emerging] AS
[dbo_o_v_ccy_pairis_emerging0_5],[dbo_o_v_ccy_pair].[bus_region] AS
[dbo_o_v_ccy_pairbus_region0_6],[dbo_o_v_ccy_pair].[is_offshore_ccy_desc] AS
[dbo_o_v_ccy_pairis_offshore_ccy_desc0_7]
FROM [dbo].[o_v_ccy_pair] AS [dbo_o_v_ccy_pair]


... the point is that SSAS is inserting its own, rather verbose aliases, as
in .. "AS [dbo_o_v_ccy_pairccy_pair_id0_0]" .. which often results in an
alias name longer than 30 characters, therefore exceeding the longest that
Sybase SQL can handle and causing the dimension processing to fail. Is there
any way to prevent these long aliases being created ? If so, how ? If not,
does that mean than SSAS is not compatible with Sybase ?


Reply With Quote
  #2  
Old   
Steve G
 
Posts: n/a

Default Re: AS 2005 / Can't build dimensions when RDBMS is Sybase - 11-24-2005 , 03:05 AM






Akshai,

Thanks for your reply. We'd like to try this Sybase cartridge out, but
cannot find it. I can't see any attached file. How can I access it ?





"Akshai Mirchandani [MS]" wrote:

Quote:
Sybase is not a supported database for AS 2005. However, another Sybase
customer built a cartridge and I've attached it here -- it may or may not
work for you and will not be supported.

You can put the attached .xsl file in the <install folder>\cartridges folder
and re-start the server.

Thanks,
Akshai
--
This posting is provided "AS IS" with no warranties, and confers no rights
Please do not send email directly to this alias. This alias is for newsgroup
purposes only.

"Steve G" <Steve G (AT) discussions (DOT) microsoft.com> wrote in message
news4594E9A-09A7-4BA7-855F-2E5072AC1D9D (AT) microsoft (DOT) com...
I use a Sybase (12.5.2) OLEDB datasource for feeding dimension data to our
SQL Server 2005 Analysis Services Cubes. If I try to process any dimension
I
see that the SQL generated by SSAS is something like:


SELECT [dbo_o_v_ccy_pair].[ccy_pair_id] AS
[dbo_o_v_ccy_pairccy_pair_id0_0],[dbo_o_v_ccy_pair].[ccy_pair_name] AS
[dbo_o_v_ccy_pairccy_pair_name0_1],[dbo_o_v_ccy_pair].[is_offshore_ccy] AS
[dbo_o_v_ccy_pairis_offshore_ccy0_2],[dbo_o_v_ccy_pair].[start_name] AS
[dbo_o_v_ccy_pairstart_name0_3],[dbo_o_v_ccy_pair].[region_id] AS
[dbo_o_v_ccy_pairregion_id0_4],[dbo_o_v_ccy_pair].[is_emerging] AS
[dbo_o_v_ccy_pairis_emerging0_5],[dbo_o_v_ccy_pair].[bus_region] AS
[dbo_o_v_ccy_pairbus_region0_6],[dbo_o_v_ccy_pair].[is_offshore_ccy_desc]
AS
[dbo_o_v_ccy_pairis_offshore_ccy_desc0_7]
FROM [dbo].[o_v_ccy_pair] AS [dbo_o_v_ccy_pair]


.. the point is that SSAS is inserting its own, rather verbose aliases, as
in .. "AS [dbo_o_v_ccy_pairccy_pair_id0_0]" .. which often results in an
alias name longer than 30 characters, therefore exceeding the longest that
Sybase SQL can handle and causing the dimension processing to fail. Is
there
any way to prevent these long aliases being created ? If so, how ? If not,
does that mean than SSAS is not compatible with Sybase ?





Reply With Quote
  #3  
Old   
Akshai Mirchandani [MS]
 
Posts: n/a

Default Re: AS 2005 / Can't build dimensions when RDBMS is Sybase - 11-29-2005 , 03:58 PM



I've pasted it inline below.

Thanks,
Akshai

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" version="1.0"
xmlns:mssqlcrt="urn:sql-microsoft-com:sqlcrt"
xmlns:mssqldbg="urn:sql-microsoft-com:sqldbg">
<xslutput method="xml" indent="yes"/>

<!-- ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!!
This is a generated file. Do not modify this file directly!
-->

<!-- Sybase pluggable cartridge -->

<!-- Area of STANDARD parametrizations: these are externally passed -->
<xslaram name="in_CanUseParams">yes</xslaram>
<xslaram name="in_IdentStartQuotingCharacter"></xslaram>
<xslaram name="in_IdentEndQuotingCharacter"></xslaram>
<xslaram name="in_StringStartQuotingCharacter">N'</xslaram>
<xslaram name="in_StringEndQuotingCharacter">'</xslaram>

<!-- Area of CORE parametrizations: These are externally checked -->
<mssqlcrtrovider type="prefix">Adaptive Server
Anywhere</mssqlcrtrovider>

<mssqlcrt:capabilities>
<mssqlcrt:supports-datepart-year/>
<mssqlcrt:supports-datepart-quarter/>
<mssqlcrt:supports-datepart-month/>
<mssqlcrt:supports-datepart-dayofyear/>
<mssqlcrt:supports-datepart-day/>
<mssqlcrt:supports-datepart-week/>
<mssqlcrt:supports-datepart-dayofweek/>
<mssqlcrt:supports-datepart-hour/>
<mssqlcrt:supports-datepart-minute/>
<mssqlcrt:supports-datepart-second/>
<mssqlcrt:supports-datepart-millisecond/>
<mssqlcrt:supports-multiple-distinct-count/>
<mssqlcrt:supports-update/>
<mssqlcrt:supports-insert/>
<mssqlcrt:supports-subselect/>
<mssqlcrt:supports-table-alias/>
<mssqlcrt:supports-column-alias/>
<mssqlcrt:supports-cast/>
<mssqlcrt:supports-remote-query/>
<mssqlcrt:supports-top-clause/>
<mssqlcrt:supports-union/>
<mssqlcrt:supports-union-all/>
<mssqlcrt:supports-fast-writeback>TABLOCK,FIRE_TRIGGERS</mssqlcrt:supports-fast-writeback>
<!--
This cartridge is used as the default cartridge for unknown
providers
So even though SQL supports larger aliases (at least 128), we'll
use a smaller
alias for the other providers
-->
<mssqlcrt:limit-table-identifier-length>32</mssqlcrt:limit-table-identifier-length>
<mssqlcrt:limit-column-identifier-length>32</mssqlcrt:limit-column-identifier-length>

<!-- Map from MSDAInitialize connection string to SQLOLEDB connection
string -->
<mssqlcrt:remote-connection-string-mappings>
<mssqlcrt:remote-connection-string-mapping>
<mssqlcrt:datasource-property>Provider</mssqlcrt:datasource-property>
<mssqlcrt:remote-property></mssqlcrt:remote-property>
</mssqlcrt:remote-connection-string-mapping>
<mssqlcrt:remote-connection-string-mapping>
<mssqlcrt:datasource-property>Data Source</mssqlcrt:datasource-property>
<mssqlcrt:remote-property>Server</mssqlcrt:remote-property>
</mssqlcrt:remote-connection-string-mapping>
<mssqlcrt:remote-connection-string-mapping>
<mssqlcrt:datasource-property>Initial
Catalog</mssqlcrt:datasource-property>
<mssqlcrt:remote-property>Database</mssqlcrt:remote-property>
</mssqlcrt:remote-connection-string-mapping>
<mssqlcrt:remote-connection-string-mapping>
<mssqlcrt:datasource-property>User ID</mssqlcrt:datasource-property>
<mssqlcrt:remote-property>UID</mssqlcrt:remote-property>
</mssqlcrt:remote-connection-string-mapping>
<mssqlcrt:remote-connection-string-mapping>
<mssqlcrt:datasource-property>Password</mssqlcrt:datasource-property>
<mssqlcrt:remote-property>PWD</mssqlcrt:remote-property>
</mssqlcrt:remote-connection-string-mapping>
<mssqlcrt:remote-connection-string-mapping>
<mssqlcrt:datasource-property>Integrated
Security=SSPI</mssqlcrt:datasource-property>
<mssqlcrt:remote-property>Trusted_Connection=yes</mssqlcrt:remote-property>
</mssqlcrt:remote-connection-string-mapping>
</mssqlcrt:remote-connection-string-mappings>
</mssqlcrt:capabilities>

<mssqlcrt:schema-classes>
<mssqlcrt:schema-class>
<mssqlcrt:managed-provider>System.Data.OleDb</mssqlcrt:managed-provider>
<mssqlcrt:type>Microsoft.DataWarehouse.Design.OleD bSchema,
Microsoft.DataWarehouse</mssqlcrt:type>
<mssqlcrt:query-designer>
<mssqlcrt:type>Microsoft.DataWarehouse.Controls.Ol eDbQueryDesigner,
Microsoft.DataWarehouse</mssqlcrt:type>
</mssqlcrt:query-designer>
</mssqlcrt:schema-class>
<mssqlcrt:schema-class>
<mssqlcrt:managed-provider>System.Data.Odbc</mssqlcrt:managed-provider>
<mssqlcrt:type>Microsoft.DataWarehouse.Design.Odbc Schema,
Microsoft.DataWarehouse</mssqlcrt:type>
</mssqlcrt:schema-class>
</mssqlcrt:schema-classes>
<!-- Area of internal parametrizations -->
<!-- overrideOfUseParams:
yes = use always parametric queries
no = never use parametric queries
nosubsel = use as yes, but not on subselects
auto = use the value of in_CanUseParams to determine -->
<xsl:variable name="overrideOfUseParams">auto</xsl:variable>
<!-- shouldProduceDebug:
yes = produce debug information
no = do not produce debug information -->
<xsl:variable name="shouldProduceDebug">yes</xsl:variable>

<!-- Area of global variables initializations -->
<xsl:variable name="UseParams">
<xsl:choose>
<xsl:when test="normalize-space($overrideOfUseParams) = 'yes' or
(normalize-space($overrideOfUseParams) = 'auto' and
normalize-space($in_CanUseParams)='yes')">yes</xsl:when>
<xsl:when test="normalize-space($overrideOfUseParams) =
'nosubsel'">nosubsel</xsl:when>
<xsltherwise>no</xsltherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="ProduceDebug" select="$shouldProduceDebug"/>
<xsl:variable name="IdentifierStartQuotingCharacter"
select="normalize-space($in_IdentStartQuotingCharacter)"/>
<xsl:variable name="IdentifierEndQuotingCharacter"
select="normalize-space($in_IdentEndQuotingCharacter)"/>
<xsl:variable name="StringStartQuotingCharacter"
select="normalize-space($in_StringStartQuotingCharacter)"/>
<xsl:variable name="StringEndQuotingCharacter"
select="normalize-space($in_StringEndQuotingCharacter)"/>

<!-- Generated statement packaging -->
<xsl:template match="/">
<xsl:element name="Statement">

<!-- Generate query -->
<xsl:element name="Text">
<xsl:apply-templates select="./Statement/*[1]"/>
</xsl:element>

<!-- Generate parameters -->
<xsl:if test="count(./Statement/Parameters/Parameter)!=0 and
((normalize-space($UseParams)='yes') or
(normalize-space($UseParams)='nosubsel'))">
<xsl:element name="Parameters">
<xsl:for-each select="./Statement/*[1]//Parameter">
<xsl:element name="Parameter">
<xsl:attribute name="ref">
<xsl:value-of select="./@ref"/>
</xsl:attribute>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:if>

<!-- Generate debug info -->
<xsl:if test="$ProduceDebug='yes'">
<xsl:element name="mssqldbgebugInfo">
<xsl:element name="mssqldbg:GenerateParametricInfo">
<xsl:attribute name="mssqldbg:Value">
<xsl:value-of select="$UseParams"/>
</xsl:attribute>
<xsl:element name="mssqldbg:External">
<xsl:value-of select="$in_CanUseParams"/>
</xsl:element>
<xsl:element name="mssqldbg:Internal">
<xsl:value-of select="$overrideOfUseParams"/>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:if>

</xsl:element>
</xsl:template>

<!-- Union statement -->
<xsl:template match="Union">
<xsl:if test="name(..) != 'Statement' and name(..) != 'Insert'">
(
</xsl:if>
<xsl:call-template name="print-children-list">
<xsl:with-param name="operator" select="' UNION '"/>
</xsl:call-template>
<xsl:if test="name(..) != 'Statement' and name(..) != 'Insert'">
)
</xsl:if>
</xsl:template>

<!-- Union All
-->
<xsl:template match="UnionAll">
<xsl:if test="name(..) != 'Statement' and name(..) != 'Insert'">
(
</xsl:if>
<xsl:call-template name="print-children-list">
<xsl:with-param name="operator" select="' UNION ALL '"/>
</xsl:call-template>
<xsl:if test="name(..) != 'Statement' and name(..) != 'Insert'">
)
</xsl:if>
</xsl:template>

<!-- Top clause -->
<xsl:template match="Top">
TOP <xsl:value-of select="."/><xsl:text> </xsl:text>
</xsl:template>

<!-- Select statement -->
<xsl:template match="Select">
<xsl:choose>
<xsl:when test="count(./ColumnExpressions/IsValidForIndexing) != 0">
SELECT OBJECTPROPERTY( object_id('<xsl:apply-templates
select="./Sources/View"/>'), 'isindexable' )
</xsl:when>
<xsltherwise>
<xsl:if test="name(..) != 'Statement' and name(..) != 'Insert' and
name(..) != 'Union' and name(..) != 'UnionAll'">
(
</xsl:if>
SELECT <xsl:apply-templates select="./Top"/>
<xsl:apply-templates select="./Distinct"/>
<xsl:apply-templates select="./ColumnExpressions"/>
<xsl:if test="count(../Phase) != 0">, COUNT(*) AS
[COUNT_7673aff6-2445-4ef6-a4c9-7bf3d93bd42a] </xsl:if>
<xsl:apply-templates select="./Sources"/>
<xsl:apply-templates select="./Where"/>
<xsl:apply-templates select="./GroupBy"/>
<xsl:apply-templates select="./Having"/>
<xsl:apply-templates select="./OrderBy"/>
<xsl:if test="name(..) != 'Statement' and name(..) != 'Insert' and
name(..) != 'Union' and name(..) != 'UnionAll'">
)
</xsl:if>
</xsltherwise>
</xsl:choose>
</xsl:template>

<!-- Update statement -->
<xsl:template match="Update">
UPDATE <xsl:apply-templates select="./Target"/>
<xsl:apply-templates select="./Where"/>
</xsl:template>

<!-- Insert statement -->
<xsl:template match="Insert">
INSERT INTO <xsl:apply-templates select="./Target"/>
<xsl:apply-templates select="./Select"/>
</xsl:template>

<!-- Delete statement -->
<xsl:template match="Delete">
DELETE FROM <xsl:apply-templates select="./Target"/>
<xsl:apply-templates select="./Where"/>
</xsl:template>

<!-- Drop statement -->
<xsl:template match="Drop">
DROP <xsl:apply-templates select="./*"/>
</xsl:template>

<!-- Create statement -->
<xsl:template match="Create">
CREATE
<xsl:variable name="phase"><xsl:value-of select="./Phase"/></xsl:variable>
<xsl:choose>
<xsl:when test="number($phase)=1">
VIEW <xsl:apply-templates select="./View"/> ( <xsl:apply-templates
select="./*[4]"/>, [COUNT_7673aff6-2445-4ef6-a4c9-7bf3d93bd42a] ) WITH
SCHEMABINDING AS <xsl:apply-templates select="./*[5]"/>
</xsl:when>
<xsl:when test="number($phase)=2">
UNIQUE CLUSTERED INDEX <xsl:apply-templates select="./Index"/> ON
<xsl:apply-templates select="./View"/> ( <xsl:apply-templates
select="./*[4]"/> )
</xsl:when>
<xsltherwise>
<xsl:apply-templates select="./*[1]"/>
<xsl:choose>
<xsl:when test="name(./*[1]) = 'Table'"> ( <xsl:apply-templates
select="./*[2]"/> )</xsl:when>
</xsl:choose>
</xsltherwise>
</xsl:choose>
</xsl:template>

<!-- Remote query (OPENROWSET) -->
<xsl:template match="RemoteQuery">
OPENROWSET
(
<xsl:call-template name="quote-string"><xsl:with-param name="string"
select="./Provider"/></xsl:call-template>,
<xsl:choose>
<xsl:when test="./DataSource">
<xsl:call-template name="quote-string"><xsl:with-param name="string"
select="./DataSource"/></xsl:call-template>;<xsl:call-template
name="quote-string"><xsl:with-param name="string"
select="./UserName"/></xsl:call-template>;<xsl:call-template
name="quote-string"><xsl:with-param name="string"
select="./Password"/></xsl:call-template>,
</xsl:when>
<xsltherwise>
<xsl:call-template name="quote-string"><xsl:with-param name="string"
select="./ConnectionString"/></xsl:call-template>,
</xsltherwise>
</xsl:choose>
<xsl:call-template name="quote-string"><xsl:with-param name="string"
select="./*[last()]"/></xsl:call-template>
)
</xsl:template>

<xsl:template match="Distinct">
DISTINCT
</xsl:template>

<xsl:template match="As">
<xsl:apply-templates select="./*[1]"/> AS <xsl:apply-templates
select="./*[2]"/>
</xsl:template>

<xsl:template match="Sources">
FROM <xsl:call-template name="print-children-list"/>
</xsl:template>

<xsl:template match="ColumnDefinitions">
<xsl:call-template name="print-children-list"/>
</xsl:template>

<xsl:template match="GroupBy">
GROUP BY <xsl:call-template name="print-children-list"/>
</xsl:template>

<xsl:template match="OrderBy">
ORDER BY <xsl:call-template name="print-children-list"/>
</xsl:template>

<xsl:template match="Where">
WHERE <xsl:apply-templates select="./*"/>
</xsl:template>

<xsl:template match="Having">
HAVING <xsl:apply-templates select="./*"/>
</xsl:template>

<xsl:template match="ColumnExpressions">
<xsl:call-template name="print-children-list"/>
</xsl:template>

<xsl:template match="ColumnUpdates">
<xsl:call-template name="print-children-list"/>
</xsl:template>

<xsl:template match="Assign">
<xsl:apply-templates select="./*[1]"/>=<xsl:apply-templates
select="./*[2]"/>
</xsl:template>

<xsl:template match="Insert/Target">
<xsl:apply-templates select="./Table"/>
(
<xsl:call-template name="print-list">
<xsl:with-param name="value-node" select="./ColumnUpdates/*/*[1]"/>
</xsl:call-template>
)
<xsl:if test="./*[2]/Assign">
VALUES
(
<xsl:call-template name="print-list">
<xsl:with-param name="value-node" select="./ColumnUpdates/*/*[2]"/>
</xsl:call-template>
)
</xsl:if>
</xsl:template>

<xsl:template match="Update/Target">
<xsl:apply-templates select="./Table"/>
SET <xsl:apply-templates select="./ColumnUpdates"/>
</xsl:template>

<xsl:template match="Delete/Target">
<xsl:apply-templates select="./Table"/>
</xsl:template>

<xsl:template match="Insert/Target/ColumnUpdates/Assign/SQLColumn[1]">
<!-- The table name is not printed for LHS of assignments in insert -->
<xsl:apply-templates select="./Column"/>
</xsl:template>

<xsl:template match="Create/ColumnDefinitions/SQLColumn">
<xsl:apply-templates select="./Column"/>
<xsl:if test="count(../../Phase) = 0">
<xsl:apply-templates select="./Type"/>
<xsl:apply-templates select="./Usage"/>
</xsl:if>
</xsl:template>

<xsl:template match="SQLColumn">
<xsl:variable name="table">
<xsl:if test="name(..)!='Count' or name(./Column/*[1]) !=
'Asterisk'"><xsl:apply-templates select="./Table"/></xsl:if>
</xsl:variable>
<xsl:variable name="column">
<xsl:apply-templates select="./Column"/>
</xsl:variable>
<xsl:choose>
<xsl:when test="$table = ''">
<xsl:value-of select="$column"/>
</xsl:when>
<xsltherwise>
<xsl:value-of select="concat($table,'.', $column)"/>
</xsltherwise>
</xsl:choose>
</xsl:template>

<xsl:template match="Create/Database|Drop/Database">
DATABASE <xsl:apply-templates select="./Name"/>
</xsl:template>

<xsl:template match="Table">
<xsl:call-template name="build-quoted-schema-object"/>
</xsl:template>

<xsl:template match="Create/Table|Drop/Table">
TABLE <xsl:call-template name="build-quoted-schema-object"/>
</xsl:template>

<xsl:template match="View">
<xsl:call-template name="build-quoted-schema-object"/>
</xsl:template>

<xsl:template match="Drop/View">
VIEW <xsl:call-template name="build-quoted-schema-object"/>
</xsl:template>

<xsl:template match="Index">
<xsl:apply-templates select="./Name"/>
</xsl:template>

<xsl:template match="Drop/Index">
INDEX <xsl:apply-templates select="./Name"/>
</xsl:template>

<xsl:template match="Column">
<xsl:apply-templates select="./Asterisk"/>
<xsl:apply-templates select="./Name"/>
</xsl:template>

<xsl:template
match="Table/Name|View/Name|Index/Name|Column/Name|Database/Name|Schema">
<xsl:call-template name="quote-identifier"/>
</xsl:template>

<xsl:template match="Usage">
<xsl:variable name="usage"><xsl:value-of select="."/></xsl:variable>
<xsl:choose>
<xsl:when test="$usage = 'Key'"> primary key </xsl:when>
</xsl:choose>
</xsl:template>

<xsl:template match="OpaqueExpression">
<xsl:if test="name(..) = 'As' and name(../..) = 'Sources'">
(
</xsl:if>
<xsl:value-of select="."/>
<xsl:if test="name(..) = 'As' and name(../..) = 'Sources'">
)
</xsl:if>
</xsl:template>

<xsl:template match="OrderExpression">
<xsl:apply-templates select="./*[1]"/>
<xsl:apply-templates select="./Asc"/>
<xsl:apply-templates select="./Desc"/>
</xsl:template>

<xsl:template match="Asc">
ASC
</xsl:template>

<xsl:template match="Desc">
DESC
</xsl:template>


<!-- Print values: ? for parametric queries and convert expressions
for non-parametric queries -->
<xsl:template match="Parameter">
<xsl:choose>
<xsl:when test="$UseParams = 'yes' or $UseParams = 'nosubsel'">
<xsl:choose>
<xsl:when test="./@ParamName">
@<xsl:value-of select="./@ParamName"/>
</xsl:when>
<xsltherwise>
?
</xsltherwise>
</xsl:choose>
</xsl:when>
<xsltherwise>
<xsl:call-template name="print-non-parametric-parameter-ref">
<xsl:with-param name="parameter-reference" select="."/>
</xsl:call-template>
</xsltherwise>
</xsl:choose>
</xsl:template>

<!-- DatePart -->
<xsl:template match="DatePart">
DATEPART( <xsl:apply-templates select="./*[1]"/> , <xsl:apply-templates
select="./*[2]"/> )
</xsl:template>

<!-- DatePartSpec -->
<xsl:template match="DatePartSpec">
<xsl:variable name="dps-val"><xsl:value-of
select="normalize-space(./text())"/></xsl:variable>
<xsl:choose>
<xsl:when test="$dps-val = 'Year'"> year </xsl:when>
<xsl:when test="$dps-val = 'Quarter'"> quarter </xsl:when>
<xsl:when test="$dps-val = 'Month'"> month </xsl:when>
<xsl:when test="$dps-val = 'DayOfYear'"> dayofyear </xsl:when>
<xsl:when test="$dps-val = 'Day'"> day </xsl:when>
<xsl:when test="$dps-val = 'Week'"> week </xsl:when>
<xsl:when test="$dps-val = 'DayOfWeek'"> weekday </xsl:when>
<xsl:when test="$dps-val = 'Hour'"> hour </xsl:when>
<xsl:when test="$dps-val = 'Minute'"> minute </xsl:when>
<xsl:when test="$dps-val = 'Second'"> second </xsl:when>
<xsl:when test="$dps-val = 'Millisecond'"> millisecond </xsl:when>
</xsl:choose>
</xsl:template>

<!-- Asterisk -->
<xsl:template match="Asterisk">*</xsl:template>

<!-- Count/Min/Max/Sum -->
<xsl:template match="Min|Max|Sum">
<xsl:variable name="function">
<xsl:choose>
<xsl:when test="name()='Min'"> MIN </xsl:when>
<xsl:when test="name()='Max'"> MAX </xsl:when>
<xsl:when test="name()='Sum'"> SUM </xsl:when>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="$function"/>( <xsl:apply-templates
select="./*[1]"/> )
</xsl:template>

<xsl:template match="Count">
COUNT ( <xsl:apply-templates select="./*[1]"/> <xsl:apply-templates
select="./*[2]"/> )
</xsl:template>

<!-- Binary expressions -->
<!--
Equal/NotEqual/Greater/GreaterOrEqual/Less/LessOrEqual/In/And/Or/Plus/Minus/Divide/Multiply
expressions -->
<xsl:template
match="Equal|NotEqual|Greater|GreaterOrEqual|Less| LessOrEqual|In|And|Or|Plus|Minus|Divide|Multiply">
<xsl:variable name="operator">
<xsl:choose>
<xsl:when test="name()='Equal'"> = </xsl:when>
<xsl:when test="name()='NotEqual'"> &lt;&gt; </xsl:when>
<xsl:when test="name()='Greater'"> &gt; </xsl:when>
<xsl:when test="name()='GreaterOrEqual'"> &gt;= </xsl:when>
<xsl:when test="name()='Less'"> &lt; </xsl:when>
<xsl:when test="name()='LessOrEqual'"> &lt;= </xsl:when>
<xsl:when test="name()='In'"> IN </xsl:when>
<xsl:when test="name()='And'"> AND </xsl:when>
<xsl:when test="name()='Or'"> OR </xsl:when>
<xsl:when test="name()='Plus'"> + </xsl:when>
<xsl:when test="name()='Minus'"> - </xsl:when>
<xsl:when test="name()='Divide'"> / </xsl:when>
<xsl:when test="name()='Multiply'"> * </xsl:when>
</xsl:choose>
</xsl:variable>
(
<xsl:call-template name="print-children-list">
<xsl:with-param name="operator" select="$operator"/>
</xsl:call-template>
)
</xsl:template>

<!-- Postfix unary expressions -->
<!-- IsNull
expressions -->
<xsl:template match="IsNull">
<xsl:variable name="operator">
<xsl:choose>
<xsl:when test="name()='IsNull'"> IS NULL </xsl:when>
</xsl:choose>
</xsl:variable>
(
<xsl:apply-templates select="./*[1]"/>
<xsl:value-of select="$operator"/>
)
</xsl:template>

<!-- Types -->
<xsl:template match="Type">
<xsl:variable name="type-val"><xsl:value-of
select="normalize-space(./text())"/></xsl:variable>
<xsl:choose>
<xsl:when test="$type-val = 'DBTYPE_BSTR'"> nvarchar </xsl:when>
<xsl:when test="$type-val = 'DBTYPE_WSTR'"> nvarchar </xsl:when>
<xsl:when test="$type-val = 'DBTYPE_STR'"> varchar </xsl:when>
<xsl:when test="$type-val = 'DBTYPE_BOOL'"> bit </xsl:when>
<xsl:when test="$type-val = 'DBTYPE_I1'"> tinyint </xsl:when>
<xsl:when test="$type-val = 'DBTYPE_I2'"> smallint </xsl:when>
<xsl:when test="$type-val = 'DBTYPE_I4'"> int </xsl:when>
<xsl:when test="$type-val = 'DBTYPE_I8'"> bigint </xsl:when>
<xsl:when test="$type-val = 'DBTYPE_UI1'"> tinyint </xsl:when>
<xsl:when test="$type-val = 'DBTYPE_UI2'"> smallint </xsl:when>
<xsl:when test="$type-val = 'DBTYPE_UI4'"> int </xsl:when>
<xsl:when test="$type-val = 'DBTYPE_UI8'"> bigint </xsl:when>
<xsl:when test="$type-val = 'DBTYPE_R4'"> real </xsl:when>
<xsl:when test="$type-val = 'DBTYPE_R8'"> float </xsl:when>
<xsl:when test="$type-val = 'DBTYPE_DATE'"> datetime </xsl:when>
<xsl:when test="$type-val = 'DBTYPE_DBTIMESTAMP'"> datetime
</xsl:when>
<xsl:when test="$type-val = 'DBTYPE_CY'"> money </xsl:when>
<xsl:when test="$type-val = 'DBTYPE_VARIANT'"> sql_variant </xsl:when>
<xsl:when test="$type-val = 'DBTYPE_GUID'"> uniqueidentifer </xsl:when>
<xsl:when test="$type-val = 'DBTYPE_ByteArray'"> varbinary </xsl:when>
<xsl:when test="$type-val = 'DBTYPE_DECIMAL'"> decimal </xsl:when>
</xsl:choose>
<xsl:apply-templates select="./Size"/>
<xsl:apply-templates select="./Precision"/>
<xsl:apply-templates select="./Scale"/>
</xsl:template>

<!-- Size (optional) -->
<xsl:template match="Size">
( <xsl:value-of select="./text()"/> )
</xsl:template>

<!-- Precision
-->
<xsl:template match="Precision">
( <xsl:value-of select="./text()"/>
</xsl:template>

<!-- Scale (optional) -->
<xsl:template match="Scale">
, <xsl:value-of select="./text()"/> )
</xsl:template>
<!-- Cast -->
<xsl:template match="Cast">
CAST(<xsl:apply-templates select="./*[1]"/> AS <xsl:apply-templates
select="./*[2]"/>)
</xsl:template>

<!-- By default don't do anything -->
<xsl:template match="*">
</xsl:template>

<!-- Print a schema
-->
<xsl:template name="build-quoted-schema-object">
<xslaram name="schema-object-node" select="."/>

<xsl:variable name="schema">
<xsl:apply-templates select="$schema-object-node/Schema"/>
</xsl:variable>
<xsl:variable name="table">
<xsl:apply-templates select="$schema-object-node/Name"/>
</xsl:variable>
<xsl:choose>
<xsl:when test="$schema = ''">
<xsl:value-of select="$table"/>
</xsl:when>
<xsltherwise>
<xsl:value-of select="concat($schema,'.', $table)"/>
</xsltherwise>
</xsl:choose>
</xsl:template>

<!-- Convert an identifier to the OLEDB quotation form -->
<xsl:template name="quote-identifier">
<xslaram name="identifier" select="."/>

<xsl:value-of select="$IdentifierStartQuotingCharacter"/>
<xsl:call-template name="normalize-entity-aux">
<xsl:with-param name="entity" select="$identifier"/>
<xsl:with-param name="end-quoting-char"
select="$IdentifierEndQuotingCharacter"/>
</xsl:call-template>
<xsl:value-of select="$IdentifierEndQuotingCharacter"/>
</xsl:template>

<!-- Convert a string to the string quotation form -->
<xsl:template name="quote-string">
<xslaram name="string" select="."/>

<xsl:value-of select="$StringStartQuotingCharacter"/>
<xsl:call-template name="normalize-entity-aux">
<xsl:with-param name="entity" select="$string"/>
<xsl:with-param name="end-quoting-char"
select="$StringEndQuotingCharacter"/>
</xsl:call-template>
<xsl:value-of select="$StringEndQuotingCharacter"/>
</xsl:template>

<!-- Convert an entity to the quotation form (recursive, aux) by
duplicating the end quoting
-->
<xsl:template name="normalize-entity-aux">
<xslaram name="entity"/>
<xslaram name="end-quoting-char"/>

<xsl:choose>
<xsl:when test="$end-quoting-char != '' and contains($entity,
$end-quoting-char)">
<!-- <xsl:when test="contains($entity, $end-quoting-char)">-->
<xsl:value-of select="substring-before($entity, $end-quoting-char)"/>
<xsl:value-of select="$end-quoting-char"/>
<xsl:value-of select="$end-quoting-char"/>
<xsl:call-template name="normalize-entity-aux">
<xsl:with-param name="entity" select="substring-after($entity,
$end-quoting-char)"/>
<xsl:with-param name="end-quoting-char" select="$end-quoting-char"/>
</xsl:call-template>
</xsl:when>
<xsltherwise>
<xsl:value-of select="$entity"/>
</xsltherwise>
</xsl:choose>
</xsl:template>

<!-- Print the children list -->
<xsl:template name="print-children-list">
<xslaram name="operator" select="','"/>

<xsl:call-template name="print-list">
<xsl:with-param name="value-node" select="./*"/>
<xsl:with-param name="operator" select="$operator"/>
</xsl:call-template>
</xsl:template>

<!-- Print a list -->
<xsl:template name="print-list">
<xslaram name="operator" select="','"/>
<xslaram name="value-node" select="."/>

<xsl:for-each select="$value-node">
<xsl:apply-templates select="."/>
<xsl:if test="position()!=last()">
<xsl:value-of select="$operator"/>
</xsl:if>
</xsl:for-each>
</xsl:template>

<!-- Get the value of a parameter ref for the query -->
<xsl:template name="print-non-parametric-parameter-ref">
<xslaram name="parameter-reference"/>

<xsl:variable name="reference"><xsl:value-of
select="$parameter-reference/@ref"/></xsl:variable>
<xsl:call-template name="print-non-parametric-parameter">
<xsl:with-param name="parameter"
select="/Statement/Parameters/Parameter[@id=$reference]"/>
</xsl:call-template>
</xsl:template>

<!-- Get the value of a parameter ref for the query -->
<xsl:template name="print-non-parametric-parameter">
<xslaram name="parameter"/>

<xsl:variable name="db-type"><xsl:value-of
select="$parameter/@DBTYPE"/></xsl:variable>
<xsl:variable name="value"><xsl:value-of
select="$parameter/text()"/></xsl:variable>
<xsl:choose>
<xsl:when test="$db-type = 'DBTYPE_BSTR'"><xsl:call-template
name="quote-string"><xsl:with-param name="string"
select="$value"/></xsl:call-template></xsl:when>
<xsl:when test="$db-type = 'DBTYPE_WSTR'"><xsl:call-template
name="quote-string"><xsl:with-param name="string"
select="$value"/></xsl:call-template></xsl:when>
<xsl:when test="$db-type = 'DBTYPE_STR'"><xsl:call-template
name="quote-string"><xsl:with-param name="string"
select="$value"/></xsl:call-template></xsl:when>
<xsl:when test="$db-type = 'DBTYPE_BOOL'">CAST( <xsl:call-template
name="quote-string"><xsl:with-param name="string"
select="$value"/></xsl:call-template> AS bit)</xsl:when>
<xsl:when test="$db-type = 'DBTYPE_I1'"><xsl:value-of
select="$value"/></xsl:when>
<xsl:when test="$db-type = 'DBTYPE_I2'"><xsl:value-of
select="$value"/></xsl:when>
<xsl:when test="$db-type = 'DBTYPE_I4'"><xsl:value-of
select="$value"/></xsl:when>
<xsl:when test="$db-type = 'DBTYPE_I8'"><xsl:value-of
select="$value"/></xsl:when>
<xsl:when test="$db-type = 'DBTYPE_UI1'"><xsl:value-of
select="$value"/></xsl:when>
<xsl:when test="$db-type = 'DBTYPE_UI2'"><xsl:value-of
select="$value"/></xsl:when>
<xsl:when test="$db-type = 'DBTYPE_UI4'"><xsl:value-of
select="$value"/></xsl:when>
<xsl:when test="$db-type = 'DBTYPE_UI8'"><xsl:value-of
select="$value"/></xsl:when>
<xsl:when test="$db-type = 'DBTYPE_R4'"><xsl:value-of
select="$value"/></xsl:when>
<xsl:when test="$db-type = 'DBTYPE_R8'"><xsl:value-of
select="$value"/></xsl:when>
<xsl:when test="$db-type = 'DBTYPE_DATE'">CAST( <xsl:call-template
name="quote-string"><xsl:with-param name="string"
select="$value"/></xsl:call-template> AS datetime)</xsl:when>
<xsl:when test="$db-type = 'DBTYPE_DBTIMESTAMP'">CAST( <xsl:call-template
name="quote-string"><xsl:with-param name="string"
select="$value"/></xsl:call-template> AS datetime)</xsl:when>
<xsl:when test="$db-type = 'DBTYPE_CY'">CAST( <xsl:call-template
name="quote-string"><xsl:with-param name="string"
select="$value"/></xsl:call-template> AS money)</xsl:when>
<xsl:when test="$db-type = 'DBTYPE_VARIANT'"><xsl:call-template
name="quote-string"><xsl:with-param name="string"
select="$value"/></xsl:call-template></xsl:when>
<xsl:when test="$db-type = 'DBTYPE_GUID'"><xsl:call-template
name="quote-string"><xsl:with-param name="string"
select="$value"/></xsl:call-template></xsl:when>
<xsl:when test="$db-type = 'DBTYPE_ByteArray'"><xsl:call-template
name="quote-string"><xsl:with-param name="string"
select="$value"/></xsl:call-template></xsl:when>
<xsl:when test="$db-type = 'DBTYPE_DECIMAL'"><xsl:value-of
select="$value"/></xsl:when>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>




--
--
This posting is provided "AS IS" with no warranties, and confers no rights
Please do not send email directly to this alias. This alias is for newsgroup
purposes only.


"Steve G" <SteveG (AT) discussions (DOT) microsoft.com> wrote

Quote:
Akshai,

Thanks for your reply. We'd like to try this Sybase cartridge out, but
cannot find it. I can't see any attached file. How can I access it ?





"Akshai Mirchandani [MS]" wrote:

Sybase is not a supported database for AS 2005. However, another Sybase
customer built a cartridge and I've attached it here -- it may or may not
work for you and will not be supported.

You can put the attached .xsl file in the <install folder>\cartridges
folder
and re-start the server.

Thanks,
Akshai
--
This posting is provided "AS IS" with no warranties, and confers no
rights
Please do not send email directly to this alias. This alias is for
newsgroup
purposes only.

"Steve G" <Steve G (AT) discussions (DOT) microsoft.com> wrote in message
news4594E9A-09A7-4BA7-855F-2E5072AC1D9D (AT) microsoft (DOT) com...
I use a Sybase (12.5.2) OLEDB datasource for feeding dimension data to
our
SQL Server 2005 Analysis Services Cubes. If I try to process any
dimension
I
see that the SQL generated by SSAS is something like:


SELECT [dbo_o_v_ccy_pair].[ccy_pair_id] AS
[dbo_o_v_ccy_pairccy_pair_id0_0],[dbo_o_v_ccy_pair].[ccy_pair_name] AS
[dbo_o_v_ccy_pairccy_pair_name0_1],[dbo_o_v_ccy_pair].[is_offshore_ccy]
AS
[dbo_o_v_ccy_pairis_offshore_ccy0_2],[dbo_o_v_ccy_pair].[start_name] AS
[dbo_o_v_ccy_pairstart_name0_3],[dbo_o_v_ccy_pair].[region_id] AS
[dbo_o_v_ccy_pairregion_id0_4],[dbo_o_v_ccy_pair].[is_emerging] AS
[dbo_o_v_ccy_pairis_emerging0_5],[dbo_o_v_ccy_pair].[bus_region] AS
[dbo_o_v_ccy_pairbus_region0_6],[dbo_o_v_ccy_pair].[is_offshore_ccy_desc]
AS
[dbo_o_v_ccy_pairis_offshore_ccy_desc0_7]
FROM [dbo].[o_v_ccy_pair] AS [dbo_o_v_ccy_pair]


.. the point is that SSAS is inserting its own, rather verbose aliases,
as
in .. "AS [dbo_o_v_ccy_pairccy_pair_id0_0]" .. which often results in
an
alias name longer than 30 characters, therefore exceeding the longest
that
Sybase SQL can handle and causing the dimension processing to fail. Is
there
any way to prevent these long aliases being created ? If so, how ? If
not,
does that mean than SSAS is not compatible with Sybase ?







Reply With Quote
  #4  
Old   
scott_gunn@email.com
 
Posts: n/a

Default Re: AS 2005 / Can't build dimensions when RDBMS is Sybase - 11-30-2005 , 09:06 AM



I have an xsl file that works for Sybase IQ. I'm not sure if it would
work with Sybase ASE or not. I know there are some subtle differences
in valid SQL between the two.


Reply With Quote
  #5  
Old   
Steve G
 
Posts: n/a

Default Re: AS 2005 / Can't build dimensions when RDBMS is Sybase - 12-02-2005 , 10:41 AM



Thanks for the cartridge.

"Akshai Mirchandani [MS]" wrote:

Quote:
I've pasted it inline below.

Thanks,
Akshai

?xml version="1.0"?
xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" version="1.0"
xmlns:mssqlcrt="urn:sql-microsoft-com:sqlcrt"
xmlns:mssqldbg="urn:sql-microsoft-com:sqldbg"
xslutput method="xml" indent="yes"/

!-- ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!!
This is a generated file. Do not modify this file directly!
--

!-- Sybase pluggable cartridge --

!-- Area of STANDARD parametrizations: these are externally passed --
xslaram name="in_CanUseParams">yes</xslaram
xslaram name="in_IdentStartQuotingCharacter"></xslaram
xslaram name="in_IdentEndQuotingCharacter"></xslaram
xslaram name="in_StringStartQuotingCharacter">N'</xslaram
xslaram name="in_StringEndQuotingCharacter">'</xslaram

!-- Area of CORE parametrizations: These are externally checked --
mssqlcrtrovider type="prefix">Adaptive Server
Anywhere</mssqlcrtrovider

mssqlcrt:capabilities
mssqlcrt:supports-datepart-year/
mssqlcrt:supports-datepart-quarter/
mssqlcrt:supports-datepart-month/
mssqlcrt:supports-datepart-dayofyear/
mssqlcrt:supports-datepart-day/
mssqlcrt:supports-datepart-week/
mssqlcrt:supports-datepart-dayofweek/
mssqlcrt:supports-datepart-hour/
mssqlcrt:supports-datepart-minute/
mssqlcrt:supports-datepart-second/
mssqlcrt:supports-datepart-millisecond/
mssqlcrt:supports-multiple-distinct-count/
mssqlcrt:supports-update/
mssqlcrt:supports-insert/
mssqlcrt:supports-subselect/
mssqlcrt:supports-table-alias/
mssqlcrt:supports-column-alias/
mssqlcrt:supports-cast/
mssqlcrt:supports-remote-query/
mssqlcrt:supports-top-clause/
mssqlcrt:supports-union/
mssqlcrt:supports-union-all/
mssqlcrt:supports-fast-writeback>TABLOCK,FIRE_TRIGGERS</mssqlcrt:supports-fast-writeback
!--
This cartridge is used as the default cartridge for unknown
providers
So even though SQL supports larger aliases (at least 128), we'll
use a smaller
alias for the other providers
--
mssqlcrt:limit-table-identifier-length>32</mssqlcrt:limit-table-identifier-length
mssqlcrt:limit-column-identifier-length>32</mssqlcrt:limit-column-identifier-length

!-- Map from MSDAInitialize connection string to SQLOLEDB connection
string --
mssqlcrt:remote-connection-string-mappings
mssqlcrt:remote-connection-string-mapping
mssqlcrt:datasource-property>Provider</mssqlcrt:datasource-property
mssqlcrt:remote-property></mssqlcrt:remote-property
/mssqlcrt:remote-connection-string-mapping
mssqlcrt:remote-connection-string-mapping
mssqlcrt:datasource-property>Data Source</mssqlcrt:datasource-property
mssqlcrt:remote-property>Server</mssqlcrt:remote-property
/mssqlcrt:remote-connection-string-mapping
mssqlcrt:remote-connection-string-mapping
mssqlcrt:datasource-property>Initial
Catalog</mssqlcrt:datasource-property
mssqlcrt:remote-property>Database</mssqlcrt:remote-property
/mssqlcrt:remote-connection-string-mapping
mssqlcrt:remote-connection-string-mapping
mssqlcrt:datasource-property>User ID</mssqlcrt:datasource-property
mssqlcrt:remote-property>UID</mssqlcrt:remote-property
/mssqlcrt:remote-connection-string-mapping
mssqlcrt:remote-connection-string-mapping
mssqlcrt:datasource-property>Password</mssqlcrt:datasource-property
mssqlcrt:remote-property>PWD</mssqlcrt:remote-property
/mssqlcrt:remote-connection-string-mapping
mssqlcrt:remote-connection-string-mapping
mssqlcrt:datasource-property>Integrated
Security=SSPI</mssqlcrt:datasource-property
mssqlcrt:remote-property>Trusted_Connection=yes</mssqlcrt:remote-property
/mssqlcrt:remote-connection-string-mapping
/mssqlcrt:remote-connection-string-mappings
/mssqlcrt:capabilities

mssqlcrt:schema-classes
mssqlcrt:schema-class
mssqlcrt:managed-provider>System.Data.OleDb</mssqlcrt:managed-provider
mssqlcrt:type>Microsoft.DataWarehouse.Design.OleDb Schema,
Microsoft.DataWarehouse</mssqlcrt:type
mssqlcrt:query-designer
mssqlcrt:type>Microsoft.DataWarehouse.Controls.Ole DbQueryDesigner,
Microsoft.DataWarehouse</mssqlcrt:type
/mssqlcrt:query-designer
/mssqlcrt:schema-class
mssqlcrt:schema-class
mssqlcrt:managed-provider>System.Data.Odbc</mssqlcrt:managed-provider
mssqlcrt:type>Microsoft.DataWarehouse.Design.OdbcS chema,
Microsoft.DataWarehouse</mssqlcrt:type
/mssqlcrt:schema-class
/mssqlcrt:schema-classes
!-- Area of internal parametrizations --
!-- overrideOfUseParams:
yes = use always parametric queries
no = never use parametric queries
nosubsel = use as yes, but not on subselects
auto = use the value of in_CanUseParams to determine --
xsl:variable name="overrideOfUseParams">auto</xsl:variable
!-- shouldProduceDebug:
yes = produce debug information
no = do not produce debug information --
xsl:variable name="shouldProduceDebug">yes</xsl:variable

!-- Area of global variables initializations --
xsl:variable name="UseParams"
xsl:choose
xsl:when test="normalize-space($overrideOfUseParams) = 'yes' or
(normalize-space($overrideOfUseParams) = 'auto' and
normalize-space($in_CanUseParams)='yes')">yes</xsl:when
xsl:when test="normalize-space($overrideOfUseParams) =
'nosubsel'">nosubsel</xsl:when
xsltherwise>no</xsltherwise
/xsl:choose
/xsl:variable
xsl:variable name="ProduceDebug" select="$shouldProduceDebug"/
xsl:variable name="IdentifierStartQuotingCharacter"
select="normalize-space($in_IdentStartQuotingCharacter)"/
xsl:variable name="IdentifierEndQuotingCharacter"
select="normalize-space($in_IdentEndQuotingCharacter)"/
xsl:variable name="StringStartQuotingCharacter"
select="normalize-space($in_StringStartQuotingCharacter)"/
xsl:variable name="StringEndQuotingCharacter"
select="normalize-space($in_StringEndQuotingCharacter)"/

!-- Generated statement packaging --
xsl:template match="/"
xsl:element name="Statement"

!-- Generate query --
xsl:element name="Text"
xsl:apply-templates select="./Statement/*[1]"/
/xsl:element

!-- Generate parameters --
xsl:if test="count(./Statement/Parameters/Parameter)!=0 and
((normalize-space($UseParams)='yes') or
(normalize-space($UseParams)='nosubsel'))"
xsl:element name="Parameters"
xsl:for-each select="./Statement/*[1]//Parameter"
xsl:element name="Parameter"
xsl:attribute name="ref"
xsl:value-of select="./@ref"/
/xsl:attribute
/xsl:element
/xsl:for-each
/xsl:element
/xsl:if

!-- Generate debug info --
xsl:if test="$ProduceDebug='yes'"
xsl:element name="mssqldbgebugInfo"
xsl:element name="mssqldbg:GenerateParametricInfo"
xsl:attribute name="mssqldbg:Value"
xsl:value-of select="$UseParams"/
/xsl:attribute
xsl:element name="mssqldbg:External"
xsl:value-of select="$in_CanUseParams"/
/xsl:element
xsl:element name="mssqldbg:Internal"
xsl:value-of select="$overrideOfUseParams"/
/xsl:element
/xsl:element
/xsl:element
/xsl:if

/xsl:element
/xsl:template

!-- Union statement --
xsl:template match="Union"
xsl:if test="name(..) != 'Statement' and name(..) != 'Insert'"
(
/xsl:if
xsl:call-template name="print-children-list"
xsl:with-param name="operator" select="' UNION '"/
/xsl:call-template
xsl:if test="name(..) != 'Statement' and name(..) != 'Insert'"
)
/xsl:if
/xsl:template

!-- Union All
--
xsl:template match="UnionAll"
xsl:if test="name(..) != 'Statement' and name(..) != 'Insert'"
(
/xsl:if
xsl:call-template name="print-children-list"
xsl:with-param name="operator" select="' UNION ALL '"/
/xsl:call-template
xsl:if test="name(..) != 'Statement' and name(..) != 'Insert'"
)
/xsl:if
/xsl:template

!-- Top clause --
xsl:template match="Top"
TOP <xsl:value-of select="."/><xsl:text> </xsl:text
/xsl:template

!-- Select statement --
xsl:template match="Select"
xsl:choose
xsl:when test="count(./ColumnExpressions/IsValidForIndexing) != 0"
SELECT OBJECTPROPERTY( object_id('<xsl:apply-templates
select="./Sources/View"/>'), 'isindexable' )
/xsl:when
xsltherwise
xsl:if test="name(..) != 'Statement' and name(..) != 'Insert' and
name(..) != 'Union' and name(..) != 'UnionAll'"
(
/xsl:if
SELECT <xsl:apply-templates select="./Top"/
xsl:apply-templates select="./Distinct"/
xsl:apply-templates select="./ColumnExpressions"/
xsl:if test="count(../Phase) != 0">, COUNT(*) AS
[COUNT_7673aff6-2445-4ef6-a4c9-7bf3d93bd42a] </xsl:if
xsl:apply-templates select="./Sources"/
xsl:apply-templates select="./Where"/
xsl:apply-templates select="./GroupBy"/
xsl:apply-templates select="./Having"/
xsl:apply-templates select="./OrderBy"/
xsl:if test="name(..) != 'Statement' and name(..) != 'Insert' and
name(..) != 'Union' and name(..) != 'UnionAll'"
)
/xsl:if
/xsltherwise
/xsl:choose
/xsl:template

!-- Update statement --
xsl:template match="Update"
UPDATE <xsl:apply-templates select="./Target"/
xsl:apply-templates select="./Where"/
/xsl:template

!-- Insert statement --
xsl:template match="Insert"
INSERT INTO <xsl:apply-templates select="./Target"/
xsl:apply-templates select="./Select"/
/xsl:template

!-- Delete statement --
xsl:template match="Delete"
DELETE FROM <xsl:apply-templates select="./Target"/
xsl:apply-templates select="./Where"/
/xsl:template

!-- Drop statement --
xsl:template match="Drop"
DROP <xsl:apply-templates select="./*"/
/xsl:template

!-- Create statement --
xsl:template match="Create"
CREATE
xsl:variable name="phase"><xsl:value-of select="./Phase"/></xsl:variable
xsl:choose
xsl:when test="number($phase)=1"
VIEW <xsl:apply-templates select="./View"/> ( <xsl:apply-templates
select="./*[4]"/>, [COUNT_7673aff6-2445-4ef6-a4c9-7bf3d93bd42a] ) WITH
SCHEMABINDING AS <xsl:apply-templates select="./*[5]"/
/xsl:when
xsl:when test="number($phase)=2"
UNIQUE CLUSTERED INDEX <xsl:apply-templates select="./Index"/> ON
xsl:apply-templates select="./View"/> ( <xsl:apply-templates
select="./*[4]"/> )
/xsl:when
xsltherwise
xsl:apply-templates select="./*[1]"/
xsl:choose
xsl:when test="name(./*[1]) = 'Table'"> ( <xsl:apply-templates
select="./*[2]"/> )</xsl:when
/xsl:choose
/xsltherwise
/xsl:choose
/xsl:template

!-- Remote query (OPENROWSET) --
xsl:template match="RemoteQuery"

Reply With Quote
  #6  
Old   
 
Posts: n/a

Default Re: AS 2005 / Can't build dimensions when RDBMS is Sybase - 12-27-2005 , 07:56 PM



hi,
Is Informix not supported for AS2005 ?
I create a informix oledb(2.90TC3) datasource and test connection
successfully, but failed to create a infromix data source view.(More details
errors @ subject: AS2005 data source limitation)
Whould you point me how I could solve this problem?
What is a cartridge and How can I make it?
Thanks.

"Akshai Mirchandani [MS]" <akshaim (AT) online (DOT) microsoft.com> 撰寫於郵件新聞:%23bkCKlJ8FHA.2716 (AT) TK2MSFTNGP11 (DOT) phx.gbl...
Sybase is not a supported database for AS 2005. However, another Sybase
customer built a cartridge and I've attached it here -- it may or may not
work for you and will not be supported.

You can put the attached .xsl file in the <install folder>\cartridges folder
and re-start the server.

Thanks,
Akshai
--
This posting is provided "AS IS" with no warranties, and confers no rights
Please do not send email directly to this alias. This alias is for newsgroup
purposes only.

"Steve G" <Steve G (AT) discussions (DOT) microsoft.com> wrote

Quote:
I use a Sybase (12.5.2) OLEDB datasource for feeding dimension data to our
SQL Server 2005 Analysis Services Cubes. If I try to process any dimension
I
see that the SQL generated by SSAS is something like:


SELECT [dbo_o_v_ccy_pair].[ccy_pair_id] AS
[dbo_o_v_ccy_pairccy_pair_id0_0],[dbo_o_v_ccy_pair].[ccy_pair_name] AS
[dbo_o_v_ccy_pairccy_pair_name0_1],[dbo_o_v_ccy_pair].[is_offshore_ccy] AS
[dbo_o_v_ccy_pairis_offshore_ccy0_2],[dbo_o_v_ccy_pair].[start_name] AS
[dbo_o_v_ccy_pairstart_name0_3],[dbo_o_v_ccy_pair].[region_id] AS
[dbo_o_v_ccy_pairregion_id0_4],[dbo_o_v_ccy_pair].[is_emerging] AS
[dbo_o_v_ccy_pairis_emerging0_5],[dbo_o_v_ccy_pair].[bus_region] AS
[dbo_o_v_ccy_pairbus_region0_6],[dbo_o_v_ccy_pair].[is_offshore_ccy_desc]
AS
[dbo_o_v_ccy_pairis_offshore_ccy_desc0_7]
FROM [dbo].[o_v_ccy_pair] AS [dbo_o_v_ccy_pair]


.. the point is that SSAS is inserting its own, rather verbose aliases, as
in .. "AS [dbo_o_v_ccy_pairccy_pair_id0_0]" .. which often results in an
alias name longer than 30 characters, therefore exceeding the longest that
Sybase SQL can handle and causing the dimension processing to fail. Is
there
any way to prevent these long aliases being created ? If so, how ? If not,
does that mean than SSAS is not compatible with Sybase ?






Reply With Quote
  #7  
Old   
Akshai Mirchandani [MS]
 
Posts: n/a

Default Re: AS 2005 / Can't build dimensions when RDBMS is Sybase - 12-27-2005 , 08:33 PM



Sorry, no. As mentioned in other threads, you can create a linked server
from the SQL Server relational engine to the Informix database and build
your cube using the SQL Server as a source, but you will probably pay a
performance price during processing.

In brief, a cartridge is a .xsl stylesheet that defines capabilities of a
datasource as well as the rules for converting an abstract XML query into a
valid SQL query for that datasource -- the set of cartridges that AS ships
with includes versions of Jet, SQL 70, SQL 2000, SQL 2005, Oracle, Teradata,
DB2.

Thanks,
Akshai
--
This posting is provided "AS IS" with no warranties, and confers no rights
Please do not send email directly to this alias. This alias is for newsgroup
purposes only.

<Steffi> wrote

Quote:
hi,
Is Informix not supported for AS2005 ?
I create a informix oledb(2.90TC3) datasource and test connection
successfully, but failed to create a infromix data source view.(More
details
errors @ subject: AS2005 data source limitation)
Whould you point me how I could solve this problem?
What is a cartridge and How can I make it?
Thanks.

"Akshai Mirchandani [MS]" <akshaim (AT) online (DOT) microsoft.com
撰寫於郵件新聞:%23bkCKlJ8FHA.2716 (AT) TK2MSFTNGP11 (DOT) phx.gbl...
Sybase is not a supported database for AS 2005. However, another Sybase
customer built a cartridge and I've attached it here -- it may or may not
work for you and will not be supported.

You can put the attached .xsl file in the <install folder>\cartridges
folder
and re-start the server.

Thanks,
Akshai
--
This posting is provided "AS IS" with no warranties, and confers no rights
Please do not send email directly to this alias. This alias is for
newsgroup
purposes only.

"Steve G" <Steve G (AT) discussions (DOT) microsoft.com> wrote in message
news4594E9A-09A7-4BA7-855F-2E5072AC1D9D (AT) microsoft (DOT) com...
I use a Sybase (12.5.2) OLEDB datasource for feeding dimension data to our
SQL Server 2005 Analysis Services Cubes. If I try to process any
dimension
I
see that the SQL generated by SSAS is something like:


SELECT [dbo_o_v_ccy_pair].[ccy_pair_id] AS
[dbo_o_v_ccy_pairccy_pair_id0_0],[dbo_o_v_ccy_pair].[ccy_pair_name] AS
[dbo_o_v_ccy_pairccy_pair_name0_1],[dbo_o_v_ccy_pair].[is_offshore_ccy]
AS
[dbo_o_v_ccy_pairis_offshore_ccy0_2],[dbo_o_v_ccy_pair].[start_name] AS
[dbo_o_v_ccy_pairstart_name0_3],[dbo_o_v_ccy_pair].[region_id] AS
[dbo_o_v_ccy_pairregion_id0_4],[dbo_o_v_ccy_pair].[is_emerging] AS
[dbo_o_v_ccy_pairis_emerging0_5],[dbo_o_v_ccy_pair].[bus_region] AS
[dbo_o_v_ccy_pairbus_region0_6],[dbo_o_v_ccy_pair].[is_offshore_ccy_desc]
AS
[dbo_o_v_ccy_pairis_offshore_ccy_desc0_7]
FROM [dbo].[o_v_ccy_pair] AS [dbo_o_v_ccy_pair]


.. the point is that SSAS is inserting its own, rather verbose aliases,
as
in .. "AS [dbo_o_v_ccy_pairccy_pair_id0_0]" .. which often results in
an
alias name longer than 30 characters, therefore exceeding the longest
that
Sybase SQL can handle and causing the dimension processing to fail. Is
there
any way to prevent these long aliases being created ? If so, how ? If
not,
does that mean than SSAS is not compatible with Sybase ?








Reply With Quote
  #8  
Old   
Pedro
 
Posts: n/a

Default Re: AS 2005 / Can't build dimensions when RDBMS is Sybase - 01-26-2006 , 06:07 AM



Can you post the xsl file for Sysbase IQ?

Best Regards,
Pedro Henriques

"scott_gunn (AT) email (DOT) com" wrote:

Quote:
I have an xsl file that works for Sybase IQ. I'm not sure if it would
work with Sybase ASE or not. I know there are some subtle differences
in valid SQL between the two.



Reply With Quote
  #9  
Old   
Tiago Rente
 
Posts: n/a

Default Re: AS 2005 / Can't build dimensions when RDBMS is Sybase - 06-02-2006 , 10:00 AM



Hi,

Once we were able to process cubes using Sybase IQ using the cartridge
provided here. However, the server had to be replaced for a brand new a now
we are not able to put it to work in another server.

Does anyone have any instructions to put it to work?

Many thanks,
TR.

"Steve G" wrote:

Quote:
Thanks for the cartridge.

"Akshai Mirchandani [MS]" wrote:

I've pasted it inline below.

Thanks,
Akshai

?xml version="1.0"?
xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" version="1.0"
xmlns:mssqlcrt="urn:sql-microsoft-com:sqlcrt"
xmlns:mssqldbg="urn:sql-microsoft-com:sqldbg"
xslutput method="xml" indent="yes"/

!-- ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!!
This is a generated file. Do not modify this file directly!
--

!-- Sybase pluggable cartridge --

!-- Area of STANDARD parametrizations: these are externally passed --
xslaram name="in_CanUseParams">yes</xslaram
xslaram name="in_IdentStartQuotingCharacter"></xslaram
xslaram name="in_IdentEndQuotingCharacter"></xslaram
xslaram name="in_StringStartQuotingCharacter">N'</xslaram
xslaram name="in_StringEndQuotingCharacter">'</xslaram

!-- Area of CORE parametrizations: These are externally checked --
mssqlcrtrovider type="prefix">Adaptive Server
Anywhere</mssqlcrtrovider

mssqlcrt:capabilities
mssqlcrt:supports-datepart-year/
mssqlcrt:supports-datepart-quarter/
mssqlcrt:supports-datepart-month/
mssqlcrt:supports-datepart-dayofyear/
mssqlcrt:supports-datepart-day/
mssqlcrt:supports-datepart-week/
mssqlcrt:supports-datepart-dayofweek/
mssqlcrt:supports-datepart-hour/
mssqlcrt:supports-datepart-minute/
mssqlcrt:supports-datepart-second/
mssqlcrt:supports-datepart-millisecond/
mssqlcrt:supports-multiple-distinct-count/
mssqlcrt:supports-update/
mssqlcrt:supports-insert/
mssqlcrt:supports-subselect/
mssqlcrt:supports-table-alias/
mssqlcrt:supports-column-alias/
mssqlcrt:supports-cast/
mssqlcrt:supports-remote-query/
mssqlcrt:supports-top-clause/
mssqlcrt:supports-union/
mssqlcrt:supports-union-all/
mssqlcrt:supports-fast-writeback>TABLOCK,FIRE_TRIGGERS</mssqlcrt:supports-fast-writeback
!--
This cartridge is used as the default cartridge for unknown
providers
So even though SQL supports larger aliases (at least 128), we'll
use a smaller
alias for the other providers
--
mssqlcrt:limit-table-identifier-length>32</mssqlcrt:limit-table-identifier-length
mssqlcrt:limit-column-identifier-length>32</mssqlcrt:limit-column-identifier-length

!-- Map from MSDAInitialize connection string to SQLOLEDB connection
string --
mssqlcrt:remote-connection-string-mappings
mssqlcrt:remote-connection-string-mapping
mssqlcrt:datasource-property>Provider</mssqlcrt:datasource-property
mssqlcrt:remote-property></mssqlcrt:remote-property
/mssqlcrt:remote-connection-string-mapping
mssqlcrt:remote-connection-string-mapping
mssqlcrt:datasource-property>Data Source</mssqlcrt:datasource-property
mssqlcrt:remote-property>Server</mssqlcrt:remote-property
/mssqlcrt:remote-connection-string-mapping
mssqlcrt:remote-connection-string-mapping
mssqlcrt:datasource-property>Initial
Catalog</mssqlcrt:datasource-property
mssqlcrt:remote-property>Database</mssqlcrt:remote-property
/mssqlcrt:remote-connection-string-mapping
mssqlcrt:remote-connection-string-mapping
mssqlcrt:datasource-property>User ID</mssqlcrt:datasource-property
mssqlcrt:remote-property>UID</mssqlcrt:remote-property
/mssqlcrt:remote-connection-string-mapping
mssqlcrt:remote-connection-string-mapping
mssqlcrt:datasource-property>Password</mssqlcrt:datasource-property
mssqlcrt:remote-property>PWD</mssqlcrt:remote-property
/mssqlcrt:remote-connection-string-mapping
mssqlcrt:remote-connection-string-mapping
mssqlcrt:datasource-property>Integrated
Security=SSPI</mssqlcrt:datasource-property
mssqlcrt:remote-property>Trusted_Connection=yes</mssqlcrt:remote-property
/mssqlcrt:remote-connection-string-mapping
/mssqlcrt:remote-connection-string-mappings
/mssqlcrt:capabilities

mssqlcrt:schema-classes
mssqlcrt:schema-class
mssqlcrt:managed-provider>System.Data.OleDb</mssqlcrt:managed-provider
mssqlcrt:type>Microsoft.DataWarehouse.Design.OleDb Schema,
Microsoft.DataWarehouse</mssqlcrt:type
mssqlcrt:query-designer
mssqlcrt:type>Microsoft.DataWarehouse.Controls.Ole DbQueryDesigner,
Microsoft.DataWarehouse</mssqlcrt:type
/mssqlcrt:query-designer
/mssqlcrt:schema-class
mssqlcrt:schema-class
mssqlcrt:managed-provider>System.Data.Odbc</mssqlcrt:managed-provider
mssqlcrt:type>Microsoft.DataWarehouse.Design.OdbcS chema,
Microsoft.DataWarehouse</mssqlcrt:type
/mssqlcrt:schema-class
/mssqlcrt:schema-classes
!-- Area of internal parametrizations --
!-- overrideOfUseParams:
yes = use always parametric queries
no = never use parametric queries
nosubsel = use as yes, but not on subselects
auto = use the value of in_CanUseParams to determine --
xsl:variable name="overrideOfUseParams">auto</xsl:variable
!-- shouldProduceDebug:
yes = produce debug information
no = do not produce debug information --
xsl:variable name="shouldProduceDebug">yes</xsl:variable

!-- Area of global variables initializations --
xsl:variable name="UseParams"
xsl:choose
xsl:when test="normalize-space($overrideOfUseParams) = 'yes' or
(normalize-space($overrideOfUseParams) = 'auto' and
normalize-space($in_CanUseParams)='yes')">yes</xsl:when
xsl:when test="normalize-space($overrideOfUseParams) =
'nosubsel'">nosubsel</xsl:when
xsltherwise>no</xsltherwise
/xsl:choose
/xsl:variable
xsl:variable name="ProduceDebug" select="$shouldProduceDebug"/
xsl:variable name="IdentifierStartQuotingCharacter"
select="normalize-space($in_IdentStartQuotingCharacter)"/
xsl:variable name="IdentifierEndQuotingCharacter"
select="normalize-space($in_IdentEndQuotingCharacter)"/
xsl:variable name="StringStartQuotingCharacter"
select="normalize-space($in_StringStartQuotingCharacter)"/
xsl:variable name="StringEndQuotingCharacter"
select="normalize-space($in_StringEndQuotingCharacter)"/

!-- Generated statement packaging --
xsl:template match="/"
xsl:element name="Statement"

!-- Generate query --
xsl:element name="Text"
xsl:apply-templates select="./Statement/*[1]"/
/xsl:element

!-- Generate parameters --
xsl:if test="count(./Statement/Parameters/Parameter)!=0 and
((normalize-space($UseParams)='yes') or
(normalize-space($UseParams)='nosubsel'))"
xsl:element name="Parameters"
xsl:for-each select="./Statement/*[1]//Parameter"
xsl:element name="Parameter"
xsl:attribute name="ref"
xsl:value-of select="./@ref"/
/xsl:attribute
/xsl:element
/xsl:for-each
/xsl:element
/xsl:if

!-- Generate debug info --
xsl:if test="$ProduceDebug='yes'"
xsl:element name="mssqldbgebugInfo"
xsl:element name="mssqldbg:GenerateParametricInfo"
xsl:attribute name="mssqldbg:Value"
xsl:value-of select="$UseParams"/
/xsl:attribute
xsl:element name="mssqldbg:External"
xsl:value-of select="$in_CanUseParams"/
/xsl:element
xsl:element name="mssqldbg:Internal"
xsl:value-of select="$overrideOfUseParams"/
/xsl:element
/xsl:element
/xsl:element
/xsl:if

/xsl:element
/xsl:template

!-- Union statement --
xsl:template match="Union"
xsl:if test="name(..) != 'Statement' and name(..) != 'Insert'"
(
/xsl:if
xsl:call-template name="print-children-list"
xsl:with-param name="operator" select="' UNION '"/
/xsl:call-template
xsl:if test="name(..) != 'Statement' and name(..) != 'Insert'"
)
/xsl:if
/xsl:template

!-- Union All
--
xsl:template match="UnionAll"
xsl:if test="name(..) != 'Statement' and name(..) != 'Insert'"
(
/xsl:if
xsl:call-template name="print-children-list"
xsl:with-param name="operator" select="' UNION ALL '"/
/xsl:call-template
xsl:if test="name(..) != 'Statement' and name(..) != 'Insert'"
)
/xsl:if
/xsl:template

!-- Top clause --
xsl:template match="Top"
TOP <xsl:value-of select="."/><xsl:text> </xsl:text
/xsl:template

!-- Select statement --
xsl:template match="Select"
xsl:choose
xsl:when test="count(./ColumnExpressions/IsValidForIndexing) != 0"
SELECT OBJECTPROPERTY( object_id('<xsl:apply-templates
select="./Sources/View"/>'), 'isindexable' )
/xsl:when
xsltherwise
xsl:if test="name(..) != 'Statement' and name(..) != 'Insert' and
name(..) != 'Union' and name(..) != 'UnionAll'"
(
/xsl:if
SELECT <xsl:apply-templates select="./Top"/
xsl:apply-templates select="./Distinct"/
xsl:apply-templates select="./ColumnExpressions"/
xsl:if test="count(../Phase) != 0">, COUNT(*) AS
[COUNT_7673aff6-2445-4ef6-a4c9-7bf3d93bd42a] </xsl:if
xsl:apply-templates select="./Sources"/
xsl:apply-templates select="./Where"/
xsl:apply-templates select="./GroupBy"/
xsl:apply-templates select="./Having"/
xsl:apply-templates select="./OrderBy"/
xsl:if test="name(..) != 'Statement' and name(..) != 'Insert' and
name(..) != 'Union' and name(..) != 'UnionAll'"
)
/xsl:if
/xsltherwise
/xsl:choose
/xsl:template

!-- Update statement --
xsl:template match="Update"
UPDATE <xsl:apply-templates select="./Target"/
xsl:apply-templates select="./Where"/
/xsl:template

!-- Insert statement --
xsl:template match="Insert"
INSERT INTO <xsl:apply-templates select="./Target"/
xsl:apply-templates select="./Select"/
/xsl:template

!-- Delete statement --
xsl:template match="Delete"
DELETE FROM <xsl:apply-templates select="./Target"/
xsl:apply-templates select="./Where"/
/xsl:template

!-- Drop statement --
xsl:template match="Drop"
DROP <xsl:apply-templates select="./*"/
/xsl:template

!-- Create statement --
xsl:template match="Create"
CREATE
xsl:variable name="phase"><xsl:value-of select="./Phase"/></xsl:variable
xsl:choose
xsl:when test="number($phase)=1"
VIEW <xsl:apply-templates select="./View"/> ( <xsl:apply-templates
select="./*[4]"/>, [COUNT_7673aff6-2445-4ef6-a4c9-7bf3d93bd42a] ) WITH
SCHEMABINDING AS <xsl:apply-templates select="./*[5]"/
/xsl:when
xsl:when test="number($phase)=2"
UNIQUE CLUSTERED INDEX <xsl:apply-templates select="./Index"/> ON
xsl:apply-templates select="./View"/> ( <xsl:apply-templates
select="./*[4]"/> )
/xsl:when
xsltherwise
xsl:apply-templates select="./*[1]"/
xsl:choose
xsl:when test="name(./*[1]) = 'Table'"> ( <xsl:apply-templates
select="./*[2]"/> )</xsl:when
/xsl:choose
/xsltherwise
/xsl:choose

Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.3
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.