public object Select(RawTableJoinRow rows) { var selectExpression = ParseAsSelect(_FunctionCall.Sql); var querySpecification = (SqlQuerySpecification)selectExpression.SelectSpecification.QueryExpression; var db = (( MemoryDbConnection )_RawData.Command.Connection).GetMemoryDatabase( ); var batch = new MemoryDbDataReader.ResultBatch( ); var rawData = new RawData(_RawData.Command, batch); rawData.RawRowList.Add(rows); var statement = new ExecuteQueryStatement(db, _RawData.Command); statement.InitializeFields(batch, querySpecification.SelectClause.Children.ToList( ), rawData); new QueryResultBuilder(rawData, false).AddData(batch); var row = batch.ResultRows[0]; for (int fieldIndex = 0; fieldIndex < batch.Fields.Count; fieldIndex++) { if (row[fieldIndex] != null && row[fieldIndex] is DBNull == false) { _DbType = (DbType)Enum.Parse(typeof(DbType), batch.Fields[fieldIndex].DbType, true); _ReturnType = batch.Fields[fieldIndex].NetType; return(row[fieldIndex]); } } return(null); }
private bool EvaluateExpression(List <RawTableRow> rawDataRows, SqlExistsBooleanExpression expression) { bool hasRows; using (var reader = new MemoryDbDataReader(CommandBehavior.SingleResult)) { _Command.DataReader = reader; var tables = ((MemoryDbConnection )_Command.Connection).GetMemoryDatabase( ).Tables; var batch = new ExecuteQueryStatement(_Database, _Command).Execute(tables, _RawData, ( SqlQuerySpecification )expression.QueryExpression); hasRows = batch.ResultRows.Any(); _Command.DataReader = null; } return(hasRows); }
private MemoryDbDataReader.ResultBatchWithRawRows ExecuteSelect(SqlSelectStatement selectExpression, List <RawTableRow> rows) { var querySpecification = ( SqlQuerySpecification )selectExpression.SelectSpecification.QueryExpression; var db = (( MemoryDbConnection )_RawData.Command.Connection).GetMemoryDatabase( ); var command = new MemoryDbCommand(_RawData.Command.Connection); var batch = new MemoryDbDataReader.ResultBatchWithRawRows( ); var rawData = new RawData(command, batch) { RawRowList = _RawData.RawRowList, TableAliasList = _RawData.TableAliasList, SortOrder = selectExpression.SelectSpecification.OrderByClause.Items }; var statement = new ExecuteQueryStatement(db, command); statement.InitializeFields(batch, querySpecification.SelectClause.Children.ToList( ), rawData); if (string.IsNullOrWhiteSpace(_PartitionField) == false) { AddWhereParameter(batch, rawData, rows, querySpecification.WhereClause); } new QueryResultBuilder(rawData).AddData(batch); return(batch); }