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); }
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")); } }
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); }
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); }