Exemple #1
0
        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));
            }
        }
Exemple #2
0
        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);
        }