Пример #1
0
 public RawData(MemoryDbCommand command, MemoryDbDataReader.ResultBatch batch = null)
 {
     Command    = command;
     Parameters = command.Parameters;
     Database   = ((MemoryDbConnection)Command.Connection).GetMemoryDatabase( );
     Batch      = batch;
 }
Пример #2
0
 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);
 }
Пример #3
0
        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);
        }
Пример #4
0
 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);
     }
 }
Пример #5
0
 public ExecuteNullStatement(MemoryDatabase memoryDatabase, MemoryDbCommand command)
 {
     _Database = memoryDatabase;
     _Command  = command;
 }
Пример #6
0
        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);
        }
Пример #7
0
 public ExecuteProcedure(MemoryDatabase memoryDatabase, MemoryDbCommand command)
 {
     _MemoryDatabase = memoryDatabase;
     _Command        = command;
 }
Пример #8
0
 public ExecuteView(MemoryDatabase memoryDatabase, MemoryDbCommand command)
 {
     _MemoryDatabase = memoryDatabase;
     _Command        = command;
 }
Пример #9
0
 public ExecuteQueryStatement(MemoryDatabase memoryDatabase, MemoryDbCommand command, List <Column> insertColumns = null)
 {
     _Command       = command;
     _InsertColumns = insertColumns;
 }