public RawData(MemoryDbCommand command, MemoryDbDataReader.ResultBatch batch = null) { Command = command; Parameters = command.Parameters; Database = ((MemoryDbConnection)Command.Connection).GetMemoryDatabase( ); Batch = batch; }
internal void AddToDatabase(MemoryDatabase database, MemoryDbConnection connection) { if (IsTempTable(_Table.Name)) { connection.TempTables.Add(_Table.FullName, _Table); } else { database.Tables.Add(_Table.FullName, _Table); } AddColumns(_CreateTable.Definition, database); AddConstraints(_CreateTable.Definition); }
private DataTypeInfo GuessDataType(SqlScalarExpression expression, DataTypeInfo currentDataType, MemoryDatabase database) { if (expression is SqlUnaryScalarExpression unaryExpression) { expression = unaryExpression.Expression; } switch (expression) { case SqlBuiltinScalarFunctionCallExpression function: { currentDataType = GetTypeFromFunction(currentDataType, function, database); break; } case SqlBinaryScalarExpression binary: { var newDataTypeLeft = GuessDataType(binary.Left, currentDataType, database); var newDataTypeRight = GuessDataType(binary.Right, currentDataType, database); currentDataType = UpdateDataType(binary, newDataTypeLeft, newDataTypeRight, currentDataType); break; } case SqlLiteralExpression literal: { var newDataType = new DataTypeInfo(literal); currentDataType = UpdateDataType(literal, newDataType, currentDataType); break; } case SqlColumnRefExpression columnRef: { var columnName = Helper.GetColumnName(columnRef); var column = Helper.FindColumn(new TableAndColumn( ), columnName, new Dictionary <string, Table>( ) { [_Table.FullName] = _Table }); currentDataType = UpdateDataType(columnRef, column, currentDataType); break; } default: throw new NotImplementedException($"GuessDataType() does not support expressions of type { expression.GetType( )}"); } return(currentDataType); }
private void AddColumns(SqlTableDefinition tableDefinition, MemoryDatabase database) { foreach (var columnDefinition in tableDefinition.ColumnDefinitions) { Column column; if (columnDefinition is SqlComputedColumnDefinition computedColumn) { var expression = computedColumn.Expression as SqlBuiltinScalarFunctionCallExpression; var dataType = GuessDataType(expression, null, database); column = new Column(_Table, columnDefinition.Name.Value, _Table.Columns.Count, expression, dataType); } else { column = new Column(_Table, columnDefinition.Name.Value, columnDefinition.DataType, database.UserDataTypes, _Table.Columns.Count); } AddColumnConstrains(columnDefinition, column); _Table.Columns.Add(column); } }
public ExecuteNullStatement(MemoryDatabase memoryDatabase, MemoryDbCommand command) { _Database = memoryDatabase; _Command = command; }
private DataTypeInfo GetTypeFromFunction(DataTypeInfo currentDataType, SqlBuiltinScalarFunctionCallExpression function, MemoryDatabase database) { DataTypeInfo dataType = SelectDataBuilder.GetDataTypeFromFunction(function.FunctionName); if (dataType != null) { return(dataType); } if (function is SqlConvertExpression convert) { return(new DataTypeInfo(convert.DataType.Sql, database.UserDataTypes)); } var dataTypes = new List <DataTypeInfo>( ); foreach (var argument in function.Arguments) { var newDataType = GuessDataType(argument, null, database); if (newDataType != null) { dataTypes.Add(newDataType); } } dataType = dataTypes.FirstOrDefault(d => d is Column) ?? dataTypes.FirstOrDefault( ); if (dataType != null) { return(dataType); } return(currentDataType); }
public ExecuteProcedure(MemoryDatabase memoryDatabase, MemoryDbCommand command) { _MemoryDatabase = memoryDatabase; _Command = command; }
public ExecuteView(MemoryDatabase memoryDatabase, MemoryDbCommand command) { _MemoryDatabase = memoryDatabase; _Command = command; }
public ExecuteQueryStatement(MemoryDatabase memoryDatabase, MemoryDbCommand command, List <Column> insertColumns = null) { _Command = command; _InsertColumns = insertColumns; }