コード例 #1
0
        private void ExecuteScript(ScriptAccessor scriptAccessor)
        {
            using (var connection = Configuration.GetConnection())
            {
                connection.InfoMessage += InfoMessage;

                using (var txn = connection.BeginTransaction())
                {
                    try
                    {
                        var script = scriptAccessor.Read();

                        var commands = Regex.Split(script, @"(?m)^\s*GO\s*\d*\s*$",
                                                   RegexOptions.IgnoreCase);

                        foreach (var c in commands.Where(q => !string.IsNullOrEmpty(q)))
                        {
                            new SqlCommand(c, connection, txn).ExecuteNonQuery();
                        }

                        txn.Commit();
                    }
                    catch
                    {
                        txn.Rollback();
                        throw;
                    }
                    finally
                    {
                        connection.InfoMessage -= InfoMessage;
                    }
                }
            }
        }
コード例 #2
0
        private string ExecuteScriptOnMaster(ScriptAccessor scriptAccessor)
        {
            var output = _runner.Run(
                _сonnectionStringBuilder.DataSource,
                _сonnectionStringBuilder.UserID,
                _сonnectionStringBuilder.Password,
                scriptAccessor.GetFullPath());

            return(output);
        }
コード例 #3
0
        protected void RaiseOnScriptSuccess(ScriptAccessor script)
        {
            var evt = this.OnScriptExecuted;

            if (evt != null)
            {
                evt(new ScriptRunResult {
                    Script = script
                });
            }
        }
コード例 #4
0
        private bool ContentHasChanged(
            SqlConnection connection,
            ScriptsRunInfo recordedScript,
            string foundScript)
        {
            var found     = new ScriptAccessor(foundScript);
            var foundInfo = new ScriptsRunInfo {
                ScriptText = found.Read()
            };

            return(foundInfo.ScriptHash != recordedScript.ScriptHash);
        }
コード例 #5
0
        protected void RaiseOnScriptFailure(ScriptAccessor script, Exception exception)
        {
            var evt = OnScriptExecuted;

            if (evt != null)
            {
                var result = new ScriptRunResult {
                    Script = script
                };
                result.RecordError(exception.Message);
                evt(result);
            }
        }
コード例 #6
0
        public void Apply(string statement)
        {
            var file = Path.GetTempFileName();

            File.WriteAllText(file, statement);

            var scriptAccessor = new ScriptAccessor(file);

            try
            {
                this.Apply(new Step {
                    Scripts = new[] { scriptAccessor }
                });
                RaiseOnScriptSuccess(scriptAccessor);
            }
            catch (Exception scriptApplicationException)
            {
                RaiseOnScriptFailure(scriptAccessor, scriptApplicationException);
            }
            finally
            {
                File.Delete(file);
            }
        }
コード例 #7
0
ファイル: Script.cs プロジェクト: sanyaade-research-hub/XMRM
        internal Script(string script, UUID scriptID, uint localID, IConfigSource config, Scene scene, PolicyLevel policy, ScriptAccessor scriptAccessor, bool error2Console)
        {
            m_hostSOP = scene.GetSceneObjectPart(localID);
            m_asset = m_hostSOP.Inventory.GetInventoryItem(scriptID);
            m_god = scene.UserAccountService.GetUserAccount(UUID.Zero, m_hostSOP.OwnerID);

            m_name = (m_god.Name + "." + m_hostSOP.Name + "." + m_asset.Name).Replace(" ", "");
            m_name = scriptAccessor.AddScript(this);

            m_scene = scene;
            m_config = config;
            m_policy = policy;
            m_error2Console = config.Configs["MRM"].GetBoolean("ErrorToConsole", true);
            m_scriptAccessor = scriptAccessor;
            m_errors = new ArrayList();

            SEUser securityUser = new SEUser(m_god.PrincipalID, m_god.Name, this);
            m_creds = new SecurityCredential(securityUser, m_scene);

            ScriptText = script;
        }
コード例 #8
0
ファイル: ScriptMRM.cs プロジェクト: JohnMcCaffery/XMRM
 internal ScriptMRM(string script, UUID id, uint localID, IConfigSource config, Scene scene, PolicyLevel policy, ScriptAccessor scriptAccessor, bool error2Console, bool sandboxed)
     : base(script, id, localID, config, scene, policy, scriptAccessor, error2Console)
 {
     m_setup = config.Configs["MRM"].GetBoolean("Sandboxed", true) ? new AppDomainSetup() : null;
 }
コード例 #9
0
ファイル: ScriptXMRM.cs プロジェクト: JohnMcCaffery/XMRM
 internal ScriptXMRM(string script, UUID id, uint localID, IConfigSource config, Scene scene, PolicyLevel policy, ScriptAccessor scriptAccessor, bool error2Console)
     : base(script, id, localID, config, scene, policy, scriptAccessor, error2Console)
 {
 }