/// <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(); } }
/// <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(); } }
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); }
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"); }
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); } } }