예제 #1
0
        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);
        }
예제 #2
0
 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);
     }
 }
예제 #3
0
 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);
 }
예제 #4
0
 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);
 }
예제 #5
0
        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);
        }
예제 #6
0
 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");
     }
 }
예제 #7
0
 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);
     }
 }
예제 #8
0
 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);
     }
 }
예제 #9
0
 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);
 }
예제 #10
0
 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);
 }
예제 #11
0
 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);
 }
예제 #12
0
 public object Recolectar(TablaDeSimbolos ts)
 {
     return(null);
 }
예제 #13
0
        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);
        }
예제 #14
0
 public void addPadre(TablaDeSimbolos ts)
 {
     this.padre = ts;
 }
예제 #15
0
        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);
        }