format 75
"orm" // iplan::orm
  revision 135
  modified_by 5 "jviqueira"
  // class settings
  //class diagram settings
  draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
  //use case diagram settings
  package_name_in_tab default show_context default auto_label_position default draw_all_relations default class_drawing_mode default shadow default show_stereotype_properties default
  //sequence diagram settings
  show_full_operations_definition default write_horizontally default class_drawing_mode default drawing_language default draw_all_relations default shadow default show_stereotype_properties default show_class_context_mode default show_msg_context_mode default
  //collaboration diagram settings
  show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default show_msg_context default draw_all_relations default shadow default show_stereotype_properties default
  //object diagram settings
   write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default show_stereotype_properties default
  //component diagram settings
  package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default
  draw_component_as_icon default show_component_req_prov default show_component_rea default show_stereotype_properties default
  //deployment diagram settings
  package_name_in_tab default show_context default write_horizontally default auto_label_position default draw_all_relations default shadow default
  draw_component_as_icon default show_component_req_prov default show_component_rea default show_stereotype_properties default
  //state diagram settings
  package_name_in_tab default show_context default auto_label_position default write_trans_label_horizontally default show_trans_definition default draw_all_relations default shadow default
  show_activities default region_horizontally default drawing_language default show_stereotype_properties default
  //activity diagram settings
  package_name_in_tab default show_context default show_opaque_action_definition default auto_label_position default write_flow_label_horizontally default draw_all_relations default shadow default
  show_infonote default drawing_language default show_stereotype_properties default
  
  php_dir "iplan/orm"
  classview 134533 "ORM Class Diagram"
    //class diagram settings
    draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
    //collaboration diagram settings
    show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default show_msg_context default draw_all_relations default shadow default show_stereotype_properties default
    //object diagram settings
     write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default show_stereotype_properties default
    //sequence diagram settings
    show_full_operations_definition default write_horizontally default class_drawing_mode default drawing_language default draw_all_relations default shadow default show_stereotype_properties default show_class_context_mode default show_msg_context_mode default
    //state diagram settings
    package_name_in_tab default show_context default auto_label_position default write_trans_label_horizontally default show_trans_definition default draw_all_relations default shadow default
    show_activities default region_horizontally default drawing_language default show_stereotype_properties default
    //class settings
    //activity diagram settings
    package_name_in_tab default show_context default show_opaque_action_definition default auto_label_position default write_flow_label_horizontally default draw_all_relations default shadow default
    show_infonote default drawing_language default show_stereotype_properties default
    associated_deployment_view deploymentview_ref 141189 // ORM Deployment
    comment "La idea tras este esquema es que los objetos que tengan que tener un estado persistente sean especializaciones de DataBaseObject.
Las clases del esquema proveen:
 - abstraccin del motor de base de datos (a travs de las clases de iplan.database)
 - una forma de extender clases preocupandose slo de los atributos propios de la subclase, simplificando la construccin de jerarquias. Esto se logra a travs del mtodo setTable() y addField() del ORM Definition.
 - servicios de mantenimiento de objetos como el guardado o carga selectiva (slo si es necesario), almacenamiento recursivo de las collecciones de objetos y otros relacionados (consulta de objetos en memoria, etc...)
    * El guardado selectivo se realiza en el mtodo SAVE en base al recalculo del hash y la comparacin con el hash original, si son diferentes es que el objeto cambio y debe guardarse. Adems si el ID esta seteado se hace un UPDATE y sino un INSERT.
    * La carga selectiva o la deteccin de aquellos objetos que ya han sido recuperados se realiza en el mtodo LOAD, preguntando primero si al ORM si ya tiene registrado un objeto de esa clase, con el ID indicado. ORM cuenta con mtodos para registrar y desregistrar objetos y mantiene una coleccin de los objetos recuperados en un arreglo llamado \"objects[clase][id]\".
    * Para saber cuales campos son colecciones de objetos, hay un tipo que es COLLECTION. Cuando se hace Save, se verifica si el atributo es de tipo collection, si es as se lo deja para actualizarse al final. Primero se actualiza el registro del objeto actual y luego se hace un loop sobre cada atributo collection guardando (ejecutando el mtodo SAVE) cada elemento.

ATENCION!!! Si se hace que la Definicin soporte una tabla para LOAD y otra para SAVE se pueden hacer migraciones!!! :)

"
    classdiagram 141189 "ORM Classes"
      draw_all_relations no hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name yes package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
      comment "DUDA:

El objeto hereda de DatabaseObject. DatabaseObject redirecciona todos los atributos de la instancia a las posiciones de memoria de un array, utilizando para ello la informacin del ORMDefinition del objeto en cuestin.
El Array donde se direccionan los atributos es una instancia de ORMAttributes. ORMAttributes es el encargado de saber qu tablas se modificaron y cuales no.

//El modo de uso de esta jerarqua sera el siguiente:
Class Client extends DataBaseObject {
	... 
	define() {
		$definition = super->define();
		$definition->setTable('PERSON')
			  ->addField('person_id', INT, true)
			  ->addField('person_name', STRING, false)
			  ->addField('person_age', INT, false);
		$definition->setTable('CLIENT')
			  ->addField('client_id', INT, true)
			  ->addField('client_person', INT, false)
			  ->addField('client_number', LONG, false);
		return $definition;
	}
}
Se permite ms de una tabla para el caso de que las jerarquas se implementen en tablas distintas. El mtodo \"setTable\" setea una variable predeterminada y los subsiguientes llamados a mtodos de configuracin del ORM toman esa tabla como predeterminada. OJO: es de fundamental importancia respetar el setTable(), los llamados a todo lo que tenga que ver a esa tabla y recin luego llamar de nuevo a setTable(). Es decir, NO SE PUEDE hacer:
setTable('PERSON');
setTable('CLIENT');
addField(...)
Porque todos los llamados a addField() se asociaran con CLIENT y no con PERSON.

Con esto es posible \"determinar\" con cierta atomicidad qu tabla requiere actualizacin. Se debe llevar un HASH por cada tabla y uno global del objeto:
	ormData['table']['orm_hash']=SHA1('...');
	ormData['orm_hash']=SHA1('...');

Tambin (debido a la particularidad del uso de las base de datos) es necesario setear las funciones que hagan la administracin en cada tabla. Esto se hace con los mtodos:
	setInsertProcedure('yoDoyAlta(:name, :age)', RETURN_ID|NOT_RETURN_ID, 'table');

TECNICA: as como el ORM tiene una cach de todo, las clases de los objetos pueden ahorrar bastante costo de memoria si en vez de instanciar N veces las mismas variables y setearlas en su constructor, las \"referencian\" de un 3er objeto. Sugerido por FlyWeight pattern.
"
      size Legal-Landscape
    end

    class 295685 "AbstractDataBase"
      abstract visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      comment "Ac se abstraer la plataforma de base de datos"
      operation 433285 "getData"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "array"
	nparams 3
	  param in name "table" explicit_type "string"
	  param in name "id" explicit_type "int"
	  param in name "fields" explicit_type "array"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Dada una tabla y el identificador de registros, devuelve los valores de los campos especificados.
@abstract
@param $table string el nombre de la tabla
@param $id long el identificador de la fila en la que estamos interesados
@param $fields array un arreglo de strings con los nombres de las columnas a recuperar
@return array|false un arreglo asociativo (field=>value) con los valores recuperados de la base o false si hubo algn error."
      end

      operation 433413 "getField"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "mixed"
	nparams 3
	  param in name "table" explicit_type "string"
	  param in name "id" explicit_type "int"
	  param in name "field" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna el valor del campo especificado. El nombre de la columna debe ser el simil al campo definido en la base de datos. La intencin es usarlo para recuperar campos BLOB, CLOB y otros \"pesados\" sobre demanda.

@param string $table el nombre de la tabla
@param int $id el identificador del registro
@param string $field el nombre del campo a recuperar

@return mixed el valor del campo recuperado."
      end

      operation 433541 "filter"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "array"
	nparams 6
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "conditions" explicit_type "array"
	    defaultvalue "\"\""
	  param in name "order" explicit_type "array"
	    defaultvalue "\"\""
	  param in name "from" explicit_type "int"
	    defaultvalue "null"
	  param in name "count" explicit_type "int"
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Igual a getData() pero mltiples filas. La idea sera recibir \"cuaternas\" que armen el SQL a ejecutar en base a la iteracin sobre los parmetros (hasta que se acaben) y un gran switch sobre \"operation\".
@param string $table el nombre de la tabla desde la cual recuperar los datos
@param array $fields un arreglo de strings con los nombres de los campos a recuperar
@param array $conditions otro arreglo con los condicionales codificados, cada uno, de la siguiente forma:array(operation, leftValue, rightValue, connector). Usar AbstractDataBase::makeCondition().
@param array $order se pasa aqu un arreglo de strings con formato \"nombreColumna [ASC|DESC]\", lo cual ordenar el conjunto de resultados.
@param int $from indica a partir de qu fila del resultset se desea acceder. Si se indica null trae desde la primer fila.
@param int $count indica cuntas filas a partir del $from se deben recuperar, si se indica null se recuperan todas.
@return array|false el conjunto de resultados o falso si hubo algn error
"
      end

      operation 433669 "insert"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "int"
	nparams 3
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "useGenerator" explicit_type "bool"
	    defaultvalue "true"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Inserta un registro en la tabla con los campos que se indiquen.

@param string $table el nombre de la tabla en la que se desea insertar
@param array $fields un arreglo con los campos a insertar. Ntese que las claves son los FieldNames y que all se instarn los valores de dichas claves.
@param boolean $useGenerator un booleano que indica si al hacer un insert se debe autodetectar la clave primaria y emplear el generador de dicha clave o si slo se emplean los valores pasados por parmetro.

@return int el identificador con el cual qued el registro en la tabla.
"
      end

      operation 433797 "update"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 3
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "conditions" explicit_type "array"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Realiza un UPDATE sobre la tabla y los campos indicados, es parecido a filter.

@param string $table el nombre de la tabla a actualizar
@param array $fields un arreglo cuyas claves son los nombres de los campos a actualizar.
@param array $conditions otro arreglo donde cada elemento es un arreglo con el siguiente formato: array(field, operation, value1, value2, connector) el cual se puede generar con la funcin makeCondition() de cualquier miembro de la jerarqua de AbstractDataBase.

@return int|false el nmero de filas afectadas o false si hubo error"
      end

      operation 440325 "delete"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 2
	  param in name "table" explicit_type "string"
	  param in name "what" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Borra un registro de la tabla segn su id o un conjunto de condiciones.

@param string $table el nombre de la tabla sobre la cual hacer el borrado.
@param int|array $what puede ser un entero (el id) o un arreglo de condiciones.

@return int|false la cantidad de filas afectadas o false si hubo error"
      end

      operation 596997 "addRelation"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "boolean"
	nparams 2
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Agrega un registro de relacin de una relacin M:N

@param string $table el nombre de la tabla relacin
@param array $fields un arreglo indexado por el nombre del campo de la base de datos

@return boolean Retorna TRUE si la operacin se realiz con xito, FALSE sino."
      end

      operation 603781 "delRelation"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "bool"
	nparams 2
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Quita un registro de relacin de una relacin M:N

@param string $table el nombre de la tabla relacin
@param array $fields un arreglo indexado por el nombre del campo de la base de datos para filtrar

@return boolean Retorna TRUE si la operacin se realiz con xito, FALSE sino."
      end

      operation 446853 "count"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 1
	  param inout name "coded_sql" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Similar a execute() pero slo contabiliza la cantidad de registros."
      end

      operation 542213 "makeCondition"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "array"
	nparams 4
	  param in name "operation" explicit_type "string"
	  param in name "leftValue" explicit_type "mixed"
	  param in name "rightValue" explicit_type "mixed"
	  param in name "connector" explicit_type "string"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Funcin de utilera para crear una condicin

@param string $operation la operacin de comparacin o verificacin: =, &lt;&gt;, LIKE, IN, NOT, BETWEEN. En el caso de IN la funcin espera que el rightValue sea un array y separa sus componentes por \",\" y los encierra entre parntesis.
@param mixed $leftValue el primer operando
@param mixed $rightValue el segundo operando
@connector string $connector el conector con el que se debe unir esta condicin con la siguiente (AND, OR)
@return array el arreglo de la condicin formateado"
      end

      classrelation 450949 // <dependency>
	relation 450053 -_->
	  a default
	    php "${type}"
	    classrelation_ref 450949 // <dependency>
	  b parent class_ref 361221 // DMLOperationFailed
      end

      operation 589829 "php2db"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "mixed"
	nparams 2
	  param in name "value" explicit_type "mixed"
	  param in name "type" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Convierte valores PHP a la representacin necesaria para que la base de datos lo entienda. Debe ser utilizado para pasar los \"values\" en las funciones.
@param mixed $value el valor nativo de PHP que se desea convertir
@param int $type el tipo al que queremos castear, adopta las constates de ORM_TYPES

@return mixed El valor que requiere la base de datos"
      end

      operation 589957 "db2php"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 2
	  param in name "value" explicit_type "mixed"
	  param in name "type" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Convierte valores devueltos por la base de datos a la representacin PHP solicitada. Debe ser utilizado para pasar los \"values\" en las funciones.
@param mixed $value el valor nativo de PHP que se desea convertir
@param int $type el tipo al que queremos castear, adopta las constates de ORM_TYPES

@return mixed El valor convertido a su representacin PHP ms prxima"
      end

      operation 596741 "getDateTime"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "datetime"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna un valor de fecha y hora de la base.

@return datetime El momento en el cual se efecta el llamado segn la base de datos."
      end

      operation 693637 "getConnection"
	abstract preserve_cpp_body_indent cpp_virtual public return_type class_ref 174341 // Connection
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Devuelve la conexin usada por la instancia.

@return Connection La conexin que utiliza la instancia de base de datos"
      end
    end

    class 308741 "OracleDatabase"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      classrelation 350469 // <generalisation>
	relation 349701 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 350469 // <generalisation>
	  b parent class_ref 295685 // AbstractDataBase
      end

      attribute 308741 "connection"
	private type class_ref 201989 // OracleConnection
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	set_oper operation_ref 481669 // setConnection
	comment "@var OracleConnection una conexin a la base de datos Oracle"
      end

      attribute 315269 "statements"
	private explicit_type "array"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "Un array con todos los prepared statements para llamar a los procedures del package"
      end

      operation 481669 "setConnection"
	force_body_gen public explicit_return_type "void"
	nparams 1
	  param in name "value" type class_ref 201989 // OracleConnection
	
	cpp_name_spec "set_${name}"
	
	java_name_spec "set${Name}"
	php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${)}
{
  $this->connection = ${p0};
}
"
	php_name_spec "set${Name}"
	
	python_name_spec "set${Name}"
	
	idl_name_spec "set_${name}"
	set_of_attribute attribute_ref 308741 // connection
      end

      operation 453381 "__construct"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 453509 "getData"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "array"
	nparams 3
	  param in name "table" explicit_type "string"
	  param in name "id" explicit_type "int"
	  param in name "fields" explicit_type "array"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Dada una tabla y el identificador de registros, devuelve los valores de los campos especificados.
@param $table string el nombre de la tabla
@param $id long el identificador de la fila en la que estamos interesados
@param $fields array un arreglo de strings con los nombres de las columnas a recuperar
@return array|false un arreglo asociativo (field=>value) con los valores recuperados de la base o false si hubo algn error."
      end

      operation 453637 "filter"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "array"
	nparams 6
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "conditions" explicit_type "array"
	    defaultvalue "\"\""
	  param in name "order" explicit_type "array"
	    defaultvalue "\"\""
	  param in name "from" explicit_type "int"
	    defaultvalue "null"
	  param in name "count" explicit_type "int"
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Igual a getData() pero mltiples filas. La idea sera recibir \"cuaternas\" que armen el SQL a ejecutar en base a la iteracin sobre los parmetros (hasta que se acaben) y un gran switch sobre \"operation\".
@param string $table el nombre de la tabla desde la cual recuperar los datos
@param array $fields un arreglo de strings con los nombres de los campos a recuperar
@param array $conditions otro arreglo con los condicionales codificados, cada uno, de la siguiente forma:array(operation, leftValue, rightValue, connector). Usar AbstractDataBase::makeCondition().
@param array $order se pasa aqu un arreglo de strings con formato \"nombreColumna [ASC|DESC]\", lo cual ordenar el conjunto de resultados.
@param int $from indica a partir de qu fila del resultset se desea acceder. Si se indica null trae desde la primer fila.
@param int $count indica cuntas filas a partir del $from se deben recuperar, si se indica null se recuperan todas.
@return array|false el conjunto de resultados o falso si hubo algn error
"
      end

      operation 453765 "getField"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "mixed"
	nparams 3
	  param in name "table" explicit_type "string"
	  param in name "id" explicit_type "int"
	  param in name "field" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna el valor del campo especificado. El nombre de la columna debe ser el simil al campo definido en la base de datos. La intencin es usarlo para recuperar campos BLOB, CLOB y otros \"pesados\" sobre demanda.

@param string $table el nombre de la tabla
@param int $id el identificador del registro
@param string $field el nombre del campo a recuperar

@return mixed el valor del campo recuperado."
      end

      operation 453893 "insert"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "int"
	nparams 3
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "useGenerator" explicit_type "bool"
	    defaultvalue "true"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Inserta un registro en la tabla con los campos que se indiquen.

@param string $table el nombre de la tabla en la que se desea insertar
@param array $fields un arreglo con los campos a insertar. Ntese que las claves son los FieldNames y que all se instarn los valores de dichas claves.
@param boolean $useGenerator un booleano que indica si al hacer un insert se debe autodetectar la clave primaria y emplear el generador de dicha clave o si slo se emplean los valores pasados por parmetro.

@return int el identificador con el cual qued el registro en la tabla.
"
      end

      operation 454021 "update"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 3
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "conditions" explicit_type "array"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Realiza un UPDATE sobre la tabla y los campos indicados, es parecido a filter.

@param string $table el nombre de la tabla a actualizar
@param array $fields un arreglo cuyas claves son los nombres de los campos a actualizar.
@param array $conditions otro arreglo donde cada elemento es un arreglo con el siguiente formato: array(field, operation, value1, value2, connector) el cual se puede generar con la funcin makeCondition() de cualquier miembro de la jerarqua de AbstractDataBase.

@return int|false el nmero de filas afectadas o false si hubo error"
      end

      operation 454149 "delete"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 2
	  param in name "table" explicit_type "string"
	  param in name "what" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Borra un registro de la tabla segn su id o un conjunto de condiciones.

@param string $table el nombre de la tabla sobre la cual hacer el borrado.
@param int|array $what puede ser un entero (el id) o un arreglo de condiciones.

@return int|false la cantidad de filas afectadas o false si hubo error"
      end

      operation 597125 "addRelation"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "boolean"
	nparams 2
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Agrega un registro de relacin de una relacin M:N

@param string $table el nombre de la tabla relacin
@param array $fields un arreglo indexado por el nombre del campo de la base de datos

@return boolean Retorna TRUE si la operacin se realiz con xito, FALSE sino."
      end

      operation 603909 "delRelation"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "bool"
	nparams 2
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Quita un registro de relacin de una relacin M:N

@param string $table el nombre de la tabla relacin
@param array $fields un arreglo indexado por el nombre del campo de la base de datos para filtrar

@return boolean Retorna TRUE si la operacin se realiz con xito, FALSE sino."
      end

      operation 454277 "count"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "int"
	nparams 1
	  param inout name "coded_sql" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Similar a execute() pero slo contabiliza la cantidad de registros."
      end

      operation 549381 "imp"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 2
	  param in name "dataType" explicit_type "string"
	  param in name "params" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Devuelve un string con el tipo de datos instanciado y los valores de los params unidos separados por coma (,). Si el arreglo es vaco entonces devuelve el string NULL.
@param string $dataType el nombre del tipo de datos (ser puesto en maysculas y antecedido del nombre del package.
@param array $params un arreglo de strings que contiene los valores. Los mismos sern puestos entre comillas simples y concatenados separados por coma (,).
@return string un string que debe concatenarse directamente con la instruccin, consistente del package.dataType('value1', 'value2',...) o NULL"
      end

      operation 603653 "makeCondition"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "array"
	nparams 4
	  param in name "operation" explicit_type "string"
	  param in name "leftValue" explicit_type "mixed"
	  param in name "rightValue" explicit_type "mixed"
	  param in name "connector" explicit_type "string"
	    defaultvalue "\"AND\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Funcin de utilera para crear una condicin

@param string $operation la operacin de comparacin o verificacin: =, &lt;&gt;, LIKE, IN, NOT, BETWEEN. En el caso de IN la funcin espera que el rightValue sea un array y separa sus componentes por \",\" y los encierra entre parntesis.
@param mixed $leftValue el primer operando
@param mixed $rightValue el segundo operando
@connector string $connector el conector con el que se debe unir esta condicin con la siguiente (AND, OR)
@return array el arreglo de la condicin formateado"
      end

      operation 590085 "php2db"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "mixed"
	nparams 2
	  param in name "value" explicit_type "mixed"
	  param in name "type" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Convierte valores PHP a la representacin necesaria para que la base de datos lo entienda. Debe ser utilizado para pasar los \"values\" en las funciones.
@param mixed $value el valor nativo de PHP que se desea convertir
@param int $type el tipo al que queremos castear, adopta las constates de ORM_TYPES

@return mixed El valor que requiere la base de datos"
      end

      operation 590213 "db2php"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 2
	  param in name "value" explicit_type "mixed"
	  param in name "type" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Convierte valores devueltos por la base de datos a la representacin PHP solicitada. Debe ser utilizado para pasar los \"values\" en las funciones.
@param mixed $value el valor nativo de PHP que se desea convertir
@param int $type el tipo al que queremos castear, adopta las constates de ORM_TYPES

@return mixed El valor convertido a su representacin PHP ms prxima"
      end

      operation 596869 "getDateTime"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "datetime"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna un valor de fecha y hora de la base.

@return datetime El momento en el cual se efecta el llamado segn la base de datos."
      end

      operation 631813 "sql_filter"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 4
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "alias" explicit_type "string"
	    defaultvalue "\"\""
	  param in name "conditions" explicit_type "array"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Es una implementacin especial que se utiliza para brindar soporte a ORMQuery.
Toma una tabla, el conjunto de campos de retorno y la lista de condiciones de filtrado retornando una representacin de la misma.

@param string $table el nombre de la tabla sobre la que se va a filtrar.
@param array $fields una lista de los nombres de los campos a retornar.
@param array $conditions las condiciones de filtrado. Para generar la lista use makeCondition().

@return Una representacin encapsulada de la consulta.

@see sql_add_condition()
@see sql_execute()"
      end

      operation 638341 "sql_add_condition"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 6
	  param inout name "main_sql" explicit_type "string"
	  param in name "table" explicit_type "string"
	  param in name "field" explicit_type "string"
	  param in name "operator" explicit_type "string"
	  param inout name "sql_select" explicit_type "string"
	  param in name "alias" explicit_type "string"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Agrega una condicin de IN o NOT IN al sql indicado en base a otro select.

@param string $main_sql el sql codificado producto de un llamado previo a sql_filter() o sql_add_condition()
@param string $table el nombre de la tabla a la que pertenece el field que se va a filtrar
@param string field el campo que se validar
@param string operator el tipo de filtrado ('IN' o 'NOT IN')
@param string sql_select el select codificado que recupera la lista de claves
@param string alias por ahora no se usa y debe pasarse como \"\"

@return string un sql codificado.

@see sql_filter()
@see sql_execute()"
      end

      operation 828805 "sql_add_where"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 2
	  param inout name "coded_sql" explicit_type "string"
	  param in name "conditions" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Agrega una condicin general (global) a la instruccin SQL codificada.

@param string $coded_sql el SQL Codificado
@param array $conditions las condiciones a agregar
@return string el SQL resultante encriptado"
      end

      operation 822021 "sql_join_table"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 5
	  param inout name "coded_sql" explicit_type "string"
	  param in name "table" explicit_type "string"
	  param in name "alias" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "conditions" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Une mediante un JOIN los valores de la consulta actual con los de otra clase, utilizando para el emparejamiento las condiciones dadas e incorporando al conjunto de resultados los atributos indicados.
@param string	$coded_sql el sql codificado a modificar
@param string $table la tabla contra la que se va a hacer el JOIN
@param string $alias el alias de la tabla
@param array $fields los nuevos fields a incorporar en el conjunto de resultados
@param array $conditions las condiciones de emparejamiento del conjunto de resultados"
      end

      operation 822277 "sql_join"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 5
	  param inout name "coded_sql" explicit_type "string"
	  param inout name "coded_sql2" explicit_type "string"
	  param in name "alias" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "conditions" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Une mediante un JOIN los valores de la consulta actual con los de otra clase, utilizando para el emparejamiento las condiciones dadas e incorporando al conjunto de resultados los atributos indicados.
@param string	$coded_sql el sql codificado a modificar
@param string $coded_sql2 la otra consulta contra la que se va a hacer el JOIN
@param string $alias el alias de la tabla
@param array $fields los nuevos fields a incorporar en el conjunto de resultados
@param array $conditions las condiciones de emparejamiento del conjunto de resultados"
      end

      operation 638469 "sql_execute"
	preserve_cpp_body_indent public explicit_return_type "array"
	nparams 4
	  param inout name "coded_sql" explicit_type "string"
	  param in name "order" explicit_type "array"
	    defaultvalue "null"
	  param in name "from" explicit_type "int"
	    defaultvalue "null"
	  param in name "count" explicit_type "int"
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Ejecuta una consulta codificada con sql_filter() o sql_add_condition().

@param string $coded_sql la consulta codificada a ejecutar
@param array $order un arreglo con los nombres de los campos para el ordenamiento... se puede poner un espacio y ASC o DESC segn se desee.
@param int $from el primer registro del conjunto de resultados
@param int $count la cantidad de registros que se espera leer

@return array un arreglo con los campos solicitados

@see sql_filter()
@see sql_add_condition()"
      end

      operation 693765 "getConnection"
	preserve_cpp_body_indent cpp_virtual public return_type class_ref 174341 // Connection
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Devuelve la conexin usada por la instancia.

@return Connection La conexin que utiliza la instancia de base de datos"
      end

      operation 836101 "sql_execute2"
	preserve_cpp_body_indent public explicit_return_type "array"
	nparams 5
	  param inout name "coded_sql" explicit_type "string"
	  param in name "groups" explicit_type "array"
	    defaultvalue "null"
	  param in name "order" explicit_type "array"
	    defaultvalue "null"
	  param in name "from" explicit_type "int"
	    defaultvalue "null"
	  param in name "count" explicit_type "int"
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Ejecuta una consulta codificada con sql_filter() o sql_add_condition().

@param string $coded_sql la consulta codificada a ejecutar
@param array $groups un arreglo con los campos que se agruparn de la consulta
@param array $order un arreglo con los nombres de los campos para el ordenamiento... se puede poner un espacio y ASC o DESC segn se desee.
@param int $from el primer registro del conjunto de resultados
@param int $count la cantidad de registros que se espera leer

@return array un arreglo con los campos solicitados

@see sql_filter()
@see sql_add_condition()"
      end

      operation 836485 "sql_set_from"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 3
	  param inout name "coded_sql" explicit_type "string"
	  param in name "from" explicit_type "array"
	  param in name "replace" explicit_type "bool"
	    defaultvalue "true"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Agrega o reemplaza el from de una sentencia SQL.

@param string $coded_sql el SQL Codificado
@param array $from las columnas a agregar
@param boolean $replace especifica si el from existente debe preservarse o no.
@return string el SQL resultante encriptado"
      end
    end

    class 141317 "ORMObject"
      abstract visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${visibility}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      ncouples 1
      key "other_requires" value "require_once('ORM.php');
require_once('ORMDefinition.php');"
      comment "Se trata de una interfaz que implementa los mtodos necesarios para brindar servicios de almacenamiento y recuperacin del objeto en la base de datos

En conjunto con ORM y las clases auxiliares, dan una solucin integral para la gestin del mapeo relacional.

"
      attribute 485893 "definition"
	class_attribute package type class_ref 236293 // ORMDefinition
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 141445 "id"
	public explicit_type "int"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	get_oper operation_ref 467717 // getId
	set_oper operation_ref 467845 // setId
	comment "@var int El identificador del objeto"
      end

      attribute 238853 "ORMState"
	private explicit_type "int"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	get_oper operation_ref 467973 // getORMState
	set_oper operation_ref 468101 // setORMState
	comment "Un estado que puede ser:
NEW := NUEVO, es un objeto an no persistido en la base de datos, pero que de seguir la secuencia de eventos culminar insertandose en la base.
REMOVED := Es un objeto que se solicit para remocin de la base de datos. Es posible que alguna referencia quede apuntando a l y accediendo sus valores, pero los mismos deberan ser descartados. Posiblemente algn programa de LOG quiera ver como estaba al momento del DELETE o algo as.
REGISTERED := Significa que el objeto est persistido en la base de datos y que actualmente est bajo la vista del sistema ORM para preservar cualquier cambio.
UNREGISTERED := Significa que el objeto no est bajo seguimiento del Manager de ORM.
"
      end

      attribute 328709 "orm"
	private type class_ref 167685 // ORM
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var ORM $orm la instancia de ORM que est gerenciando el objeto o null"
      end

      attribute 342149 "ORMModifieds"
	private explicit_type "array"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var array un arreglo en el cual se almacenarn los campos modificados"
      end

      classrelation 376709 // <dependency>
	relation 375941 -_->
	  a private
	    php "${type}"
	    classrelation_ref 376709 // <dependency>
	  b parent class_ref 236293 // ORMDefinition
      end

      operation 163077 "__destroy"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 177029 "__construct"
	preserve_cpp_body_indent public return_type class_ref 141317 // ORMObject
	nparams 1
	  param inout name "orm" type class_ref 167685 // ORM
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Constructor predeterminado de los objetos derivados del ORM. Recibe opcionalmente una instancia del ORM al cual se desea que se registre la instancia. Esto afecta el estado y si la instancia desde su nacimiento va a ser monitoreada por el ORM.
@param ORM $orm una instancia del ORM que va a monitorear el objeto.
@return ORMObject la instancia del objeto"
      end

      operation 760837 "isset__"
	preserve_cpp_body_indent public explicit_return_type "boolean"
	nparams 1
	  param in name "variablename" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "ANULADO POR AHORA. Devuelve TRUE si la variable existe.

@param string $variablename el nombre de la variable.

@return boolean Retorna TRUE si la variable se encuentra definida o FALSE sino."
      end

      operation 288133 "define"
	class_operation preserve_cpp_body_indent public return_type class_ref 236293 // ORMDefinition
	nparams 1
	  param inout name "orm" type class_ref 167685 // ORM
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna un objeto de definicin predeterminado al cual hay que agregarle los mapeos pertinentes.
@param ORM $orm el manejador de ORM para el cual se registra la clase
@return \\orm\\ORMDefinition la definicin default"
      end

      operation 170373 "delete"
	preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Borra fsicamente un objeto de la base. Al borrarse el objeto adems se ponen a null los campos de las entidades relacionadas que lo referenciaban y se eliminan los registros de las tablas relacin M:N

@return boolean un booleando TRUE si la operacin fue concretada con xito o FALSE sino."
      end

      operation 162949 "&load"
	class_operation preserve_cpp_body_indent public explicit_return_type "void"
	nparams 3
	  param in name "id" explicit_type "int"
	  param inout name "orm" type class_ref 167685 // ORM
	  param in name "class" explicit_type "string"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera una instancia de la clase desde la base de datos. Este mtodo adems calcula el hash en base a los atributos. En combinacin con el mtodo save() permite abstraer a las clases subyacentes de la necesidad de determinar si el objeto fue alterado o no y si corresponde guardarlo.
Finalmente este mtodo registra el objeto en el ORM para su mantenimiento automtico.
@param $id int el identificador del objeto a recuperar
@param $orm ORM el gestor que solicita el objeto
@param string $class la clase que se quiere cargar. Si se omite se toma la clase invocada en forma predeterminada
@return ORMObject una instancia con los valores precargados

@todo prestar atencin en el LOAD que si se hace una carga de objetos masiva, es necesario verificar que los mismos no esten PRE registrados en el ORM o si lo estn y los hash no son los mismos enviar alguna excepcin al usuario."
      end

      operation 156293 "save"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "bool"
	nparams 1
	  param inout name "orm" type class_ref 167685 // ORM
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Verifica si el objeto fue modificado y lo guarda.
Este mtodo permite abstraer a las clases descendientes de la necesidad de determinar si el objeto fue alterado o no y oculta la complejidad subyacente a las clases descendientes.
@param ORM $orm opcionalmente se debe indicar la instancia del ORM que mantiene el objeto. Esto slo es posible si el objeto es nuevo o DETACHED. En el caso que ya estuviera bajo monitoreo de un ORM arrojar una excepcin.

Se pens en que se podra hacer el cambio de un ORM a otro, pero el ID debera limpiarse, con lo cual slo un INSERT se podra hacer sobre el destino y los objetos relacionados estaran an con otro ORM lo cual es complicado (manejo de objetos distribudos) por lo cual se deja a consideracin de futuras versiones, posiblemente en otra vida =)"
      end

      operation 515717 "getAttributes"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "@todo ELIMINAR ESTA FUNCIN

Retorna un arreglo de todos los atributos pblicos y protegidos del objeto (adems de algunos privados). Es para debug, no debe quedar en el objeto.

@return array La lista de los atributos"
      end

      operation 467717 "getId"
	force_body_gen const cpp_inline public explicit_return_type "int"
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->id;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_attribute attribute_ref 141445 // id
      end

      operation 467845 "setId"
	force_body_gen protected explicit_return_type "void"
	nparams 1
	  param in name "value" explicit_type "int"
	
	cpp_name_spec "set_${name}"
	
	java_name_spec "set${Name}"
	php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${)}
{
  $this->id = ${p0};
}
"
	php_name_spec "set${Name}"
	
	python_name_spec "set${Name}"
	
	idl_name_spec "set_${name}"
	set_of_attribute attribute_ref 141445 // id
      end

      operation 467973 "getORMState"
	force_body_gen const cpp_inline public explicit_return_type "int"
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->ORMState;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_attribute attribute_ref 238853 // ORMState
      end

      operation 468101 "setORMState"
	force_body_gen protected explicit_return_type "void"
	nparams 1
	  param in name "value" explicit_type "int"
	
	cpp_name_spec "set_${name}"
	
	java_name_spec "set${Name}"
	php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${)}
{
  $this->ORMState = ${p0};
}
"
	php_name_spec "set${Name}"
	
	python_name_spec "set${Name}"
	
	idl_name_spec "set_${name}"
	set_of_attribute attribute_ref 238853 // ORMState
      end

      operation 495109 "isModified"
	preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Indica si el objeto ha sufrido modificacin en sus atributos. Debe destacarse que los atributos directos del objeto son los que participan de esta comprobacin, por lo que las modificaciones en objetos asociados no son tenidas en cuenta.

@return boolean true si el objeto ha sido mofificado y falso sino."
      end

      operation 495237 "reload"
	preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "En el caso de los objetos que ya estn en base, vuelve a recargar la instancia con los valores de la base.
@return boolean true si la recarga fue realizada con xito o false sino"
      end

      operation 502277 "reset"
	preserve_cpp_body_indent private explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Resetea todos los indicadores de cambios del objetos, asumiendo que el estado actual es el de la base de datos si es que est monitoreado."
      end

      operation 502405 "__call"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 2
	  param in name "method" explicit_type "string"
	  param in name "args" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Magic Method sobreescrito para monitorear los pedidos a getXXX() y setXXX().
@param string $method el mtodo invocado
@prama array $args la lista de argumentos pasados como parmetro
@return mixed|exception si se ejecuta un getXXX se verifica que los argumentos sean vacios y si se ejecuta cun setXXX se chequea que slo un argumento sea pasado. Todo lo dems arroja una excepcin en runtime."
      end

      classrelation 337029 // <generalisation>
	relation 336261 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 337029 // <generalisation>
	  b parent class_ref 289157 // PrivateAccesor
      end

      classrelation 317061 // <dependency>
	relation 316293 -_->
	  a package
	    comment "Se usa para las relaciones 1:N y N:M"
	    php "${type}"
	    classrelation_ref 317061 // <dependency>
	  b parent class_ref 256133 // ORMCollection
      end

      classrelation 370181 // <dependency>
	relation 369413 -_->
	  a default
	    php "${type}"
	    classrelation_ref 370181 // <dependency>
	  b parent class_ref 315269 // LazyLoader
      end

      classrelation 396421 // <realization>
	relation 395653 -_-|>
	  a public
	    php "${type}"
	    classrelation_ref 396421 // <realization>
	  b parent class_ref 269445 // ORM_STATUS
      end

      classrelation 409605 // <dependency>
	relation 408837 -_->
	  a default
	    php "${type}"
	    classrelation_ref 409605 // <dependency>
	  b parent class_ref 321925 // InternalError
      end

      operation 542597 "setter"
	class_operation preserve_cpp_body_indent private explicit_return_type ""
	nparams 1
	  param in name "attribute" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Genera el string correspondiente al setter del atributo. Por ejemplo: setter('miNombre') = 'setMiNombre'.

@param string $attribute el nombre del atributo.

@return string el nombre del mtodo setter que le corresponde"
      end

      operation 542725 "getter"
	class_operation preserve_cpp_body_indent private explicit_return_type "string"
	nparams 1
	  param in name "attribute" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Genera el string correspondiente al getter del atributo. Por ejemplo: getter('miNombre') = 'getMiNombre'.

@param string $attribute el nombre del atributo."
      end

      operation 549637 "pluralize"
	class_operation preserve_cpp_body_indent protected explicit_return_type "string"
	nparams 1
	  param in name "attribute" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna el plural de un nombre de atributo.

@param string $attribute el nombre de atributo que queremos poner el plural

@return string el nombre el plural."
      end

      classrelation 450821 // <dependency>
	relation 449925 -_->
	  a default
	    php "${type}"
	    classrelation_ref 450821 // <dependency>
	  b parent class_ref 361221 // DMLOperationFailed
      end

      classrelation 464389 // <dependency>
	relation 463365 -_->
	  a default
	    php "${type}"
	    classrelation_ref 464389 // <dependency>
	  b parent class_ref 367877 // ValueNotDefined
      end

      classrelation 471045 // <dependency>
	relation 470021 -_->
	  a default
	    php "${type}"
	    classrelation_ref 471045 // <dependency>
	  b parent class_ref 328581 // UnknowORM
      end
    end

    class 167685 "ORM"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${visibility}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      comment "La clase ORM lleva referencias a todos los objetos recuperados o creados en la sesin y puede utilizarse para saber qu cosas estn cargadas y qu no."
      attribute 238981 "orm"
	class_attribute private type class_ref 167685 // ORM
	init_value "null"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@staticvar ORM La variable de clase que almacena la instancia del SINGLETON."
      end

      attribute 279173 "autosave"
	private explicit_type "bool"
	init_value "true"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	get_oper operation_ref 502021 // getAutosave
	set_oper operation_ref 502149 // setAutosave
	comment "@var boolean flag que indica si las transacciones se guardan automticamente al terminarse la sesin o si los cambios se van a guardar explscitamente."
      end

      attribute 279301 "bindObjectsOnCreate"
	private explicit_type "bool"
	init_value "false"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	get_oper operation_ref 501765 // getBindObjectsOnCreate
	set_oper operation_ref 501893 // setBindObjectsOnCreate
	comment "@var boolean una variable que indica si los objetos al instanciarse se deben registrar o no con el ORM."
      end

      attribute 479365 "debug"
	private explicit_type "bool"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	get_oper operation_ref 700293 // getDebug
	set_oper operation_ref 700421 // setDebug
	comment "@var boolean indica si se est ejecutando en modo debug"
      end

      classrelation 168709 // objects (<directional aggregation>)
	relation 168197 o-->
	  a role_name "objects" multiplicity "*" init_value "array()" private
	    comment "@var array una coleccin de objetos que constituyen la cach del ORM"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 168709 // objects (<directional aggregation>)
	  b parent class_ref 141317 // ORMObject
	get_oper operation_ref 576773 // getObjects
      end

      classrelation 383237 // database (<unidirectional association>)
	relation 382469 --->
	  a role_name "database" private
	    comment "@var AbstractDataBase la instancia de la abstraccin de la base de datos que el ORM debe utilizar"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 383237 // database (<unidirectional association>)
	  b parent class_ref 295685 // AbstractDataBase
	get_oper operation_ref 474885 // getDatabase
	set_oper operation_ref 475013 // setDatabase
      end

      operation 301829 "getInstance"
	class_operation preserve_cpp_body_indent public return_type class_ref 167685 // ORM
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna la instancia de la clase. Implementacin del SINGLETON.
@return ORM La instancia de la base de datos."
      end

      operation 170117 "attach"
	preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 1
	  param inout name "object" type class_ref 141317 // ORMObject
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Registra un objeto en la coleccin mantenida por ORM. Todos los objetos registrados son susceptibles de ser mantenidos automticamente; es decir: guardados, recuperados onFly, listados y estn disponibles para cualquier posible uso."
      end

      operation 170245 "dettach"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param inout name "object" type class_ref 141317 // ORMObject
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Le indica al ORM que no se preocupe del estado de este objeto."
      end

      operation 474757 "commit"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Hace un guardado de todos los objetos modificados en la memoria."
      end

      operation 281605 "&getDefinition"
	preserve_cpp_body_indent public return_type class_ref 236293 // ORMDefinition
	nparams 1
	  param in name "object" type class_ref 141317 // ORMObject
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Devuelve la definicin de una clase u objeto.
@param String|Object $object el nombre de la clase o una instancia del objeto cuya definicin queremos obtener.
@return ORMDefinition la definicin del objeto"
      end

      operation 488581 "&retrieve"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 2
	  param in name "class" explicit_type "string"
	  param in name "id" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera un objeto de la cach del ORM

@param $class string|Object el nombre de la clase o una instancia del tipo de la clase que se quiere recuperar
@param $id int el identificador de la clase
@return DatabaseObject|false retorna la instancia de la cach o false si no se encuentra"
      end

      operation 316421 "&load"
	preserve_cpp_body_indent public return_type class_ref 141317 // ORMObject
	nparams 2
	  param in name "class" explicit_type "Class"
	  param in name "id" explicit_type "int|array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera objetos de la base de datos en base a su clase e ids. Puede recuperar uno o varios objetos a la vez.

@param string $class la clase a la que pertenece el objeto a levantar
@param int|array $id el id a recuperar o un array de ids

@return ORMObject|array de acuerdo a si se paso un id o un array de ids"
      end

      operation 303237 "save"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param inout name "instance" type class_ref 141317 // ORMObject
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 563333 "delete"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param in name "object" type class_ref 141317 // ORMObject
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Borra fsicamente un objeto de la base. Al borrarse el objeto adems se ponen a null los campos de las entidades relacionadas que lo referenciaban y se eliminan los registros de las tablas relacin M:N

@param ORMObject $object el objeto a eliminar.

@return boolean un booleando TRUE si la operacin fue concretada con xito o FALSE sino."
      end

      classrelation 264325 // classDefinitions (<directional aggregation>)
	relation 263557 o-->
	  a role_name "classDefinitions" private
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 264325 // classDefinitions (<directional aggregation>)
	  b parent class_ref 236293 // ORMDefinition
      end

      classrelation 337157 // <generalisation>
	relation 336389 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 337157 // <generalisation>
	  b parent class_ref 289157 // PrivateAccesor
      end

      operation 474885 "getDatabase"
	force_body_gen const cpp_inline public return_type class_ref 295685 // AbstractDataBase
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->database;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_relation classrelation_ref 383237 // database (<unidirectional association>)
	comment "@return AbstractDataBase una instancia de la base de datos que tiene configurada el ORM."
      end

      operation 475013 "setDatabase"
	force_body_gen public explicit_return_type "void"
	nparams 1
	  param in name "value" type class_ref 295685 // AbstractDataBase
	
	cpp_name_spec "set_${name}"
	
	java_name_spec "set${Name}"
	php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${)}
{
  $this->database = ${p0};
}
"
	php_name_spec "set${Name}"
	
	python_name_spec "set${Name}"
	
	idl_name_spec "set_${name}"
	set_of_relation classrelation_ref 383237 // database (<unidirectional association>)
	comment "@param $value AbstractDataBase una instacia de la abstraccin de base de datos del ORM.
"
      end

      operation 501765 "getBindObjectsOnCreate"
	force_body_gen const cpp_inline public explicit_return_type "bool"
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->bindObjectsOnCreate;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_attribute attribute_ref 279301 // bindObjectsOnCreate
      end

      operation 501893 "setBindObjectsOnCreate"
	force_body_gen public explicit_return_type "void"
	nparams 1
	  param in name "value" explicit_type "bool"
	
	cpp_name_spec "set_${name}"
	
	java_name_spec "set${Name}"
	php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${)}
{
  $this->bindObjectsOnCreate = ${p0};
}
"
	php_name_spec "set${Name}"
	
	python_name_spec "set${Name}"
	
	idl_name_spec "set_${name}"
	set_of_attribute attribute_ref 279301 // bindObjectsOnCreate
      end

      operation 502021 "getAutosave"
	force_body_gen const cpp_inline public explicit_return_type "bool"
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->autosave;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_attribute attribute_ref 279173 // autosave
      end

      operation 502149 "setAutosave"
	force_body_gen public explicit_return_type "void"
	nparams 1
	  param in name "value" explicit_type "bool"
	
	cpp_name_spec "set_${name}"
	
	java_name_spec "set${Name}"
	php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${)}
{
  $this->autosave = ${p0};
}
"
	php_name_spec "set${Name}"
	
	python_name_spec "set${Name}"
	
	idl_name_spec "set_${name}"
	set_of_attribute attribute_ref 279173 // autosave
      end

      operation 576517 "getAttributes"
	preserve_cpp_body_indent public explicit_return_type "array"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "SOLO PARA DEBUG, retorna la lista interna de atributos"
      end

      operation 576645 "clear"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Limpia la cach del ORM. OJO: esto no disocia los objetos del ORM. Eso se har despus."
      end

      operation 576773 "getObjects"
	force_body_gen const cpp_inline public return_type class_ref 141317 // ORMObject
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->objects;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_relation classrelation_ref 168709 // objects (<directional aggregation>)
      end

      operation 631557 "query"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 1
	  param in name "class" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Crea una query sobre la base de la clase pasada por parmetro.

@param string $class la clase a la que pertenecen las instancias a retornar.

@return ORMQuery Una instancia de una query que sirve para formalizar los criterios de bsqueda"
      end

      classrelation 493445 // <dependency>
	relation 491653 -_->
	  a private
	    php "${type}"
	    classrelation_ref 493445 // <dependency>
	  b parent class_ref 389637 // ORMQuery
      end

      operation 700293 "getDebug"
	force_body_gen const cpp_inline public explicit_return_type "bool"
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->debug;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_attribute attribute_ref 479365 // debug
      end

      operation 700421 "setDebug"
	force_body_gen public explicit_return_type "void"
	nparams 1
	  param in name "value" explicit_type "bool"
	
	cpp_name_spec "set_${name}"
	
	java_name_spec "set${Name}"
	php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${)}
{
  $this->debug = ${p0};
}
"
	php_name_spec "set${Name}"
	
	python_name_spec "set${Name}"
	
	idl_name_spec "set_${name}"
	set_of_attribute attribute_ref 479365 // debug
      end
    end

    class 256133 "ORMCollection"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      comment "Sirve para almacenar una coleccin de objetos relacionados. Es decir para materializar las relaciones entre objetos.

En algn punto la coleccin involucra dos partes:
 * La relacin en s
 * El objeto del extremo de la relacin

El objeto del extremo es una clase que tiene adems sus capacidades de ORM.

La relacin es el otro tema, la misma se puede dar de dos maneras:
 * Caso N:M => se relaciona a travs de una tabla.
 * Caso 1:N => se relaciona a travs de un atributo en la tabla relacionada.
 * Caso 1:1 => se relaciona a travs de un atributo en la tabla relacionada.
"
      attribute 259077 "elements"
	public explicit_type "array"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var array lista de los elementos (instancias) de la relacin

@todo PONERLO PRIVADO!! Ahora Pblico a fines de DEBUG!"
      end

      attribute 265605 "added"
	public explicit_type "array"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	get_oper operation_ref 535557 // getAdded
	comment "@var array aqu se mantienen temporalmente una lista de los identificadores de los objetos nuevos"
      end

      attribute 355205 "removed"
	public explicit_type "array"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	get_oper operation_ref 535685 // getRemoved
	comment "@var array en este arreglo se guarda la lista de ids de objetos quitados de la relacin, para que al guardar se puedan saber qu registros de la relacin quitar"
      end

      operation 535429 "isModified"
	preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Devuelve un booleano indicando si la coleccin ha sido o no modificada

@return bool un valor TRUE si la coleccin fue modificada o FALSE sino"
      end

      operation 413189 "&address"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param in name "offset" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna la direccin de una posicin del array de atributos.

@param string|int $offset la clave del arreglo de elementos del cual se quiere saber la direccin"
      end

      operation 412933 "reset"
	preserve_cpp_body_indent public return_type class_ref 256133 // ORMCollection
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Restaura los indicadores de cambio de forma que el objeto queda como no alterado.
@return ORMCollection la propia instancia"
      end

      operation 549893 "count"
	preserve_cpp_body_indent public explicit_return_type "int"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 535557 "getAdded"
	force_body_gen const cpp_inline public explicit_return_type "array"
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->added;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_attribute attribute_ref 265605 // added
      end

      operation 535685 "getRemoved"
	force_body_gen const cpp_inline public explicit_return_type "array"
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->removed;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_attribute attribute_ref 355205 // removed
      end

      operation 385157 "offsetExists"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "boolean"
	nparams 1
	  param in name "offset" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 385285 "offsetGet"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "mixed"
	nparams 1
	  param in name "offset" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 385413 "offsetSet"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 2
	  param in name "offset" explicit_type "mixed"
	  param in name "value" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 385541 "offsetUnset"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 1
	  param in name "offset" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 385669 "getIterator"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      classrelation 310405 // <realization>
	relation 309637 -_-|>
	  a public
	    php "${type}"
	    classrelation_ref 310405 // <realization>
	  b parent class_ref 249477 // ArrayAccess
      end

      classrelation 310533 // <realization>
	relation 309765 -_-|>
	  a public
	    php "${type}"
	    classrelation_ref 310533 // <realization>
	  b parent class_ref 249605 // IteratorAggregate
      end

      classrelation 436997 // <realization>
	relation 436101 -_-|>
	  a public
	    php "${type}"
	    classrelation_ref 436997 // <realization>
	  b parent class_ref 348165 // Countable
      end

      operation 550021 "__construct"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Inicializa los arreglos internos

@return ORMCollection la coleccin inicializada"
      end
    end

    class 236293 "ORMDefinition"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${visibility}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      comment "Hay un array que almacena la forma de relacionar los atributos de una clase con los de la/s tablas con las que se corresponde:
ORMData['fields'][$attribute]= {'fieldName', 'type',
                                                    'length', 'isNulleable', 'precision', 'primaryKey', 'default', 'table', 'loadStyle'}
               si type = ORMDefinition::ORM_ENTITY  'class', 'isNulleable', 'default', 'table, 'loadStyle'}
ORMData['fieldsByTable'][$table][$attribute]->&ORMData['fields'][$attribute]
ORMData['relations'][$attribute]= {'fieldName', 'type', 'class', 'table', 'loadStyle', 'associatedFieldName'}

 Ms adelante puede implementarse una versin ms objetosa haciendo que haya cosas como DBTable y DBField

Hay 3 diferentes tipos de definiciones:
 - Campos simples: son atributos que representan un valor puntual como int, string, date.
 - Entidades: es la materializacin de la clave fornea en la entidad \"hijo\". Es decir cuando un id de otra tabla aparece en la tabla actual. Ese \"id\" no es un atributo comn, sino que representa a toda una entidad entera asociada por su id. Son relaciones 0..1 o 1..1
 - Relaciones: parecido al caso anterior pero para relaciones 1..N y N..M. El atributo en particular se implementa como un \"array\" de instancias de la clase asociada. Para el caso N..M la tabla se asume que tiene una clave conformada por los 2 IDs que se relacionan.

"
      attribute 225797 "ORMData"
	protected explicit_type "array"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 232325 "currentTable"
	private explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 472837 "orm"
	private type class_ref 167685 // ORM
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var ORM la instancia del ORM al que pertenece la definicin"
      end

      operation 542469 "__construct"
	preserve_cpp_body_indent public return_type class_ref 236293 // ORMDefinition
	nparams 1
	  param in name "orm" type class_ref 167685 // ORM
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Constructor de la clase. Prepara las estructuras bsicas necesarias para el mapeo.

@param ORM $orm el objeto que maneja las definiciones
@return ORMDefinition una instancia inicializada de ORMDefinition"
      end

      operation 275077 "setTable"
	preserve_cpp_body_indent public explicit_return_type "DataBaseObject"
	nparams 1
	  param in name "tableName" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Establece una tabla objetivo para futuros llamados a addField(), addInstance() y addRelation().

@param string $table el nombre de la tabla
@return ORMDefinition la propia definicin modificada

@see ORMDefinition::addField()
@see ORMDefinition::addInstance()
@see ORMDefinition::addRelation()"
      end

      operation 156421 "addField"
	preserve_cpp_body_indent public explicit_return_type "DataBaseObject"
	nparams 10
	  param in name "attribute" explicit_type "string"
	  param in name "fieldName" explicit_type "string"
	  param in name "type" explicit_type "int"
	  param in name "length" explicit_type "int"
	    defaultvalue "-1"
	  param in name "precision" explicit_type "int"
	    defaultvalue "-1"
	  param in name "isNulleable" explicit_type "boolean"
	    defaultvalue "true"
	  param in name "loadStyle" explicit_type "int"
	    defaultvalue "ORMDefinition::FORCE_LOAD"
	  param in name "defaultValue" explicit_type "string"
	    defaultvalue "\"\""
	  param in name "table" explicit_type "string"
	    defaultvalue "\"\""
	  param in name "primaryKey" explicit_type "boolean"
	    defaultvalue "false"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}, ${p6}${v6}, ${p7}${v7}, ${p8}${v8}, ${p9}${v9}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Indica como traducir un atributo del objeto en su campo respectivo de la base de datos.

@param string $attribute el nombre del atributo que queremos definir (el del objeto)
@param string $fieldName el nombre del campo de la base de datos donde se almacena el valor
@param int $type el tipo de valor, las constantes se obtienen de ORM_TYPES. En el caso que el atributo sea un objeto entero, usar @see addInstance().
@param int $length la longitud del campo de la base de datos. Si se quiere omitir esto indicar -1
@param int $precision en el caso de numricos se debe indicar la precisin para futuros redondeos. Para omitir -1
@param boolean $isNulleable indica si el atributo/campo puede adquirir valor NULL
@param int $loadStyle se puede indicar si se desea que el atributo sea recuperado instantneamente al cargar el objeto o si se prefiere diferir la carga hasta que el valor del atributo sea utilizado por primera vez. Recomendable usar esta ltima opcin si el campo es una imagen o un algn valor pesado. Las constantes estn en @see ORM_LOAD_STYLE.
@param string $defaultValue el valor predeterminado del campo
@param string $table el nombde de la tabla donde se encuentra el atributo, generalmente se especifica el mismo con un llamado previo a @see setTable() y se asume ese valor dejando \"\"
@param boolean $primaryKey poner true si el campo es la clave primaria del objeto

@return ORMDefinition Retorna la propia definicin modificada, para seguirla manipulando en cadena si se desea."
      end

      operation 454533 "addInstance"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 7
	  param in name "attribute" explicit_type "string"
	  param in name "fieldName" explicit_type "string"
	  param in name "class" explicit_type "string"
	  param in name "isNulleable" explicit_type "bool"
	    defaultvalue "true"
	  param in name "table" explicit_type "string"
	    defaultvalue "\"\""
	  param in name "defaultValue" explicit_type "int"
	    defaultvalue "null"
	  param in name "loadStyle" explicit_type "int"
	    defaultvalue "ORMDefinition::FORCE_LOAD"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}, ${p6}${v6}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 419973 "addRelation"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 7
	  param in name "attribute" explicit_type "string"
	  param in name "fieldName" explicit_type "string"
	  param in name "class" explicit_type "string"
	  param in name "relation_type" explicit_type "int"
	  param in name "table" explicit_type "string"
	    defaultvalue "\"\""
	  param in name "asociatedFieldName" explicit_type "string"
	    defaultvalue "\"\""
	  param in name "loadStyle" explicit_type "int"
	    defaultvalue "ORMDefinition::LAZY_LOAD"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}, ${p6}${v6}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Indica que hay una relacin entre esta entidad y las instancias de otra clase. Las relaciones que soportan son 1:N, N:M y 1:1. En el caso de la N:M debe indicarse la tabla intermedia.
En forma predeterminada estas relaciones son cargadas como LAZY.

@param string $attribute el nombre del atributo que tendr el array de instancias
@param string $fieldName el nombre del atributo donde se mapea el identificador de la clase actual
@param string $class la clase asociada (la clase de las instancias relacionadas)
@param int $relation_type el tipo de relacin: 1:N, N:M o 1:1. Las constantes estn en ORM_RELATION_TYPE.
@param int $loadStyle determina si la relacin se debe cargar inmediamente al recuperar la clase o si se hace una carga diferida en el momento en que se use (esta ltima es la accin predeterminada). Las constantes estn en ORM_LOAD_STYLE.
@param string $asociatedFieldName el nombre del atributo donde se mapea el identificador de la clase asociada
@param string $table slo se usa en relaciones N:M e indica el nombre de la tabla intermedia

@return ORMDefinition la propia definicin"
      end

      operation 406277 "getFieldDefinition"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 2
	  param in name "attribute" explicit_type "string"
	    defaultvalue "\"\""
	  param in name "findByField" explicit_type "bool"
	    defaultvalue "false"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna el registro crudo de los campos, tal como se le dieron de alta.
@param string $attribute el nombre del atributo del cual queremos recibir la informacin de mapeo o nada para obtener todas las definiciones
@param boolean $findByField indica si el atributo pasado por parmetro es en realidad el nombre del campo de la base de datos y lo busca por dicho criterio.

@return array|false Retorna las definiciones en un arreglo de la forma o false si el atributo no existe:
[$attribute] = {'fieldName', 'type', 'length', 'isNulleable', 'precision', 'primaryKey', 'default', 'table', 'loadStyle'}
"
      end

      operation 528901 "getRelationDefinition"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 2
	  param in name "attribute" explicit_type "string"
	    defaultvalue "\"\""
	  param in name "findByTable" explicit_type "bool"
	    defaultvalue "false"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna la definicin de una relacin.

@param string $attribute el nombre del atributo cuyo mapeo se quiere obtener o nada para recuperar todas las definiciones de relaciones.
@param boolean $findByTable indica si el atributo pasado por parmetro es en realidad el nombre del campo de la base de datos y lo busca por dicho criterio.

@return array un arreglo con la informacin de la/s definicin/es con el siguiente formato o false si la relacin no existe:
[$attribute] = {'type', 'class', 'table', 'loadStyle'}

En el caso que se busque por tabla retorna la primer relacin definida que acte sobre la tabla indicada. Esta funcin est orientada a detectar el atributo que mapea las relaciones MxN sobre una tabla dada. NO SIRVE para las relaciones 1:1 y 1:N.
"
      end

      operation 399621 "getFieldsByTable"
	preserve_cpp_body_indent public explicit_return_type "array"
	nparams 1
	  param in name "table" explicit_type "string"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna la informacin de los campos que pertenecen a una tabla o a todas las tablas de la definicin si se pasa \"\""
      end

      operation 399365 "getTableList"
	preserve_cpp_body_indent public explicit_return_type "array"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna la lista de tablas que participan de la definicin."
      end

      operation 549509 "setKey"
	preserve_cpp_body_indent public return_type class_ref 236293 // ORMDefinition
	nparams 1
	  param in name "attribute" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Establece el atributo indicado como clave del objeto.
Es igual que indicar en addField() isNulleable en FALSE y primaryKey en TRUE. Se da esta funcin para facilitar su definicin y mover dichos atributos al final de los parmetros en addField().

@param string $attribute el atributo que ser identificado como clave primaria del objeto.

@return ORMDefinition La propia definicin modificada. IMPORTANTE: llamar a esta funcin LUEGO de haber definido el mapeo del atributo."
      end

      classrelation 330245 // <realization>
	relation 329477 -_-|>
	  a public
	    php "${type}"
	    classrelation_ref 330245 // <realization>
	  b parent class_ref 275973 // ORM_TYPES
      end

      classrelation 330373 // <realization>
	relation 329605 -_-|>
	  a public
	    php "${type}"
	    classrelation_ref 330373 // <realization>
	  b parent class_ref 282501 // ORM_LOAD_STYLE
      end

      classrelation 330501 // <realization>
	relation 329733 -_-|>
	  a public
	    php "${type}"
	    classrelation_ref 330501 // <realization>
	  b parent class_ref 282629 // ORM_RELATION_TYPE
      end

      classrelation 356997 // <generalisation>
	relation 356229 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 356997 // <generalisation>
	  b parent class_ref 289157 // PrivateAccesor
      end

      operation 542853 "getORMData"
	preserve_cpp_body_indent public explicit_return_type "array"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "@todo METODO PARA BORRAR!!! ES PARA DEBUG NOMAS"
      end

      operation 556549 "addRelation1xN"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 4
	  param in name "attribute" explicit_type "string"
	  param in name "fieldName" explicit_type "string"
	  param in name "class" explicit_type "string"
	  param in name "loadStyle" explicit_type "int"
	    defaultvalue "ORMDefinition::LAZY_LOAD"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Indica que hay una relacin 1:N entre esta entidad y las instancias de la otra clase. En forma predeterminada estas relaciones son cargadas como LAZY.

@param string $attribute el nombre del atributo que tendr el array de instancias
@param string $fieldName el nombre del atributo donde se mapea el identificador de la clase actual
@param string $class la clase asociada (la clase de las instancias relacionadas)
@param int $loadStyle determina si la relacin se debe cargar inmediamente al recuperar la clase o si se hace una carga diferida en el momento en que se use (esta ltima es la accin predeterminada). Las constantes estn en ORM_LOAD_STYLE.

@return ORMDefinition la propia definicin"
      end

      operation 556677 "addRelation1x1"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 4
	  param in name "attribute" explicit_type "string"
	  param in name "fieldName" explicit_type "string"
	  param in name "class" explicit_type "string"
	  param in name "loadStyle" explicit_type "int"
	    defaultvalue "ORMDefinition::LAZY_LOAD"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Indica que hay una relacin 1:1 entre esta entidad y la instancia de la otra clase. En forma predeterminada estas relaciones son cargadas como LAZY.

@param string $attribute el nombre del atributo que tendr el array de instancias
@param string $fieldName el nombre del atributo donde se mapea el identificador de la clase actual
@param string $class la clase asociada (la clase de las instancias relacionadas)
@param int $loadStyle determina si la relacin se debe cargar inmediamente al recuperar la clase o si se hace una carga diferida en el momento en que se use (esta ltima es la accin predeterminada). Las constantes estn en ORM_LOAD_STYLE.

@return ORMDefinition la propia definicin"
      end

      operation 556805 "addRelationNxM"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 6
	  param in name "attribute" explicit_type "string"
	  param in name "table" explicit_type "string"
	  param in name "fieldName" explicit_type "string"
	  param in name "class" explicit_type "string"
	  param in name "asociatedFieldName" explicit_type "string"
	    defaultvalue "\"\""
	  param in name "loadStyle" explicit_type "int"
	    defaultvalue "ORMDefinition::LAZY_LOAD"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Indica que hay una relacin entre esta entidad y las instancias de otra clase. Las relaciones que soportan son 1:N, N:M y 1:1. En el caso de la N:M debe indicarse la tabla intermedia.
En forma predeterminada estas relaciones son cargadas como LAZY.

@param string $attribute el nombre del atributo que tendr el array de instancias
@param string $table slo se usa en relaciones N:M e indica el nombre de la tabla intermedia
@param string $fieldName el nombre del atributo donde se mapea el identificador de la clase actual
@param string $class la clase asociada (la clase de las instancias relacionadas)
@param string $asociatedFieldName el nombre del atributo donde se mapea el identificador de la clase asociada
@param int $loadStyle determina si la relacin se debe cargar inmediamente al recuperar la clase o si se hace una carga diferida en el momento en que se use (esta ltima es la accin predeterminada). Las constantes estn en ORM_LOAD_STYLE.

@return ORMDefinition la propia definicin"
      end

      classrelation 443653 // <dependency>
	relation 442757 -_->
	  a default
	    php "${type}"
	    classrelation_ref 443653 // <dependency>
	  b parent class_ref 354693 // ORMDefinitionError
      end

      classrelation 500101 // <dependency>
	relation 498309 -_->
	  a default
	    php "${type}"
	    classrelation_ref 500101 // <dependency>
	  b parent class_ref 341637 // UnknowAttribute
      end
    end

    class 389637 "ORMQuery"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      comment "Este objeto se crea indicando cul es la clase \"pivote\", con cuyo nombre recupera la definicin desde el ORM.

Las condiciones de filtrado se especifican a travs de llamados a filterBy() y el conjunto de resultados se ordena segn el orden de llamados a orderBy().

Es posible segmentar el conjunto de resultados usando los pares de funciones: from()/to()  from()/top(), segn se quieran indicar fila de inicio y fin o fila de inicio y cantidad de registros respectivamente.

El resultado de la consulta se obtiene llamando a find()."
      attribute 411141 "pivotClass"
	public explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string el nombre de la clase pivote de la consulta"
      end

      attribute 417669 "from"
	public explicit_type "int"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var int el nmero de fila del primer registro del resultado."
      end

      attribute 417797 "count"
	public explicit_type "int"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var int la cantidad de filas a recuperar."
      end

      classrelation 493573 // definition (<unidirectional association>)
	relation 491781 --->
	  a role_name "definition" private
	    comment "@var ORMDefinition la definicin de la clase pivote"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 493573 // definition (<unidirectional association>)
	  b parent class_ref 236293 // ORMDefinition
      end

      attribute 411013 "orm"
	public type class_ref 167685 // ORM
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var ORM el manejador de objetos desde el cual se toman las definiciones"
      end

      attribute 410629 "conditions"
	public explicit_type "array"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var array un arreglo con las condiciones indicadas por los llamados a filterBy()
El formato del arreglo es:
$conditions['filters'][$field][$operator][0..n]=array($value, $other, $connector);
$conditions['subqueries'][$field][0..n]=ORMQuery();
"
      end

      attribute 525701 "uses_custom_columns"
	public explicit_type ""
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var boolean determina si el usuario ha o no especificado columnas personalizadas para el resultado"
      end

      attribute 525829 "uses_groups"
	public explicit_type "bool"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var boolean indica si se han especificado atributos de agrupacin"
      end

      operation 617477 "__construct"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 2
	  param in name "class" explicit_type "string"
	  param inout name "orm" type class_ref 167685 // ORM
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Crea un objeto de consulta que retorna elementos del tipo de la clase indicada.

@param string $class la clase de objetos que retornar la consulta.
@param ORM $orm el objeto ORM al que se ata la consulta.
@return ORMQuery un objeto con los criterios de una consulta."
      end

      operation 624389 "from"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 1
	  param in name "row" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Establece la cantidad de filas a saltear del conjunto de resultados antes de considerarla vlida como respuesta.

@param int $row la fila a partir de la cual deseamos que se nos retornen resultados.

@return ORMQuery La consulta modificada. from() siempre debe llamarse antes que to() para calcular el diferencial."
      end

      operation 624517 "to"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 1
	  param in name "row" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Establece el mximo nmero de fila que quiere recuperarse. Debe ser mayor al valor prefijado en from().

@param int $row el nmero de fila mxima del conjunto de resultado.

@return ORMQuery La consulta con el nuevo lmite aplicado. Debe considerarse que si no se llam a from() previamente no se va a calcular el diferencial."
      end

      operation 624645 "top"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 1
	  param in name "limit" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Establece cuantas filas se deben recuperar del conjunto de resultados.

@param int $limit la cantidad de filas a recuperar

@return ORMQuery El objeto Query modificado."
      end

      operation 821893 "joinWith"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 4
	  param in name "attribute" explicit_type "string"
	  param in name "alias" explicit_type "string"
	  param in name "attributes" explicit_type "array"
	  param in name "conditions" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Une mediante un JOIN los valores de la consulta actual con los de otra clase, utilizando para el emparejamiento las condiciones dadas e incorporando al conjunto de resultados los atributos indicados.
@param string $attribute el atributo que determina la relacin con la cual se ha de realizar el emparejamiento
@param string $alias el alias de la clase
@param array $attributes los atributos nuevos a incorporar en el conjunto de resultados
@param array $conditions las condiciones de emparejamiento del conjunto de resultados"
      end

      operation 821765 "joinBy"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 4
	  param in name "query" type class_ref 389637 // ORMQuery
	  param in name "alias" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "conditions" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Une mediante un JOIN los valores de la consulta actual con los de otra consulta. Debido a que no se pueden inferir los resultados de la consulta tan fcilmente como con el joinWith, a esta funcin se le deben pasar los nombres de columnas devueltas por el query para hacer el emparejamiento y para definir nuevos campos para el conjunto de resultados.

@param ORMQuery $query la query con la cual se ha de realizar el emparejamiento
@param string $alias el alias de la clase
@param array $fields los campos nuevos (con denominacin completa) a incorporar en el conjunto de resultados
@param array $conditions las condiciones de emparejamiento del conjunto de resultados tambin con denominacin completa"
      end

      operation 644997 "findOne"
	preserve_cpp_body_indent public return_type class_ref 141317 // ORMObject
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Busca el primer elemento de la consulta.

@return ORMObject el objeto en cuestin"
      end

      operation 651525 "echoTab"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "@return string Imprime un cierto nmero de espacios acorde al $level"
      end

      attribute 430853 "level"
	class_attribute package explicit_type "int"
	init_value "0"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var int $level utilizado para fines de debug"
      end

      attribute 430981 "debug"
	class_attribute package explicit_type "bool"
	init_value "false"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var boolean $debug indica si se debe hacer una salida de depuracin de los pasos de la consulta"
      end

      operation 781061 "decrypt"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param inout name "coded_sql" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Funcin temporal slo para fines de debug. Decifra la cadena retornada por \"build()\"."
      end

      classrelation 595717 // <dependency>
	relation 593413 -_->
	  a default
	    php "${type}"
	    classrelation_ref 595717 // <dependency>
	  b parent class_ref 174341 // Connection
      end

      operation 828933 "filterBy"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 5
	  param in name "attribute" explicit_type "string"
	  param in name "operator" explicit_type "int"
	  param in name "value" explicit_type "mixed"
	  param in name "other" explicit_type "mixed"
	    defaultvalue "\"\""
	  param in name "connector" explicit_type "string"
	    defaultvalue "'AND'"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Establece una condicin de bsqueda para la consulta.

@param string $attribute el campo sobre el cual se especifica la condicin
@param int $operator la operacin de comparacin
@param mixed $value el valor utilizado para la comparacin
@param mixed $other otro valor en caso de ser necesario
@param string $connector la palabra 'AND' o 'OR' segn se quiera utilizar para concatenar la condicin

@return ORMQuery la consulta con la condicin incorporada."
      end

      operation 829061 "orderBy"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 1
	  param in name "attribute" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Ordena el conjunto de resultados por la columna indicada.

@param string $attribute el atributo por el cual se desea ordenar el resultado. No se puede ordenar por atributos relacin, ni por los atributos de los elementos de las relaciones o de los atributos entidad. Se puede indicar anteponiendo un espacio si es 'ASC' o 'DESC'

@return ORMQuery La consulta modificada como se indic."
      end

      operation 829189 "build"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna el cdigo a ejecutar para resolver la query en formato codificado.

@param array $conditions las condiciones a analizar , si es null, toma las globales
@param int $alias_counter un numero que se aade al alias de cada tabla
@return string el SQL codificado de la instruccin"
      end

      operation 829573 "build_subquery"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 7
	  param inout name "query" explicit_type "string"
	  param in name "pivotDefinition" type class_ref 236293 // ORMDefinition
	  param in name "attribute" explicit_type "string"
	  param inout name "conditions" explicit_type "array"
	  param in name "parent_alias" explicit_type "string"
	  param in name "scrumb" explicit_type "string"
	  param inout name "alias_counter" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}, ${p6}${v6}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 829317 "find"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 2
	  param in name "from" explicit_type "int"
	    defaultvalue "null"
	  param in name "count" explicit_type "int"
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera el conjunto de resultados segn los parmetros configurados en el el objeto.

@param int $from indica desde qu elemento se deben recuperar los resultados.
@param int $count indica cuntos elementos de resultado se deben recuperar.
@return array Un arreglo con todos los elementos que respondieron positivamente a las condiciones indicadas."
      end

      operation 829445 "attributes"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param in name "attribute" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Define qu atributos recuperar del conjunto de resultados.

@param string $attribute un atributo a ser devueltos por la consulta. Se pueden pasar varios uno tras otro y son \"navegables\" a travs de puntos.
@return ORMQuery retorna la query modificada"
      end

      operation 836229 "groupBy"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param in name "attribute" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Define qu atributos deben ser agrupados una vez obtenido el conjunto de resultados masivo.

@param string $attribute un atributo por el cual se debe agrupar el resultado de la consulta. Se pueden pasar varios uno tras otro y son \"navegables\" a travs de puntos.
@return ORMQuery retorna la query modificada"
      end

      operation 843013 "count"
	preserve_cpp_body_indent public explicit_return_type "int"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna la cantidad de resultados del query.

@return int La cantidad de filas obtenidas por la consulta."
      end
    end

    class 315269 "LazyLoader"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      attribute 335493 "object"
	private type class_ref 141317 // ORMObject
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var ORMObject el objeto sobre el que se desea modificar el atributo"
      end

      attribute 335365 "attribute"
	private explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var el atributo a recuperar"
      end

      attribute 335621 "orm"
	private type class_ref 167685 // ORM
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var ORM el manejador de objetos que mediar la consulta del campo"
      end

      operation 461061 "__construct"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 3
	  param in name "object" type class_ref 141317 // ORMObject
	  param in name "attribute" explicit_type "string"
	  param inout name "orm" type class_ref 167685 // ORM
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Crea un cargador perezoso para el atributo.

@param ORMObject $object un objeto de la jerarqua de ORMObject
@param string $attribute el nombre del atributo
@param ORM $orm el objeto que mediar para recuperar el atributo

@return LazyLoader el cargador perezoso para el atributo"
      end

      operation 461189 "load"
	preserve_cpp_body_indent public explicit_return_type "mixed"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera el valor del campo pre-configurado.

@return mixed el objeto o valor recuperado"
      end

      classrelation 363653 // <generalisation>
	relation 362885 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 363653 // <generalisation>
	  b parent class_ref 289157 // PrivateAccesor
      end

      classrelation 430469 // <dependency>
	relation 429573 -_->
	  a default
	    php "${type}"
	    classrelation_ref 430469 // <dependency>
	  b parent class_ref 341637 // UnknowAttribute
      end
    end

    class 289157 "PrivateAccesor"
      abstract visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      operation 426501 "&getAttribute"
	preserve_cpp_body_indent protected explicit_return_type "mixed"
	nparams 2
	  param in name "object" explicit_type "Object"
	  param in name "name" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna una referencia al atributo indicado.

@param Object $object un objeto cualquiera de los descendientes de PrivateAccesor
@param string $name el nombre del atributo
@return mixed el valor del atributo solicitado"
      end

      operation 426629 "invokeMethod"
	preserve_cpp_body_indent protected explicit_return_type "mixed"
	nparams 3
	  param inout name "object" explicit_type "Object"
	  param in name "method" explicit_type "string"
	  param in name "params" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Invoca un mtodo pblico o protegido del objeto que se pasa por parmetro.

@param Object $object un objeto de la jerarqua de PrivateAccesor
@param string $method el nombre del mtodo a invocar
@param array $params un arreglo con los parmetros necesarios para invocar la funcin en el orden y nmero correcto
@return mixed retorna lo que devuelva la funcin invocada"
      end

      operation 468229 "setAttribute"
	preserve_cpp_body_indent protected explicit_return_type ""
	nparams 3
	  param in name "object" explicit_type "Object"
	  param in name "name" explicit_type "string"
	  param in name "value" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Actualiza un atributo protegido o pblico de un objeto.

@param Object $object un objeto cualquiera de los descendientes de PrivateAccesor
@param string $name el nombre del atributo
@param mixed $value el nuevo valor de la propiedad
@return void"
      end

      operation 509061 "invokeStaticMethod"
	preserve_cpp_body_indent protected explicit_return_type ""
	nparams 3
	  param in name "class" explicit_type "string"
	  param in name "method" explicit_type "string"
	  param inout name "params" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Invoca un mtodo pblico o protegido de la clase que se pasa por parmetro.

@param string $class la clase de la jerarqua de PrivateAccesor
@param string $method el nombre del mtodo a invocar
@param array $params un arreglo con los parmetros necesarios para invocar la funcin en el orden y nmero correcto
@return mixed retorna lo que devuelva la funcin invocada"
      end

      operation 515845 "stInvokeMethod"
	preserve_cpp_body_indent public explicit_return_type "mixed"
	nparams 3
	  param inout name "object" explicit_type "Object"
	  param in name "method" explicit_type "string"
	  param in name "params" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "@static
Versin esttica de invokeMethod(); invoca un mtodo pblico o protegido del objeto que se pasa por parmetro.
@see PrivateAccessor::invokeMethod()
@param Object $object un objeto de la jerarqua de PrivateAccesor
@param string $method el nombre del mtodo a invocar
@param array $params un arreglo con los parmetros necesarios para invocar la funcin en el orden y nmero correcto
@return mixed retorna lo que devuelva la funcin invocada"
      end
    end

    class 249477 "ArrayAccess"
      abstract visibility public stereotype "interface"
      cpp_decl ""
      java_decl "${comment}${@}${visibility}interface ${name}${extends} {
${members}}
"
      php_decl "${comment}${visibility}interface ${name} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
${members}};
"
      explicit_switch_type ""
      
      operation 302597 "offsetExists"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "boolean"
	nparams 1
	  param in name "offset" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)};"
	preserve_python_body_indent 
	
      end

      operation 302725 "offsetGet"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "mixed"
	nparams 1
	  param in name "offset" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)};"
	preserve_python_body_indent 
	
      end

      operation 302853 "offsetSet"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 2
	  param in name "offset" explicit_type "mixed"
	  param in name "value" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)};"
	preserve_python_body_indent 
	
      end

      operation 302981 "offsetUnset"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 1
	  param in name "offset" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)};"
	preserve_python_body_indent 
	
      end
    end

    class 262789 "Iterator"
      abstract visibility package stereotype "interface"
      cpp_decl ""
      java_decl "${comment}${@}${visibility}interface ${name}${extends} {
${members}}
"
      php_decl "${comment}${visibility}interface ${name} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
${members}};
"
      explicit_switch_type ""
      
      operation 392197 "current"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "mixed"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 392325 "key"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "scalar"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 392453 "next"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 392581 "rewind"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 392709 "valid"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "boolean"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end
    end

    class 249605 "IteratorAggregate"
      abstract visibility public stereotype "interface"
      cpp_decl ""
      java_decl "${comment}${@}${visibility}interface ${name}${extends} {
${members}}
"
      php_decl "${comment}${visibility}interface ${name} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
${members}};
"
      explicit_switch_type ""
      
      operation 303109 "getIterator"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)};"
	preserve_python_body_indent 
	
      end
    end

    class 269445 "ORM_STATUS"
      visibility package stereotype "interface"
      cpp_decl ""
      java_decl "${comment}${@}${visibility}interface ${name}${extends} {
${members}}
"
      php_decl "${comment}${visibility}interface ${name} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
${members}};
"
      explicit_switch_type ""
      
      comment "Almacena constantes de estado para que no entorpezcan la visualizacin de los objetos.

Estados relativos al ORM:
 * NEW = Cuando un objeto recin se crea. Este estado existe (aunque de movida hay una iteraccin con DatabaseObject y por consiguiente con el ORM) para que los objetos creados se guarden slo a travs de un llamado explicito a SAVE(). Sin embargo existe un flag en el ORM que usa DatabaseObject para bindear automticamente en el create.
 * ATTACHED = El objeto est siendo mantenido por ORM.
 * DETACHED = El objeto no est siendo mantenido por el ORM. Puede o no ser consistente con los datos de la base.
Estados del objeto:
 * DELETED = 

Pensamiento:
Doctrine maneja los estados tiene 4 que copi un poquitos ms claros: MANAGED, DETACHED, REMOVED y NEW. Pero al fin de cuentas un objeto est asociado o no con el ORM y lo dems es superfluo. No debera de interesar en particular si un objeto es nuevo o modificado, porque de esas inferencias se encarga el ORM.
El NEW en Doctrine significa que el objeto esta DETACHED y que no tiene contraparte en la base de datos. Cuando se hace un SAVE() pasa a MANAGED. Yo pienso que NEW no tiene sentido: en todo caso es DETACHED y cuando se guarda si tiene id es porque existia una contraparte y si no lo tiene es que es nuevo. Antes que digan nada, el id es un atributo privado de la clase DatabaseObject, con lo cual las clases hijas no lo pueden acceder, por lo cual es de total dominio del ORM.
El REMOVED es razonable, indica que el objeto no es recomendable para su uso, aunque sus valores an estn ahi en la memoria."
      attribute 272389 "ATTACHED"
	const_attribute package explicit_type "int"
	init_value "1"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@staticvar int ATTACHED indica que el objeto est siendo monitoreado por el ORM, lo cual quiere decir que los cambios sobre el mismo sern salvados sobre el COMMIT y que las acciones que se hagan al mismo tomarn estado de permanente.
@final"
      end

      attribute 272645 "DETACHED"
	const_attribute package explicit_type "int"
	init_value "2"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@staticvar int DETACHED indica que el objeto no est siendo mantenido por el ORM, los cambios y operaciones sobre el mismo no tendrn efecto.
@final"
      end

      attribute 272517 "REMOVED"
	const_attribute package explicit_type "int"
	init_value "3"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@staticvar int REMOVED significa que el objeto est marcado para hacer un DELETE; es decir que est ATTACHED pero hasta el prximo COMMIT y que no tiene sentido modificar un objeto de ese tipo dado que pronto ser historia.
@final"
      end

      attribute 328581 "FRESH"
	const_attribute package explicit_type ""
	init_value "4"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@staticvar int FRESH Valor que indica que el objeto es nuevo, es redundante con DETACHED + id==null, pero sirve para no tener que andar haciendo esas comparaciones
@final"
      end

      attribute 328837 "LOADING"
	const_attribute package explicit_type "int"
	init_value "5"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@staticvar LOADING es un estado interno, solo empleado por el ORM que pone al objeto en un modo \"suspendido\" mientras puebla los atributos internos. Al salir de este estado el objeto \"resetea\" los flags de modificaciones.
@final"
      end

      attribute 368261 "SAVING"
	const_attribute package explicit_type "int"
	init_value "6"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end
    end

    class 275973 "ORM_TYPES"
      visibility package stereotype "interface"
      cpp_decl ""
      java_decl "${comment}${@}${visibility}interface ${name}${extends} {
${members}}
"
      php_decl "${comment}${visibility}interface ${name} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
${members}};
"
      explicit_switch_type ""
      
      comment "En DOCTRINE:
    * string: Type that maps an SQL VARCHAR to a PHP string.
    * integer: Type that maps an SQL INT to a PHP integer.
    * smallint: Type that maps a database SMALLINT to a PHP integer.
    * bigint: Type that maps a database BIGINT to a PHP string.
    * boolean: Type that maps an SQL boolean to a PHP boolean.
    * decimal: Type that maps an SQL DECIMAL to a PHP double.
    * date: Type that maps an SQL DATETIME to a PHP DateTime object.
    * time: Type that maps an SQL TIME to a PHP DateTime object.
    * datetime: Type that maps an SQL DATETIME/TIMESTAMP to a PHP DateTime object.
    * text: Type that maps an SQL CLOB to a PHP string.
    * object: Type that maps a SQL CLOB to a PHP object using serialize() and unserialize()
    * array: Type that maps a SQL CLOB to a PHP object using serialize() and unserialize()

Los mios son IMAGE, FILE para BLOBs y EXTERNAL que inicialmente lo podra usar para EXTERNAL_FILE pero a travs de alguna cosa como CURL se podra usar para webservices y otras cosas raras.

ENTITY es especial y significa que ese atributo es una FK (un ID de un objeto de otro lado)
"
      attribute 285829 "STRING"
	const_attribute package explicit_type "int"
	init_value "1"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 286085 "SMALLINT"
	const_attribute package explicit_type "int"
	init_value "2"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 285957 "INTEGER"
	const_attribute package explicit_type "int"
	init_value "3"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 286213 "BIGINT"
	const_attribute package explicit_type "int"
	init_value "4"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 286469 "DECIMAL"
	const_attribute package explicit_type "int"
	init_value "5"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 286341 "BOOLEAN"
	const_attribute package explicit_type "int"
	init_value "6"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 286597 "DATE"
	const_attribute package explicit_type "int"
	init_value "7"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 286725 "TIME"
	const_attribute package explicit_type "int"
	init_value "8"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 286853 "DATETIME"
	const_attribute package explicit_type "int"
	init_value "9"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 286981 "TEXT"
	const_attribute package explicit_type "int"
	init_value "10"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 287109 "OBJECT"
	const_attribute package explicit_type "int"
	init_value "11"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 287237 "COLLECTION"
	const_attribute package explicit_type "int"
	init_value "12"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 287365 "IMAGE"
	const_attribute package explicit_type "int"
	init_value "13"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 287493 "FILE"
	const_attribute package explicit_type "int"
	init_value "14"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 294021 "EXTERNAL"
	const_attribute package explicit_type "int"
	init_value "15"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 294789 "ORM_ENTITY"
	const_attribute package explicit_type "int"
	init_value "50"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end
    end

    class 282501 "ORM_LOAD_STYLE"
      visibility package stereotype "interface"
      cpp_decl ""
      java_decl "${comment}${@}${visibility}interface ${name}${extends} {
${members}}
"
      php_decl "${comment}${visibility}interface ${name} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
${members}};
"
      explicit_switch_type ""
      
      attribute 294149 "FORCE_LOAD"
	const_attribute package explicit_type "int"
	init_value "1"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 294277 "LAZY_LOAD"
	const_attribute package explicit_type "int"
	init_value "2"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end
    end

    class 282629 "ORM_RELATION_TYPE"
      visibility package stereotype "interface"
      cpp_decl ""
      java_decl "${comment}${@}${visibility}interface ${name}${extends} {
${members}}
"
      php_decl "${comment}${visibility}interface ${name} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
${members}};
"
      explicit_switch_type ""
      
      attribute 294405 "OneToMany"
	const_attribute package explicit_type "int"
	init_value "1"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 294533 "ManyToMany"
	const_attribute package explicit_type "int"
	init_value "2"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 294661 "OneToOne"
	const_attribute package explicit_type "int"
	init_value "3"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end
    end

    class 302213 "OPERATION"
      visibility package stereotype "interface"
      cpp_decl ""
      java_decl "${comment}${@}${visibility}interface ${name}${extends} {
${members}}
"
      php_decl "${comment}${visibility}interface ${name} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
${members}};
"
      explicit_switch_type ""
      
      attribute 301317 "EQ"
	const_attribute package explicit_type "int"
	init_value "1"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 301445 "LT"
	const_attribute package explicit_type "int"
	init_value "2"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 301573 "GT"
	const_attribute package explicit_type "int"
	init_value "3"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 301701 "LE"
	const_attribute package explicit_type "int"
	init_value "4"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 301829 "GE"
	const_attribute package explicit_type "int"
	init_value "5"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 301957 "NE"
	const_attribute package explicit_type "int"
	init_value "6"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 302085 "LIKE"
	const_attribute package explicit_type "int"
	init_value "7"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 302213 "BETWEEN"
	const_attribute package explicit_type "int"
	init_value "8"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end
    end

    class 348165 "Countable"
      visibility package stereotype "interface"
      cpp_decl ""
      java_decl "${comment}${@}${visibility}interface ${name}${extends} {
${members}}
"
      php_decl "${comment}${visibility}interface ${name} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
${members}};
"
      explicit_switch_type ""
      
      operation 549765 "count"
	preserve_cpp_body_indent public explicit_return_type "int"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)};"
	preserve_python_body_indent 
	
      end
    end
  end

  deploymentview 141189 "ORM Deployment"
    //deployment diagram settings
    package_name_in_tab default show_context default write_horizontally default auto_label_position default draw_all_relations default shadow default
    draw_component_as_icon default show_component_req_prov default show_component_rea default show_stereotype_properties default
    ncouples 1
    key "uses" value ""
    artifact 171653 "ORM"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 167685 // ORM
      end
    end

    artifact 171781 "ORMDefinition"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 236293 // ORMDefinition
      end
    end

    artifact 185221 "ORMObject"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 141317 // ORMObject
      end
      ncouples 1
      key "" value ""
    end

    artifact 205317 "ORMCollection"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 256133 // ORMCollection
      end
    end

    artifact 211845 "ORM_STATUS"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 269445 // ORM_STATUS
      end
    end

    artifact 211973 "ORM_TYPES"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 275973 // ORM_TYPES
      end
    end

    artifact 212101 "ORM_LOAD_STYLE"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 282501 // ORM_LOAD_STYLE
      end
    end

    artifact 212229 "ORM_RELATION_TYPE"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 282629 // ORM_RELATION_TYPE
      end
    end

    artifact 218757 "AbstractDataBase"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 295685 // AbstractDataBase
      end
    end

    artifact 219013 "PrivateAccesor"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 289157 // PrivateAccesor
      end
    end

    artifact 225541 "OracleDatabase"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 308741 // OracleDatabase
      end
      ncouples 1
      key "uses" value "
"
    end

    artifact 232069 "LazyLoader"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 315269 // LazyLoader
      end
    end

    artifact 291077 "ORMQuery"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 389637 // ORMQuery
      end
    end

    artifact 350725 "ORMQueryOld"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
      end
    end
  end

  package_ref 167429 // exceptions
end
