/// <summary>
        /// Добавляет новую группировку
        /// </summary>
		public void AddGroup()
		{
			once = new GroupClassOnce(this);
            grouplist.Add(once);
		}
예제 #2
0
        /// <summary>
        /// Пищет группировку для одной группировки
        /// При этом данные группировки помещаются в переменную group_id
        /// </summary>
        /// <param name="sql">SQl - схема</param>
        /// <param name="idSQL">Номер SQL-запроса</param>
        /// <param name="idGroup">Номер группировки</param>
        /// <param name="prevCountGroup">номер предыдущей группировки (от туда будут браться данные)</param>
        /// <param name="TrName">Путь до данных</param>
		public void GroupOne(GroupClassOnce sql, int idSQL, int idGroup, int prevCountGroup, string TrName)
		{
			int id = 0;
			bool old = true;
			string from = "$group_var_" + id.ToString();
			if (idGroup != 0)
			{
				from = "$group_" + idSQL.ToString() + "_" + ((int)(idGroup-1)).ToString();
				old = false;
			}
			else if (idSQL != 0 && prevCountGroup !=0)
			{
				from = "$group_" + (idSQL-1).ToString() + "_" + prevCountGroup.ToString();
				old = false;
			}

			string VarGroupName = "group_"+ idSQL.ToString() + "_" + idGroup.ToString();

			//if
			tw.WriteLine("<xsl:variable name=\"" + VarGroupName + "\">");

			//далее мы должны написать цикл группировки если надо
			if (!sql.isAll)
			{
				string from_val = from;
				if (old)
				{
					string tmp_TrName = sql.baseGroup.baseSql.GetTr(-1);
					from += "/" + tmp_TrName;
				}

				for (int i=0;i<sql.Count;i++)
				{
					if (i == 0)
						tw.WriteLine("<xsl:for-each-group select=\""+from+"\" group-by=\"" + sql[i] + "\">");
					else
						tw.WriteLine("<xsl:for-each-group select=\"current-group()\" group-by=\"" + sql[i] + "\">");

					tw.WriteLine("<xsl:variable name=\"" + VarGroupName+"_key_" + sql[i] + "\" select=\"current-grouping-key()\"/>");
				}
			}

			if (sql.type == TypeGroup.CONTAIN)
				GroupContain(sql, sql.isAll, from, VarGroupName, TrName);
			else if (sql.type == TypeGroup.HEADER)
				GroupHeader(sql, sql.isAll, from, VarGroupName, TrName);

			GroupData(from,sql.isAll);
				
			/*tw.WriteLine("<xsl:for-each select=\"" + from + "" + id.ToString() + "/*\" >");
			tw.WriteLine("<xsl:copy-of select=\"current()\"/>");
			tw.WriteLine("</xsl:for-each");*/

			if (sql.type == TypeGroup.CONTAIN)
				GroupContainEnd(sql);
			else if (sql.type == TypeGroup.FOOTER)
				GroupFooter(sql, sql.isAll, from, VarGroupName, TrName);

			if (!sql.isAll)
			{
				for (int i=0;i<sql.Count;i++)
				{
					tw.WriteLine("</xsl:for-each-group>");
				}
			}

				
			//tw.WriteLine("");
			tw.WriteLine("</xsl:variable>");
		}
        /// <summary>
        /// Конструктор
        /// </summary>
        /// <param name="baseSql">Базовый SQL-класс</param>
		public GroupClass(SQLStruct baseSql)
		{
			this.baseSql = baseSql;
			once = new GroupClassOnce(this);
		}
예제 #4
0
        /// <summary>
        /// Пишет FOOTER. Просто вызывает GroupFooter <see cref="GroupFooter"/>
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="all"></param>
        /// <param name="from"></param>
        /// <param name="VarGroupName"></param>
        /// <param name="TrName"></param>
		public void GroupFooter(GroupClassOnce sql, bool all, string from, string VarGroupName, string TrName)
		{
			GroupHeader(sql, all, from, VarGroupName, TrName);
		}
예제 #5
0
        /// <summary>
        /// Пищет HEADER
        /// </summary>
        /// <param name="sql">SQL</param>
        /// <param name="all">Флфг ALL</param>
        /// <param name="from">Откуда будут браться данные</param>
        /// <param name="VarGroupName">Имя переменной группировок</param>
        /// <param name="TrName">Имя узла</param>
		public void GroupHeader(GroupClassOnce sql, bool all, string from, string VarGroupName, string TrName)
		{
			tw.WriteLine("<" + sql.UseTag(TypeFH.HEADER) + ">");
			//Пишем все агрегаты.
			GroupValueRec(sql,all,from, VarGroupName, TrName, TypeFH.HEADER);
			
			tw.WriteLine("</" + sql.UseTag(TypeFH.HEADER) + ">");

		}
예제 #6
0
        /// <summary>
        /// Пишет закрывающийся тег
        /// </summary>
        /// <param name="sql"></param>
		public void GroupContainEnd(GroupClassOnce sql)
		{
			tw.WriteLine("</" + sql.UseTag(TypeFH.CONTAIN) + ">");
		}
예제 #7
0
        /// <summary>
        /// Пишет Conatin
        /// </summary>
        /// <param name="sql">SQL -схема 1 группировки</param>
        /// <param name="all">Флаг ALL</param>
        /// <param name="from">Откуда будут браться данные</param>
        /// <param name="VarGroupName">Имя переменной (group_) из которой группируются данные</param>
        /// <param name="TrName">Имя узла xsl:value-of select="$" + VarGroupName + "/" + TrName </param>
        public void GroupContain(GroupClassOnce sql, bool all, string from, string VarGroupName, string TrName)
		{
			tw.WriteLine("<" + sql.UseTag(TypeFH.CONTAIN) + ">");
			//Пишем все агрегаты.
			GroupValueRec(sql,all,from, VarGroupName, TrName, TypeFH.CONTAIN);
		}
예제 #8
0
        /// <summary>
        /// Пишет записи (данные) в Group 
        /// Если при этом указана агрегатная функция, то она тоже пищется
        /// </summary>
        /// <param name="sql">SQL -схема 1 группировки</param>
        /// <param name="all">Флаг ALL</param>
        /// <param name="from">Параметр откуда будут браться данные</param>
        /// <param name="VarGroupName">Имя переменной (group_) из которой группируются данные</param>
        /// <param name="TrName">Имя узла xsl:value-of select="$" + VarGroupName + "/" + TrName </param>
        /// <param name="t">Тип группировки</param>
		public void GroupValueRec(GroupClassOnce sql, bool all, string from, string VarGroupName, string TrName, TypeFH t)
		{
			int CountValueRec = 0;
			if (t == TypeFH.FOOTER)
				CountValueRec = sql.CountValueRecFooter;
			else
				CountValueRec = sql.CountValueRecHeader;
						
			//Пишем все агрегаты...
			for (int j=0;j< CountValueRec;j++)
			{
				string defTemplate = "#.##";
				//string node = (string) sql.group[idGroup].array[j];
				string node = sql.ValueRec(j,t);
				string node_value = node;
				string func = sql.Func(j,t);
				string fullName = sql.FullName(j,t);

				/*if (sql.FullName!= null && sql.FullName != "")
					node_value = fullName;*/
				
				//tw.WriteLine("<" + node + "><xsl:value-of select=\"" + func + "(current()/" + node + ")\"/></" + node + ">");
				if (all)
					if (fullName!= null && fullName != "")
					{
						if (func != null && func != "")
							tw.WriteLine("<" + node + "><xsl:value-of select=\"format-number(" + func + "($"+ fullName + "),'" + defTemplate + "')\"/></" + node + ">");
						else
							tw.WriteLine("<" + node + "><xsl:value-of select=\"$" + fullName + "\"/></" + node + ">");
					}
					else
					{
						if (func != null && func != "")
							tw.WriteLine("<" + node + "><xsl:value-of select=\"format-number(" + func + "("+ from + "/" + TrName + "" + node_value + "),'" + defTemplate + "')\"/></" + node + ">");
						else
							tw.WriteLine("<" + node + "><xsl:value-of select=\"" + from + "/" + TrName + "" + node_value + "\"/></" + node + ">");
					}
				else
				{
					if (fullName!= null && fullName != "")
					{
						if (func!=null && func != "")
							tw.WriteLine("<" + node + "><xsl:value-of select=\"format-number(" + func + "($" + fullName + "),'" + defTemplate + "')\"/></" + node + ">");
						else
							tw.WriteLine("<" + node + "><xsl:value-of select=\"$" +  fullName + "\"/></" + node + ">");
					}
					else
					{
						if (func!=null && func != "")
							tw.WriteLine("<" + node + "><xsl:value-of select=\"format-number(" + func + "(current-group()/" + node_value + "),'" + defTemplate + "')\"/></" + node + ">");
						else
							tw.WriteLine("<" + node + "><xsl:value-of select=\"$" + VarGroupName + "_key_" + node + "\"/></" + node + ">");
					}
				}
			}
		}
예제 #9
0
        /// <summary>
        /// Пишет записи (данные) в Group 
        /// Если при этом указана агрегатная функция, то она тоже пищется
        /// </summary>
        /// <param name="sql">SQL -схема 1 группировки</param>
        /// <param name="all">Флаг ALL</param>
        /// <param name="VarGroupName">Имя переменной (group_) из которой группируются данные</param>
        /// <param name="TrName">Имя узла xsl:value-of select="$" + VarGroupName + "/" + TrName </param>
        /// <param name="t">Тип группировки</param>
		public void GroupValueRec2(GroupClassOnce sql, bool all, string VarGroupName, string TrName, TypeFH t)
		{
						
			//Пишем все агрегаты...
			int CountValueRec = 0;
			if (t == TypeFH.FOOTER)
				CountValueRec = sql.CountValueRecFooter;
			else
				CountValueRec = sql.CountValueRecHeader;

			for (int j=0;j< CountValueRec;j++)
			{
				string defTemplate = "#.##";
				//string node = (string) sql.group[idGroup].array[j];
				string node = sql.ValueRec(j, t);
				string node_value = node;
				string func = sql.Func(j, t);
				string fullName = sql.FullName(j, t);
				if ((fullName == null || fullName == "") && !all)
				{
					//Провереям надохится ли в текущем гроупе все колонки
					int idGroup = sql.IdGroup(j,t);
					if (idGroup!=-1)
					{
                        fullName = "group_" + idGroup.ToString() + "_key_" + node;
					}
				}
				
				if (all)
					if (fullName!= null && fullName != "")
					{
						if (func != null && func != "")
							tw.WriteLine("<" + node + "><xsl:value-of select=\"format-number(" + func + "($"+ fullName + "),'" + defTemplate + "')\"/></" + node + ">");
						else
							tw.WriteLine("<" + node + "><xsl:value-of select=\"$" + fullName + "\"/></" + node + ">");
					}
					else
					{
						if (func != null && func != "")
							tw.WriteLine("<" + node + "><xsl:value-of select=\"format-number(" + func + "($"+ VarGroupName + "/" + TrName + "" + node_value + "),'" + defTemplate + "')\"/></" + node + ">");
						else
							tw.WriteLine("<" + node + "><xsl:value-of select=\"$" + VarGroupName + "/" + TrName + "" + node_value + "\"/></" + node + ">");
						//int uu=0;
					}
				else
				{
					if (fullName!= null && fullName != "")
					{
						if (func!=null && func != "")
                            if (func.ToLower() !="val")
							    tw.WriteLine("<" + node + "><xsl:value-of select=\"format-number(" + func + "($" + fullName + "),'" + defTemplate + "')\"/></" + node + ">");
                            else
                                tw.WriteLine("<" + node + "><xsl:value-of select=\"$" + fullName + "\"/></" + node + ">");
						else
							tw.WriteLine("<" + node + "><xsl:value-of select=\"$" +  fullName + "\"/></" + node + ">");
					}
					else
					{
						if (func!=null && func != "")
                            if (func.ToLower() != "val")
							    tw.WriteLine("<" + node + "><xsl:value-of select=\"format-number(" + func + "(current-group()/" + node_value + "),'" + defTemplate + "')\"/></" + node + ">");
                            else
                                tw.WriteLine("<" + node + "><xsl:value-of select=\"current-group()/" + node_value + "\"/></" + node + ">");
						else
							tw.WriteLine("<" + node + "><xsl:value-of select=\"$" + VarGroupName + "_key_" + node + "\"/></" + node + ">");
					}
				}
			}
		}
예제 #10
0
        /// <summary>
        /// Пишет FOOTER
        /// </summary>
        /// <param name="sql">SQL -схема</param>
        /// <param name="isAll">Флаг ALL</param>
        /// <param name="VarGroupName">Имя переменной (group_) из которой группируются данные</param>
        /// <param name="TrName">Имя узла xsl:value-of select="$" + VarGroupName + "/" + TrName </param>
        public void GroupFooter2(GroupClassOnce sql, bool isAll, string VarGroupName, string TrName)
		{
			tw.WriteLine("<" + sql.UseTag(TypeFH.FOOTER) + ">");

            GroupValueRec2(sql,isAll, VarGroupName, TrName, TypeFH.FOOTER);

			tw.WriteLine("</" + sql.UseTag(TypeFH.FOOTER) + ">");
		}