public ActionResult GetSistemas(bool gerarInsertComPK, [FromBody] dynamic data) { try { var queryOracle = new TradutorSqlToOracle().Traduz(data.query.Value, gerarInsertComPK); return(Json(new { query = queryOracle })); } catch (Exception ex) { return(BadRequest(ex.Message)); } }
private void BuscarConsultas(Entidade configEntidade) { var arquivosSQL = DirScripts.GetDirectories(configEntidade.Nome).Single().EnumerateFiles().Where(x => x.Name.EndsWith(".sql")); var arquivosJaProcessados = new List <string>(); // Executa a busca de consultas e parâmetros em todos os arquivos do diretório base foreach (var sqlFile in arquivosSQL) { if (arquivosJaProcessados.Contains(sqlFile.Name)) { return; } var nomeQuery = sqlFile.Name.Replace(".oracle", string.Empty).Replace(".sqlserver", string.Empty).Replace(".sql", string.Empty); var consultaOracle = false; var consultaSQLServer = false; var consultasSeparadas = false; if (arquivosSQL.Any(x => x.Name.Contains(nomeQuery + ".sqlserver.")) && arquivosSQL.Any(x => x.Name.Contains(nomeQuery + ".oracle."))) { consultasSeparadas = true; } else if (sqlFile.Name.Contains(".oracle.")) { consultaOracle = true; } else if (sqlFile.Name.Contains(".sqlserver.")) { consultaSQLServer = true; } var gerarInsertComPK = ColunasEntidade.Any(x => x.ChavePrimaria.HasValue && x.ChavePrimaria.Value); // Caso uma mesma query tenha a versão sqlserver e oracle separadas if (consultasSeparadas) { var querySqlServer = arquivosSQL .Single(x => x.Name.Contains(nomeQuery + ".sqlserver.")) .OpenText() .ReadToEnd(); var configConsulta = ExtrairConfigConsulta(querySqlServer); querySqlServer = new Regex("\n").Replace(querySqlServer, " "); querySqlServer = new Regex("\r").Replace(querySqlServer, " ") .Substring(querySqlServer.IndexOf("*/") + 2).Trim(); var queryOracle = arquivosSQL .Single(x => x.Name.Contains(nomeQuery + ".oracle.")) .OpenText() .ReadToEnd(); queryOracle = new Regex("\n").Replace(queryOracle, " "); queryOracle = new Regex("\r").Replace(queryOracle, " ") .Substring(queryOracle.IndexOf("*/") + 2).Trim(); if (configConsulta?.Retorno == null) { throw new Exception($"E necessario especificar um tipo de retorno na consulta {sqlFile.Name}"); } var consulta = new Consulta { Nome = nomeQuery, QuerySqlServer = querySqlServer, QueryOracle = queryOracle, Parametros = configConsulta.ParametrosConsulta, Retorno = configConsulta.Retorno, RetornaLista = configConsulta.RetornaLista }; Consultas.Add(consulta); arquivosJaProcessados.Add(arquivosSQL.Single(x => x.Name.Contains(nomeQuery + ".sqlserver.")).Name); arquivosJaProcessados.Add(arquivosSQL.Single(x => x.Name.Contains(nomeQuery + ".oracle.")).Name); } // Caso exista uma query apenas para sqlserver else if (consultaSQLServer) { var querySqlServer = sqlFile .OpenText() .ReadToEnd(); var configConsulta = ExtrairConfigConsulta(querySqlServer); querySqlServer = new Regex("\n").Replace(querySqlServer, " "); querySqlServer = new Regex("\r").Replace(querySqlServer, " ") .Substring(querySqlServer.IndexOf("*/") + 2).Trim(); if (configConsulta?.Retorno == null) { throw new Exception($"E necessario especificar um tipo de retorno na consulta {sqlFile.Name}"); } var consulta = new Consulta { Nome = nomeQuery, QuerySqlServer = querySqlServer, QueryOracle = string.Empty, Parametros = configConsulta.ParametrosConsulta, Retorno = configConsulta.Retorno, RetornaLista = configConsulta.RetornaLista }; Consultas.Add(consulta); arquivosJaProcessados.Add(sqlFile.Name); } // Caso exista uma query apenas para oracle else if (consultaOracle) { var queryOracle = sqlFile .OpenText() .ReadToEnd(); var configConsulta = ExtrairConfigConsulta(queryOracle); queryOracle = new Regex("\n").Replace(queryOracle, " "); queryOracle = new Regex("\r").Replace(queryOracle, " ") .Substring(queryOracle.IndexOf("*/") + 2).Trim(); if (configConsulta?.Retorno == null) { throw new Exception($"E necessario especificar um tipo de retorno na consulta {sqlFile.Name}"); } var consulta = new Consulta { Nome = nomeQuery, QuerySqlServer = string.Empty, QueryOracle = queryOracle, Parametros = configConsulta.ParametrosConsulta, Retorno = configConsulta.Retorno, RetornaLista = configConsulta.RetornaLista }; Consultas.Add(consulta); arquivosJaProcessados.Add(sqlFile.Name); } // Caminho padrão. Gera sqlserver e traduz para oracle else { var querySqlServer = sqlFile .OpenText() .ReadToEnd(); var configConsulta = ExtrairConfigConsulta(querySqlServer); querySqlServer = new Regex("\n").Replace(querySqlServer, " "); querySqlServer = new Regex("\r").Replace(querySqlServer, " ") .Substring(querySqlServer.IndexOf("*/") + 2).Trim(); var queryOracle = new TradutorSqlToOracle().Traduz(querySqlServer, gerarInsertComPK); if (configConsulta?.Retorno == null) { throw new Exception($"E necessario especificar um tipo de retorno na consulta {sqlFile.Name}"); } var consulta = new Consulta { Nome = nomeQuery, QuerySqlServer = querySqlServer, QueryOracle = queryOracle, Parametros = configConsulta.ParametrosConsulta, Retorno = configConsulta.Retorno, RetornaLista = configConsulta.RetornaLista }; Consultas.Add(consulta); arquivosJaProcessados.Add(sqlFile.Name); } //var sql = sqlFile.OpenText().ReadToEnd(); //// Extrai config da consulta //var configConsulta = ExtrairConfigConsulta(sql); //if (configConsulta?.Retorno == null) // throw new Exception($"E necessario especificar um tipo de retorno na consulta {sqlFile.Name}"); //var querySqlServer = new Regex("\n").Replace(sql, " "); //querySqlServer = new Regex("\r").Replace(querySqlServer, " "); //querySqlServer = querySqlServer.Substring(querySqlServer.IndexOf("*/") + 2).Trim(); //var gerarInsertComPK = ColunasEntidade.Any(x => x.ChavePrimaria.HasValue && x.ChavePrimaria.Value); //var queryOracle = ""; //// Se não tiver .sqlserver nem .oracle no nome, traduz pra oracle normalmente //if (!sqlFile.Name.Contains(".sqlserver.") && !sqlFile.Name.Contains(".oracle.")) //{ // queryOracle = new TradutorSqlToOracle().Traduz(querySqlServer, gerarInsertComPK); //} //// se tiver .oracle, a query do arquivo será a query do oracle sem tradução //else if (sqlFile.Name.Contains(".oracle.")) //{ // queryOracle = querySqlServer; //} //var consulta = new Consulta //{ // Nome = nomeQuery, // QuerySqlServer = querySqlServer, // QueryOracle = queryOracle, // Parametros = configConsulta.ParametrosConsulta, // Retorno = configConsulta.Retorno, // RetornaLista = configConsulta.RetornaLista //}; //Consultas.Add(consulta); } }
public string TraduzirParaOracle([FromBody] DadosTraducao dados) { var queryTraduzida = new TradutorSqlToOracle().Traduz(dados.Query, dados.GerarInsertComPK); return(queryTraduzida); }