/// <summary> /// полное имя /// </summary> /// <param name="st">Схема SQL</param> /// <param name="ColumnName">Имя колонки</param> /// <returns>Полное имя</returns> public string GetFullName(SQLStruct st, string ColumnName) { for (int i=0;i<st.select.Count;i++) { if (st.select.isString(i)) { //Если мы нашли совпадение, то... if (st.select[i] == ColumnName) { st.select.SetUsedInChild(i); return st.GetSQLUniqueName() + "_select_" + ColumnName; } } } //После чего должны обратиться к предку. if (st.parentSQL != null) { return GetFullName(st.parentSQL, ColumnName); } return null; }
/// <summary> /// Пишет SELECT /// </summary> /// <param name="select">SELECT-класс</param> /// <param name="sql">SQL - схема</param> private void WriteSelect(SelectClass select, SQLStruct sql) { //Пишем условие, если у нас стоит тэг ONCE - одна запись for (int i=0;i< select.Count; i++) { if (select.isString(i)) { string node = select[i]; if (select.isKey(node)) continue; string tablename = select.Table(i);//sql.GetTableName(select[i]); string val = "$var_"+ tablename + "/" + select[i]; if (sql.alias.GetColumnAlias(node) != null) { string Col = "$var_"+ tablename + "/" + sql.alias.GetColumnAlias(node).name; //string var_new = "$var_"+ tablename + "/" + select[i]; tw.WriteLine("<" + node + "><xsl:value-of select=\"" + Col + "\"/></" + node + ">"); }else { tw.WriteLine("<" + node + "><xsl:value-of select=\"" + val + "\"/></" + node + ">"); } if (select.IsUsedInChild(i)) { string Col = val; if (sql.alias.GetColumnAlias(node) != null) Col = "$var_"+ tablename + "/" + sql.alias.GetColumnAlias(node).name; tw.WriteLine("<xsl:variable name=\"" + sql.GetSQLUniqueName() +"_select_" + node +"\" select=\"" + Col + "\"/>"); } } else { WriteXSL(select.GetSQL(i), sql.group.Count); } } /*if (select.selectType == SELECTTYPE.ONCE) tw.WriteLine("</xsl:if>");*/ }