/// <summary>
        ///		Procesa una importación de archivos CSV para las tablas de esquema de base de datos
        /// </summary>
        internal bool Execute(SentenceImportCsvSchema sentence)
        {
            bool imported = false;

            // Importa los archivos
            using (BlockLogModel block = Processor.Manager.Logger.Default.CreateBlock(LogModel.LogType.Info, $"Start importing tables from {sentence.Target}"))
            {
                ProviderModel provider = Processor.GetProvider(sentence.Target);

                if (provider == null)
                {
                    block.Error($"Can't find the provider '{sentence.Target}'");
                }
                else
                {
                    // Supone que todo se importa correctamente
                    imported = true;
                    // Ejecuta las sentencias de importación obtenidas a partir del esquema y los archivos
                    foreach (SentenceImportCsv sentenceCsv in GetImportFileSentences(block, provider, sentence))
                    {
                        if (imported)
                        {
                            // Log
                            block.Info($"Importing '{sentenceCsv.FileName}' in '{sentenceCsv.Table}'");
                            // Importa el archivo
                            imported = new ImportCsvManager(Processor).Execute(sentenceCsv);
                        }
                    }
                }
            }
            // Devuelve el valor que indica si se ha importado
            return(imported);
        }
        /// <summary>
        ///		Crea una sentencia de importación de una tabla con los datos de un archivo
        /// </summary>
        private SentenceImportCsv CreateSentence(SentenceImportCsvSchema sentence, TableDbModel table)
        {
            SentenceImportCsv importSentence = new SentenceImportCsv();

            // Asigna las propiedades
            importSentence.Target    = sentence.Target;
            importSentence.FileName  = table.Name + ".csv";
            importSentence.Table     = table.Name;
            importSentence.BatchSize = sentence.BatchSize;
            importSentence.Timeout   = sentence.Timeout;
            // Asigna los parámetros de archivo
            importSentence.Definition = sentence.Definition;
            // Devuelve la sentencia de importación
            return(importSentence);
        }
Пример #3
0
        /// <summary>
        ///		Carga una sentencia <see cref="SentenceImportCsvSchema"/>
        /// </summary>
        private SentenceImportCsvSchema LoadSentenceImportSchema(MLNode rootML)
        {
            SentenceImportCsvSchema sentence = new SentenceImportCsvSchema();

            // Asigna las propiedades básicas
            sentence.Target    = rootML.Attributes[TagTarget].Value;
            sentence.Path      = rootML.Attributes[TagPath].Value;
            sentence.BatchSize = rootML.Attributes[TagBatchSize].Value.GetInt(BatchSizeDefault);
            sentence.Timeout   = GetTimeout(rootML, TimeSpan.FromHours(2));
            // Obtiene los parámetros del archivo
            LoadDefinitionCsv(sentence.Definition, rootML);
            // Obtiene las tablas excluidas
            sentence.ExcludeRules.AddRange(LoadExcludeRules(rootML));
            // Devuelve la sentencia
            return(sentence);
        }
        /// <summary>
        ///		Obtiene los comandos para importación de los archivos asociados a las tablas
        /// </summary>
        private List <SentenceImportCsv> GetImportFileSentences(BlockLogModel block, ProviderModel provider, SentenceImportCsvSchema sentence)
        {
            List <SentenceImportCsv> sentences = new List <SentenceImportCsv>();

            // Obtiene las sentencias
            foreach (TableDbModel table in provider.LoadSchema().Tables)
            {
                if (sentence.ExcludeRules.CheckMustExclude(table.Name))
                {
                    block.Debug($"Skip table {table.Name} because is excluded");
                }
                else
                {
                    string fileName = System.IO.Path.Combine(Processor.Manager.Step.Project.GetFullFileName(sentence.Path), $"{table.Name}.csv");

                    if (System.IO.File.Exists(fileName))
                    {
                        sentences.Add(CreateSentence(sentence, table));
                    }
                }
            }
            // Devuelve la colección de instrucciones
            return(sentences);
        }