Пример #1
0
        /// <summary>
        ///		Ejecuta un script SQL interpretándolo antes
        /// </summary>
        private void ExecuteScriptSqlParsed(ProviderModel provider, string fileName, SentenceExecuteScript sentence)
        {
            List <SqlSectionModel> sections = new SqlParser().TokenizeByFile(fileName, MapVariables(GetVariables(), sentence.Mapping), out string error);

            // Si no hay ningún error, ejecuta el script
            if (string.IsNullOrWhiteSpace(error))
            {
                // Recorre las seccionaes
                foreach (SqlSectionModel section in sections)
                {
                    if (string.IsNullOrWhiteSpace(error) && section.Type == SqlSectionModel.SectionType.Sql &&
                        !string.IsNullOrWhiteSpace(section.Content))
                    {
                        try
                        {
                            provider.Execute(CreateDataProviderCommand(section.Content, sentence.Timeout));
                        }
                        catch (Exception exception)
                        {
                            error = $"Error when execute script {System.IO.Path.GetFileName(fileName)}. {exception.Message}";
                        }
                    }
                }
            }
            // Añade el error
            if (!string.IsNullOrWhiteSpace(error))
            {
                AddError(error);
            }
        }
Пример #2
0
        /// <summary>
        ///		Ejecuta un archivo de script SQL
        /// </summary>
        private void ExecuteScriptSql(SentenceExecuteScript sentence)
        {
            using (BlockLogModel block = Manager.Logger.Default.CreateBlock(LogModel.LogType.Info, $"Execute script {sentence.FileName}"))
            {
                ProviderModel provider = GetProvider(sentence.Target);

                if (provider == null)
                {
                    AddError($"Can't find the provider. Key: '{sentence.Target}'");
                }
                else if (string.IsNullOrWhiteSpace(sentence.FileName))
                {
                    AddError($"The script filename is not defined");
                }
                else
                {
                    string fileName = Manager.Step.Project.GetFullFileName(sentence.FileName);

                    if (!System.IO.File.Exists(fileName))
                    {
                        AddError($"Cant find the file '{fileName}'");
                    }
                    else if (!sentence.MustParse)
                    {
                        ExecuteScriptSqlRaw(provider, fileName, sentence.Timeout, sentence.SkipParameters);
                    }
                    else
                    {
                        ExecuteScriptSqlParsed(provider, fileName, sentence);
                    }
                }
            }
        }
Пример #3
0
        /// <summary>
        ///		Sentencia de ejecución de un script
        /// </summary>
        private SentenceBase LoadSentenceExecuteScript(MLNode rootML)
        {
            SentenceExecuteScript sentence = new SentenceExecuteScript();

            // Asigna las propiedades
            sentence.Target         = rootML.Attributes[TagTarget].Value.TrimIgnoreNull();
            sentence.FileName       = rootML.Attributes[TagFileName].Value.TrimIgnoreNull();
            sentence.MustParse      = rootML.Attributes[TagMustParse].Value.GetBool();
            sentence.SkipParameters = rootML.Attributes[TagSkipParameters].Value.GetBool();
            // Asigna los mapeos de variables
            foreach (MLNode nodeML in rootML.Nodes)
            {
                if (nodeML.Name == TagMap)
                {
                    sentence.Mapping.Add((nodeML.Attributes[TagVariable].Value, nodeML.Attributes[TagTo].Value));
                }
            }
            // Devuelve la sentencia creada
            return(sentence);
        }