You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
@ -0,0 +1,75 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace System.Data.Linq.SqlClient {
|
||||
internal class SqlRowNumberChecker {
|
||||
Visitor rowNumberVisitor;
|
||||
|
||||
internal SqlRowNumberChecker() {
|
||||
this.rowNumberVisitor = new Visitor();
|
||||
}
|
||||
|
||||
internal bool HasRowNumber(SqlNode node) {
|
||||
this.rowNumberVisitor.Visit(node);
|
||||
return rowNumberVisitor.HasRowNumber;
|
||||
}
|
||||
|
||||
internal bool HasRowNumber(SqlRow row) {
|
||||
foreach (SqlColumn column in row.Columns) {
|
||||
if (this.HasRowNumber(column)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
internal SqlColumn RowNumberColumn {
|
||||
get {
|
||||
return rowNumberVisitor.HasRowNumber ? rowNumberVisitor.CurrentColumn : null;
|
||||
}
|
||||
}
|
||||
|
||||
private class Visitor: SqlVisitor {
|
||||
bool hasRowNumber = false;
|
||||
|
||||
public bool HasRowNumber {
|
||||
get { return hasRowNumber; }
|
||||
}
|
||||
|
||||
public SqlColumn CurrentColumn { private set; get; }
|
||||
|
||||
internal override SqlRowNumber VisitRowNumber(SqlRowNumber rowNumber) {
|
||||
this.hasRowNumber = true;
|
||||
return rowNumber;
|
||||
}
|
||||
|
||||
// shortcuts
|
||||
internal override SqlExpression VisitScalarSubSelect(SqlSubSelect ss) {
|
||||
return ss;
|
||||
}
|
||||
|
||||
internal override SqlExpression VisitSubSelect(SqlSubSelect ss) {
|
||||
return ss;
|
||||
}
|
||||
|
||||
internal override SqlRow VisitRow(SqlRow row)
|
||||
{
|
||||
for (int i = 0, n = row.Columns.Count; i < n; i++) {
|
||||
row.Columns[i].Expression = this.VisitExpression(row.Columns[i].Expression);
|
||||
if (this.hasRowNumber) {
|
||||
this.CurrentColumn = row.Columns[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
return row;
|
||||
}
|
||||
internal override SqlSelect VisitSelect(SqlSelect select) {
|
||||
this.Visit(select.Row);
|
||||
this.Visit(select.Where);
|
||||
|
||||
return select;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user