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
mixedgetDeleteRecordQuery()
protected
getDeleteRecordQuery(
$id :
mixed
, $versionId :
int
)
: string
Parameters
- $id : mixed
- $versionId : int
Tags
Return values
stringgetAddRecordQuery()
protected
getAddRecordQuery(
&$record :
TSLDataModel
[, &$constraints :
TSLRequestConstraints
= NULL ]
)
: string
Parameters
- $record : TSLDataModel
- $constraints : TSLRequestConstraints = NULL
Tags
Return values
stringgetFetchQuery()
protected
getFetchQuery(
[ &$record :
TSLDataModel
= NULL ]
[, &$constraints :
TSLRequestConstraints
= NULL ]
[, $subOperation :
string
= NULL ]
)
: string
Parameters
- $record : TSLDataModel = NULL
- $constraints : TSLRequestConstraints = NULL
- $subOperation : string = NULL
Tags
Return values
stringgetRecordQuery()
protected
getRecordQuery(
$id :
mixed
[, &$constraints :
TSLRequestConstraints
= NULL ]
[, $subOperation :
string
= NULL ]
)
: string
Parameters
- $id : mixed
- $constraints : TSLRequestConstraints = NULL
- $subOperation : string = NULL
Tags
Return values
stringgetRecordQueryByCode()
protected
getRecordQueryByCode(
$code :
mixed
[, &$constraints :
TSLRequestConstraints
= NULL ]
[, $subOperation :
string
= NULL ]
)
: string
Parameters
- $code : mixed
- $constraints : TSLRequestConstraints = NULL
- $subOperation : string = NULL
Tags
Return values
stringgetUpdateRecordQuery()
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
Return values
stringgetLastSequenceOrIdentityQuery()
protected
getLastSequenceOrIdentityQuery(
[ &$record :
TSLDataModel
= NULL ]
)
: string
Parameters
- $record : TSLDataModel = NULL
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
mixedisDuplicateKeyError()
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
Return values
boolisForeignKeyError()
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
Return values
boolisRecordModifiedError()
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
Return values
boolget()
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
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
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
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
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
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
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
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
Return values
string —Un string con el query requerido.
getAddRecordQuery()
Retorna el query para agregar un registro.
protected
abstract getAddRecordQuery(
&$record :
TSLDataModel
[, &$constraints :
TSLRequestConstraints
= NULL ]
)
: string
Parameters
- $record : TSLDataModel
El modelo de datos que representa al registro a agregar
- $constraints : TSLRequestConstraints = NULL
Tags
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