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); } } }
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); } } }