public object Ejecutar(TablaDeSimbolos ts) { if (Program.sistema.En_uso()) { if (Program.sistema.existTable(id_tabla.ToLower())) { bool eliminado = Program.sistema.truncateTable(id_tabla.ToLower()); if (eliminado) { //informar que se elimino con exito salida.Add(Program.buildMessage("Tabla " + id_tabla + " truncada con exito.")); } else { // informar que es un error interno; } } else { salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "La tabla " + id_tabla + " no existe en la base de datos actual.")); } } else { //no hay ninguna base de datos seleccionada. salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "UseBDException.")); } return(null); }
public void setValor(string id, object valor, TablaDeSimbolos nodo) { foreach (Simbolo s in nodo) { if (s.Id.ToLower().Equals(id.ToLower())) { if (s.Tipo == Tipo.ENTERO) { s.Valor = Convert.ToDouble(valor); } else if (s.Tipo == Tipo.DECIMAL) { s.Valor = Convert.ToDouble(valor); } else if (s.Tipo == Tipo.CADENA) { s.Valor = valor.ToString(); } else if (s.Tipo == Tipo.MAP) { ((Map)s.Valor).Mapita = (List <Item_Map>)valor; } else if (s.Tipo == Tipo.LIST) { ((Lista)s.Valor).Lista_valores = (List <Tipo_Collection>)valor; } return; } } if (nodo.padre != null) { setValor(id, valor, nodo.padre); } }
public object Recolectar(TablaDeSimbolos ts) { if (Program.sistema.getPermission(user, id)) { if (Program.sistema.existDataBase(id.ToLower())) { Program.sistema.asignUse(id); } else { //informar que no existe database } } return(null); }
private Object getValor(string id, TablaDeSimbolos nodo) { foreach (Simbolo s in nodo) { if (s.Id.ToLower().Equals(id.ToLower())) { return(s.Valor); } } if (nodo != null) { return(getValor(id, nodo.padre)); } return(null); }
public object Ejecutar(TablaDeSimbolos ts) { if (Program.sistema.existDataBase(id.ToLower())) { Program.sistema.deleteDataBase(id); salida.Add(Program.buildMessage("La base de datos " + id + " fue eliminada con exito.")); Program.sistema.deleteDBFROMUSER(id.ToLower()); } else { //informar que no existe database salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "BDDontExists.")); } return(null); }
private string tipoAsignado(string id, TablaDeSimbolos nodo) { foreach (Simbolo s in nodo) { if (s.Id.ToLower().Equals(id.ToLower())) { return(s.Tipo_asignado); } } if (nodo.padre != null) { return(tipoAsignado(id, nodo)); } else { return("NO EXISTE EL TIPO"); } }
private Tipo getType(string id, TablaDeSimbolos nodo) { foreach (Simbolo s in nodo) { if (s.Id.ToLower().Equals(id.ToLower())) { return(s.Tipo); } } if (nodo.padre != null) { return(getType(id, nodo.padre)); } else { return(Tipo.NO_ACEPTADO); } }
private bool existID(string id, TablaDeSimbolos nodo) { foreach (Simbolo item in nodo) { if (item.Id.ToLower().Equals(id.ToLower())) { return(true); } } if (nodo.padre != null) { return(existID(id, nodo.padre)); } else { return(false); } }
public object Ejecutar(TablaDeSimbolos ts) { if (Program.sistema.getPermission(user, id)) { if (Program.sistema.existDataBase(id.ToLower())) { Program.sistema.asignUse(id); salida.Add(Program.buildMessage("Base de datos en uso: " + id)); } else { //informar que no existe database salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "BDDontExists")); } } else { salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "El usuario no posee permisos para usar la base de datos.")); } return(null); }
public object Ejecutar(TablaDeSimbolos ts) { if (Program.sistema.En_uso()) { if (!Program.sistema.existTable(id_tabla.ToLower())) { if (existe == true) { //no hace nada } else { salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", id_tabla + " TableDontExists.")); // marcar error } } else { bool eliminado = Program.sistema.dropTable(id_tabla.ToLower()); if (eliminado) { //mandar mensaje de eliminacion salida.Add(Program.buildMessage("La tabla " + id_tabla + " fue eliminida con exito.")); } else { // mandar mensaje que hubo un error interno. salida.Add(Program.buildMessage("ha ocurrido un error interno mientras se intentaba eliminar la tabla.")); } } } else { //no hay ninguna base de datos seleccionada. salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "UseBDException.")); } return(null); }
public Object Ejecutar(TablaDeSimbolos ts) { if (Program.sistema.existDataBase(id) == true) { if (existe == true) { //no hacer nada } else { //Imprimir error ya que la tabla salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", id + " BDAlreadyExists.")); } } else { Program.sistema.addDataBase(id); Program.sistema.addPermissions(user, id); Program.sistema.addPermissions("admin", id); salida.Add(Program.buildMessage("La base de datos fue creada con exito.")); } return(null); }
public object Recolectar(TablaDeSimbolos ts) { return(null); }
public object Ejecutar(TablaDeSimbolos ts) { if (Program.sistema.En_uso()) { if (Program.sistema.existTable(id)) { if (existe == true) { //no hace nada } else { salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", id + " TableAlreadyExists.")); // marcar error } } else { int repetidos; bool no_hay_repetidos = true; foreach (Columna item in columnas) { repetidos = 0; foreach (Columna item2 in columnas) { if (item.Name.Equals(item2.Name)) { repetidos++; if (repetidos <= 1) { //no hacemos nada } else { //mostrar error salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "La columna " + item.Name + " ya existe en este contexto.")); no_hay_repetidos = false; } } } } if (no_hay_repetidos) { //si son primitivos o objetos bool is_primitivo; bool is_objeto; bool is_ok = true; foreach (Columna item in columnas) { if (item.Collection) { if (item.Type.ToLower().Equals("set") || item.Type.ToLower().Equals("list")) { if (!Program.comprobarPrimitivo(item.Attr1.ToLower())) { is_primitivo = false; if (!Program.sistema.existeObjeto(item.Attr1.ToLower())) { is_objeto = false; } else { is_primitivo = true; is_objeto = true; } } else { is_primitivo = true; is_objeto = true; } if (!is_primitivo && !is_objeto) { is_ok = false; //informar que no existe ese tipo de dato salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "El tipo " + item.Attr1 + " no es primitivo, ni es parte de los objetos de la base de datos.")); } } else { if (!Program.comprobarPrimitivo(item.Attr1.ToLower())) { is_primitivo = false; if (!Program.sistema.existeObjeto(item.Attr1.ToLower())) { is_objeto = false; } else { is_primitivo = true; is_objeto = true; } } else { is_primitivo = true; is_objeto = true; } if (!is_primitivo && !is_objeto) { is_ok = false; //informar que no existe ese tipo de dato salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "El tipo " + item.Attr1 + " no es primitivo, ni es parte de los objetos de la base de datos.")); } if (!Program.comprobarPrimitivo(item.Attr2.ToLower())) { is_primitivo = false; if (!Program.sistema.existeObjeto(item.Attr2.ToLower())) { is_objeto = false; } else { is_primitivo = true; is_objeto = true; } } else { is_primitivo = true; is_objeto = true; } if (!is_primitivo && !is_objeto) { is_ok = false; //informar que no existe ese tipo de dato salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "El tipo " + item.Attr2 + " no es primitivo, ni es parte de los objetos de la base de datos.")); } } } else { if (!Program.comprobarPrimitivo(item.Type.ToLower())) { is_primitivo = false; if (!Program.sistema.existeObjeto(item.Type.ToLower())) { is_objeto = false; } else { is_primitivo = true; is_objeto = true; } } else { is_primitivo = true; is_objeto = true; } if (!is_primitivo && !is_objeto) { is_ok = false; //informar que no existe ese tipo de dato salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "El tipo " + item.Type + " no es primitivo, ni es parte de los objetos de la base de datos.")); } } } if (is_ok) { bool validacion_counter_and_PK = true; bool existe_algun_counter = false; List <Columna> columnas_aux = new List <Columna>(); //lista auxiliar para poder saber que llaves se van a modificar a primarias //si es compuesta entonces pasamos a convertir if (compuesta) { //comparar si todas las llaves compuestas existen en las columnas bool todas_existen = true; bool existe_llave = false; foreach (string item in llaves_compuestas) { existe_llave = false; foreach (Columna item2 in columnas) { if (item2.Name.ToLower().Equals(item.ToLower())) { existe_llave = true; } } if (existe_llave == false) { //reportar que no existe este id salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "La llave compuesta " + item + " no es parte de las columnas declaradas.")); todas_existen = false; } } if (todas_existen) { //ahora pasamos a verificar si existe algun counter en las columnas foreach (Columna item in columnas) { if (item.Type.ToLower().Equals("counter")) { existe_algun_counter = true; } } //si existe algun counter verificamos que este en la lista de llaves primarias if (existe_algun_counter) { //vamos a recorrer todas las llaves compuestas para verificar si son conter todas bool todas_counter = true; foreach (string item in llaves_compuestas) { //recorremos todas las columnas en busca si todas las llaves coinciden con counter foreach (Columna item2 in columnas) { //analizamos en nombre de la columna con el nombre de la llave compuesta if (item2.Name.Equals(item)) { //verificamos si es counter, si no, no tenemos match ejemplo counter, string if (!item2.isCounter()) { todas_counter = false; break; } } } if (!todas_counter) { break; } } if (todas_counter) { foreach (string item in llaves_compuestas) { //recorremos todas las columnas para asignar los tipos primary key foreach (Columna item2 in columnas) { //analizamos en nombre de la columna con el nombre de la llave compuesta if (item2.Name.Equals(item)) { item2.Pk = true; } } } columnas_aux = columnas; } else { salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "No todas las llaves primarias son counter.")); //error ya que no todas cumplen con ser counter al ser compuestas return(null); } }//si no existe algun counter entonces solo agregamos las filas else { foreach (string item in llaves_compuestas) { columnas_aux = new List <Columna>(); //recorremos todas las columnas para asignar los tipos primary key foreach (Columna item2 in columnas) { //analizamos en nombre de la columna con el nombre de la llave compuesta if (item2.Name.Equals(item)) { item2.Pk = true; } } } columnas_aux = columnas; } } else { //reportar que una, o mas llaves no existen return(null); } }//si no es compuesta, tenemos que ver los datos else { foreach (Columna item in columnas) { if (item.isCounter() && !item.isPK()) { validacion_counter_and_PK = false; //ejecutar error de que se encontro un counter y no es pk salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "La columna " + item.Name + " es counter y no primaria.")); break; } } if (validacion_counter_and_PK) { columnas_aux = columnas; } else { //ejecutar resolucion de errores return(null); } } Tabla tabla_aux = new Tabla { Name = id, Columnas = columnas_aux, Exportada = false }; if (Program.sistema.addTable(tabla_aux)) { //Mandamos mensaje que se creo la tabla con exito salida.Add(Program.buildMessage("Tabla " + id + " se creo con exito.")); } else { salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "BDDontExists:.")); //mandamos mensaje que no se pudo por que no hay ninguna base de datos en uso. return(null); } } } } } else { //no hay ninguna base de datos seleccionada. salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "UseBDException.")); } return(null); }
public void addPadre(TablaDeSimbolos ts) { this.padre = ts; }
public object Ejecutar(TablaDeSimbolos ts) { if (Program.sistema.En_uso()) { if (Program.sistema.existTable(id_tabla.ToLower())) { //si hay que agregar columnas if (add_column) { List <Columna> columnaux = columnas_agregar; int repetidos; bool no_hay_repetidos = true; foreach (Columna item in columnas_agregar) { repetidos = 0; foreach (Columna item2 in columnaux) { if (item.Name.Equals(item2.Name)) { repetidos++; if (repetidos <= 1) { //no hacemos nada } else { //mostrar error salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "La columna " + item.Name + " existe en el mismo contexto ")); no_hay_repetidos = false; } } } } if (no_hay_repetidos) { //verificamos si existen los tipos declarados //si son primitivos o objetos bool is_primitivo; bool is_objeto; bool is_ok = true; foreach (Columna item in columnas_agregar) { if (item.Collection) { if (item.Type.ToLower().Equals("set") || item.Type.ToLower().Equals("list")) { if (!Program.comprobarPrimitivo(item.Attr1.ToLower())) { is_primitivo = false; if (!Program.sistema.existeObjeto(item.Attr1.ToLower())) { is_objeto = false; } else { is_primitivo = true; is_objeto = true; } } else { is_primitivo = true; is_objeto = true; } if (!is_primitivo && !is_objeto) { is_ok = false; //informar que no existe ese tipo de dato salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "El tipo " + item.Attr1 + " no es primitivo, ni es parte de los objetos de la base de datos.")); } } else { if (!Program.comprobarPrimitivo(item.Attr1.ToLower())) { is_primitivo = false; if (!Program.sistema.existeObjeto(item.Attr1.ToLower())) { is_objeto = false; } else { is_primitivo = true; is_objeto = true; } } else { is_primitivo = true; is_objeto = true; } if (!is_primitivo && !is_objeto) { is_ok = false; //informar que no existe ese tipo de dato salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "El tipo " + item.Attr1 + " no es primitivo, ni es parte de los objetos de la base de datos.")); } if (!Program.comprobarPrimitivo(item.Attr2.ToLower())) { is_primitivo = false; if (!Program.sistema.existeObjeto(item.Attr2.ToLower())) { is_objeto = false; } else { is_primitivo = true; is_objeto = true; } } else { is_primitivo = true; is_objeto = true; } if (!is_primitivo && !is_objeto) { is_ok = false; //informar que no existe ese tipo de dato salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "El tipo " + item.Attr2 + " no es primitivo, ni es parte de los objetos de la base de datos.")); } } } else { if (!Program.comprobarPrimitivo(item.Type.ToLower())) { is_primitivo = false; if (!Program.sistema.existeObjeto(item.Type.ToLower())) { is_objeto = false; } else { is_primitivo = true; is_objeto = true; } } else { is_primitivo = true; is_objeto = true; } if (!is_primitivo && !is_objeto) { is_ok = false; salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "El tipo " + item.Type + " no es primitivo, ni es parte de los objetos de la base de datos.")); } } } //si existen los tipos pasar if (is_ok) { //verificamos si existe ya el nombre de la columna que quiere insertar is_ok = true; foreach (Columna item in columnas_agregar) { if (Program.sistema.existColumn(id_tabla.ToLower(), item.Name.ToLower())) { is_ok = false; //desplegar error salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", item.Name + "ColumnException.")); } } //si no existe pasamos if (is_ok) { //buscamos si en los datos existe algun counter is_ok = true; foreach (Columna item in columnas_agregar) { if (item.isCounter()) { is_ok = false; //desplegar error salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", item.Name + " CounterTypeException.")); } } //si no viene ninguno procedemos a insertar if (is_ok) { foreach (Columna item in columnas_agregar) { Program.sistema.addColumn(id_tabla.ToLower(), item); } salida.Add(Program.buildMessage("Tabla " + id_tabla + " modificada con exito; Total de cambios: " + columnas_agregar.Count + ".")); } else { //exist un tipo de counter y ya que no se puede } return(null); } else { //no ejecutar return(null); } } else { //no insertar return(null); } } else { return(null); } } else { bool is_ok = true; foreach (string item in columnas_eliminar) { if (!Program.sistema.existColumn(id_tabla, item.ToLower())) { //informar que no existe columna is_ok = false; salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", item + " ColumnException.")); } else { if (Program.sistema.isPk(id_tabla.ToLower(), item.ToLower())) { is_ok = false; salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", item + " CounterTypeException.")); } } } if (is_ok) { bool eliminado; foreach (string item in columnas_eliminar) { eliminado = Program.sistema.dropColumn(id_tabla.ToLower(), item.ToLower()); if (!eliminado) { //por alguna razon interna salida.Add(Program.buildMessage("Error interno del servidor.")); } } salida.Add(Program.buildMessage("Tabla " + id_tabla + " modificada con exito; Total de cambios: " + columnas_eliminar.Count + ".")); } return(null); } } else { //error por que no existe la tabla salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", id_tabla + " TableDontExists.")); return(null); } } else { //no hay ninguna base de datos seleccionada. salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "UseBDException.")); } return(null); }