Esempio n. 1
0
        /// <summary>
        /// Prepares the command for execution by generating any necessary SQL.
        /// </summary>
        /// <param name="materializer">The materializer.</param>
        /// <returns>ExecutionToken&lt;TCommand&gt;.</returns>

        public override CommandExecutionToken <OleDbCommand, OleDbParameter> Prepare(Materializer <OleDbCommand, OleDbParameter> materializer)
        {
            if (materializer == null)
            {
                throw new ArgumentNullException(nameof(materializer), $"{nameof(materializer)} is null.");
            }

            var sqlBuilder = Table.CreateSqlBuilder(StrictMode);

            sqlBuilder.ApplyArgumentValue(DataSource, ArgumentValue, m_Options);
            sqlBuilder.ApplyDesiredColumns(materializer.DesiredColumns());

            var availableColumns = sqlBuilder.GetParameterizedColumns().ToList();

            var sql = new StringBuilder($"MERGE INTO {Table.Name.ToQuotedString()} target USING ");

            sql.Append("(VALUES (" + string.Join(", ", availableColumns.Select(c => "?")) + ")) AS source (" + string.Join(", ", availableColumns.Select(c => c.QuotedSqlName)) + ")");
            sql.Append(" ON ");
            sql.Append(string.Join(" AND ", sqlBuilder.GetKeyColumns().ToList().Select(c => $"target.{c.QuotedSqlName} = source.{c.QuotedSqlName}")));

            sql.Append(" WHEN MATCHED THEN UPDATE SET ");
            sql.Append(string.Join(", ", sqlBuilder.GetUpdateColumns().Select(x => $"{x.QuotedSqlName} = source.{x.QuotedSqlName}")));

            var insertColumns = sqlBuilder.GetInsertColumns();

            sql.Append(" WHEN NOT MATCHED THEN INSERT (");
            sql.Append(string.Join(", ", insertColumns.Select(x => x.QuotedSqlName)));
            sql.Append(") VALUES (");
            sql.Append(string.Join(", ", insertColumns.Select(x => "source." + x.QuotedSqlName)));
            sql.Append(" )");
            sqlBuilder.BuildSelectClause(sql, " OUTPUT ", "Inserted.", null);
            sql.Append(";");

            return(new OleDbCommandExecutionToken(DataSource, "Insert or update " + Table.Name, sql.ToString(), sqlBuilder.GetParameters()));
        }
Esempio n. 2
0
        /// <summary>
        /// Prepares the command for execution by generating any necessary SQL.
        /// </summary>
        /// <param name="materializer">The materializer.</param>
        /// <returns>ExecutionToken&lt;TCommand&gt;.</returns>

        public override CommandExecutionToken <SqlCommand, SqlParameter> Prepare(Materializer <SqlCommand, SqlParameter> materializer)
        {
            if (materializer == null)
            {
                throw new ArgumentNullException(nameof(materializer), $"{nameof(materializer)} is null.");
            }

            var sqlBuilder = Table.CreateSqlBuilder(StrictMode);

            sqlBuilder.ApplyArgumentValue(DataSource, ArgumentValue, m_Options);
            sqlBuilder.ApplyDesiredColumns(materializer.DesiredColumns());

            var prefix = m_Options.HasFlag(UpdateOptions.ReturnOldValues) ? "Deleted." : "Inserted.";

            var    sql = new StringBuilder();
            string header;
            string intoClause;
            string footer;

            sqlBuilder.UseTableVariable(Table, out header, out intoClause, out footer);

            sql.Append(header);
            sql.Append($"UPDATE {Table.Name.ToQuotedString()}");
            sqlBuilder.BuildSetClause(sql, " SET ", null, null);
            sqlBuilder.BuildSelectClause(sql, " OUTPUT ", prefix, intoClause);
            sqlBuilder.BuildWhereClause(sql, " WHERE ", null);
            sql.Append(";");
            sql.Append(footer);

            return(new SqlServerCommandExecutionToken(DataSource, "Update " + Table.Name, sql.ToString(), sqlBuilder.GetParameters()).CheckUpdateRowCount(m_Options));
        }
Esempio n. 3
0
        public override CommandExecutionToken <SqlCommand, SqlParameter> Prepare(Materializer <SqlCommand, SqlParameter> materializer)
        {
            if (materializer == null)
            {
                throw new ArgumentNullException(nameof(materializer), $"{nameof(materializer)} is null.");
            }

            var sqlBuilder = m_Table.CreateSqlBuilder(StrictMode);

            sqlBuilder.ApplyTableType(DataSource, OperationTypes.Insert, m_TableType.Columns);
            sqlBuilder.ApplyDesiredColumns(materializer.DesiredColumns());

            var sql = new StringBuilder();

            sqlBuilder.BuildInsertClause(sql, $"INSERT INTO {m_Table.Name.ToQuotedString()} (", null, ")");
            sqlBuilder.BuildSelectClause(sql, " OUTPUT ", "Inserted.", null);
            sqlBuilder.BuildSelectTvpForInsertClause(sql, " SELECT ", null, " FROM @ValuesParameter ");
            sql.Append(";");

            var parameters = sqlBuilder.GetParameters();

            parameters.Add(new SqlParameter()
            {
                ParameterName = "@ValuesParameter",
                Value         = m_Source,
                SqlDbType     = SqlDbType.Structured,
                TypeName      = m_TableType.Name.ToQuotedString()
            });
            return(new SqlServerCommandExecutionToken(DataSource, "Insert batch into " + m_Table.Name, sql.ToString(), parameters));
        }
Esempio n. 4
0
        /// <summary>
        /// Prepares the command for execution by generating any necessary SQL.
        /// </summary>
        /// <param name="materializer"></param>
        /// <returns><see cref="MySqlCommandExecutionToken" /></returns>
        public override CommandExecutionToken <MySqlCommand, MySqlParameter> Prepare(Materializer <MySqlCommand, MySqlParameter> materializer)
        {
            if (materializer == null)
            {
                throw new ArgumentNullException(nameof(materializer), $"{nameof(materializer)} is null.");
            }

            var sqlBuilder = Table.CreateSqlBuilder(StrictMode);

            sqlBuilder.ApplyArgumentValue(DataSource, ArgumentValue, m_Options);
            sqlBuilder.ApplyDesiredColumns(materializer.DesiredColumns());

            var sql = new StringBuilder();

            if (m_Options.HasFlag(UpdateOptions.ReturnOldValues))
            {
                sqlBuilder.BuildSelectByKeyStatement(sql, Table.Name.ToQuotedString(), ";");
                sql.AppendLine();
            }
            sqlBuilder.BuildUpdateByKeyStatement(sql, Table.Name.ToQuotedString(), ";");
            if (!m_Options.HasFlag(UpdateOptions.ReturnOldValues))
            {
                sql.AppendLine();
                sqlBuilder.BuildSelectByKeyStatement(sql, Table.Name.ToQuotedString(), ";");
            }

            return(new MySqlCommandExecutionToken(DataSource, "Update " + Table.Name, sql.ToString(), sqlBuilder.GetParameters()).CheckUpdateRowCount(m_Options));
        }
Esempio n. 5
0
        public override IEnumerable <T> ExecuteQuery <T>(List <SqlStatement> statements, List <KeyValuePair <string, object> > constants)
        {
            using (var selectCommand = Connection.CreateCommand())
            {
                var sql = GetSql(statements);
                selectCommand.CommandText = sql;

                foreach (var parameter in constants)
                {
                    selectCommand.Parameters.AddWithValue(parameter.Key, parameter.Value);
                }

                IDataReader reader;
                try
                {
                    reader = selectCommand.ExecuteReader();
                }
                catch (Exception e)
                {
                    throw new InvalidOperationException(sql, e);
                }

                try
                {
                    foreach (var record in Materializer.ReadTypedReader <T>(reader, LastSelectMembers))
                    {
                        yield return(record);
                    }
                }
                finally
                {
                    reader.Dispose();
                }
            }
        }
        /// <summary>
        /// Prepares the command for execution by generating any necessary SQL.
        /// </summary>
        /// <param name="materializer">The materializer.</param>
        /// <returns>ExecutionToken&lt;TCommand&gt;.</returns>

        public override CommandExecutionToken <OleDbCommand, OleDbParameter> Prepare(Materializer <OleDbCommand, OleDbParameter> materializer)
        {
            if (materializer == null)
            {
                throw new ArgumentNullException(nameof(materializer), $"{nameof(materializer)} is null.");
            }

            var sqlBuilder = Table.CreateSqlBuilder(StrictMode);

            sqlBuilder.ApplyArgumentValue(DataSource, ArgumentValue, m_Options);
            sqlBuilder.ApplyDesiredColumns(materializer.DesiredColumns());

            var    sql = new StringBuilder();
            string header;
            string intoClause;
            string footer;

            sqlBuilder.UseTableVariable(Table, out header, out intoClause, out footer);
            sql.Append(header);
            sql.Append("DELETE FROM " + Table.Name.ToQuotedString());
            sqlBuilder.BuildSelectClause(sql, " OUTPUT ", "Deleted.", intoClause);
            sqlBuilder.BuildAnonymousWhereClause(sql, " WHERE ", null, true);
            sql.Append(";");
            sql.Append(footer);

            return(new OleDbCommandExecutionToken(DataSource, "Delete from " + Table.Name, sql.ToString(), sqlBuilder.GetParameters()));
        }
Esempio n. 7
0
        public override CommandExecutionToken <SqlCommand, SqlParameter> Prepare(Materializer <SqlCommand, SqlParameter> materializer)
        {
            if (materializer == null)
            {
                throw new ArgumentNullException(nameof(materializer), $"{nameof(materializer)} is null.");
            }

            var sqlBuilder = m_Function.CreateSqlBuilder(StrictMode);

            sqlBuilder.ApplyRulesForSelect(DataSource);

            if (m_FunctionArgumentValue != null)
            {
                sqlBuilder.ApplyArgumentValue(DataSource, OperationTypes.None, m_FunctionArgumentValue);
            }

            var sql = new StringBuilder();

            sqlBuilder.BuildFromFunctionClause(sql, $"SELECT {m_Function.Name.ToQuotedString()} (", " )");
            sql.Append(";");

            List <SqlParameter> parameters;

            parameters = sqlBuilder.GetParameters();

            return(new SqlServerCommandExecutionToken(DataSource, "Query Function " + m_Function.Name, sql.ToString(), parameters));
        }
Esempio n. 8
0
        /// <summary>
        /// Prepares the command for execution by generating any necessary SQL.
        /// </summary>
        /// <param name="materializer">The materializer.</param>
        /// <returns>ExecutionToken&lt;TCommand&gt;.</returns>

        public override CommandExecutionToken <SqlCommand, SqlParameter> Prepare(Materializer <SqlCommand, SqlParameter> materializer)
        {
            if (materializer == null)
            {
                throw new ArgumentNullException(nameof(materializer), $"{nameof(materializer)} is null.");
            }

            var sqlBuilder = Table.CreateSqlBuilder(StrictMode);

            sqlBuilder.ApplyArgumentValue(DataSource, ArgumentValue, m_Options);
            sqlBuilder.ApplyDesiredColumns(materializer.DesiredColumns());

            var    sql = new StringBuilder();
            string header;
            string intoClause;
            string footer;

            sqlBuilder.UseTableVariable(Table, out header, out intoClause, out footer);
            sql.Append(header);

            sqlBuilder.BuildInsertClause(sql, $"INSERT INTO {Table.Name.ToQuotedString()} (", null, ")");
            sqlBuilder.BuildSelectClause(sql, " OUTPUT ", "Inserted.", intoClause);
            sqlBuilder.BuildValuesClause(sql, " VALUES (", ")");
            sql.Append(";");

            sql.Append(footer);


            return(new SqlServerCommandExecutionToken(DataSource, "Insert into " + Table.Name, sql.ToString(), sqlBuilder.GetParameters()));
        }
        /// <summary>
        /// Prepares the command for execution by generating any necessary SQL.
        /// </summary>
        /// <param name="materializer">The materializer.</param>
        /// <returns>ExecutionToken&lt;TCommand&gt;.</returns>

        public override CommandExecutionToken <OleDbCommand, OleDbParameter> Prepare(Materializer <OleDbCommand, OleDbParameter> materializer)
        {
            if (materializer == null)
            {
                throw new ArgumentNullException(nameof(materializer), $"{nameof(materializer)} is null.");
            }

            var sqlBuilder = m_Table.CreateSqlBuilder(StrictMode);

            sqlBuilder.ApplyArgumentValue(DataSource, m_NewValues, m_Options);
            sqlBuilder.ApplyDesiredColumns(materializer.DesiredColumns());

            var prefix = m_Options.HasFlag(UpdateOptions.ReturnOldValues) ? "Deleted." : "Inserted.";

            var sql = new StringBuilder($"UPDATE {m_Table.Name.ToQuotedString()}");

            sqlBuilder.BuildAnonymousSetClause(sql, " SET ", null, null);
            sqlBuilder.BuildSelectClause(sql, " OUTPUT ", prefix, null);
            sql.Append(" WHERE " + m_WhereClause);
            sql.Append(";");

            var parameters = sqlBuilder.GetParameters();

            parameters.AddRange(m_Parameters);

            return(new OleDbCommandExecutionToken(DataSource, "Update " + m_Table.Name, sql.ToString(), parameters).CheckUpdateRowCount(m_Options, m_ExpectedRowCount));
        }
Esempio n. 10
0
        /// <summary>
        /// Prepares the command for execution by generating any necessary SQL.
        /// </summary>
        /// <param name="materializer">The materializer.</param>
        /// <returns>ExecutionToken&lt;TCommand&gt;.</returns>

        public override CommandExecutionToken <SqlCommand, SqlParameter> Prepare(Materializer <SqlCommand, SqlParameter> materializer)
        {
            if (materializer == null)
            {
                throw new ArgumentNullException(nameof(materializer), $"{nameof(materializer)} is null.");
            }

            var sqlBuilder = Table.CreateSqlBuilder(StrictMode);

            sqlBuilder.ApplyArgumentValue(DataSource, ArgumentValue, m_Options);
            sqlBuilder.ApplyDesiredColumns(materializer.DesiredColumns());

            if (KeyColumns.Count > 0)
            {
                sqlBuilder.OverrideKeys(KeyColumns);
            }

            var    sql = new StringBuilder();
            string?header;
            string?intoClause;
            string?footer;

            sqlBuilder.UseTableVariable(Table, out header, out intoClause, out footer);
            sql.Append(header);
            sql.Append("DELETE FROM " + Table.Name.ToQuotedString());
            sqlBuilder.BuildSelectClause(sql, " OUTPUT ", "Deleted.", intoClause);
            sqlBuilder.BuildWhereClause(sql, " WHERE ", null);
            sql.Append(";");
            sql.Append(footer);

            return(new SqlServerCommandExecutionToken(DataSource, "Delete from " + Table.Name, sql.ToString(), sqlBuilder.GetParameters()).CheckDeleteRowCount(m_Options));
        }
Esempio n. 11
0
        public void ThenEachCategoryContainsData()
        {
            // Build
            SqlConnection connection = (SqlConnection)DbConnectionFactory.Get().CreateIfNotExists("name=DefaultConnection");
            SqlCommand    command    = connection.CreateCommand();

            command.CommandType = CommandType.StoredProcedure;
            command.CommandText = "dbo.GetAllCategories";

            // Operator
            connection.OpenIfNot();
            IDataReader             queryResult          = command.ExecuteReader();
            Materializer <Category> categoryMaterializer = new Materializer <Category>(queryResult);
            List <Category>         categories           = new List <Category>();

            while (queryResult.Read())
            {
                categories.Add(categoryMaterializer.Materialize(queryResult));
            }

            // Check
            foreach (Category cat in categories)
            {
                AssertPropertiesAreNotNull(cat.GetType(), cat);
            }
        }
Esempio n. 12
0
    /// <summary>
    /// Prepares the command for execution by generating any necessary SQL.
    /// </summary>
    /// <param name="materializer"></param>
    /// <returns><see cref="MySqlCommandExecutionToken" /></returns>
    public override CommandExecutionToken <MySqlCommand, MySqlParameter> Prepare(Materializer <MySqlCommand, MySqlParameter> materializer)
    {
        if (materializer == null)
        {
            throw new ArgumentNullException(nameof(materializer), $"{nameof(materializer)} is null.");
        }

        var sqlBuilder     = Table.CreateSqlBuilder(StrictMode);
        var desiredColumns = materializer.DesiredColumns();

        sqlBuilder.ApplyArgumentValue(DataSource, ArgumentValue, m_Options, desiredColumns == Materializer.NoColumns);
        sqlBuilder.ApplyDesiredColumns(desiredColumns);

        if (KeyColumns.Count > 0)
        {
            sqlBuilder.OverrideKeys(KeyColumns);
        }

        var sql = new StringBuilder();

        sqlBuilder.BuildSelectByKeyStatement(sql, Table.Name.ToQuotedString(), ";");
        sql.AppendLine();
        sqlBuilder.BuildDeleteStatement(sql, Table.Name.ToQuotedString(), ";");

        return(new MySqlCommandExecutionToken(DataSource, "Delete from " + Table.Name, sql.ToString(), sqlBuilder.GetParameters()).CheckDeleteRowCount(m_Options));
    }
Esempio n. 13
0
    /// <summary>
    /// Prepares the command for execution by generating any necessary SQL.
    /// </summary>
    /// <param name="materializer"></param>
    /// <returns><see cref="AccessCommandExecutionToken" /></returns>
    public override CommandExecutionToken <OleDbCommand, OleDbParameter> Prepare(Materializer <OleDbCommand, OleDbParameter> materializer)
    {
        if (materializer == null)
        {
            throw new ArgumentNullException(nameof(materializer), $"{nameof(materializer)} is null.");
        }

        var sqlBuilder     = Table.CreateSqlBuilder(StrictMode);
        var desiredColumns = materializer.DesiredColumns();

        sqlBuilder.ApplyArgumentValue(DataSource, ArgumentValue, m_Options, desiredColumns == Materializer.NoColumns);
        sqlBuilder.ApplyDesiredColumns(desiredColumns);

        if (KeyColumns.Count > 0)
        {
            sqlBuilder.OverrideKeys(KeyColumns);
        }

        var sql = new StringBuilder();

        sql.Append("DELETE FROM " + Table.Name.ToQuotedString());
        sqlBuilder.BuildWhereClause(sql, " WHERE ", null);
        sql.Append(";");

        return(new AccessCommandExecutionToken(DataSource, "Delete from " + Table.Name, sql.ToString(), sqlBuilder.GetParameters(DataSource)).CheckDeleteRowCount(m_Options));
    }
Esempio n. 14
0
 void UpdateGoalMaterial()
 {
     if (_goalLife <= 0)
     {
         Material newMaterial = Materializer.GetMaterial("Dead Goal");
         gameObject.GetComponent <Renderer>().material = newMaterial;
     }
 }
Esempio n. 15
0
 private void Start()
 {
     rb           = GetComponent <Rigidbody>();
     materializer = GetComponent <Materializer>();
     player       = FindObjectOfType <Character>();
     fader        = GetComponent <FadeObject>();
     stuckSpears  = new List <Spear>();
 }
Esempio n. 16
0
    /// <summary>
    /// Prepares the command for execution by generating any necessary SQL.
    /// </summary>
    /// <param name="materializer">The materializer.</param>
    /// <returns>ExecutionToken&lt;TCommand&gt;.</returns>
    public override CommandExecutionToken <SqlCommand, SqlParameter> Prepare(Materializer <SqlCommand, SqlParameter> materializer)
    {
        if (materializer == null)
        {
            throw new ArgumentNullException(nameof(materializer), $"{nameof(materializer)} is null.");
        }

        var sqlBuilder = Table.CreateSqlBuilder(StrictMode);

        sqlBuilder.ApplyArgumentValue(DataSource, ArgumentValue, m_Options);
        sqlBuilder.ApplyDesiredColumns(materializer.DesiredColumns());

        if (KeyColumns.Count > 0)
        {
            sqlBuilder.OverrideKeys(KeyColumns);
        }

        var availableColumns = sqlBuilder.GetParameterizedColumns().ToList();

        var sql = new StringBuilder();

        sqlBuilder.UseTableVariable(Table, out var header, out var intoClause, out var footer);

        sql.Append(header);

        var identityInsert = m_Options.HasFlag(UpsertOptions.IdentityInsert);

        if (identityInsert)
        {
            sql.AppendLine($"SET IDENTITY_INSERT {Table.Name.ToQuotedString()} ON;");
        }

        sql.Append($"MERGE INTO {Table.Name.ToQuotedString()} WITH ( UPDLOCK, SERIALIZABLE ) target USING "); sql.Append("(VALUES (" + string.Join(", ", availableColumns.Select(c => c.SqlVariableName)) + ")) AS source (" + string.Join(", ", availableColumns.Select(c => c.QuotedSqlName)) + ")");
        sql.Append(" ON ");
        sql.Append(string.Join(" AND ", sqlBuilder.GetKeyColumns().ToList().Select(c => $"target.{c.QuotedSqlName} = source.{c.QuotedSqlName}")));

        sql.Append(" WHEN MATCHED THEN UPDATE SET ");
        sql.Append(string.Join(", ", sqlBuilder.GetUpdateColumns().Select(x => $"{x.QuotedSqlName} = source.{x.QuotedSqlName}")));

        var insertColumns = sqlBuilder.GetInsertColumns(m_Options.HasFlag(UpsertOptions.IdentityInsert));

        sql.Append(" WHEN NOT MATCHED THEN INSERT (");
        sql.Append(string.Join(", ", insertColumns.Select(x => x.QuotedSqlName)));
        sql.Append(") VALUES (");
        sql.Append(string.Join(", ", insertColumns.Select(x => "source." + x.QuotedSqlName)));
        sql.Append(" )");
        sqlBuilder.BuildSelectClause(sql, " OUTPUT ", "Inserted.", intoClause);
        sql.Append(";");
        sql.Append(footer);

        if (identityInsert)
        {
            sql.AppendLine($"SET IDENTITY_INSERT {Table.Name.ToQuotedString()} OFF;");
        }

        return(new SqlServerCommandExecutionToken(DataSource, "Insert or update " + Table.Name, sql.ToString(), sqlBuilder.GetParameters()));
    }
Esempio n. 17
0
 void Awake()
 {
     rb           = GetComponent <Rigidbody>();
     materializer = GetComponent <Materializer>();
     recovery     = GetComponentInChildren <ToolRecovery>();
     recovery.SetColliderActive(false);
     damageText.enabled   = false;
     bodyCollider.enabled = false;
 }
Esempio n. 18
0
        /// <summary>
        /// Prepares the command for execution by generating any necessary SQL.
        /// </summary>
        /// <param name="materializer"></param>
        /// <returns><see cref="AccessCommandExecutionToken" /></returns>
        public override CommandExecutionToken <OleDbCommand, OleDbParameter> Prepare(Materializer <OleDbCommand, OleDbParameter> materializer)
        {
            if (materializer == null)
            {
                throw new ArgumentNullException(nameof(materializer), $"{nameof(materializer)} is null.");
            }

            if (!Table.IsTable)
            {
                throw new MappingException($"Cannot perform an update operation on the view {Table.Name}.");
            }

            if (!Table.HasPrimaryKey && !m_Options.HasFlag(UpdateOptions.UseKeyAttribute) && KeyColumns.Count == 0)
            {
                throw new MappingException($"Cannot perform an update operation on {Table.Name} unless UpdateOptions.UseKeyAttribute or .WithKeys() is specified.");
            }

            var sqlBuilder = Table.CreateSqlBuilder(StrictMode);

            sqlBuilder.ApplyArgumentValue(DataSource, ArgumentValue, m_Options);
            sqlBuilder.ApplyDesiredColumns(materializer.DesiredColumns());

            if (KeyColumns.Count > 0)
            {
                sqlBuilder.OverrideKeys(KeyColumns);
            }

            var sql = new StringBuilder($"UPDATE {Table.Name.ToQuotedString()}");

            sqlBuilder.BuildSetClause(sql, " SET ", null, null);
            sqlBuilder.BuildWhereClause(sql, " WHERE ", null);
            sql.Append(";");

            var updateCommand = new AccessCommandExecutionToken(DataSource, "Update " + Table.Name, sql.ToString(), sqlBuilder.GetParametersKeysLast()).CheckUpdateRowCount(m_Options);

            updateCommand.ExecutionMode = AccessCommandExecutionMode.NonQuery;

            var desiredColumns = materializer.DesiredColumns();

            if (desiredColumns == Materializer.NoColumns)
            {
                return(updateCommand);
            }

            if (m_Options.HasFlag(UpdateOptions.ReturnOldValues))
            {
                var result = PrepareRead(desiredColumns, "before");
                result.NextCommand = updateCommand;
                return(result);
            }
            else
            {
                updateCommand.NextCommand = PrepareRead(desiredColumns, "after");
                return(updateCommand);
            }
        }
Esempio n. 19
0
        public override CommandExecutionToken <OleDbCommand, OleDbParameter> Prepare(Materializer <OleDbCommand, OleDbParameter> materializer)
        {
            if (materializer == null)
            {
                throw new ArgumentNullException(nameof(materializer), $"{nameof(materializer)} is null.");
            }

            var sqlBuilder = m_Table.CreateSqlBuilder(StrictMode);

            sqlBuilder.ApplyDesiredColumns(materializer.DesiredColumns());

            List <OleDbParameter> parameters;
            var sql = new StringBuilder();

            sql.Append("DELETE FROM " + m_Table.Name.ToQuotedString());
            if (m_FilterValue != null)
            {
                sql.Append(" WHERE " + sqlBuilder.ApplyFilterValue(m_FilterValue, m_FilterOptions));
                parameters = sqlBuilder.GetParameters();
            }
            else if (!string.IsNullOrWhiteSpace(m_WhereClause))
            {
                sql.Append(" WHERE " + m_WhereClause);
                parameters = SqlBuilder.GetParameters <OleDbParameter>(m_ArgumentValue);
                parameters.AddRange(sqlBuilder.GetParameters());
            }
            else
            {
                parameters = sqlBuilder.GetParameters();
            }
            sql.Append(";");
            if (m_Parameters != null)
            {
                parameters.AddRange(m_Parameters);
            }

            var deleteCommand = new AccessCommandExecutionToken(DataSource, "Delete from " + m_Table.Name, sql.ToString(), parameters);

            var desiredColumns = materializer.DesiredColumns();

            if (desiredColumns == Materializer.NoColumns)
            {
                return(deleteCommand);
            }

            var result = PrepareRead(desiredColumns);

            result.NextCommand = deleteCommand;
            return(result);

            //var sqlBuilder2

            //    sqlBuilder.BuildSelectClause(sql, "SELECT ", null, " FROM " + m_Table.Name.ToQuotedString());
            //    sql.AppendLine(" WHERE " + m_WhereClause + ";");
        }
 /// <summary>
 /// Initializes a new instance of this class.
 /// </summary>
 /// <param name="dataSource">The data source.</param>
 /// <param name="materializer">The materializer.</param>
 /// <param name="resultAccessMethod">The value describing how it is supposed to access query result.</param>
 /// <param name="tupleParameterBindings">The tuple parameter bindings.</param>
 /// <param name="tupleParameters">The tuple parameters.</param>
 public TranslatedQuery(ExecutableProvider dataSource,
                        Materializer materializer,
                        ResultAccessMethod resultAccessMethod,
                        Dictionary <Parameter <Tuple>, Tuple> tupleParameterBindings, IEnumerable <Parameter <Tuple> > tupleParameters)
 {
     DataSource             = dataSource;
     Materializer           = materializer;
     ResultAccessMethod     = resultAccessMethod;
     TupleParameterBindings = new Dictionary <Parameter <Tuple>, Tuple>(tupleParameterBindings);
     TupleParameters        = tupleParameters.ToList();
 }
Esempio n. 21
0
        public override CommandExecutionToken <SqlCommand, SqlParameter> Prepare(Materializer <SqlCommand, SqlParameter> materializer)
        {
            if (materializer == null)
            {
                throw new ArgumentNullException(nameof(materializer), $"{nameof(materializer)} is null.");
            }

            var sqlBuilder = m_Table.CreateSqlBuilder(StrictMode);

            sqlBuilder.ApplyDesiredColumns(materializer.DesiredColumns());

            //This sets up the sqlBuilder. We're not actually going to build the parameters now
            sqlBuilder.ApplyArgumentValue(DataSource, m_SourceList[0], m_Options);

            var sql = new StringBuilder();

            bool identityInsert = m_Options.HasFlag(InsertOptions.IdentityInsert);

            if (identityInsert)
            {
                sql.AppendLine($"SET IDENTITY_INSERT {m_Table.Name.ToQuotedString()} ON;");
            }

            sqlBuilder.BuildInsertClause(sql, $"INSERT INTO {m_Table.Name.ToQuotedString()} (", null, ")", identityInsert);
            sqlBuilder.BuildSelectClause(sql, " OUTPUT ", "Inserted.", null);
            sql.AppendLine("VALUES");

            var parameters = new List <SqlParameter>();

            for (var i = 0; i < m_SourceList.Count; i++)
            {
                var parameterSuffix = "_" + i;
                var footer          = (i == m_SourceList.Count - 1) ? ");" : "),";

                sqlBuilder.OverrideArgumentValue(DataSource, AuditRules.OperationTypes.Insert, m_SourceList[i]);
                sqlBuilder.BuildValuesClause(sql, "(", footer, identityInsert, parameterSuffix, parameters, Utilities.ParameterBuilderCallback);
            }

            var maxParams = DataSource.DatabaseMetadata.MaxParameters !.Value;

            if (parameters.Count > maxParams)
            {
                var parametersPerRow = parameters.Count / m_SourceList.Count;
                var maxRows          = maxParams / parametersPerRow;
                throw new InvalidOperationException($"Batch insert exceeds SQL Server's parameter limit of {DataSource.DatabaseMetadata.MaxParameters}. Supply a table type, break the call into batches of {maxRows}, use InsertMultipleBatch, or use BulkInsert");
            }

            if (identityInsert)
            {
                sql.AppendLine($"SET IDENTITY_INSERT {m_Table.Name.ToQuotedString()} OFF;");
            }

            return(new SqlServerCommandExecutionToken(DataSource, "Insert batch into " + m_Table.Name, sql.ToString(), parameters));
        }
Esempio n. 22
0
 internal static M Get(Identity id)
 {
     if (InstanceStore.HasCollection(id))
     {
         return(InstanceStore.GetInstance(id));
     }
     else
     {
         return(InstanceStore.AddInstanceFromStorage(id, Materializer.Read(Definitions.GetIdentities(id), Settings).ToList()).GetInstance());
     }
 }
        /// <summary>
        /// Prepares the command for execution by generating any necessary SQL.
        /// </summary>
        /// <param name="materializer"></param>
        /// <returns><see cref="MySqlCommandExecutionToken" /></returns>
        public override CommandExecutionToken <MySqlCommand, MySqlParameter> Prepare(Materializer <MySqlCommand, MySqlParameter> materializer)
        {
            if (materializer == null)
            {
                throw new ArgumentNullException(nameof(materializer), $"{nameof(materializer)} is null.");
            }

            var sqlBuilder = Table.CreateSqlBuilder(StrictMode);

            sqlBuilder.ApplyArgumentValue(DataSource, ArgumentValue, m_Options);
            sqlBuilder.ApplyDesiredColumns(materializer.DesiredColumns());

            var identityInsert = m_Options.HasFlag(UpsertOptions.IdentityInsert);

            var sql = new StringBuilder();
            List <MySqlParameter> keyParameters;
            var isPrimaryKeyIdentity = sqlBuilder.PrimaryKeyIsIdentity(out keyParameters);

            if (isPrimaryKeyIdentity && !identityInsert)
            {
                var areKeysNull = keyParameters.Any(c => c.Value == DBNull.Value || c.Value == null) ? true : false;
                if (areKeysNull)
                {
                    sqlBuilder.BuildInsertStatement(sql, Table.Name.ToString(), null);
                }
                else
                {
                    sqlBuilder.BuildUpdateByKeyStatement(sql, Table.Name.ToString(), null);
                }
                sql.Append(";");
            }
            else
            {
                sqlBuilder.BuildInsertClause(sql, $"INSERT INTO {Table.Name.ToString()} (", null, ")", identityInsert);
                sqlBuilder.BuildValuesClause(sql, " VALUES (", ")", identityInsert);
                sqlBuilder.BuildSetClause(sql, $" ON DUPLICATE KEY UPDATE ", null, null);
                sql.Append(";");
            }

            if (sqlBuilder.HasReadFields)
            {
                var keys = sqlBuilder.GetKeyColumns().ToList();
                if (keys.Count != 1)
                {
                    throw new NotSupportedException("Cannot return data from a MySQL Upsert unless there is a single primary key.");
                }
                var key = keys[0];

                sqlBuilder.BuildSelectClause(sql, "SELECT ", null, $" FROM {Table.Name.ToQuotedString()} WHERE {key.QuotedSqlName} = CASE WHEN {key.SqlVariableName} IS NULL OR {key.SqlVariableName} = 0 THEN LAST_INSERT_ID() ELSE {key.SqlVariableName} END;");
            }

            return(new MySqlCommandExecutionToken(DataSource, "Insert or update " + Table.Name, sql.ToString(), sqlBuilder.GetParameters()));
        }
        /// <summary>
        /// Executes the provided <paramref name="command"/>
        /// against the provided data source and returns the result.
        /// </summary>
        /// <param name="context">Provides the current operation context.</param>
        /// <param name="command">The command instance to execute.</param>
        protected override TEntity ExecuteCommand(DbOperationContext context,
                                                  DbCommandDescriptor command)
        {
            return(context.Provider.Execute(command).AsDataReader <TEntity>(reader => {
                if (reader.Read())
                {
                    return Materializer.Materialize(reader);
                }

                return default(TEntity);
            }));
        }
Esempio n. 25
0
        public override CommandExecutionToken <MySqlCommand, MySqlParameter> Prepare(Materializer <MySqlCommand, MySqlParameter> materializer)
        {
            if (materializer == null)
            {
                throw new ArgumentNullException(nameof(materializer), $"{nameof(materializer)} is null.");
            }

            var sqlBuilder = m_Table.CreateSqlBuilder(StrictMode);

            sqlBuilder.ApplyDesiredColumns(materializer.DesiredColumns());

            List <MySqlParameter> parameters;
            var sql = new StringBuilder();

            if (sqlBuilder.HasReadFields)
            {
                sqlBuilder.BuildSelectClause(sql, "SELECT ", null, " FROM " + m_Table.Name.ToQuotedString());
                if (m_FilterValue != null)
                {
                    sql.Append(" WHERE " + sqlBuilder.ApplyFilterValue(m_FilterValue, m_FilterOptions));
                }
                else if (!string.IsNullOrWhiteSpace(m_WhereClause))
                {
                    sql.Append(" WHERE " + m_WhereClause);
                }
                sql.AppendLine(";");
            }

            sql.Append("DELETE FROM " + m_Table.Name.ToQuotedString());
            if (m_FilterValue != null)
            {
                sql.Append(" WHERE " + sqlBuilder.ApplyFilterValue(m_FilterValue, m_FilterOptions));
                parameters = sqlBuilder.GetParameters();
            }
            else if (!string.IsNullOrWhiteSpace(m_WhereClause))
            {
                sql.Append(" WHERE " + m_WhereClause);
                parameters = SqlBuilder.GetParameters <MySqlParameter>(m_ArgumentValue);
                parameters.AddRange(sqlBuilder.GetParameters());
            }
            else
            {
                parameters = sqlBuilder.GetParameters();
            }
            sql.Append(";");

            if (m_Parameters != null)
            {
                parameters.AddRange(m_Parameters);
            }

            return(new MySqlCommandExecutionToken(DataSource, "Delete from " + m_Table.Name, sql.ToString(), parameters));
        }
        /// <summary>
        /// Executes the provided <paramref name="command"/>
        /// against the provided data source and returns the result.
        /// </summary>
        /// <param name="context">Provides the current operation context.</param>
        /// <param name="command">The command instance to execute.</param>
        protected override IEnumerable <TEntity> ExecuteCommand(DbOperationContext context,
                                                                DbCommandDescriptor command)
        {
            return(context.Provider.Execute(command).AsDataReader(reader => {
                List <TEntity> collection = new List <TEntity>(BufferSize);
                while (reader.Read())
                {
                    collection.Add(Materializer.Materialize(reader));
                }

                return collection;
            }));
        }
Esempio n. 27
0
 public JournalSequenceActor(IReadJournalDAO readJournalDao,
                             JournalSequenceRetrievalConfig config)
 {
     _mat =
         Materializer.CreateSystemMaterializer((ExtendedActorSystem)Context.System,
                                               ActorMaterializerSettings.Create(Context.System),
                                               "linq2db-query");
     _readJournalDao = readJournalDao;
     _config         = config;
     queryDelay      = config.QueryDelay;
     maxTries        = config.MaxTries;
     _log            = Context.GetLogger();
 }
Esempio n. 28
0
    /// <summary>
    /// Prepares the command for execution by generating any necessary SQL.
    /// </summary>
    /// <param name="materializer"></param>
    /// <returns><see cref="MySqlCommandExecutionToken" /></returns>
    public override CommandExecutionToken <MySqlCommand, MySqlParameter> Prepare(Materializer <MySqlCommand, MySqlParameter> materializer)
    {
        if (materializer == null)
        {
            throw new ArgumentNullException(nameof(materializer), $"{nameof(materializer)} is null.");
        }

        var identityInsert = m_Options.HasFlag(InsertOptions.IdentityInsert);

        var sqlBuilder = Table.CreateSqlBuilder(StrictMode);

        sqlBuilder.ApplyArgumentValue(DataSource, ArgumentValue, m_Options);
        sqlBuilder.ApplyDesiredColumns(materializer.DesiredColumns());

        if (KeyColumns.Count > 0)
        {
            sqlBuilder.OverrideKeys(KeyColumns);
        }

        var sql = new StringBuilder();

        sqlBuilder.BuildInsertClause(sql, $"INSERT INTO {Table.Name.ToString()} (", null, ")", identityInsert);
        sqlBuilder.BuildValuesClause(sql, " VALUES (", ");", identityInsert);

        if (sqlBuilder.HasReadFields)
        {
            var identityColumn = Table.Columns.Where(c => c.IsIdentity).SingleOrDefault();
            if (!identityInsert && identityColumn != null)
            {
                sqlBuilder.BuildSelectClause(sql, "SELECT ", null, null);
                sql.Append(" FROM " + Table.Name.ToQuotedString());
                sql.Append(" WHERE " + identityColumn.QuotedSqlName + " = LAST_INSERT_ID()");
                sql.Append(";");
            }
            else
            {
                var primaryKeys = Table.PrimaryKeyColumns;
                if (primaryKeys.Count == 0)
                {
                    throw new MappingException($"Insert operation cannot return any values for { Table.Name} because it doesn't have a primary key.");
                }

                sqlBuilder.BuildSelectClause(sql, "SELECT ", null, null);
                sql.Append(" FROM " + Table.Name.ToQuotedString());
                sqlBuilder.BuildWhereClause(sql, " WHERE ", null);
                sql.Append(";");
            }
        }

        return(new MySqlCommandExecutionToken(DataSource, "Insert into " + Table.Name, sql.ToString(), sqlBuilder.GetParameters()));
    }
Esempio n. 29
0
        /// <summary>
        /// Prepares the command for execution by generating any necessary SQL.
        /// </summary>
        /// <param name="materializer"></param>
        /// <returns><see cref="AccessCommandExecutionToken" /></returns>
        public override CommandExecutionToken <OleDbCommand, OleDbParameter> Prepare(Materializer <OleDbCommand, OleDbParameter> materializer)
        {
            if (materializer == null)
            {
                throw new ArgumentNullException(nameof(materializer), $"{nameof(materializer)} is null.");
            }

            var sqlBuilder = m_Table.CreateSqlBuilder(StrictMode);

            sqlBuilder.ApplyArgumentValue(DataSource, m_NewValues, m_Options);
            sqlBuilder.ApplyDesiredColumns(materializer.DesiredColumns());

            var sql = new StringBuilder($"UPDATE {m_Table.Name.ToQuotedString()}");

            sqlBuilder.BuildSetClause(sql, " SET ", null, null);
            sql.Append(" WHERE " + m_WhereClause);
            sql.Append(";");

            var parameters = sqlBuilder.GetParameters();

            if (m_Parameters != null)
            {
                parameters.AddRange(m_Parameters);
            }

            var updateCommand = new AccessCommandExecutionToken(DataSource, "Update " + m_Table.Name, sql.ToString(), parameters).CheckUpdateRowCount(m_Options, m_ExpectedRowCount);

            updateCommand.ExecutionMode = AccessCommandExecutionMode.NonQuery;

            var desiredColumns = materializer.DesiredColumns();

            if (desiredColumns == Materializer.NoColumns)
            {
                return(updateCommand);
            }

            if (m_Options.HasFlag(UpdateOptions.ReturnOldValues))
            {
                var result = PrepareRead(desiredColumns);
                result.NextCommand = updateCommand;
                return(result);
            }
            else
            {
                updateCommand.NextCommand = PrepareRead(desiredColumns);
                return(updateCommand);
            }
        }
Esempio n. 30
0
 public void OnDownstreamFinish()
 {
     // Do Nothing until `timeout` to try and intercept completion as downstream,
     // but cancel stream after timeout if inlet is not closed to prevent deadlock.
     Materializer.ScheduleOnce(_timeout, () =>
     {
         var cb = GetAsyncCallback(() =>
         {
             if (!IsClosed(_nextElem))
             {
                 FailStage(new InvalidOperationException($"unfoldFlow source's inner flow canceled only upstream, while downstream remain available for {_timeout}"));
             }
         });
         cb();
     });
 }
        public void ThenCategoryShaperIsCreated()
        {
            // Build
            IDbConnection connection = DbConnectionFactory.Get().CreateIfNotExists("name=DefaultConnection");
            IDbCommand command = connection.CreateCommand();
            command.CommandType = CommandType.StoredProcedure;
            command.CommandText = "dbo.GetAllCategories";

            // Operator
            connection.OpenIfNot();
            IDataReader queryResult = command.ExecuteReader();
            Materializer<Category> categoryMaterializer = new Materializer<Category>(queryResult);

            // Check
            Assert.IsInstanceOfType(categoryMaterializer, typeof(Materializer<Category>));
        }
        public void ThenCollectionOfCategoriesReturned()
        {
            // Build
            SqlConnection connection = (SqlConnection)DbConnectionFactory.Get().CreateIfNotExists("name=DefaultConnection");
            SqlCommand command = connection.CreateCommand();
            command.CommandType = CommandType.StoredProcedure;
            command.CommandText = "dbo.GetAllCategories";

            // Operator
            connection.OpenIfNot();
            IDataReader queryResult = command.ExecuteReader();
            Materializer<Category> categoryMaterializer = new Materializer<Category>(queryResult);
            List<Category> categories = new List<Category>();
            while (queryResult.Read())
            {
                categories.Add(categoryMaterializer.Materialize(queryResult));
            }

            // Check
            Assert.IsTrue(categories.Any());
        }
Esempio n. 33
0
        public void ThenEmptyCategoryCollectionIsReturned()
        {
            // Build
            SqlConnection connection = (SqlConnection)DbConnectionFactory.Get().CreateIfNotExists("name=DefaultConnection");
            SqlCommand command = connection.CreateCommand();
            command.CommandType = CommandType.StoredProcedure;
            command.CommandText = "dbo.GetCategory";
            command.Parameters.AddWithValue("Id", SomeCategoryId);

            // Operator
            connection.OpenIfNot();
            IDataReader queryResult = command.ExecuteReader();
            Materializer<Category> categoryMaterializer = new Materializer<Category>(queryResult);
            List<Category> categories = new List<Category>();
            while (queryResult.Read())
            {
                categories.Add(categoryMaterializer.Materialize(queryResult));
            }

            // Check
            Assert.IsTrue(categories.Count() == 0);
        }
        public void ThenEachCategoryContainsData()
        {
            // Build
            SqlConnection connection = (SqlConnection)DbConnectionFactory.Get().CreateIfNotExists("name=DefaultConnection");
            SqlCommand command = connection.CreateCommand();
            command.CommandType = CommandType.StoredProcedure;
            command.CommandText = "dbo.GetAllCategories";

            // Operator
            connection.OpenIfNot();
            IDataReader queryResult = command.ExecuteReader();
            Materializer<Category> categoryMaterializer = new Materializer<Category>(queryResult);
            List<Category> categories = new List<Category>();
            while (queryResult.Read())
            {
                categories.Add(categoryMaterializer.Materialize(queryResult));
            }

            // Check
            foreach (Category cat in categories)
            {
                AssertPropertiesAreNotNull(cat.GetType(), cat);
            }
        }