private void FormColumns(StatementResult result)
{
if (result.Type == StatementResultType.Exception)
return;
IEnumerator<Row> enumerator = null;
if (result.Type == StatementResultType.CursorRef) {
enumerator = result.Cursor.GetEnumerator();
} else if (result.Type == StatementResultType.Result) {
enumerator = result.Result.GetEnumerator();
}
try {
if (enumerator != null) {
if (enumerator.MoveNext()) {
var row = enumerator.Current;
if (row != null) {
for (int c = 0; c < row.ColumnCount; ++c) {
row.GetValue(c);
}
}
}
}
} finally {
if (enumerator != null)
enumerator.Dispose();
}
TableInfo tableInfo;
if (result.Type == StatementResultType.CursorRef) {
tableInfo = result.Cursor.Source.TableInfo;
} else {
tableInfo = result.Result.TableInfo;
}
var columnCount = tableInfo.ColumnCount;
ColumnCount = columnCount;
columns = new QueryResultColumn[columnCount];
ITable source = null;
if (result.Type == StatementResultType.Result) {
source = result.Result;
} else if (result.Type == StatementResultType.CursorRef) {
source = result.Cursor.Source;
} else {
return;
}
for (int i = 0; i < columnCount; ++i) {
var v = source.GetResolvedColumnName(i);
string fieldName;
if (v.ParentName == null) {
// This means the column is an alias
fieldName = String.Format("@a{0}", v.Name);
} else {
// This means the column is an schema/table/column reference
fieldName = String.Format("@f{0}", v);
}
columns[i] = new QueryResultColumn(fieldName, tableInfo[i]);
if (IsKey(v))
columns[i].SetKey();
if (IsUnique(v))
columns[i].SetUnique();
}
RowCount = source.RowCount;
}