@@ -119,7 +119,7 @@ private void CreateNaturalizedView()
119119
120120 foreach ( string attr in SQLColsAsNonPCAttributes )
121121 strQry += attr + ", " ;
122- strQry = strQry . Remove ( strQry . Length - 2 ) + "\r \n from " + table + ") CurrentMemberSubselect on CurrentMemberSubselect.CurrentMemberID = a.CurrentMemberID\r \n " ;
122+ strQry = ASPCDimNaturalizer . RemoveLastComma ( strQry ) + "\r \n from " + table + ") CurrentMemberSubselect on CurrentMemberSubselect.CurrentMemberID = a.CurrentMemberID\r \n " ;
123123
124124 for ( int i = 2 ; i <= MinimumLevelCount + 1 ; i ++ )
125125 {
@@ -135,14 +135,14 @@ private void CreateNaturalizedView()
135135 strQry += "left outer join (select " + id + " " + LevelName + ",\r \n " ;
136136 foreach ( string attr in SQLColsASPCAttributes )
137137 strQry += "[" + attr + "] [" + LevelName + "_" + attr + "],\r \n " ;
138- strQry = strQry . Remove ( strQry . Length - 3 ) + "\r \n from " + table + ") " + LevelName + "Subselect on " + LevelName + "Subselect." + LevelName + " = a." + LevelName + "\r \n " ;
138+ strQry = ASPCDimNaturalizer . RemoveLastComma ( strQry ) + "\r \n from " + table + ") " + LevelName + "Subselect on " + LevelName + "Subselect." + LevelName + " = a." + LevelName + "\r \n " ;
139139 }
140140
141- CTESel = CTESel . Remove ( CTESel . Length - 2 ) + ")\r \n " ;
142- CTEQry = CTEQry . Remove ( CTEQry . Length - 3 ) + "\r \n " ;
143- strCTELevelEnumeration = strCTELevelEnumeration . Remove ( strCTELevelEnumeration . Length - 3 ) + " FROM " + table + " e " +
141+ CTESel = ASPCDimNaturalizer . RemoveLastComma ( CTESel ) + ")\r \n " ;
142+ CTEQry = ASPCDimNaturalizer . RemoveLastComma ( CTEQry ) + "\r \n " ;
143+ strCTELevelEnumeration = ASPCDimNaturalizer . RemoveLastComma ( strCTELevelEnumeration ) + " FROM " + table + " e " +
144144 "INNER JOIN PCStructure d ON e." + pid + " = d.CurrentMemberID)\r \n " ;
145- strQry = CTESel + CTEQry + strCTELevelEnumeration + strSel . Remove ( strSel . Length - 2 ) + "\r \n " + strQry ;
145+ strQry = CTESel + CTEQry + strCTELevelEnumeration + ASPCDimNaturalizer . RemoveLastComma ( strSel ) + "\r \n " + strQry ;
146146 cmd . CommandText = strQry ;
147147 cmd . ExecuteNonQuery ( ) ;
148148
@@ -897,7 +897,7 @@ private string GetSingleColumnNameAndExpressionForView(DataItem attr, string Col
897897
898898 private string GetNonPCUserHierarchyColumnNamesFromOriginalDimension ( )
899899 {
900- string strSubselect = " CurrentMemberSubselect.* from " + id . TableName + " b,\r \n (select " + id . ColumnName + " [" + dim . KeyAttribute . Name + "_KeyColumn], " ;
900+ string strSubselect = " CurrentMemberSubselect.* from " + id . TableName + " b,\r \n (select " + id . ColumnName + " [" + dim . KeyAttribute . Name + "_KeyColumn],\r \n " ;
901901 string strColAlias = "" ;
902902
903903 if ( dim . KeyAttribute . NameColumn != null && ColNameFromDataItem ( dim . KeyAttribute . KeyColumns [ 0 ] ) != ColNameFromDataItem ( dim . KeyAttribute . NameColumn ) )
@@ -922,7 +922,17 @@ private string GetNonPCUserHierarchyColumnNamesFromOriginalDimension()
922922 strSubselect += strCurCol . Replace ( ", -- End of column definition\r \n " , "" ) + ",\r \n " ;
923923 }
924924
925- return strSubselect . Remove ( strSubselect . Length - 3 ) + "\r \n from " + id . TableName + " b)\r \n CurrentMemberSubselect\r \n " ;
925+ return RemoveLastComma ( strSubselect ) + "\r \n from " + id . TableName + " b)\r \n CurrentMemberSubselect\r \n " ;
926+ }
927+
928+ public static string RemoveLastComma ( string str )
929+ {
930+ if ( str . EndsWith ( ",\r \n " ) )
931+ return str . Remove ( str . Length - 3 ) ;
932+ else if ( str . EndsWith ( ", " ) )
933+ return str . Remove ( str . Length - 2 ) ;
934+ else
935+ return str ;
926936 }
927937
928938 private void CreateNaturalizedView ( )
@@ -958,7 +968,7 @@ private void CreateNaturalizedView()
958968 strCTELevelEnumeration += "WHEN " + j . ToString ( ) + " THEN e." + id . ColumnName + "\r \n " ;
959969 }
960970 strCTELevelEnumeration += "WHEN " + i . ToString ( ) + " THEN e." + id . ColumnName + " ELSE [" + LevelName + "_KeyColumn]\r \n END\r \n AS [" + LevelName + "_KeyColumn],\r \n " ;
961- strQry += "(select " + id . ColumnName + " [" + LevelName + "_KeyColumn], " ;
971+ strQry += "(select " + id . ColumnName + " [" + LevelName + "_KeyColumn],\r \n " ;
962972
963973
964974 if ( PCParentAttribute ( ) . UnaryOperatorColumn != null )
@@ -1014,20 +1024,20 @@ private void CreateNaturalizedView()
10141024 }
10151025
10161026 if ( i > 2 )
1017- strQry = strQry . Remove ( strQry . Length - 3 ) + "\r \n , Level" + ( i - 1 ) . ToString ( ) + "Subselect.*\r \n from " + id . TableName + " b,\r \n " ;
1027+ strQry = RemoveLastComma ( strQry ) + "\r \n , Level" + ( i - 1 ) . ToString ( ) + "Subselect.*\r \n from " + id . TableName + " b,\r \n " ;
10181028 strSelEnd = ") Level" + i . ToString ( ) + "Subselect\r \n " + strSelEnd ;
10191029 strWhere += "Level" + ( MinimumLevelCount + 1 ) . ToString ( ) + "Subselect.[" + LevelName + "_KeyColumn] = a.[" + LevelName + "_KeyColumn] and\r \n " ;
10201030 strLevelsEnumerations = strCTELevelEnumeration + strLevelsEnumerations ;
10211031 }
10221032
10231033 CTESel = "CREATE VIEW " + txtNewView + " AS\r \n " +
1024- "WITH PCStructure(Level, " + pid . ColumnName + ", [" + dim . KeyAttribute . Name + "_KeyColumn], [" + GetNaturalizedLevelName ( 2 ) + "_KeyColumn]" + ( ( CTESel . Length > 0 ) ? ", " + CTESel . Remove ( CTESel . Length - 2 ) : "" ) + ")\r \n " ;
1025- CTEQry = "AS (SELECT 3 Level, " + pid . ColumnName + ", " + id . ColumnName + ",\r \n " + id . ColumnName + " as [" + GetNaturalizedLevelName ( 2 ) + "_KeyColumn]" + ( CTEQry . Length > 0 ? ", \r \n " + CTEQry . Remove ( CTEQry . Length - 3 ) : "" ) + "\r \n " ;
1034+ "WITH PCStructure(Level, " + pid . ColumnName + ", [" + dim . KeyAttribute . Name + "_KeyColumn], [" + GetNaturalizedLevelName ( 2 ) + "_KeyColumn]" + ( ( CTESel . Length > 0 ) ? ", " + RemoveLastComma ( CTESel ) : "" ) + ")\r \n " ;
1035+ CTEQry = "AS (SELECT 3 Level, " + pid . ColumnName + ", " + id . ColumnName + ",\r \n " + id . ColumnName + " as [" + GetNaturalizedLevelName ( 2 ) + "_KeyColumn]" + ( CTEQry . Length > 0 ? ", \r \n " + RemoveLastComma ( CTEQry ) : "" ) + "\r \n " ;
10261036 strWhere += "Level" + ( MinimumLevelCount + 1 ) . ToString ( ) + "Subselect.[" + dim . KeyAttribute . Name + "_KeyColumn] = a.[" + dim . KeyAttribute . Name + "_KeyColumn]" ;
10271037 strLevelsEnumerations = "FROM " + id . TableName + " WHERE " + pid . ColumnName + " IS NULL OR " + pid . ColumnName + " = " + id . ColumnName + " " +
1028- "UNION ALL SELECT Level + 1, e." + pid . ColumnName + ", e." + id . ColumnName + ",\r \n " + strLevelsEnumerations . Remove ( strLevelsEnumerations . Length - 3 ) + " FROM " + id . TableName + " e " +
1038+ "UNION ALL SELECT Level + 1, e." + pid . ColumnName + ", e." + id . ColumnName + ",\r \n " + RemoveLastComma ( strLevelsEnumerations ) + " FROM " + id . TableName + " e " +
10291039 "INNER JOIN PCStructure d ON e." + pid . ColumnName + " = d.[" + dim . KeyAttribute . Name + "_KeyColumn] AND e." + pid . ColumnName + " != e." + id . ColumnName + ")\r \n " ;
1030- strQry = CTESel + CTEQry + strLevelsEnumerations + strSel . Remove ( strSel . Length - 2 ) + "\r \n " + strQry +
1040+ strQry = CTESel + CTEQry + strLevelsEnumerations + RemoveLastComma ( strSel ) + "\r \n " + strQry +
10311041 GetNonPCUserHierarchyColumnNamesFromOriginalDimension ( ) + strSelEnd + strWhere ;
10321042 cmd . CommandText = strQry ;
10331043
0 commit comments