iidec / Integra.Space.Language-upstream

Lenguaje de consulta que permite el acceso a datos en tiempo real
0 stars 0 forks source link

Creación de tipos a partir de fuentes #52

Closed OscarCanek closed 7 years ago

OscarCanek commented 7 years ago

Actualmente se tiene la definición de la estructura de columnas de las fuentes, el siguiente paso consiste en crear un tipo a partir de esa estructura. El nombre de la fuente será el nombre del tipo y las columnas se convertirán en las propiedades del tipo, cada propiedad tendrá los métodos set y get públicos.

Pendientes a definir:

OscarCanek commented 7 years ago

Implementación preliminar

OscarCanek commented 7 years ago

Importante

El tipo base debe contener toda la lógica actual para hacer Lock y Unlock de los eventos entrantes.

marianogenovese commented 7 years ago

P: ¿Este nuevo tipo heredará de una clase base?. De ser así, cual sería la definición de esa clase base. R: Si debe heredar sobre un tipo, inicialmente no debe tener propiedades. P: ¿Generará a un dll? R: No P: ¿Como se hará referencia/usará al nuevo tipo creado? R: Depende del contexto, lo que se necesita hacer es un generar de tipos basado en una fuente.

Con respecto al punto: Solo esta implementado para el create source debido a que un alter source conlleva mas validaciones por los cambios que se deben hacer al tipo creado anteriormente. R: Mi opinión es que puede separarse generación dinamica del tipo en contexto (fuente) basado en una metadata (sea cual fuere su origen db o arbol de ejecución) así no hay dependencia entre el comando create/alter source.

marianogenovese commented 7 years ago

Sobre: El tipo base debe contener toda la lógica actual para hacer Lock y Unlock de los eventos entrantes. Recuerdame para que era el lock y unlock?

marianogenovese commented 7 years ago

Un requerimiento a la generación de tipos es que las propiedades sean siempre nullables y sean solo de lectura publica y escritura privada permitiendo así la inmutabilidad.

OscarCanek commented 7 years ago

Con respecto al punto: Solo esta implementado para el create source debido a que un alter source conlleva mas validaciones por los cambios que se deben hacer al tipo creado anteriormente. R: Mi opinión es que puede separarse generación dinamica del tipo en contexto (fuente) basado en una metadata (sea cual fuere su origen db o arbol de ejecución) así no hay dependencia entre el comando create/alter source.

Respuesta: Me refiero a como administrar los cambios, si va a ser distribuido entonces como vamos a cargar el nuevo tipo y descargar el viejo en donde se necesite


Sobre: El tipo base debe contener toda la lógica actual para hacer Lock y Unlock de los eventos entrantes. Recuerdame para que era el lock y unlock?

Respuesta: Cuando existe mas de un stream obteniendo eventos de una fuente, para llamar a dispose en el ultimo stream que tenga que descartarlo.

Me intriga como lo vamos a manejar en un ambiente distribuido.


marianogenovese commented 7 years ago

Cada stream tendria una copia del evento.

OscarCanek commented 7 years ago

Entonces me entra otra duda, como los objetos de las fuentes tendrán solo propiedades con tipos de datos primitivos no va a ser necesario Dispose o si?

marianogenovese commented 7 years ago

Es correcto, no seria necesario.

OscarCanek commented 7 years ago

Ahora se usa una interfaz para obtener el tipo de la fuente a la que se hace referencia en el from, join y with durante la compilación de la consulta.

/// <summary>
    /// Source type factory interface.
    /// </summary>
    internal interface ISourceTypeFactory
    {
        /// <summary>
        /// Get the type for the specify source.
        /// </summary>
        /// <param name="source">Source from with you will generate the type.</param>
        /// <returns>Source type.</returns>
        Type GetSourceType(Common.CommandObject source);
    }