Commit f9480e1fbdf4b42ff638ba23cd24ce13658151e7

Authored by Edmar Moretti
1 parent 5b1b6c13

Correção na montagem do SQL em camadas do METAESTAT, evitando usar typecast quan…

…do não for necessário, melhorando assim a performance das camadas
Showing 1 changed file with 59 additions and 4 deletions   Show diff stats
classesphp/classe_metaestatinfo.php
... ... @@ -152,14 +152,20 @@ class MetaestatInfo{
152 152 */
153 153 function execSQL($sql,$id="",$convTexto=true){
154 154 $sql = str_ireplace(array("update","delete","insert","--","drop",";"),"",$sql);
  155 + //error_log("-- ");
  156 + //error_log("--xxxxxxxxxxx---- SQL: ".$sql);
155 157 try {
156 158 $q = $this->dbh->query($sql,PDO::FETCH_ASSOC);
157 159 }
158 160 catch (PDOException $e) {
  161 + //error_log("-- ");
  162 + //error_log("--erro i3geo-- classe_metaestatinfo execSQL: ".$sql);
159 163 return "Error!: ";
160 164 }
161 165 if($q){
  166 + //error_log("--xxxxxxxxxxx---- Executando o SQL ");
162 167 $r = $q->fetchAll();
  168 + //error_log("--xxxxxxxxxxx---- Executado ");
163 169 if($convTexto == false){
164 170 return $r;
165 171 }
... ... @@ -182,6 +188,8 @@ class MetaestatInfo{
182 188 }
183 189 }
184 190 else{
  191 + //error_log("--");
  192 + //error_log("--erro i3geo-- classe_metaestatinfo execSQL");
185 193 return false;
186 194 }
187 195 }
... ... @@ -352,10 +360,50 @@ class MetaestatInfo{
352 360 else{
353 361 $nomeColunaValor = $dados["colunavalor"];
354 362 }
  363 + //pega o tipo das coluna regiao.".$dadosgeo["identificador"]
  364 + $propColuna1 = $this->descreveColunasTabela(
  365 + $dadosgeo["codigo_estat_conexao"],
  366 + $dados["esquemadb"],
  367 + $dados["tabela"],
  368 + $dados["colunaidgeo"]
  369 + );
  370 + $propColuna2 = $this->descreveColunasTabela(
  371 + $dadosgeo["codigo_estat_conexao"],
  372 + $dadosgeo["esquemadb"],
  373 + $dadosgeo["tabela"],
  374 + $dadosgeo["identificador"]
  375 + );
  376 + if(in_array(array('oid','float4','float8','int2','int4','int8','int16','smallint','integer','real','double precision','bigint','numeric'),$propColuna1["type"])){
  377 + $propColuna1 = 'numeric';
  378 + } else {
  379 + $propColuna1 = 'text';
  380 + }
  381 + if(in_array(array('oid','float4','float8','int2','int4','int8','int16','smallint','integer','real','double precision','bigint','numeric'),$propColuna2["type"])){
  382 + $propColuna2 = 'numeric';
  383 + } else {
  384 + $propColuna2 = 'text';
  385 + }
  386 + if($propColuna1 == $propColuna2){
  387 + $propColuna1 = "";
  388 + $propColuna2 = "";
  389 + } else {
  390 + if($propColuna1 == 'numeric'){
  391 + $propColuna1 = 'text';
  392 + }
  393 + if($propColuna2 == 'numeric'){
  394 + $propColuna2 = 'text';
  395 + }
  396 + if($propColuna1 != ''){
  397 + $propColuna1 = '::'.$propColuna1;
  398 + }
  399 + if($propColuna2 != ''){
  400 + $propColuna2 = '::'.$propColuna2;
  401 + }
  402 + }
355 403 $sqlIntermediario = "SELECT (j.valorcalculado) AS ".$nomeColunaValor.", __COLUNASSEMGEO__".
356 404 " FROM ".$dadosgeo["esquemadb"].".".$dadosgeo["tabela"]." AS regiao ".
357 405 " INNER JOIN ( __SQLDADOS__ ) ".
358   - " AS j ON j.cod_regiao::text = regiao.".$dadosgeo["identificador"]."::text";
  406 + " AS j ON j.cod_regiao" . $propColuna1 . " = regiao.".$dadosgeo["identificador"] . $propColuna2;
359 407 //inclui os sqls de regioes de niveis inferiores
360 408 if($agregaregiao == true && $direto == false){
361 409 $hierarquia = $this->regiaoFilhaAoPai($dados["codigo_tipo_regiao"],$codigo_tipo_regiao);
... ... @@ -510,7 +558,8 @@ class MetaestatInfo{
510 558 $this->nomecache = $this->nomecache . $this->nomeRandomico(5);
511 559 }
512 560 $arq = $this->dir_tmp."/".$this->nomecache.".map";
513   -
  561 + //error_log("-- ");
  562 + //error_log("--xxxxxxxxxxx---- nomecache: ".$arq);
514 563 if(!file_exists($arq)){
515 564 $meta = $this->listaMedidaVariavel("",$id_medida_variavel);
516 565 //evita agregar regioes qd nao e necessario
... ... @@ -529,6 +578,8 @@ class MetaestatInfo{
529 578 $suportaWMST,
530 579 $filtro
531 580 );
  581 + //error_log("-- ");
  582 + //error_log("--xxxxxxxxxxx---- sqlMedidaVariavel: ".$sql);
532 583 if(empty($codigo_tipo_regiao)){
533 584 $d = $this->listaMedidaVariavel("",$id_medida_variavel);
534 585 $codigo_tipo_regiao = $d["codigo_tipo_regiao"];
... ... @@ -555,7 +606,11 @@ class MetaestatInfo{
555 606 $classes = $this->listaClasseClassificacao($classificacoes[0]["id_classificacao"]);
556 607 }
557 608 if($classes == false){
  609 + //error_log("-- ");
  610 + //error_log("--xxxxxxxxxxx---- dadosMedidaVariavel: ".$sql);
558 611 $valores = $this->dadosMedidaVariavel($id_medida_variavel,$filtro." AND ".$meta["colunavalor"]." > 0 ");
  612 + //error_log("-- ");
  613 + //error_log("--xxxxxxxxxxx---- dadosMedidaVariavel obtidos ");
559 614 $valores = array_column($valores,$meta["colunavalor"]);
560 615 $item = $meta["colunavalor"];
561 616 $classes = array();
... ... @@ -1726,9 +1781,9 @@ class MetaestatInfo{
1726 1781 */
1727 1782 function colunasTabela($codigo_estat_conexao,$nome_esquema,$nome_tabela,$tipo="",$tipotratamento="="){
1728 1783 $colunas = array();
1729   - $res = $this->execSQLDB($codigo_estat_conexao,"SELECT column_name as coluna,udt_name FROM information_schema.columns where table_schema = '$nome_esquema' and table_name = '$nome_tabela'");
  1784 + $res = $this->execSQLDB($codigo_estat_conexao,"SELECT column_name as coluna,udt_name, data_type FROM information_schema.columns where table_schema = '$nome_esquema' and table_name = '$nome_tabela'");
1730 1785 if($tipo != ""){
1731   - $res = $this->execSQLDB($codigo_estat_conexao,"SELECT column_name as coluna,udt_name FROM information_schema.columns where table_schema = '$nome_esquema' and udt_name $tipotratamento '$tipo' and table_name = '$nome_tabela'");
  1786 + $res = $this->execSQLDB($codigo_estat_conexao,"SELECT column_name as coluna,udt_name, data_type FROM information_schema.columns where table_schema = '$nome_esquema' and udt_name $tipotratamento '$tipo' and table_name = '$nome_tabela'");
1732 1787 }
1733 1788 foreach($res as $c){
1734 1789 $colunas[] = $c["coluna"];
... ...