<?php
//
// Banco de dados SQL
//
DEFINE("SQL_ExArray_Normal"     , 0 );
DEFINE("SQL_ExArray_Sequencial" , 1 );
$oConexao_BD_SQL    = Null;
$bDb_Sql_Conectado_ = False;
$bDb_Sql_BeginTrans = False;
//
//
// 0 = Desconectar, 1=Conexao com a base ECook, 2=Conexao com a base Simdesk, 3=Conexao com a base de atividades do Simdesk, -1=Conexao com a base ECook de forma automatica
Function SQL_Conectar($nOpcao=-1) {
   Global $bDb_Sql_Conectado_, $oConexao_BD_SQL;
   If ( $nOpcao==0 ) {
      If ($bDb_Sql_Conectado_) {
         $oConexao_BD_SQL = Null;
         $bDb_Sql_Conectado_ = False;
      }
      //
   } Else {
      If ($nOpcao==-1 And $bDb_Sql_Conectado_) { Return True; }
      //
      $sDBSql_Host = DBSql_Host_E;
      $sDBSql_Base = DBSql_Base_E;
      $sDBSql_User = DBSql_User_E;
      $sDBSql_Pass = DBSql_Pass_E;
      //
      If ( $nOpcao==2 ) {
        $sDBSql_Host = DBSql_Host_S;
        $sDBSql_Base = DBSql_Base_S;
        $sDBSql_User = DBSql_User_S;
        $sDBSql_Pass = DBSql_Pass_S;
      }
      //
      If ( $nOpcao==3 ) {
         $sDBSql_Host = DBSql_Host_S;
         $sDBSql_Base = DBSql_Base_A;
         $sDBSql_User = DBSql_User_S;
         $sDBSql_Pass = DBSql_Pass_S;
      }
      //
      //If (! $bDb_Sql_Conectado_) {
         $oConexao_BD_SQL = new PDO('mysql:host='.$sDBSql_Host.';charset=utf8', $sDBSql_User, $sDBSql_Pass);
         $oConexao_BD_SQL->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
         $bDb_Sql_Conectado_ = True;
      //}
      If ( $bDb_Sql_Conectado_ ) {
         $oConexao_BD_SQL->QUERY('USE `'.$sDBSql_Base.'`');
      }
   }
   Return True;
}
Function SQL_BeginTrans() {      // Inicia transacao
   Global $bDb_Sql_BeginTrans, $oConexao_BD_SQL;
   SQL_Conectar();
   $oConexao_BD_SQL->QUERY("SET AUTOCOMMIT=0;");
   $oConexao_BD_SQL->QUERY("START TRANSACTION;");
   $bDb_Sql_BeginTrans = True;
   Return True;
}
Function SQL_CommitTrans() {     // Salva transacao
   Global $bDb_Sql_BeginTrans, $oConexao_BD_SQL;
   If ($bDb_Sql_BeginTrans) {
      $oConexao_BD_SQL->QUERY("COMMIT;");
      $oConexao_BD_SQL->QUERY("SET AUTOCOMMIT=1;");
   }
   $bDb_Sql_BeginTrans = False;
   Return True;
}
Function SQL_RollBackTrans() {   // Cancela transacao
   Global $bDb_Sql_BeginTrans, $oConexao_BD_SQL;
   If ($bDb_Sql_BeginTrans) {
      $oConexao_BD_SQL->QUERY("ROLLBACK;");
      $oConexao_BD_SQL->QUERY("SET AUTOCOMMIT=1;");
   }
   $bDb_Sql_BeginTrans = False;
   Return True;
}
Function SQL_Query( $s_Query ) { // Executa comandos SQL
   Global $oConexao_BD_SQL;
   SQL_Conectar();
   $v_Retorno = Null;
   $v_Retorno = $oConexao_BD_SQL->QUERY($s_Query);
   Return $v_Retorno;
}
Function SQL_Insert_Id() {
   Global $oConexao_BD_SQL;
   Return $oConexao_BD_SQL->LASTINSERTID();
}
Function SQLInterno_Erro( $sErro ) {
   ECHO $sErro;
   SQL_RollBackTrans();
   EXIT;
}
// Extrai um registro SQL
Function SQL_Extrair( $v_Registros_SQL, $nOpcao_Retorno=SQL_ExArray_Normal ) {
   If ( EMPTY($v_Registros_SQL) || @$v_Registros_SQL->rowCount()==0 ) {
	  Return Null;
   }
   $a_Retorno = ARRAY();
   If ( $nOpcao_Retorno       == SQL_ExArray_Normal     ) {   // Retornar as chaves com os nomes dos campos
     $a_Retorno = $v_Registros_SQL->fetch(PDO::FETCH_ASSOC);
	  //
   } ElseIf ( $nOpcao_Retorno == SQL_ExArray_Sequencial ) {   // Retornar as chaves com números sequenciais apartir do 0
     $a_Retorno = $v_Registros_SQL->fetch(PDO::FETCH_NUM);
	  //
   }
   Return $a_Retorno;
}
// Extrai cadeia completa com os registros SQL
Function SQL_Extrair_Cmp( $v_Registros_SQL, $vCampo_Indice=Null ,$nOpcao_Retorno=SQL_ExArray_Normal ) {
   $a_Retorno = ARRAY();
   $n_Contador = 0;
   While ( $a_Registro = SQL_Extrair( $v_Registros_SQL, $nOpcao_Retorno ) ){
	  $n_Contador++;
	  If ( EMPTY($vCampo_Indice) ) {
		 $a_Retorno[] = $a_Registro;
	  } Else {
		 If ( ISSET($a_Registro[$vCampo_Indice]) ) {
		    $a_Retorno[$a_Registro[$vCampo_Indice]] = $a_Registro;
		 } Else {
			BREAK;
		 }
	  }
	  If ( $n_Contador>100000 ) {  // Limitador
		 BREAK;
	  }
   }
   Return $a_Retorno;
}
// Funcao de conversao binaria para SQL
Function SQL_Bin( $sRecebe ) {
   $sRetorno = "''";
   If ( STRLEN($sRecebe)>0 ) {
      $sRetorno = '0x'.BIN2HEX($sRecebe);
   }
   Return $sRetorno;
}
//
// Funções das configurações
/*
Function SQL_VarConfig($sVarConfNome, $bOpcCarSQL=False) {
   //Global $aVarsConfig;
   Global $aSessao;
   $aVarsConfig = @$aSessao['Sistema_Var_Config'];
   IF (STRLEN($sVarConfNome)>0) {
      If ( $bOpcCarSQL OR (!ISSET($aVarsConfig[$sVarConfNome])) ) {
         $Row_Configs = SQL_Query("SELECT * FROM cfg_sistema;");
         While ($Row_Config = MYSQL_FETCH_OBJECT($Row_Configs) ) {
	 	     $aVarsConfig[$Row_Config->CFG_VAR_NOMEC] = $Row_Config->CFG_VCONTEUDO;
	 	   }
         $aSessao['Sistema_Var_Config'] = $aVarsConfig;
	   }
	   Return @$aVarsConfig[$sVarConfNome];
	   //
   } Else {
      Return '';
   }  
}
Function SQL_VarConfigG($sVarConfNome, $sVarConfValor) {
   //Global $aVarsConfig;
   Global $aSessao;
   $aVarsConfig = @$aSessao['Sistema_Var_Config'];
   IF (STRLEN($sVarConfNome)>0) {
      $Row_Config = SQL_Query("SELECT * FROM cfg_sistema WHERE CFG_VAR_NOMEC='".$sVarConfNome."';");
      If (MYSQL_NUM_ROWS($Row_Config)>0) {
         SQL_Query("UPDATE cfg_sistema SET CFG_VCONTEUDO=".SQL_Bin($sVarConfValor)." WHERE CFG_VAR_NOMEC='".$sVarConfNome."';");
	   } Else {
         SQL_Query("INSERT INTO cfg_sistema (CFG_VAR_NOMEC,CFG_VCONTEUDO) VALUE ('".$sVarConfNome."',".SQL_Bin($sVarConfValor).");");
      }
	   $aVarsConfig[$sVarConfNome] = $sVarConfValor;
      $aSessao['Sistema_Var_Config'] = $aVarsConfig;
      Return True;
   }
   Return False;
}
*/
//
?>