Documentation

TSLAppPerfilDAO_postgre extends TSLAppBasicRecordDAO_postgre
in

Este DAO es especifico para el manejo de los items de detalle de perfiles al sistema, todo sistema que implementa perfiles hara uso de este DAO , este caso especifico es la implementacion para POSTGRES SQL y debera ser adaptada para otras bases de datos , lo unico especifico aqui es el uso del campo xmin.

La tabla debera ser la siguiente o su equivalente en otras bases.

 -- Table: tb_sys_perfil_detalle

 -- DROP TABLE tb_sys_perfil_detalle;

CREATE TABLE tb_sys_perfil ( perfil_id integer NOT NULL DEFAULT nextval('tb_sys_perfil_id_seq'::regclass), sys_systemcode character varying(10) NOT NULL, perfil_codigo character varying(15) NOT NULL, perfil_descripcion character varying(120), activo boolean NOT NULL DEFAULT true, usuario character varying(15) NOT NULL, fecha_creacion timestamp without time zone NOT NULL, usuario_mod character varying(15), fecha_modificacion timestamp without time zone, CONSTRAINT pk_sys_perfil PRIMARY KEY (perfil_id ), CONSTRAINT fk_perfil_sistema FOREIGN KEY (sys_systemcode) REFERENCES tb_sys_sistemas (sys_systemcode) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT unq_perfil_syscode_codigo UNIQUE (sys_systemcode , perfil_codigo ) ) WITH ( OIDS=FALSE ); ALTER TABLE tb_sys_perfil OWNER TO muniren;

-- Index: fki_perfil_sistema

-- DROP INDEX fki_perfil_sistema;

CREATE INDEX fki_perfil_sistema ON tb_sys_perfil USING btree (sys_systemcode COLLATE pg_catalog."default" );

-- Trigger: tr_sys_perfil on tb_sys_perfil

-- DROP TRIGGER tr_sys_perfil ON tb_sys_perfil;

CREATE TRIGGER tr_sys_perfil BEFORE INSERT OR UPDATE ON tb_sys_perfil FOR EACH ROW EXECUTE PROCEDURE sptrg_update_log_fields();

Table of Contents

$activeSearchOnly Si la busqueda permite solo activos o no, bool
__construct() Constructor se puede indicar si las busquedas solo seran en registros activos. mixed
getDeleteRecordQuery() string
getAddRecordQuery() string
getFetchQuery() string
getRecordQuery() string
getRecordQueryByCode() string
getUpdateRecordQuery() La metodologia para el update es un hack por problemas en el psotgresql cuando un insert es llevado a una function procedure , recomendamos leer el stored procedure. string
getLastSequenceOrIdentityQuery() string
__construct() Constructor se puede indicar si las busquedas solo seran en registros activos. mixed
isDuplicateKeyError() IMPORTANTE: Este metodo usado aqui es solo para postgreSQL ya que no envian codigo de error solo mensaje. bool
isForeignKeyError() IMPORTANTE: Este metodo usado aqui es solo para postgreSQL ya que no envian codigo de error solo mensaje. bool
isRecordModifiedError() IMPORTANTE: Este metodo usado aqui es solo para postgreSQL ya que no envian codigo de error solo mensaje, ademas este error formalmente no existe y sera usado cuando el error de registro modificado sea detectado dentro de un Stored Procedure , queda al implementador realizarlo y enviar el error en caso suceda. bool
get() Busca un record basado en su id. int
getByCode() Busca un record basado en su codigo unico. int
fetch() Funcion que lee la lista de todos los modelos que implemente la clase final. array
remove() Elimina un modelo de la persistencia. int
update() Ipdate un registro a la persistencia. int
add() Agrega un registro a la persistencia. int
getRecordQuery() Debe retornar el string con el query para leer el registro identificado por su id unico. string
getRecordQueryByCode() Debe retornar el string con el query para leer el registro identificado por su codigo unico , esto es para el caso que el id no sea la llave de busqueda. string
getFetchQuery() Debe retornar el query para recibir todos los registros, si el miembor activeSearchOnly es TRUE solo buscara los activos string
getDeleteRecordQuery() Debe retornar el query para eliminar un registro. string
getUpdateRecordQuery() Debe retornar el query requerido para actualizar un registro. string
getAddRecordQuery() Retorna el query para agregar un registro. string
getLastSequenceOrIdentityQuery() Si el modelo usara una pk o id que es secuencia o identidad esta funcion debera estar implementada y debera retornar el query que la base de datos requiere para obtener el ultimo valor de una secuencia o campo identidad , esto varia mucho entre bases de datos por lo tanto si se requiere debe hacerse override a este metodo Por default retorna null. string

Properties

$activeSearchOnly

Si la busqueda permite solo activos o no,

protected bool $activeSearchOnly = \TRUE

Methods

__construct()

Constructor se puede indicar si las busquedas solo seran en registros activos.

public __construct( [ $activeSearchOnly : bool = TRUE ] ) : mixed
Parameters
$activeSearchOnly : bool = TRUE
Return values
mixed

getDeleteRecordQuery()

protected getDeleteRecordQuery( $id : mixed , $versionId : int ) : string
Parameters
$id : mixed
$versionId : int
Tags
inheritdoc
Return values
string

getUpdateRecordQuery()

La metodologia para el update es un hack por problemas en el psotgresql cuando un insert es llevado a una function procedure , recomendamos leer el stored procedure.

protected getUpdateRecordQuery( &$record : TSLDataModel ) : string
Parameters
$record : TSLDataModel
Tags
inheritdoc
Return values
string

__construct()

Constructor se puede indicar si las busquedas solo seran en registros activos.

public __construct( [ $activeSearchOnly : bool = TRUE ] ) : mixed
Parameters
$activeSearchOnly : bool = TRUE
Return values
mixed

isDuplicateKeyError()

IMPORTANTE: Este metodo usado aqui es solo para postgreSQL ya que no envian codigo de error solo mensaje.

public isDuplicateKeyError( $errorCode : int , $errorMsg : string ) : bool
Parameters
$errorCode : int
$errorMsg : string
Tags
inheritdoc
Return values
bool

isForeignKeyError()

IMPORTANTE: Este metodo usado aqui es solo para postgreSQL ya que no envian codigo de error solo mensaje.

public isForeignKeyError( $errorCode : int , $errorMsg : string ) : bool
Parameters
$errorCode : int
$errorMsg : string
Tags
inheritdoc
Return values
bool

isRecordModifiedError()

IMPORTANTE: Este metodo usado aqui es solo para postgreSQL ya que no envian codigo de error solo mensaje, ademas este error formalmente no existe y sera usado cuando el error de registro modificado sea detectado dentro de un Stored Procedure , queda al implementador realizarlo y enviar el error en caso suceda.

public isRecordModifiedError( $errorCode : int , $errorMsg : string ) : bool

Actualmente se espera que el mensaje contenga el texto 'record modified'

Parameters
$errorCode : int
$errorMsg : string
Tags
inheritdoc
Return values
bool

get()

Busca un record basado en su id.

public get( $id : mixed , &$model : TSLDataModel [, &$constraints : TSLRequestConstraints = NULL ] [, $subOperation : string = NULL ] ) : int
Parameters
$id : mixed

con el unique id del registro

$model : TSLDataModel

repositorio de la respuesta.

$constraints : TSLRequestConstraints = NULL

conteniendo el numero de registros elementos para el order by , filtro etc de la lista, puede ser null

$subOperation : string = NULL

opcional e indica que sub operacion de lectura deberemos hacer , por ejemplo leer haciendo un join para normalizar datos al cliente.

Return values
int


DB_ERR_ALL_OK no hay errores
DB_ERR_SERVERNOTFOUND el servidor de base de datos no se ha encontrado.
DB_ERR_CANTEXECUTE Error ejecutando el query.
DB_ERR_RECORDNOTFOUND - No se encontro el registro

getByCode()

Busca un record basado en su codigo unico.

public getByCode( $code : mixed , &$model : TSLDataModel [, &$constraints : TSLRequestConstraints = NULL ] [, $subOperation : string = NULL ] ) : int
Parameters
$code : mixed

con el unique id del registro

$model : TSLDataModel

repositorio de la respuesta.

$constraints : TSLRequestConstraints = NULL

conteniendo el numero de registros elementos para el order by , filtro etc de la lista.

$subOperation : string = NULL

opcional e indica que sub operacion de lectura deberemos hacer , por ejemplo leer haciendo un join para normalizar datos al cliente.

Return values
int


DB_ERR_ALL_OK no hay errores
DB_ERR_SERVERNOTFOUND el servidor de base de datos no se ha encontrado.
DB_ERR_CANTEXECUTE Error ejecutando el query.
DB_ERR_RECORDNOTFOUND - No se encontro el registro

fetch()

Funcion que lee la lista de todos los modelos que implemente la clase final.

public fetch( [ &$record : TSLDataModel = NULL ] [, &$constraints : TSLRequestConstraints = NULL ] [, $subOperation : string = NULL ] ) : array
Parameters
$record : TSLDataModel = NULL

con los datos base para generar la condicion de busqueda.

$constraints : TSLRequestConstraints = NULL

conteniendo el numero de registros elementos para el order by , filtro etc de la lista.

$subOperation : string = NULL

si el caso de fetch de datos tiene sub operaciones que realizar, es comun en el fetch que existan variantes para una misma entidad

Return values
array

con los registros de salida.

remove()

Elimina un modelo de la persistencia.

public remove( $id : mixed , $versionId : int , $verifiedDeletedCheck : bool ) : int
Parameters
$id : mixed

, representa el valor unico del registro dentro de la base de datos.

$versionId : int

el cual representa la version del registro en la persistencia, debemos recordar que toda base de datos al menos es capaz de mantener un codigo de version de un registro el cual cambia en cada update.

$verifiedDeletedCheck : bool

, si es true verficara si no pudo eliminar por ya estar eliminado el registro. Es usualmente util para el caso de bases de datos que no soporten versionamiento.

Tags
inheritdoc
Return values
int


DB_ERR_ALL_OK no hay errores
DB_ERR_SERVERNOTFOUND el servidor de base de datos no se ha encontrado.
DB_ERR_CANTEXECUTE Error ejecutando el query.
DB_ERR_RECORDNOTFOUND - No se encontro el registro

update()

Ipdate un registro a la persistencia.

public update( &$record : TSLDataModel [, $subOperation : string = NULL ] ) : int

Debe verificar si el registro ha sido modificado o ya no existe, si estuviera modificado el parametro model debe retornar el registro modificado.

Parameters
$record : TSLDataModel
$subOperation : string = NULL

esto puede usarse para indicar que clase de relectura de registro luego del update debe hacerse (llamada a get()). *

Tags
inheritdoc
Return values
int


DB_ERR_ALL_OK no hay errores
DB_ERR_SERVERNOTFOUND el servidor de base de datos no se ha encontrado.
DB_ERR_CANTEXECUTE Error ejecutando el query.
DB_ERR_RECORDNOTFOUND - No se encontro el registro
DB_ERR_RECORD_MODIFIED - El registro esta modificado.

add()

Agrega un registro a la persistencia.

public add( &$record : TSLDataModel [, &$constraints : TSLRequestConstraints = NULL ] [, $subOperation : string = NULL ] ) : int

Debe verificar que el registro no haya sido modificado externamente. De estar modificado , el parametro model debera contener el registro encontrado.

Parameters
$record : TSLDataModel
$constraints : TSLRequestConstraints = NULL

que para este caso podria ser por ejemplo un valor que puedamodificar la forma de agregar o cualquier otro uso.

$subOperation : string = NULL

esto puede usarse para indicar que clase de relectura de registro luego del add debe hacerse (llamada a get()).

Tags
inheritdoc
Return values
int


DB_ERR_ALL_OK no hay errores
DB_ERR_SERVERNOTFOUND el servidor de base de datos no se ha encontrado.
DB_ERR_CANTEXECUTE Error ejecutando el query.
DB_ERR_RECORDEXIST - El registro ya existe previamente.

getRecordQuery()

Debe retornar el string con el query para leer el registro identificado por su id unico.

protected abstract getRecordQuery( $id : mixed [, &$constraints : TSLRequestConstraints = NULL ] [, $subOperation : string = NULL ] ) : string
Parameters
$id : mixed

El identificador unico del registro.

$constraints : TSLRequestConstraints = NULL

conteniendo el numero de registros elementos para el order by , filtro etc de la lista.

$subOperation : string = NULL

para el caso que no se requiera la lectura directa del modelo fisico y se requiera por ejemplo joins para normalizar la data a retornar, por default leera el modelo fisico,

Tags
abstract
Return values
string

con el query requerido,

getRecordQueryByCode()

Debe retornar el string con el query para leer el registro identificado por su codigo unico , esto es para el caso que el id no sea la llave de busqueda.

protected abstract getRecordQueryByCode( $code : mixed [, &$constraints : TSLRequestConstraints = NULL ] [, $subOperation : string = NULL ] ) : string
Parameters
$code : mixed

El identificador unico del registro.

$constraints : TSLRequestConstraints = NULL

conteniendo el numero de registros elementos para el order by , filtro etc de la lista.

$subOperation : string = NULL

para el caso que no se requiera la lectura directa del modelo fisico y se requiera por ejemplo joins para normalizar la data a retornar, por default leera el modelo fisico,

Tags
abstract
Return values
string

con el query requerido,

getFetchQuery()

Debe retornar el query para recibir todos los registros, si el miembor activeSearchOnly es TRUE solo buscara los activos

protected abstract getFetchQuery( [ &$record : TSLDataModel = NULL ] [, &$constraints : TSLRequestConstraints = NULL ] [, $subOperation : string = NULL ] ) : string
Parameters
$record : TSLDataModel = NULL

El modelo de datos que contiene los datos a buscar.

$constraints : TSLRequestConstraints = NULL

conteniendo el numero de registros elementos para el order by , filtro etc de la lista.

$subOperation : string = NULL

si el caso de fetch de datos tiene sub operaciones que realizar, es comun en el fetch que existan variantes para una misma entidad ya que en uchos casos se reuiere joins para devolver una lista de registros de modelo no fisico.

Tags
abstract
Return values
string

String con el query requerido

getDeleteRecordQuery()

Debe retornar el query para eliminar un registro.

protected abstract getDeleteRecordQuery( $id : mixed , $versionId : int ) : string
Parameters
$id : mixed

El identificacor unico del registro a eliminar.

$versionId : int

Para las bases de datos que soporten versionamiento de registros este seria el valor de la version del registro.

Tags
abstract
Return values
string

Un string con el query requerido.

getUpdateRecordQuery()

Debe retornar el query requerido para actualizar un registro.

protected abstract getUpdateRecordQuery( &$record : TSLDataModel ) : string
Parameters
$record : TSLDataModel

El modelo de datos que representa al registro a actualizar.

Tags
abstract
Return values
string

Un string con el query requerido.

getLastSequenceOrIdentityQuery()

Si el modelo usara una pk o id que es secuencia o identidad esta funcion debera estar implementada y debera retornar el query que la base de datos requiere para obtener el ultimo valor de una secuencia o campo identidad , esto varia mucho entre bases de datos por lo tanto si se requiere debe hacerse override a este metodo Por default retorna null.

protected getLastSequenceOrIdentityQuery( [ &$record : TSLDataModel = NULL ] ) : string

Por lo general usado siempre luego de un INSERT que es el unico caso en que no se conoce su valor.

Un caso especial es cuando un stored procedure agrega varias registros a la misma tabla principal que corresponde al modelo , en ese caso no se puede jalar directamente el ultimo. En dichos caso es conveniente que el override de este metodo retorne el query necesario para obtener el id requerido basandose en el parametro record para obtener los datos.

Parameters
$record : TSLDataModel = NULL

Datos del ultimo registro grabado tal como se enviaron a grabar , usado para los casos que sea conveniente obtener un identity a partir de los datos de entrada , como se explica en la ultima parte de los comentarios.

Return values
string

por default retornamos null

Search results