iidec / Integra.Space.Language-upstream

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

Streams (sesión) / into #47

Open marianogenovese opened 8 years ago

marianogenovese commented 8 years ago

Para controlar la salida de un stream (sesion) es necesario definir la palabra reservada into que permita definir de manera explicita cual será la salida del stream. Para los streams de sesión, la salida será la misma sesión o una fuente por lo que estos streams se usarán para procesar eventos o consultar resultados de streams o fuentes. @OscarCanek por favor adjuntemos a este issue la gramatica del select para modificarlo.

OscarCanek commented 7 years ago

Gramática

eql query = source definition, where, (select | (apply window, group by, select, order by));

=======================================================

source definition = from | join;

from = 'from', identifier or alias;

join = ('left' | 'right' | 'cross' | 'inner' | Ɛ), 'join', identifier or alias, where, 'with', identifier or alias | where, 'on', logic expression for on condition, 'timeout', datetimevalue;

=======================================================

where = ('where', logic expression) | Ɛ;

=======================================================

apply window = 'apply', 'window', 'of', datetimevalue;

=======================================================

group by = ('group', 'by', list of groups) | Ɛ;

list of groups = (list of groups, ',', values, 'as', identifier) | values, 'as', identifier;

=======================================================

select = 'select', top, list of columns;

top = 'top', integer | Ɛ;

list of columns = (list of columns, ',', projection value, 'as', identifier) | projection value, 'as', identifier;

=======================================================

order by = ('order', 'by', ('asc' | 'desc' | Ɛ), list of identifiers) | Ɛ;

list of identifiers = (list of identifiers, ',', identifier) | identifier

=======================================================

identifier or alias = identifier | (identifier, 'as' identifier);
OscarCanek commented 7 years ago

Utilizando la gramática actual se propone la siguiente actualización:

eql query = source definition, where, ((select | (apply window, group by, select, order by))), into source;

=======================================================

into source = ('into', identifier) | Ɛ;
OscarCanek commented 7 years ago

Importante

Para poder acoplar correctamente estos cambios al sistema. Ahora para la integración del into se tiene que actualizar los identificadores ya que tiene que tener contexto, es decir, base de datos y esquema al que pertenece la fuente. Esto también aplica a la sección from de la consulta. Dicho contexto debe estar accesible para poder validar permisos y colocarlo en la metadata de la consulta compilada.

La actualización a la sección from del sistema viene del cambio a que ahora se pueden hacer consultas fuera de un create stream, es decir, antes el create stream me daba ese contexto lo que implicaba a que solo se podían referenciar fuentes en los mismos contextos que el stream que se estaba creando , ahora tiene que especificarlo lo que permitirá referenciar fuentes de diferentes esquemas y hasta de base de datos distintas siempre y cuando se tengan los permisos necesarios.

OscarCanek commented 7 years ago

Ya fue realizada la actualización de la especificación del contexto de las fuentes dentro de la consulta.

OscarCanek commented 7 years ago

Hay que definir que hará el into a nivel de ejecución.