Ejemplo n.º 1
0
		public override void Visit(OrderByClause order_by_clause)
		{
			//	Access doesn't manage column alias in order by clause
			//	Use columns positions instead (positions : from 1 to n)

			if (order_by_clause.Count != 0)
			{
				_Query.Append(ORDERBY).Append(SPACE);
				foreach(OrderByClauseColumn column in order_by_clause)
				{
					if(column.ColumnName == null || column.ColumnName == string.Empty)
						continue;

					int pos = 2;

					SelectStatement sel = order_by_clause.Select;
					if(sel as UnionStatement != null && (sel as UnionStatement).SelectExpressions.Count > 0)
						sel = (sel as UnionStatement).SelectExpressions[0];

					while(sel.SelectList.Count == 0 && sel.FromClause.Count > 0 && sel.FromClause[0] as SelectStatement != null)
					{
						sel = sel.FromClause[0] as SelectStatement;
						if(sel as UnionStatement != null && (sel as UnionStatement).SelectExpressions.Count > 0)
							sel = (sel as UnionStatement).SelectExpressions[0];
					}

					for(int i=0; i<sel.SelectList.Count; i++)
					{
						ISQLExpression cur = sel.SelectList[i];
						if(cur as Column == null)
							continue;

						if((cur as Column).ColumnName == column.ColumnName || (cur as Column).Alias == column.ColumnName)
						{
							pos = i+1;
							break;
						}
					}

					if(pos != 0)
						_Query.Append(string.Concat(Convert.ToString(pos), " "));

					if(column.Desc)
						_Query.Append(DESC);

					if (order_by_clause.IndexOf(column) != order_by_clause.Count -1 )
						_Query.Append(COMMA);
				}
			}
		}
Ejemplo n.º 2
0
		public virtual void Visit(OrderByClause order_by_clause)
		{
			if (order_by_clause.Count != 0)
			{
				_Query.Append(ORDERBY).Append(SPACE);
				foreach(OrderByClauseColumn column in order_by_clause)
				{
					column.Accept(this);
					if (order_by_clause.IndexOf(column) != order_by_clause.Count -1 )
						_Query.Append(COMMA);
				}
			}
		}