/// <summary> /// Упрощает группировку и проверят существование колонок в SELECT и пронумеровывает группировки /// </summary> /// <param name="select">Массив колонок</param> /// <param name="array">Массив ValueGroup</param> /// <returns></returns> public bool Siplify(SelectClass select, ArrayList array) { for (int i=0; i<array.Count; i++) { ValueGroup g = (ValueGroup) array[i]; //g.ColumnName = //Смотрим откуда эта колонка. bool Ok = false; for (int j=0;j<select.Count;j++) { if (select.isString(j)) { //проверям имя на совпадение if (select[j] == g.ColumnName) { Ok = true; //Далее проверяем есть ли в текущем group bool ok2= false; for (int k=0;k<this.Count;k++) { if (g.ColumnName == this[k]) ok2 = true; } if (!ok2 && (g.Func == null || g.Func == "")) { //Значит в текущем гроупе этого не найдено,надо искать в предыдущих. int idGroup = baseGroup.GetIdGroup(g.ColumnName); if (idGroup == -1) { throw new Exception("Ошибка, в синтаксисе, не найдено колонки:" + g.ColumnName); } g.idGroup = idGroup; } } } } if (!Ok) { //Значит не совпало, т.е. это имя не из этого Select //Проверяем из какого select-а она //Пробегаем все родительские :) string fullname = GetFullName(this.baseGroup.baseSql.parentSQL, g.ColumnName); if (fullname == null) { throw new NotExistException("GroupClassOne, GetFullName: Ошибка в синтаксисе - не найдено колонки '" + g.ColumnName+ "'"); } //g.ColumnName = fullname; g.FullName = fullname; } } return true; }
/// <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>");*/ }