/// <summary> /// Procesa una exportación de las tablas de esquema a archivos CSV /// </summary> internal bool Execute(SentenceExportCsvSchema sentence) { bool exported = false; // Exporta los archivos using (BlockLogModel block = Processor.Manager.Logger.Default.CreateBlock(LogModel.LogType.Info, $"Start exporting tables from {sentence.Source}")) { ProviderModel provider = Processor.GetProvider(sentence.Source); if (provider == null) { block.Error($"Can't find the provider '{sentence.Source}'"); } else { // Supone que se ha exportado correctamente exported = true; // Elimina los archivos si es necesario if (sentence.DeleteOldFiles) { DeletePathFiles(block, Processor.Manager.Step.Project.GetFullFileName(sentence.Path)); } // Exporta las tablas del esquema (mientras no haya errores foreach (SentenceExportCsv sentenceCsv in GetExportFileSentences(block, provider, sentence)) { if (exported) { exported = new ExportCsvManager(Processor).Execute(sentenceCsv); } } } } // Devuelve el valor que indica si se ha exportado return(exported); }
/// <summary> /// Crea una sentencia de exportación a CSV con los datos de la tabla /// </summary> private SentenceExportCsv CreateSentence(SentenceExportCsvSchema sentence, TableDbModel table) { SentenceExportCsv exportSentence = new SentenceExportCsv(); // Asigna las propiedades exportSentence.Source = sentence.Source; exportSentence.FileName = table.Name + ".csv"; exportSentence.Command = GetSelect(table); exportSentence.BatchSize = sentence.BatchSize; exportSentence.Timeout = sentence.Timeout; // Asigna los parámetros de archivo exportSentence.Definition = sentence.Definition; // Devuelve la sentencia de exportación return(exportSentence); }
/// <summary> /// Carga una sentencia <see cref="SentenceExportCsvSchema"/> /// </summary> private SentenceBase LoadSentenceExportSchema(MLNode rootML) { SentenceExportCsvSchema sentence = new SentenceExportCsvSchema(); // Asigna las propiedades básicas sentence.Source = rootML.Attributes[TagSource].Value; sentence.Path = rootML.Attributes[TagPath].Value; sentence.DeleteOldFiles = rootML.Attributes[TagDeleteOldFiles].Value.GetBool(); sentence.BatchSize = rootML.Attributes[TagBatchSize].Value.GetInt(BatchSizeDefault); sentence.Timeout = GetTimeout(rootML, TimeSpan.FromHours(2)); // Carga los parámetros del CSV LoadDefinitionCsv(sentence.Definition, rootML); // Carga las tablas exluidas sentence.ExcludeRules.AddRange(LoadExcludeRules(rootML)); // Devuelve la sentencia return(sentence); }
/// <summary> /// Obtiene los comandos para exportación de los archivos asociados a las tablas /// </summary> private List <SentenceExportCsv> GetExportFileSentences(BlockLogModel block, ProviderModel provider, SentenceExportCsvSchema sentence) { List <SentenceExportCsv> sentences = new List <SentenceExportCsv>(); // Obtiene las sentencias foreach (TableDbModel table in provider.LoadSchema().Tables) { if (sentence.ExcludeRules.CheckMustExclude(table.Name)) { block.Info($"Skip table {table.Name} because is excluded"); } else { sentences.Add(CreateSentence(sentence, table)); } } // Devuelve la colección de instrucciones return(sentences); }