示例#1
0
        public object getValor(Entorno.Entorno ent)
        {
            String nombre = this.identificador + "_";

            if (valores != null)
            {
                foreach (Expresion exp in this.valores)
                {
                    Tipo t = exp.getTipo(ent);
                    nombre += t.tipo + "_";
                }
            }
            if (ent.existe(nombre))
            {
                Funcion         funcion = (Funcion)ent.get(nombre);
                Entorno.Entorno global  = ent.gloval();
                Entorno.Entorno local   = new Entorno.Entorno(global);
                if (verificarParametros(valores, funcion.parametros, local, ent))
                {
                    Object val = funcion.ejecutar(local);

                    return(val);
                }
            }
            else
            {
                Estatico.errores.Add(new ErrorCQL("Semantico", "Error en la funcion " + identificador + " no tiene la misma cantidad de parametros o los tipos de parametro no coinciden o no existe", this.fila, this.columna));
            }
            return(null);
        }
示例#2
0
        public Tipo getTipo(Entorno.Entorno ent)
        {
            String nombre = this.identificador + "_";

            if (valores != null)
            {
                foreach (Expresion exp in this.valores)
                {
                    Tipo t = exp.getTipo(ent);
                    nombre += t.tipo + "_";
                }
            }
            if (ent.existe(nombre))
            {
                Funcion funcion = (Funcion)ent.get(nombre);
                return(funcion.tipo);
            }
            else
            {
                return(new Tipo("null"));
            }
        }
示例#3
0
        public object getValor(Entorno.Entorno ent)
        {
            if (ent.existe(variable))
            {
                Simbolo sim = ent.get(variable);

                Object valor = sim.valor;
                foreach (Expresion exp in this.fuciones)
                {
                    if (exp is Contiene)
                    {
                        Contiene exp2 = (Contiene)exp;
                        exp2.coleccion = valor;
                        valor          = exp2.getValor(ent);
                    }
                    else if (exp is Insertar)
                    {
                        Insertar exp2 = (Insertar)exp;
                        exp2.coleccion = valor;
                        valor          = exp2.getValor(ent);
                    }
                    else if (exp is Obtener)
                    {
                        Obtener exp2 = (Obtener)exp;
                        exp2.coleccion = valor;
                        valor          = exp2.getValor(ent);
                    }
                    else if (exp is Poner)
                    {
                        Poner exp2 = (Poner)exp;
                        exp2.coleccion = valor;
                        valor          = exp2.getValor(ent);
                    }
                    else if (exp is Remover)
                    {
                        Remover exp2 = (Remover)exp;
                        exp2.coleccion = valor;
                        valor          = exp2.getValor(ent);
                    }
                    else if (exp is Size)
                    {
                        Size exp2 = (Size)exp;
                        exp2.coleccion = valor;
                        valor          = exp2.getValor(ent);
                    }
                    else if (exp is Vaciar)
                    {
                        Vaciar exp2 = (Vaciar)exp;
                        exp2.coleccion = valor;
                        valor          = exp2.getValor(ent);
                    }
                    else if (exp is endWith)
                    {
                        endWith exp2 = (endWith)exp;
                        exp2.cadena = valor;
                        valor       = exp2.getValor(ent);
                    }
                    else if (exp is length)
                    {
                        length exp2 = (length)exp;
                        exp2.cadena = valor;
                        valor       = exp2.getValor(ent);
                    }
                    else if (exp is startsWith)
                    {
                        startsWith exp2 = (startsWith)exp;
                        exp2.cadena = valor;
                        valor       = exp2.getValor(ent);
                    }
                    else if (exp is subString)
                    {
                        subString exp2 = (subString)exp;
                        exp2.cadena = valor;
                        valor       = exp2.getValor(ent);
                    }
                    else if (exp is toLower)
                    {
                        toLower exp2 = (toLower)exp;
                        exp2.cadena = valor;
                        valor       = exp2.getValor(ent);
                    }
                    else if (exp is toUpper)
                    {
                        toUpper exp2 = (toUpper)exp;
                        exp2.cadena = valor;
                        valor       = exp2.getValor(ent);
                    }
                    else if (exp is getDay)
                    {
                        getDay exp2 = (getDay)exp;
                        exp2.fecha = valor;
                        valor      = exp2.getValor(ent);
                    }
                    else if (exp is getMonth)
                    {
                        getMonth exp2 = (getMonth)exp;
                        exp2.fecha = valor;
                        valor      = exp2.getValor(ent);
                    }
                    else if (exp is getYear)
                    {
                        getYear exp2 = (getYear)exp;
                        exp2.fecha = valor;
                        valor      = exp2.getValor(ent);
                    }
                    else if (exp is getHour)
                    {
                        getHour exp2 = (getHour)exp;
                        exp2.hora = valor;
                        valor     = exp2.getValor(ent);
                    }
                    else if (exp is getMinuts)
                    {
                        getMinuts exp2 = (getMinuts)exp;
                        exp2.hora = valor;
                        valor     = exp2.getValor(ent);
                    }
                    else if (exp is getSeconds)
                    {
                        getSeconds exp2 = (getSeconds)exp;
                        exp2.hora = valor;
                        valor     = exp2.getValor(ent);
                    }
                    else if (exp is Identificador)
                    {
                        if (valor is Objeto)
                        {
                            Objeto        ob  = (Objeto)valor;
                            Identificador ide = (Identificador)exp;

                            valor = ide.getValor(ob.atributos);
                        }
                    }
                }
                return(valor);
            }
            return(null);
        }
示例#4
0
        public DataTable GenerarTabla(Tabla actual, Entorno.Entorno ent)
        {
            DataTable nueva = new DataTable();
            int       x     = 0;

            foreach (Expresion exp in this.campos)
            {
                if (exp is Identificador)
                {
                    Identificador ident = (Identificador)exp;
                    DataColumn    ncol  = new DataColumn(ident.identificador);
                    ncol.DataType = typeof(Object);
                    nueva.Columns.Add(ncol);
                }
                else
                {
                    DataColumn ncol = new DataColumn("Columna_" + x);
                    ncol.DataType = typeof(Object);
                    nueva.Columns.Add(ncol);
                }
                x++;
            }

            foreach (DataRow row in actual.tabla.Rows)
            {
                Entorno.Entorno local = new Entorno.Entorno(ent);
                int             y     = 0;
                foreach (DataColumn col in actual.tabla.Columns)
                {
                    if (row[col].GetType() != typeof(System.DBNull))
                    {
                        local.agregar(col.ColumnName, new Simbolo(col.ColumnName, actual.columnas.ElementAt(y).tipo, row[col]));
                    }
                    else
                    {
                        local.agregar(col.ColumnName, new Simbolo(col.ColumnName, actual.columnas.ElementAt(y).tipo, new Nulo()));
                    }
                    y++;
                }
                if (where == null)
                {
                    int     z         = 0;
                    DataRow row_nueva = nueva.NewRow();
                    foreach (Expresion exp in this.campos)
                    {
                        if (exp is Identificador)
                        {
                            Identificador ident = (Identificador)exp;
                            if (local.existe(ident.identificador))
                            {
                                object ob = exp.getValor(local);
                                if (!(ob is Nulo))
                                {
                                    row_nueva[ident.identificador] = ob;
                                }
                            }
                            else
                            {
                                Estatico.errores.Add(new ErrorCQL("Ejecucion", "La columna: " + ident.identificador + ", no existe en la tabla: " + nombre + ", en la base: " + Estatico.actualBase.nombre, this.fila, this.columna));
                                return(null);
                            }
                        }
                        else
                        {
                            object ob = exp.getValor(local);
                            if (!(ob is Nulo))
                            {
                                row_nueva["Columna_" + z] = ob;
                            }
                        }
                        z++;
                    }
                    try
                    {
                        nueva.Rows.Add(row_nueva);
                    }
                    catch (Exception e)
                    {
                        Estatico.errores.Add(new ErrorCQL("Ejecucion", "Problema en agregar a la tabla del select ", this.fila, this.columna));
                    }
                }
                else
                {
                    int    z       = 0;
                    Object val_exp = where.getValor(local);
                    if (val_exp is bool)
                    {
                        if ((bool)val_exp)
                        {
                            DataRow row_nueva = nueva.NewRow();
                            foreach (Expresion exp in this.campos)
                            {
                                if (exp is Identificador)
                                {
                                    Identificador ident = (Identificador)exp;
                                    object        ob    = exp.getValor(local);
                                    if (!(ob is Nulo))
                                    {
                                        row_nueva[ident.identificador] = ob;
                                    }
                                }
                                else
                                {
                                    object ob = exp.getValor(local);
                                    if (!(ob is Nulo))
                                    {
                                        row_nueva["Columna_" + z] = ob;
                                    }
                                }
                                z++;
                            }
                            try
                            {
                                nueva.Rows.Add(row_nueva);
                            }
                            catch (Exception e)
                            {
                                Estatico.errores.Add(new ErrorCQL("Ejecucion", "Problema en agregar a la tabla del select ", this.fila, this.columna));
                            }
                        }
                    }
                    else
                    {
                        Estatico.errores.Add(new ErrorCQL("Ejecucion", "Where debe de dar un resultado booleano ", this.fila, this.columna));
                    }
                }
            }
            if (order != null)
            {
                try
                {
                    nueva.DefaultView.Sort = order;
                    nueva = nueva.DefaultView.ToTable();
                }
                catch (Exception e)
                {
                    Estatico.errores.Add(new ErrorCQL("Ejecucion", "Problema en order by a la tabla del select ", this.fila, this.columna));
                }
            }

            if (limit != null)
            {
                Object val = limit.getValor(ent);
                if (val is int)
                {
                    int limite = (int)val;
                    while (nueva.Rows.Count > limite)
                    {
                        //dataTable.Rows[dataTable.Rows.Count - 1].Delete();
                        nueva.Rows[nueva.Rows.Count - 1].Delete();
                    }
                }
                else if (val is double)
                {
                    double valor  = (double)val;
                    int    limite = Convert.ToInt32(valor);

                    while (nueva.Rows.Count > limite)
                    {
                        //dataTable.Rows[dataTable.Rows.Count - 1].Delete();
                        nueva.Rows[nueva.Rows.Count - 1].Delete();
                    }
                }
                else
                {
                    Estatico.errores.Add(new ErrorCQL("Ejecucion", "El valor del limit no es un numero", this.fila, this.columna));
                }
            }

            return(nueva);
        }