Documentación GVHIDRA 3.1.5
Referencia de la Clase IgepConexion

Métodos públicos

 __construct ($dsn, $persistent=false)
 __destruct ()
 getPEARConnection ()
 getConexion ()
 getDSN ()
 isPersistent ()
 empezarTransaccion ()
 acabarTransaccion ($error)
 construirWhere ($v_datos, $str_where)
 construirWhereConLike ($v_datos, $str_where, $tipoConsulta)
 unDiacriticCondition ($col, $val, $tipo=1, $prepare=true)
 normalCondition ($col, $val, $tipo=1)
 construirWhereBusqueda ($v_datos, $undiacritic, $str_where, $tipoConsulta)
 combinarWhere ($v_cadenas)
 construirLimite (&$str_where, $int_limiteConsulta=100)
 consultar ($str_select, $typeDesc=NULL)
 consultarForUpdate ($str_select, $tipo=NULL)
 preparedQuery ($str_select, $dml_ddl, $params, $tipo=null, &$cur=null)
 preparedQueryForUpdate ($str_select, $params, $tipo=null, &$cur=null)
 transformResultSet (&$res, $typeDesc)
 operar ($str_operar)
 prepararOperacion (&$a_parametros, $a_tipo=TIPO_CARACTER)
 transform_BD2FW (&$a_parametros, $a_tipo=TIPO_CARACTER)
 prepararNumero ($a_num)
 prepararFecha ($a_fecha)
 calcularSecuenciaBD ($nombreSecuencia)
 calcularSecuencia ($tabla, $campoSecuencia, $camposDependientes, $valorInicial=1)

Métodos públicos estáticos

static transform_BD2User ($a_parametros, $a_tipo, $a_dsn, $a_decimales=2)

Campos de datos

 $obj_conexion
 $obj_errorConexion
 $v_dsn

Métodos privados

 conectar ($dsn)
 desconectar ()

Atributos privados

 $persistent

Descripción detallada

Definición en la línea 54 del archivo IgepConexion.php.


Documentación del constructor y destructor

__construct ( dsn,
persistent = false 
)

Constructor. Recibe como parmetro un array con la definicin del dsn.

public

Parámetros:
array$dsn
bool$persistent

Definición en la línea 92 del archivo IgepConexion.php.

                                                      {
                //Cogemos la referencia de la variable de error global
                global $g_error;
                $this->obj_errorConexion = & $g_error;
                //Realizamos la conexin
                $this->v_dsn = $dsn;
                $this->persistent = $persistent;                
                $this->obj_conexion = $this->conectar($dsn);
        }
__destruct ( )

Definición en la línea 103 del archivo IgepConexion.php.

                                     {
                $this->desconectar();
        }

Documentación de las funciones miembro

acabarTransaccion ( error)

Finaliza una transaccin (COMMIT o ROLLBACK) en la conexin a la que est apuntando. Recibe un parmetro que indica si el procesado de las diferentes operaciones que se han realizado ha concluido satisfactoriamente o no. Dependiendo de ello se realizar el COMMIT o el ROLLBACK. Dicho parmetro es $error

  • 0. No ha habido ningn error en el proceso. Realizamos COMMIT
  • 1. Ha habido algn error durante el proceso. Realizamos ROLLBACK

public

Parámetros:
integer$error

Definición en la línea 239 del archivo IgepConexion.php.

                                                  {

                //Debug:Indicamos que ejecutamos la consulta
                if ($error)     
                IgepDebug::setDebug(DEBUG_IGEP,'Acabamos transaccin con ROLLBACK');
        else
                IgepDebug::setDebug(DEBUG_IGEP,'Acabamos transaccin con COMMIT');      
                $res = IgepDB::acabarTransaccion($this->v_dsn,$this->obj_conexion,$error);
                if (PEAR::isError($res))
                        $this->obj_errorConexion->setError("IGEP-9",'IgepConexion.php',"acabarTransaccion",$res);       
        }//Fin de acabarTransaccion
calcularSecuencia ( tabla,
campoSecuencia,
camposDependientes,
valorInicial = 1 
)

Este mtodo calcula una secuencia compuesta por varios campos de la misma tabla.

Parámetros:
tablastring nombre de la tabla de la BD
campoSecuenciastring campo del que se quiere obtener la secuencia
camposDependientesarray contiene el nombre de los campos de los cuales va a depender la secuencia y sus valores. Estructura [nombreBD] = valor
valorInicialinteger Fija el valor inicial que devuelve calcularSecuencia en el caso de que no exstan tuplas en la tabla el valor por defecto es 1
Devuelve:
integer

Definición en la línea 884 del archivo IgepConexion.php.

                                                                                                       {

                $i=0;
                $where='';
                foreach($camposDependientes as $campo => $valor){
                        if($where!='')
                                $where.=' AND ';
                        else
                                $where = 'WHERE ';
                        $where.=$campo."='".$valor."' ";
                        ++$i;
                }
                $sql = "SELECT max($campoSecuencia) as \"secuencia\" FROM $tabla $where";
                IgepDebug::setDebug(DEBUG_IGEP,'IgepConexion: Calculamos secuencia: '.$sql);   
                $resc = $this->obj_conexion->query($sql);
                if(PEAR::isError($resc)) {
                        $this->obj_errorConexion->setError('IGEP-12','IgepConexion.php','calcularSecuencia',$resc);
                        return -1;
                }
                else {
                        $res = $resc->fetchAll(); 
                        if (($res[0]['secuencia']=='')||($res[0]['secuencia']==null)||(!isset($res[0]['secuencia'])))
                                return $valorInicial;
                        else 
                                return ($res[0]['secuencia'] +1);
                }
        }//Fin de funcion calcularSecuencia
calcularSecuenciaBD ( nombreSecuencia)

Este mtodo devuelve el valor de una secuencia programada en la base de datos para la conexion actual

Parámetros:
nombreSecuenciastring nombre de la secuencia en la BD
Devuelve:
integer

Definición en la línea 859 del archivo IgepConexion.php.

                                                              {

                $sql = IgepDB::obtenerSecuenciaBD($this->getDsn(),$nombreSecuencia);
                IgepDebug::setDebug(DEBUG_IGEP,'IgepConexion: Calculamos secuencia BD: '.$sql);
                $resc = $this->obj_conexion->query($sql);
                if (PEAR::isError($resc)){                  
                        $this->obj_errorConexion->setError('IGEP-12','IgepConexion.php',"calcularSecuenciaBD",$resc);
                        return -1;
                }
                else{
                        $res = $resc->fetchAll();
                        return $res[0]['nextval'];
                }    
        }
combinarWhere ( v_cadenas)

Mtodo encargado de, dadas una serie de cadenas, componerlas para crear una nica cadena para la where de una SQL. private

Parámetros:
array$v_cadenasArray que contiene las diferentes cadenas que componen la WHERE
Devuelve:
string

Definición en la línea 473 del archivo IgepConexion.php.

                                                  {

                $str_where = '';
                foreach($v_cadenas as $cadena){
                        if(trim($cadena)!=''){
                                if ($str_where!='')
                                        $str_where.= ') AND ';
                                $str_where.='('.$cadena;
                        }
                }
                if($str_where!='')
                        $str_where=' WHERE '.$str_where.')';
                return $str_where;
        }
conectar ( dsn) [private]

Realiza la conexin a la base de datos especificada

public

Devuelve:
object

Definición en la línea 113 del archivo IgepConexion.php.

                                       {                                                
                // truco para que el autoload cargue la clase, y asi esten definidas las constantes
                if (!class_exists('MDB2'))
                        throw new gvHidraException('No existe la clase MDB2');
                IgepDB::preConexion($dsn);
                $options = array(
                'portability' => MDB2_PORTABILITY_NONE,
                );

                //Para evitar problemas con el funcionamiento del MDB2, forzamos a que se utilice una 
                //nueva conexion siempre. La informacion esta en el bug Pear::MDB2 (Bug #17198)
                //Forzamos a que siempre utilice una nueva conexion
                if(!$this->isPersistent())
                        $dsn['new_link'] = true;
                
                $res = MDB2::connect($dsn,$options);

                if (PEAR::isError($res))   {
                        //Comprobamos que el Log esta activo para evitar entrar en un bucle
                $conexion = ConfigFramework::getConfig()->getLogConnection();        
                if(is_object($conexion->obj_conexion)) {
                                $this->obj_errorConexion->setError("IGEP-6",'IgepConexion.php',"conectar",$res);
                }                                       
                } else {
                        IgepDB::postConexion($dsn,$res);
                        //Finalmente marcamos el fetchMode por defecto
                        $res->setFetchMode(MDB2_FETCHMODE_ASSOC);
                }               
        return $res;
        }// Fin de conectar
construirLimite ( &$  str_where,
int_limiteConsulta = 100 
)

Mtodo encargado de construir el limit para las consultas private

Definición en la línea 493 del archivo IgepConexion.php.

                                                                              {    

                if(is_int($int_limiteConsulta)){
                $limite = IgepDB::obtenerLimit($str_where, $this->v_dsn, $int_limiteConsulta);
        }     
                return $limite;
        }//Fin de construirLimite
construirWhere ( v_datos,
str_where 
)

Mtodo encargado de construir las WHERE de las consultas. private

Definición en la línea 256 del archivo IgepConexion.php.

                                                            {

                //Esta funcin construye una WHERE igualando los valores con los nombres de los campos.
                if (isset($v_datos)){   
                        if($str_where!='')
                                $inicio_condicion=' OR (';
                        else
                                $inicio_condicion=' (';                                                 
                        $str_condicion='';
                        foreach($v_datos as $prop => $val) {                                    
                                if ($str_condicion!='') { 
                                        $str_condicion.=' AND '; 
                                }                       
                                $str_condicion.=$prop;
                                if (gettype($val)=='string') {
                                        if($val!='') 
                                                $str_condicion.="='".$val."'";
                                        else
                                                $str_condicion.=' is null';
                                }                                       
                                else {
                                        if($val!='')
                                                $str_condicion.='='.$val;
                                        else
                                                $str_condicion.=' is null';                             
                                }                                       
                        }//FIN foreach
                        if(trim($str_condicion)!='')
                                $str_where.=$inicio_condicion.$str_condicion.')';                                                                                       
                }
                return $str_where;              
        } //Fin de construirWhere
construirWhereBusqueda ( v_datos,
undiacritic,
str_where,
tipoConsulta 
)

Mtodo encargado de construir las WHERE de las consultas incluyendo las condiciones de busqueda que ha seleccionado el programador a partir del parmetro tipoConsulta.

Este es un metodo alternativo a construirWhereConLike, donde siempre se descartan caracteres especiales y mayusculas Llamado desde gvHidraForm_DB->prepareDataSource

Dependiendo del valor de la variable realiza una construccin de la Where u otra. Los tipos son:

  • 0. Se contruye igualando los campos a los valores.
  • 1. Se construye con like y comodines para cada campo.
  • 2. Por defecto, se contruye con like slo si el usuario ha especificado comodines.

Definición en la línea 438 del archivo IgepConexion.php.

                                                                                               {

                //Construimos la Where
                if (isset($v_datos)){   
                        $str_condicion='';
                        foreach ($v_datos as $prop => $val){
                                if ($val!=''){                                  
                                        if ($str_condicion!='')
                                                $str_condicion.=' AND ';
                                        if($undiacritic[$prop]) 
                                                $str_condicion .= $this->unDiacriticCondition($prop, $val, $tipoConsulta, false);
                                        else
                                                $str_condicion .= $this->normalCondition($prop, $val, $tipoConsulta);
                                }
                        }//FIN foreach
                        if (trim($str_condicion)!='') {
                                // hay where previa cuando la consulta se hace sobre varios registros: se concatenan los criterios
                                // en el mismo registro con and, y los de cada registro con or
                                if ($str_where!='')                             
                                        $inicio_condicion =' OR ('; 
                                else
                                        $inicio_condicion =' (';
                                $str_where.=$inicio_condicion.$str_condicion.')';
                        }
                }
                return $str_where;
        }//Fin de construirWhereBusqueda
construirWhereConLike ( v_datos,
str_where,
tipoConsulta 
)

Mtodo encargado de construir las WHERE de las consultas incluyendo las condiciones de busqueda que ha seleccionado el programador a partir del parmetro tipoConsulta.

Este es un metodo alternativo a construirWhereBusqueda, donde solo se descartan caracteres especiales y mayusculas en tipo 3 Llamado desde gvHidraForm_DB->prepareDataSource (actualmente no se usa)

Dependiendo del valor de la variable realiza una construccin de la Where u otra. Los tipos son:

  • 0. Se contruye igualando los campos a los valores.
  • 1. Se construye con like y comodines para cada campo.
  • 2. Por defecto, se contruye con like slo si el usuario ha especificado comodines.
  • 3. Se construye con like, sin distinguir maysculas ni caracteres especiales

Definición en la línea 303 del archivo IgepConexion.php.

                                                                           {

                if($tipoConsulta==0)            
                        return  $this->construirWhere($v_datos,$str_where);
                else
                        //Construimos la Where
                        if (isset($v_datos)){   
                                // hay where previa cuando la consulta se hace sobre varios registros: se concatenan los criterios
                                // en el mismo registro con and, y los de cada registro con or
                                if($str_where!='')                              
                                        $inicio_condicion =' OR ('; 
                                else
                                        $inicio_condicion =' (';
                                $str_condicion='';
                                $dsn = $this->getDsn();
                                foreach($v_datos as $prop => $val){
                                        if($val!=''){                                   
                                                if ($str_condicion!='')
                                                        $str_condicion.=' AND '; 
                                                if($tipoConsulta==3)
                                                        $expr = "lower(".IgepDB::toTextForVS($dsn, $prop).")";
                                                else
                                                        $expr = $prop;
                                                if($tipoConsulta==2)
                                                        //Son 3 iguales porque si colocamos 2 no distinguimos entre algo que est en la posicin 0 y el false                                                           
                                                        if((strpos($val,'%')===false) and (strpos($val,'_')===false))
                                                                if (gettype($val)=='string')                                     
                                                                        $expr .= "='".$val."'";
                                                                else
                                                                        $expr .= '='.$val;                                                                                                                                      
                                                        else
                                                                $expr = IgepDB::toTextForVS($dsn, $expr)." LIKE '".$val."'";
                                                elseif ($tipoConsulta==3)
                                                        $expr .= " LIKE ".IgepDB::unDiacritic($dsn,"lower('%".$val."%')");
                                                else // tipo 1
                                                        $expr = IgepDB::toTextForVS($dsn, $expr)." LIKE '%".$val."%'";
                                                $str_condicion .= $expr;
                                        }
                                }//FIN foreach
                                if(trim($str_condicion)!='')
                                        $str_where.=$inicio_condicion.$str_condicion.')';                               
                        }                               
                return $str_where;
        }//Fin de construirWhereConLike
consultar ( str_select,
typeDesc = NULL 
)

Dada una una consulta realiza la SELECT correspondiente. Si se indica el parametro typeDesc cambiar los datos de origen al formato FW

public

Parámetros:
stringstr_select cadena con la query SQL
arraytypeDesc descripcion de los campos para posibles transformaciones
Devuelve:
object

Definición en la línea 511 del archivo IgepConexion.php.

                                                             {

                //Debug:Indicamos que ejecutamos la consulta
                IgepDebug::setDebug(DEBUG_IGEP,'IgepConexion: Ejecutamos consulta: '.$str_select);
                if(!$this->obj_errorConexion->hayError()){
                        $resc = $this->obj_conexion->query($str_select);
                        if (PEAR::isError($resc)){
                                $this->obj_errorConexion->setError("IGEP-5",'IgepConexion.php',"consultar",$resc,$str_select);
                                return -1;
                        }
                        $res = $resc->fetchAll();
                        $this->transformResultSet($res, $typeDesc);
                        
                        return $res;
                }
        }
consultarForUpdate ( str_select,
tipo = NULL 
)

Dada una consulta realiza la SELECT correspondiente pero bloqueando las filas para modificacion

public

Parámetros:
string$str_select
Devuelve:
object

Definición en la línea 536 del archivo IgepConexion.php.

                                                                    {

                IgepDebug::setDebug(DEBUG_IGEP,'IgepConexion: Ejecutamos consultaForUpdate: '.$str_select);
                $tran = $this->obj_conexion->inTransaction();
                // devuelve null si no hemos abierto la transaccion con mdb2
                if (!is_null($tran) and !$tran)
                        throw new gvHidraNotInTransException('Para llamar a consultarForUpdate hay que estar en una transaccion');
                $str_select .= ' '.IgepDB::obtenerBloqueo($this->getDSN());
                $res = $this->consultar($str_select, $tipo);
                if ($res == -1) {
                        // ver si error de bloqueado o timeout
                        $cod = $this->obj_errorConexion->getDescErrorDB();
                        if (IgepDB::isLocked($this->getDSN(), $cod[0])) {
                                $msg = 'IgepConexion: no se puede bloquear los registros solicitados';
                                IgepDebug::setDebug(DEBUG_IGEP, $msg);
                                throw new gvHidraLockException($msg, 4, null, $this->obj_errorConexion->obj_dbError);
                        }
                }
                return $res;
        }
desconectar ( ) [private]

Realiza la desconexin a la base de datos a la que actualmente se est conectado.

public

Definición en la línea 150 del archivo IgepConexion.php.

                                      { 
                if (is_object($this->obj_conexion) and method_exists($this->obj_conexion, 'rollback')) {
                        $this->obj_conexion->rollback();
                        //Si no es persistente desconectamos
                        if(!$this->isPersistent()) {                    
                                $res = $this->obj_conexion->disconnect();
                                if (PEAR::isError($res)) 
                                        $this->obj_errorConexion->setError("IGEP-7",'IgepConexion.php',"desconectar",$res);
                        }
                }       
        }// Fin de desconectar
empezarTransaccion ( )

Empieza una transaccin (BEGIN) en la conexin a la que est apuntando.

public

Definición en la línea 217 del archivo IgepConexion.php.

                                             {
                //Debug:Indicamos que ejecutamos la consulta
                IgepDebug::setDebug(DEBUG_IGEP,'Empezamos transaccin.');
                $res = IgepDB::empezarTransaccion($this->v_dsn,$this->obj_conexion);
                if (PEAR::isError($res)) 
                        $this->obj_errorConexion->setError("IGEP-8",'IgepConexion.php',"empezarTransaccion",$res);      
        }//Fin de empezarTransaccion
getConexion ( )

Devuelve el objeto conexin al que se est conectado.

public

Devuelve:
object
Obsoleto:
3.2 - 21/01/2010

Definición en la línea 180 del archivo IgepConexion.php.

        {
                // DEPRECATED: se fija en v. 3.2
                IgepDebug::setDebug(WARNING, 'DEPRECATED IgepConexion::getConexion. Usar IgepConexion::getPEARConnection '.
                                 '<br>En version 3.2 se borrar.');
                return $this->getPEARConnection();
        }//Fin de getConexion
getDSN ( )

Devuelve el dsn de la conexin.

public

Devuelve:
array

Definición en la línea 194 del archivo IgepConexion.php.

        {
                return $this->v_dsn;
        }//Fin de getDSN
getPEARConnection ( )

Devuelve el objeto conexin al que se est conectado.

public

Devuelve:
object

Definición en la línea 168 del archivo IgepConexion.php.

        {
                return $this->obj_conexion;
        }//Fin de getPEARConnection
isPersistent ( )

Indica si una conexion se ha establecido con el atributo persistente(reusable)

public

Devuelve:
array

Definición en la línea 205 del archivo IgepConexion.php.

        {

                return $this->persistent;
        }//Fin de isPersistent
normalCondition ( col,
val,
tipo = 1 
)

Para formar condiciones de busqueda con tipos de datos diferentes a string

Parámetros:
$colnombre columna
$valvalor a filtrar en la columna
$tipo0..2, igual que el queryMode

Definición en la línea 398 del archivo IgepConexion.php.

                                                             {

                $dsn = $this->getDSN();
                $expr1 = IgepDB::toTextForVS($dsn, $col);
                $val_nolike = "'$val'";
                switch ($tipo) {
                        case 0:
                                $expr2 = ' = '.$val_nolike;                                     
                                break;

                        case 1:
                                $expr2 = ' like '."'%$val%'";
                                break;

                        case 2:
                                if (strpos($val,'%')===false and strpos($val,'_')===false)
                                        $expr2 = ' = '.$val_nolike;                                     
                                else
                                        $expr2 = ' like '.$val_nolike;
                                break;

                        default:
                                throw new gvHidraException('IgepConexion::normalCondition -> valor de tipo no soportado: '.$tipo);
                }
                return $expr1.$expr2;
        }
operar ( str_operar)

Dada una una consulta realiza la SELECT correspondiente.

public

Parámetros:
string$str_select
Devuelve:
object

Definición en la línea 663 del archivo IgepConexion.php.

                                           {

                //Debug:Indicamos que ejecutamos la operacion
                IgepDebug::setDebug(DEBUG_IGEP,'IgepConexion: Ejecutamos operacin: '.$str_operar);
                if(!$this->obj_errorConexion->hayError()){                   
                        $res = $this->obj_conexion->exec($str_operar);
                        if (PEAR::isError($res)){                  
                                $this->obj_errorConexion->setError("IGEP-11",'IgepConexion.php',"operar",$res,$str_operar);
                                return -1;
                        }                                 
                        return $res;
                }    
        }
prepararFecha ( a_fecha)

Transforma una fecha de capa negocio a capa datos

public

Parámetros:
any$a_fecha
Devuelve:
string

Definición en la línea 796 del archivo IgepConexion.php.

                                            {
        $this->prepararOperacion($a_fecha, TIPO_FECHAHORA);
        return $a_fecha;
    }
prepararNumero ( a_num)

Transforma un numero de capa negocio a capa datos

public

Parámetros:
any$a_num
Devuelve:
string

Definición en la línea 782 del archivo IgepConexion.php.

                                           {
        
        $this->prepararOperacion($a_num, TIPO_DECIMAL);
        return $a_num;
    }
prepararOperacion ( &$  a_parametros,
a_tipo = TIPO_CARACTER 
)

Convierte de FW a DB Este mtodo debe ser invocado por el usuario antes de realizar cualquier consulta/operacion a la BD para garantizar la portabilidad.

public

Parámetros:
any$a_parametros
any$a_tipo
Devuelve:
none

Definición en la línea 688 del archivo IgepConexion.php.

                                                                              {

        $transformer = new IgepTransformer();
        $carfw = ConfigFramework::getNumericSeparatorsFW();
        $backslash = IgepDB::backSlashScape($this->getDsn());
        
        $carbd = IgepDB::caracteresNumericos($this->getDsn());
        $transformer->setDecimal($carfw['DECIMAL'],$carbd['DECIMAL'],$carfw['GROUP'],$carbd['GROUP']);
        //Cogemos la mascara a la que tenemos que transformar el timestamp
        $fechafw = ConfigFramework::getDateMaskFW();        
        $fechabd = IgepDB::mascaraFechas($this->getDsn());
        $transformer->setDate($fechafw, $fechabd);
        $transformer->setCharacter("'","''");
        $transformer->setCharacter("\\",$backslash);

                if (!is_array($a_parametros) and $a_parametros!='') {

                        //si el tipo es nulo le ponemos TIPO_CARACTER 
                        if(empty($a_tipo))
                                $a_tipo=TIPO_CARACTER;

                        // le doy estructura de vector para no repetir el codigo
                        $vector = false;
                        $a_parametros = array(array('col'=>$a_parametros,),);
                        $a_tipo = array('col'=>array('tipo'=>$a_tipo,),);
                } else
                        $vector = true;
                if (is_array($a_tipo))
            foreach ($a_parametros as $fila => $tupla)
                foreach ($tupla as $campo => $valor){
                    if(empty($a_parametros[$fila][$campo]))
                        continue;
                        $tipo_efectivo = (empty($a_tipo[$campo]['tipo'])? TIPO_CARACTER: ($a_tipo[$campo]['tipo']==TIPO_ENTERO? TIPO_DECIMAL: $a_tipo[$campo]['tipo']));
                                        if ($tipo_efectivo == TIPO_DECIMAL)
                                                $tupla[$campo] = $transformer->expandExponent($tupla[$campo], $carfw['DECIMAL'], $carfw['GROUP']);
                                        if (($tipo_efectivo == TIPO_FECHA or $tipo_efectivo == TIPO_FECHAHORA) and is_object($tupla[$campo]))
                                                $a_parametros[$fila][$campo] = $tupla[$campo]->format($fechabd.($tipo_efectivo==TIPO_FECHAHORA? ' H:i:s':''));
                                        else
                                                $a_parametros[$fila][$campo] = $transformer->process($tipo_efectivo, $tupla[$campo]);
                }
        if (!$vector)
                $a_parametros = $a_parametros[0]['col'];
    }//Fin de prepararOperacion
preparedQuery ( str_select,
dml_ddl,
params,
tipo = null,
&$  cur = null 
)

Ejecucin de consulta preparada Si se usan placeholders con nombre, en los parametros pasaremos array asociativo.

Parámetros:
boolean$dml_ddl,:false para select, true para el resto
arraytipo: tipos para usar en transformaciones
Devuelve:
array varios: si dml_ddl, devuelve numero de registros afectados sino devuelve vector excepciones: 1: error en prepare 2: error en execute 3: error en fetchAll

Definición en la línea 572 del archivo IgepConexion.php.

                                                                                               {

                if (empty($cur)) {
                        IgepDebug::setDebug(DEBUG_IGEP,"Preparando sql: $str_select con dml_ddl: ".($dml_ddl? 'true': 'false'));
                        $db_pear = $this->obj_conexion;
                        $in = null; // por defecto todo text
                        if ($dml_ddl)
                                $out = MDB2_PREPARE_MANIP;
                        else
                                $out = null;
                        $cur = $db_pear->prepare($str_select, $in, $out);
                        if (PEAR::isError($cur)) {
                                $this->obj_errorConexion->setError("IGEP-5",'IgepConexion.php',"preparedQuery",$cur,$str_select);
                                throw new gvHidraPrepareException('Error: '.$cur->getMessage()." - Preparando sql: $str_select", 1, null, $cur);
                        }
                }
                IgepDebug::setDebug(DEBUG_IGEP,"Ejecutando sql: $str_select<br>* parametros: ".var_export($params,true));
                $res = $cur->execute($params);
                if (PEAR::isError($res)) {
                        $this->obj_errorConexion->setError("IGEP-5",'IgepConexion.php',"preparedQuery",$res,$str_select.' y parmetros de entrada '.var_export($params,true));
                        throw new gvHidraExecuteException('Error: '.$res->getMessage()." - Ejecutando sql ($str_select) con parmetros: ".var_export($params,true), 2, null, $res);
                }
                if ($dml_ddl)
                        return $res;
                $vec = $res->fetchAll(MDB2_FETCHMODE_ASSOC);
                if (PEAR::isError($vec)) {
                        $this->obj_errorConexion->setError("IGEP-5",'IgepConexion.php',"preparedQuery",$vec,$str_select);
                        throw new gvHidraFetchException('Error: '.$vec->getMessage()." - Ejecutando recuperacin de registros", 3, null, $vec);
                }
                $this->transformResultSet($vec, $tipo);
                return $vec;
        }
preparedQueryForUpdate ( str_select,
params,
tipo = null,
&$  cur = null 
)

Dada una consulta realiza la SELECT correspondiente pero bloqueando las filas para modificacion y usando sentencias preparadas Devuelve vector excepciones: 4: hay bloqueo resto: las propias de preparedQuery

Definición en la línea 614 del archivo IgepConexion.php.

                                                                                              {

                IgepDebug::setDebug(DEBUG_IGEP,'IgepConexion: Ejecutamos preparedQueryForUpdate: '.$str_select);
                $tran = $this->obj_conexion->inTransaction();
                // devuelve null si no hemos abierto la transaccion con mdb2
                if (!is_null($tran) and !$tran)
                        throw new gvHidraNotInTransException('Para llamar a preparedQueryForUpdate hay que estar en una transaccion');
                $str_select .= ' '.IgepDB::obtenerBloqueo($this->getDSN());
                try {
                        $res = $this->preparedQuery($str_select, false, $params, $tipo, $cur);
                } catch (gvHidraExecuteException $e) {
                        // ver si error de bloqueado o timeout
                        $cod = $this->obj_errorConexion->getDescErrorDB();
                        if (IgepDB::isLocked($this->getDSN(), $cod[0]))
                                throw new gvHidraLockException('IgepConexion: no se puede bloquear los registros solicitados', 4, null, $e->getSqlerror());
                        throw $e;
                }
                return $res;
        }
transform_BD2FW ( &$  a_parametros,
a_tipo = TIPO_CARACTER 
)

Convierte datos de DB a FW No valida los datos en origen, por lo que de momento si en origen tenemos una fecha con hora, en el destino estara sin hora.

public

Parámetros:
any$a_parametros
any$a_tipo

Definición en la línea 741 del archivo IgepConexion.php.

                                                                                {

        $transformer = new IgepTransformer();
        $carbd = IgepDB::caracteresNumericos($this->getDsn());
        $carfw = ConfigFramework::getNumericSeparatorsFW();
        $transformer->setDecimal($carbd['DECIMAL'],$carfw['DECIMAL'],$carbd['GROUP'],$carfw['GROUP']);
        $fechabd = IgepDB::mascaraFechas($this->getDsn());
        $fechafw = ConfigFramework::getDateMaskFW();
        $transformer->setDate($fechabd,$fechafw);
                if (!is_array($a_parametros)) {
                        // le doy estructura de vector para no repetir el codigo
                        $vector = false;
                        $a_parametros = array(array('col'=>$a_parametros,),);
                        $a_tipo = array('col'=>array('tipo'=>$a_tipo,),);
                } else
                        $vector = true;
                if (is_array($a_tipo))
            foreach ($a_parametros as $fila => $tupla)
                foreach ($tupla as $campo => $valor){
                        $tipo_efectivo = (empty($a_tipo[$campo]['tipo'])? TIPO_CARACTER: ($a_tipo[$campo]['tipo']==TIPO_ENTERO? TIPO_DECIMAL: $a_tipo[$campo]['tipo']));
                                        if (empty($a_parametros[$fila][$campo])) {
                            if ($tipo_efectivo==TIPO_FECHA or $tipo_efectivo==TIPO_FECHAHORA)
                                                        $a_parametros[$fila][$campo] = null;
                                                continue;
                                        }
                    $a_parametros[$fila][$campo] = $transformer->process($tipo_efectivo, $valor);
                    if ($tipo_efectivo==TIPO_FECHA or $tipo_efectivo==TIPO_FECHAHORA)
                        $a_parametros[$fila][$campo] = new gvHidraTimestamp($a_parametros[$fila][$campo]);      
                }
        if (!$vector)
                $a_parametros = $a_parametros[0]['col'];
    }
static transform_BD2User ( a_parametros,
a_tipo,
a_dsn,
a_decimales = 2 
) [static]

Convierte de DB a User Si estamos convirtiendo un numero a decimal podemos indicar el numero de decimales.

public

Parámetros:
any$a_parametros
any$a_tipo
mixed$a_dsn
number$a_decimales
Devuelve:
mixed

Definición en la línea 813 del archivo IgepConexion.php.

                                                                                       {                

                if (!is_array($a_parametros) and $a_parametros!='' and $a_tipo!='') {
                        // le doy estructura de vector para no repetir el codigo
                        $vector = false;
                        $a_parametros = array(array('col'=>$a_parametros,),);
                        $a_tipo = array('col'=>array('tipo'=>$a_tipo, 'parteDecimal'=>$a_decimales),);
                } else
                        $vector = true;         
                if (is_array($a_tipo)) {
                        $transformer = new IgepTransformer();
                        
                        $carbd = IgepDB::caracteresNumericos($a_dsn);
                        $carconf = ConfigFramework::getNumericSeparatorsUser();        
                        $transformer->setDecimal($carbd['DECIMAL'],$carconf['DECIMAL'],$carbd['GROUP'],$carconf['GROUP']);
                        
                        $fechabd = IgepDB::mascaraFechas($a_dsn);
                        $fechaconf = ConfigFramework::getDateMaskUser();        
                        $transformer->setDate($fechabd,$fechaconf);        

                        foreach($a_parametros as $fila => $tupla)
                                foreach($a_tipo as $campo => $descTipo){
                                        if(isset($tupla[$campo])) {
                                                $tipo_efectivo = (empty($descTipo['tipo'])? TIPO_CARACTER: ($descTipo['tipo']==TIPO_ENTERO? TIPO_DECIMAL: $descTipo['tipo']));
                                                if ($tipo_efectivo == TIPO_DECIMAL)
                                                        $tupla[$campo] = $transformer->expandExponent($tupla[$campo], $carbd['DECIMAL'], $carbd['GROUP']);
                                                if ($descTipo['tipo'] == TIPO_DECIMAL)
                                                        $tupla[$campo] = $transformer->decimalPadDatos($tupla[$campo], $descTipo['parteDecimal'], $a_dsn);
                                                $a_parametros[$fila][$campo] = $transformer->process($tipo_efectivo, $tupla[$campo]);
                                        }
                                }
                }
        if ($vector)
                return $a_parametros;
            else
                return $a_parametros[0]['col'];
    } // Fin de prepararPresentacion
transformResultSet ( &$  res,
typeDesc 
)

Transforma los datos obtenidos por consultar y preparedQuery

Definición en la línea 637 del archivo IgepConexion.php.

                                                       {

                if (empty($typeDesc))
                        return;
                if (array_key_exists('DATATYPES',$typeDesc)) {
                        // convertimos los tipos a la estructura usada en this->v_descCamposPanel si es necesario
                        $datatypes = array();
                        foreach($typeDesc['DATATYPES'] as $clave=>$valor)
                                if (is_array($valor) and array_key_exists('tipo',$valor))
                                        $datatypes[$clave] = $valor;
                                else
                                        $datatypes[$clave] = array('tipo'=>$valor);
        } else
                $datatypes = null;

                $this->transform_BD2FW($res,$datatypes);                
        }
unDiacriticCondition ( col,
val,
tipo = 1,
prepare = true 
)

Para formar condiciones de busqueda. Actua como en las ventanas de seleccin (donde no se tienen en cuenta mayusculas ni caracteres especiales)

Parámetros:
$colnombre columna
$valvalor a filtrar en la columna
$tipo0..2, igual que el queryMode
$prepareboolean: si hay que transformar el valor a bd

Definición en la línea 359 del archivo IgepConexion.php.

                                                                                 {

                $dsn = $this->getDSN();
                $val = strtolower($val);
                if ($prepare)
                        $this->prepararOperacion($val, TIPO_CARACTER);
                $expr1 = 'lower('.IgepDB::toTextForVS($dsn, $col).')';
                $expr1 = IgepDB::unDiacritic($dsn, $expr1);
                $val_nolike = IgepDB::unDiacritic($dsn,"'$val'");
                switch ($tipo) {
                        case 0:
                                $expr2 = ' = '.$val_nolike;                                     
                                break;

                        case 1:
                                $expr2 = ' like '.IgepDB::unDiacritic($dsn,"'%$val%'");
                                break;

                        case 2:
                                if (strpos($val,'%')===false and strpos($val,'_')===false)
                                        $expr2 = ' = '.$val_nolike;                                     
                                else
                                        $expr2 = ' like '.$val_nolike;
                                break;

                        default:
                                throw new gvHidraException('IgepConexion::unDiacriticCondition -> valor de tipo no soportado: '.$tipo);
                }
                return $expr1.$expr2;
        }

Documentación de los campos

$obj_conexion

Definición en la línea 61 del archivo IgepConexion.php.

$obj_errorConexion

Definición en la línea 68 del archivo IgepConexion.php.

$persistent [private]

Definición en la línea 82 del archivo IgepConexion.php.

$v_dsn

Definición en la línea 75 del archivo IgepConexion.php.


La documentación para esta clase fue generada a partir del siguiente fichero: