Ejemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="parametros"></param>
        /// <param name="reader"></param>
        /// <param name="linha"></param>
        private static void ProcessaRetorno(EntidadeConsulta parametros, StringReader reader, out string linha)
        {
            linha = reader.ReadLine().Trim();

            while (linha.StartsWith("-"))
            {
                parametros.Retorno = linha.Substring(1);
                linha = reader.ReadLine().Trim();
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="parametros"></param>
        /// <param name="reader"></param>
        /// <param name="linha"></param>
        private static void ProcessaParametros(EntidadeConsulta parametros, StringReader reader, out string linha)
        {
            linha = reader.ReadLine().Trim();

            while (linha.StartsWith("-"))
            {
                var nomeParametro = linha.Substring(1, linha.IndexOf(":") - 1);
                var tipoParametro = linha.Substring(linha.IndexOf(":") + 1);

                parametros.Parametros.Add(new KeyValuePair <string, string>(tipoParametro, nomeParametro));

                linha = reader.ReadLine().Trim();
            }
        }
Ejemplo n.º 3
0
        private static EntidadeConsulta ExtrairEntidadeConsulta(string sql)
        {
            var reader = new StringReader(sql);

            // Lê a primeira linha e verifica se utiliza parametrização
            var linha = reader.ReadLine();

            if (linha != "/*Config")
            {
                return(null);
            }

            var parametros = new EntidadeConsulta();

            linha = reader.ReadLine();

            while (linha != null && linha != "*/")
            {
                if (linha.Trim() == "RetornaLista")
                {
                    parametros.RetornaLista = true;
                    linha = reader.ReadLine();
                }
                else if (linha.Trim() == "Retorno")
                {
                    ProcessaRetorno(parametros, reader, out linha);
                }
                else if (linha.Trim() == "Parametros")
                {
                    ProcessaParametros(parametros, reader, out linha);
                }
            }

            reader.Close();
            reader.Dispose();

            return(parametros);
        }
Ejemplo n.º 4
0
        private void GerarQuery(EntidadeConsulta consulta, bool sqlServer)
        {
            SB.Append("\t\t\t\t");

            if (sqlServer)
            {
                SB.AppendLine("if (AppSettings.IS_SQL_SERVER_PROVIDER)");
            }
            else
            {
                SB.AppendLine("else if (AppSettings.IS_ORACLE_PROVIDER)");
            }

            SB.Append("\t\t\t\t\t");

            if (consulta.Retorno != "void")
            {
                SB.Append($"return ");
            }

            SB.Append("Conexao.");

            if (!consulta.RetornaLista && consulta.Retorno != "void")
            {
                SB.Append("QuerySingleOrDefault");
            }
            else if (consulta.Retorno == "void")
            {
                SB.Append("Execute");
            }
            else
            {
                SB.Append("Query");
            }

            if (consulta.Retorno != "void")
            {
                SB.Append($"<{consulta.Retorno}>");
            }

            if (sqlServer)
            {
                SB.Append($"(\"{consulta.QuerySqlServer}\", new {{ ");
            }
            else
            {
                SB.Append($"(\"{consulta.QueryOracle}\", new {{ ");
            }

            // Parametros
            for (var i = 0; i < consulta.Parametros.Count; i++)
            {
                var parametro = consulta.Parametros[i];

                SB.Append($"{parametro.Value}");

                if (i + 1 < consulta.Parametros.Count)
                {
                    SB.Append(", ");
                }
            }

            SB.Append(" })");

            if (consulta.RetornaLista)
            {
                SB.Append(".ToList()");
            }

            SB.Append(";\n");
        }
Ejemplo n.º 5
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 = Colunas.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 EntidadeConsulta = ExtrairEntidadeConsulta(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 (EntidadeConsulta?.Retorno == null)
                    {
                        throw new Exception($"E necessario especificar um tipo de retorno na consulta {sqlFile.Name}");
                    }

                    var consulta = new EntidadeConsulta
                    {
                        Nome           = nomeQuery,
                        QuerySqlServer = querySqlServer,
                        QueryOracle    = queryOracle,
                        Parametros     = EntidadeConsulta.Parametros,
                        Retorno        = EntidadeConsulta.Retorno,
                        RetornaLista   = EntidadeConsulta.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 EntidadeConsulta = ExtrairEntidadeConsulta(querySqlServer);

                    querySqlServer = new Regex("\n").Replace(querySqlServer, " ");
                    querySqlServer = new Regex("\r").Replace(querySqlServer, " ")
                                     .Substring(querySqlServer.IndexOf("*/") + 2).Trim();

                    if (EntidadeConsulta?.Retorno == null)
                    {
                        throw new Exception($"E necessario especificar um tipo de retorno na consulta {sqlFile.Name}");
                    }

                    var consulta = new EntidadeConsulta
                    {
                        Nome           = nomeQuery,
                        QuerySqlServer = querySqlServer,
                        QueryOracle    = string.Empty,
                        Parametros     = EntidadeConsulta.Parametros,
                        Retorno        = EntidadeConsulta.Retorno,
                        RetornaLista   = EntidadeConsulta.RetornaLista
                    };

                    Consultas.Add(consulta);
                    arquivosJaProcessados.Add(sqlFile.Name);
                }

                // Caso exista uma query apenas para oracle
                else if (consultaOracle)
                {
                    var queryOracle = sqlFile
                                      .OpenText()
                                      .ReadToEnd();

                    var EntidadeConsulta = ExtrairEntidadeConsulta(queryOracle);

                    queryOracle = new Regex("\n").Replace(queryOracle, " ");
                    queryOracle = new Regex("\r").Replace(queryOracle, " ")
                                  .Substring(queryOracle.IndexOf("*/") + 2).Trim();

                    if (EntidadeConsulta?.Retorno == null)
                    {
                        throw new Exception($"E necessario especificar um tipo de retorno na consulta {sqlFile.Name}");
                    }

                    var consulta = new EntidadeConsulta
                    {
                        Nome           = nomeQuery,
                        QuerySqlServer = string.Empty,
                        QueryOracle    = queryOracle,
                        Parametros     = EntidadeConsulta.Parametros,
                        Retorno        = EntidadeConsulta.Retorno,
                        RetornaLista   = EntidadeConsulta.RetornaLista
                    };

                    Consultas.Add(consulta);
                    arquivosJaProcessados.Add(sqlFile.Name);
                }

                // Caminho padrão. Gera sqlserver e traduz para oracle
                else
                {
                    var querySqlServer = sqlFile
                                         .OpenText()
                                         .ReadToEnd();

                    var EntidadeConsulta = ExtrairEntidadeConsulta(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 (EntidadeConsulta?.Retorno == null)
                    {
                        throw new Exception($"E necessario especificar um tipo de retorno na consulta {sqlFile.Name}");
                    }

                    var consulta = new EntidadeConsulta
                    {
                        Nome           = nomeQuery,
                        QuerySqlServer = querySqlServer,
                        QueryOracle    = queryOracle,
                        Parametros     = EntidadeConsulta.Parametros,
                        Retorno        = EntidadeConsulta.Retorno,
                        RetornaLista   = EntidadeConsulta.RetornaLista
                    };

                    Consultas.Add(consulta);
                    arquivosJaProcessados.Add(sqlFile.Name);
                }
            }
        }