Deveel.Data.Protocol.QueryResult.FormColumns C# (CSharp) Method

FormColumns() private method

private FormColumns ( StatementResult result ) : void
result Deveel.Data.Sql.Statements.StatementResult
return void
        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;
        }