Foros del Web » Programación para mayores de 30 ;) » Programación General »

&select_hash ¿?

Estas en el tema de &select_hash ¿? en el foro de Programación General en Foros del Web. Hola, ayudame a entender este codigo: mi principal problema es saber que hace la linea "&select_hash", "bless" primera llamada Código: my $doc = SBMP::Doc->new($rowss->{id}); #SBMP::Doc ...
  #1 (permalink)  
Antiguo 13/10/2010, 14:01
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 20 años, 1 mes
Puntos: 0
&select_hash ¿?

Hola, ayudame a entender este codigo:
mi principal problema es saber que hace la linea "&select_hash", "bless"

primera llamada
Código:
my $doc = SBMP::Doc->new($rowss->{id});
#SBMP::Doc esta en perl/lib/sbmp/
#el archivo se llama doc.pm
Código:
# la funcion new:
my $where = "where id = 1"
my $sth = &select_hash("Select * from tabla $where");
#nuevamente una llamada a otra funcion:
my $self = $class->SBMP::Atri::new($version,1, $sth);

if ($self){
        bless($self, $class);
        return $self;
    }
    else{
        return undef;
    }
SBMP::Doc esta en perl/lib/sbmp/Atri.pm
Código:
sub new
{
    my $class = shift;
    my ( $dueno, $ind_proc_doc, $self) = @_;

    $self->{dueno}=$dueno;
    $self->{ind_proc_doc}= $ind_proc_doc;
    

    bless $self, $class;
    return ($self);
}

para mi esto no tiene pies ni cabeza. Gracias por la ayuda.
Mauricio
__________________
Dios es mas grande que tu problema :-)
  #2 (permalink)  
Antiguo 13/10/2010, 14:07
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 525
Antigüedad: 18 años, 6 meses
Puntos: 11
Respuesta: &select_hash ¿?

select_hash(), parece, que es una llamada a una base de datos, donde se ejecutará la sentencia SQL que se indica como argumento.

No es una función del módulo DBI, así que no sabemos realmente qué es lo que hace, si no sabemos dónde está definido.

bless es un método de Perl, donde a una variable (en este caso, $self, escalar), se la "bendice" (bautiza) como que a partir de ese momento almacenará un objeto de la clase $class.

En otras palabras, estamos creando una instancia de un objeto de la clase $class.

Más información en perldoc -f bless
__________________
JF^D Perl Programming en Español
  #3 (permalink)  
Antiguo 14/10/2010, 07:04
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 20 años, 1 mes
Puntos: 0
De acuerdo Respuesta: &select_hash ¿?

Precisamente, encontre la funcion select_hash definida dentro de uno de los archivos propios del sistema:

Código:
sub select_hash  {

my $sth = $dbh->prepare($_[0]);
$sth->execute;
return $sth->fetchrow_hashref;

}
este trozo de codigo esta echo con el fin de generar archivos excel. sin embargo no lo hace, es decir lo hacia, pero magicamente desaparecio.... esto segun mi analisis a sido por que la cantidad de datos ha aumentado, pero por sobre todas las cosas se trata de ejecutar sentencias con "prepare" y "execute", hice una prueba, reemplazando dichas instrucciones por "selectall_arrayref", con resultados optimos. Lo que deseo entonces, es cambiar esas lineas por el equivalente usando "selectall_arrayref".

Me ayudas nuevamente¿?, muchisimas gracias por tu gentileza!!

Mauricio
__________________
Dios es mas grande que tu problema :-)
  #4 (permalink)  
Antiguo 15/10/2010, 02:40
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 525
Antigüedad: 18 años, 6 meses
Puntos: 11
Respuesta: &select_hash ¿?

Son cosas distintas. fetchrow_hashref() solo devuelve una fila de la tabla resultado de la consulta. selectall_arrayref() devuelve toda la tabla de resultados.

Si modificas esas tres líneas, deberás modificar el resto del programa.

Es lógico que es una solución más rápida, con selectall_arrayref(), ya que solo haces una petición a la base de datos, pero lo que me extraña es la forma en la que está escrita select_hash(): hace un prepare() y un execute(), por lo que siempre devolverá la misma fila de datos. No devolverá el resto de filas, en las sucesivas llamadas.

¿Estás seguro de que el cuello de botella está en esa parte?

Por otra parte, la generación de ficheros Excel suele tener alguna limitación, como se comenta en la sección Limitations de la página de manual de Spreadsheet::WriteExcel (también pone su solución).

P.D. Mi Dios es más pequeño que el tuyo, pero más pequeño que mis problemas.
__________________
JF^D Perl Programming en Español
  #5 (permalink)  
Antiguo 15/10/2010, 09:13
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 20 años, 1 mes
Puntos: 0
De acuerdo Respuesta: &select_hash ¿?

cual es el equivalente entonces¿?, es decir de "fetchrow_hashref()", he probado con selectall_hashref(), pero no me funciona.

Por otro lado, solo he descubierto que al cambiar los prepare gano en tiempo de servidor. Que a todo esto estoy tratando de que se amplie el tiempo de espera, sin embargo sigo pensando que es uina solucion de parche.

Me preocupa lo que me indicas, sin embargo, quisiera probar solo cambiando estas lineas por el equivalente de fetchrow_hashref()

Revise el Limitations que mensionas, sin embargo no es el caso.


Muchisimas Gracias!!!!
__________________
Dios es mas grande que tu problema :-)

Etiquetas: perl-y-cgi
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:38.