Beispiel #1
0
        /*
         * Constructor de la clase padre
         * @ts tabla de simbolos padre
         * @user usuario que esta ejecutando las acciones
         * @baseD string por referencia de que base de datos estamos trabajando
         * @mensajes el output de la ejecucion
         */
        public object ejecutar(TablaDeSimbolos ts, Ambito ambito, TablaDeSimbolos tsT)
        {
            Mensaje             mensa    = new Mensaje();
            string              baseD    = ambito.baseD;
            string              user     = ambito.usuario;
            LinkedList <string> mensajes = ambito.mensajes;
            BaseDeDatos         db       = TablaBaseDeDatos.getBase(baseD);
            Usuario             us       = TablaBaseDeDatos.getUsuario(user);

            if (db != null)
            {
                if (user.Equals("admin"))
                {
                    Tabla tabla = TablaBaseDeDatos.getTabla(db, id);
                    if (tabla != null)
                    {
                        object res;
                        if (operacion.Equals("NORMAL"))
                        {
                            res = guardarNormal(tabla, ts, db, ambito, tsT);
                        }
                        else
                        {
                            res = guardadoEspecial(tabla, ts, db, ambito, tsT);
                        }
                        if (res != null)
                        {
                            return(res);
                        }
                    }
                    else
                    {
                        ambito.listadoExcepciones.AddLast(new Excepcion("tabledontexists", "La tabla: " + id + " no existe en la DB: " + ambito.baseD));
                        ambito.mensajes.AddLast(mensa.error("La tabla: " + id + " no existe en la DB: " + ambito.baseD, l, c, "Semantico"));
                    }
                }
                else
                {
                    if (us != null)
                    {
                        Boolean permiso = TablaBaseDeDatos.getPermiso(us, baseD);
                        if (permiso)
                        {
                            Boolean enUso = TablaBaseDeDatos.getEnUso(baseD, user);
                            if (!enUso)
                            {
                                Tabla tabla = TablaBaseDeDatos.getTabla(db, id);
                                if (tabla != null)
                                {
                                    object res;
                                    if (operacion.Equals("NORMAL"))
                                    {
                                        res = guardarNormal(tabla, ts, db, ambito, tsT);
                                    }
                                    else
                                    {
                                        res = guardadoEspecial(tabla, ts, db, ambito, tsT);
                                    }
                                    if (res != null)
                                    {
                                        return(res);
                                    }
                                }
                                else
                                {
                                    ambito.listadoExcepciones.AddLast(new Excepcion("tabledontexists", "La tabla: " + id + " no existe en la DB: " + ambito.baseD));
                                    ambito.mensajes.AddLast(mensa.error("La tabla: " + id + " no existe en la DB: " + ambito.baseD, l, c, "Semantico"));
                                }
                            }
                            else
                            {
                                mensajes.AddLast(mensa.error("La DB: " + baseD + " ya esta siendo utilizada por alguien mas", l, c, "Semantico"));
                            }
                        }
                        else
                        {
                            mensajes.AddLast(mensa.error("El usuario " + user + " no tiene permisos sobre esta base de datos", l, c, "Semantico"));
                        }
                    }
                    else
                    {
                        mensajes.AddLast(mensa.error("El usuario " + user + " no existe", l, c, "Semantico"));
                    }
                }
            }
            else
            {
                ambito.listadoExcepciones.AddLast(new Excepcion("usedbexception", "No existe la base de datos: " + ambito.baseD + " o no se ha usado el comando use"));

                ambito.mensajes.AddLast(mensa.error("La base de datos ha usar: " + ambito.baseD + " no existe", l, c, "Semantico"));
            }
            return(null);
        }
Beispiel #2
0
        /*
         * Constructor de la clase padre
         * @ts tabla de simbolos padre
         * @user usuario que esta ejecutando las acciones
         * @baseD string por referencia de que base de datos estamos trabajando
         * @mensajes el output de la ejecucion
         */
        public object ejecutar(TablaDeSimbolos ts, Ambito ambito, TablaDeSimbolos tsT)
        {
            Mensaje             mensa    = new Mensaje();
            string              user     = ambito.usuario;
            string              baseD    = ambito.baseD;
            LinkedList <string> mensajes = ambito.mensajes;
            BaseDeDatos         db       = TablaBaseDeDatos.getBase(baseD);
            Usuario             us       = TablaBaseDeDatos.getUsuario(user);

            if (db != null)
            {
                if (user.Equals("admin"))
                {
                    Tabla tabla = TablaBaseDeDatos.getTabla(db, id);
                    if (tabla != null)
                    {
                        LinkedList <Columna> cabecera = new LinkedList <Columna>();
                        if (campos == null)
                        {
                            cabecera = new LinkedList <Columna>(cabecera.Union(tabla.columnas));
                        }
                        else
                        {
                            cabecera = getColumnas(tabla, ts, ambito);
                        }
                        if (cabecera != null)
                        {
                            LinkedList <Data> datos = new LinkedList <Data>();
                            if (campos == null)
                            {
                                datos = getAllData(tabla, ts, ambito, cabecera);
                            }
                            else
                            {
                                datos = getData(tabla, ts, ambito, cabecera);
                            }
                            if (datos != null)
                            {
                                TablaSelect tablaSelect = new TablaSelect(cabecera, datos);
                                System.Diagnostics.Debug.WriteLine(operacion);
                                if (operacion.Equals("none"))
                                {
                                }
                                else
                                {
                                    if (operacion.Contains("b"))
                                    {
                                        if (checkOrder(tablaSelect.columnas, mensajes))
                                        {
                                            LinkedList <int> pos = posicionesColumnas(tablaSelect.columnas);
                                            try
                                            {
                                                if (pos.Count() > 0)
                                                {
                                                    tablaSelect.datos = new LinkedList <Data>(sort(tablaSelect.datos, pos, 0));
                                                }
                                            }
                                            catch (Exception)
                                            {
                                                mensajes.AddLast(mensa.error("Esta intentando ordenar por un dato no primitivo", l, c, "Semantico"));
                                            }
                                        }
                                        else
                                        {
                                            return(null);
                                        }
                                    }
                                    if (operacion.Contains("c"))
                                    {
                                        tablaSelect.datos = limitar(tablaSelect.datos, ts, ambito, tsT);
                                        if (datos == null)
                                        {
                                            return(null);
                                        }
                                    }
                                }



                                mensajes.AddLast(mensa.consulta(tablaSelect));
                                return(tablaSelect);
                            }
                        }
                    }
                    else
                    {
                        ambito.listadoExcepciones.AddLast(new Excepcion("tabledontexists", "La tabla: " + id + " no existe en la DB: " + ambito.baseD));
                        ambito.mensajes.AddLast(mensa.error("La tabla: " + id + " no existe en la DB: " + ambito.baseD, l, c, "Semantico"));
                    }
                }
                else
                {
                    if (us != null)
                    {
                        Boolean permiso = TablaBaseDeDatos.getPermiso(us, baseD);
                        if (permiso)
                        {
                            Boolean enUso = TablaBaseDeDatos.getEnUso(baseD, user);
                            if (!enUso)
                            {
                                Tabla tabla = TablaBaseDeDatos.getTabla(db, id);
                                if (tabla != null)
                                {
                                    LinkedList <Columna> cabecera = new LinkedList <Columna>();
                                    if (campos == null)
                                    {
                                        cabecera = new LinkedList <Columna>(cabecera.Union(tabla.columnas));
                                    }
                                    else
                                    {
                                        cabecera = getColumnas(tabla, ts, ambito);
                                    }
                                    if (cabecera != null)
                                    {
                                        LinkedList <Data> datos = new LinkedList <Data>();
                                        if (campos == null)
                                        {
                                            datos = getAllData(tabla, ts, ambito, cabecera);
                                        }
                                        else
                                        {
                                            datos = getData(tabla, ts, ambito, cabecera);
                                        }
                                        if (datos != null)
                                        {
                                            TablaSelect tablaSelect = new TablaSelect(cabecera, datos);
                                            System.Diagnostics.Debug.WriteLine(operacion);
                                            if (operacion.Equals("none"))
                                            {
                                            }
                                            else
                                            {
                                                if (operacion.Contains("b"))
                                                {
                                                    if (checkOrder(tablaSelect.columnas, mensajes))
                                                    {
                                                        LinkedList <int> pos = posicionesColumnas(tablaSelect.columnas);
                                                        try
                                                        {
                                                            if (pos.Count() > 0)
                                                            {
                                                                tablaSelect.datos = new LinkedList <Data>(sort(tablaSelect.datos, pos, 0));
                                                            }
                                                        }
                                                        catch (Exception)
                                                        {
                                                            mensajes.AddLast(mensa.error("Esta intentando ordenar por un dato no primitivo", l, c, "Semantico"));
                                                        }
                                                    }
                                                    else
                                                    {
                                                        return(null);
                                                    }
                                                }
                                                if (operacion.Contains("c"))
                                                {
                                                    tablaSelect.datos = limitar(tablaSelect.datos, ts, ambito, tsT);
                                                    if (datos == null)
                                                    {
                                                        return(null);
                                                    }
                                                }
                                            }



                                            mensajes.AddLast(mensa.consulta(tablaSelect));
                                            return(tablaSelect);
                                        }
                                    }
                                }
                                else
                                {
                                    ambito.listadoExcepciones.AddLast(new Excepcion("tabledontexists", "La tabla: " + id + " no existe en la DB: " + ambito.baseD));
                                    ambito.mensajes.AddLast(mensa.error("La tabla: " + id + " no existe en la DB: " + ambito.baseD, l, c, "Semantico"));
                                }
                            }
                            else
                            {
                                mensajes.AddLast(mensa.error("La DB: " + baseD + " ya esta siendo utilizada por alguien mas", l, c, "Semantico"));
                            }
                        }
                        else
                        {
                            mensajes.AddLast(mensa.error("El usuario " + user + " no tiene permisos sobre esta base de datos", l, c, "Semantico"));
                        }
                    }
                    else
                    {
                        mensajes.AddLast(mensa.error("El usuario " + user + " no existe", l, c, "Semantico"));
                    }
                }
            }
            else
            {
                ambito.listadoExcepciones.AddLast(new Excepcion("usedbexception", "No existe la base de datos: " + ambito.baseD + " o no se ha usado el comando use"));

                ambito.mensajes.AddLast(mensa.error("La base de datos ha usar: " + ambito.baseD + " no existe", l, c, "Semantico"));
            }
            return(null);
        }
Beispiel #3
0
        /*
         * Constructor de la clase padre
         * @ts tabla de simbolos padre
         * @user usuario que esta ejecutando las acciones
         * @baseD string por referencia de que base de datos estamos trabajando
         * @mensajes el output de la ejecucion
         */
        public object ejecutar(TablaDeSimbolos ts, Ambito ambito, TablaDeSimbolos tsT)
        {
            Mensaje             mensa    = new Mensaje();
            string              user     = ambito.usuario;
            string              baseD    = ambito.baseD;
            LinkedList <string> mensajes = ambito.mensajes;
            BaseDeDatos         db       = TablaBaseDeDatos.getBase(baseD);

            if (db != null)
            {
                if (user.Equals("admin"))
                {
                    Tabla tabla = TablaBaseDeDatos.getTabla(db, id);
                    if (tabla != null)
                    {
                        db.objetos.tablas.Remove(tabla);
                        mensajes.AddLast(mensa.message("La tabla: " + id + " fue eliminada con exito"));
                        return("");
                    }
                    else
                    {
                        ambito.listadoExcepciones.AddLast(new Excepcion("tabledontexists", "La tabla: " + id + " no existe en la DB: " + ambito.baseD));
                        ambito.mensajes.AddLast(mensa.error("La tabla: " + id + " no existe en la DB: " + ambito.baseD, l, c, "Semantico"));
                    }
                }
                else
                {
                    Usuario usuario = TablaBaseDeDatos.getUsuario(user);
                    if (usuario != null)
                    {
                        Boolean permiso = TablaBaseDeDatos.getPermiso(usuario, baseD);
                        if (permiso)
                        {
                            Boolean enUso = TablaBaseDeDatos.getEnUso(baseD, user);
                            if (!enUso)
                            {
                                Tabla tabla = TablaBaseDeDatos.getTabla(db, id);
                                if (tabla != null)
                                {
                                    db.objetos.tablas.Remove(tabla);
                                    mensajes.AddLast(mensa.message("La tabla: " + id + " fue eliminada con exito"));
                                    return("");
                                }
                                else
                                {
                                    ambito.listadoExcepciones.AddLast(new Excepcion("tabledontexists", "La tabla: " + id + " no existe en la DB: " + ambito.baseD));
                                    ambito.mensajes.AddLast(mensa.error("La tabla: " + id + " no existe en la DB: " + ambito.baseD, l, c, "Semantico"));
                                }
                            }
                            else
                            {
                                mensajes.AddLast(mensa.error("La DB: " + baseD + " esta siendo utilizada por otro usuario", l, c, "Semantico"));
                            }
                        }
                        else
                        {
                            mensajes.AddLast(mensa.error("El usuario " + user + " no tiene permisos en la DB: " + baseD, l, c, "Semantico"));
                        }
                    }
                    else
                    {
                        mensajes.AddLast(mensa.error("No existe el usuario: " + user, l, c, "Semantico"));
                    }
                }
            }
            else
            {
                ambito.listadoExcepciones.AddLast(new Excepcion("usedbexception", "No existe la base de datos: " + ambito.baseD + " o no se ha usado el comando use"));

                ambito.mensajes.AddLast(mensa.error("La base de datos ha usar: " + ambito.baseD + " no existe", l, c, "Semantico"));
            }


            return(null);
        }
Beispiel #4
0
        /*
         * Metodo de la implementacion
         * @ts tabla de simbolos global
         * @user usuario que ejecuta la accion
         * @baseD base de datos donde estamos ejecutando todo
         * @mensajes linkedlist con la salida deseada
         */
        public object ejecutar(TablaDeSimbolos ts, Ambito ambito, TablaDeSimbolos tsT)
        {
            Mensaje     mensa   = new Mensaje();
            BaseDeDatos db      = TablaBaseDeDatos.getBase(ambito.baseD);
            Usuario     usuario = TablaBaseDeDatos.getUsuario(ambito.usuario);

            if (db != null)
            {
                if (ambito.usuario.Equals("admin"))
                {
                    //------------------------------------  SOLO HAY UNA PRIMARIA ------------------------------------------------------------
                    if (primarias == null)
                    {
                        if (!(cantidadDePrimarias(lista) > 1))
                        {
                            if (!columnasRepetidas(lista, lista, ambito.mensajes))
                            {
                                Tabla old = TablaBaseDeDatos.getTabla(db, nombre);
                                if (old == null)
                                {
                                    if (searchTipo(lista, ambito.mensajes, db))
                                    {
                                        Tabla nueva = new Tabla(nombre, lista, new LinkedList <Data>());
                                        db.objetos.tablas.AddLast(nueva);
                                        ambito.mensajes.AddLast(mensa.message("Se creo exitosamente la tabla: " + nombre));
                                        return("");
                                    }
                                }
                                else
                                {
                                    if (flag)
                                    {
                                        return("");
                                    }
                                    ambito.listadoExcepciones.AddLast(new Excepcion("tablealreadyexists", "La tabla: " + nombre + " ya existe en la DB: " + ambito.baseD));
                                    ambito.mensajes.AddLast(mensa.error("La tabla: " + nombre + " ya existe en la DB: " + ambito.baseD, l, c, "Semantico"));
                                    return(null);
                                }
                            }
                        }
                        else
                        {
                            ambito.mensajes.AddLast(mensa.error("La tabla: " + nombre + " solo puede tener una clave primaria o use llaves compuestas", l, c, "Semantico"));
                        }
                    }
                    //-------------------------------------- LLAVE PRIMARIA COMPUESTA -------------------------------------------------------
                    else
                    {
                        if (!(cantidadDePrimarias(lista) > 0))
                        {
                            if (!(columnasRepetidas(lista, lista, ambito.mensajes)))
                            {
                                if (!hayCounter(primarias, lista, ambito.mensajes))
                                {
                                    if (existenColumnas(primarias, lista, ambito.mensajes))
                                    {
                                        Tabla temp = TablaBaseDeDatos.getTabla(db, nombre);
                                        if (temp == null)
                                        {
                                            if (searchTipo(lista, ambito.mensajes, db))
                                            {
                                                temp = new Tabla(nombre, lista, new LinkedList <Data>());
                                                db.objetos.tablas.AddLast(temp);
                                                ambito.mensajes.AddLast(mensa.message("Se creo exitosamente la tabla: " + nombre));
                                                return("");
                                            }
                                        }
                                        else
                                        {
                                            if (flag)
                                            {
                                                return("");
                                            }
                                            ambito.mensajes.AddLast(mensa.error("La tabla: " + nombre + " ya existe en la DB: " + ambito.baseD, l, c, "Semantico"));
                                        }
                                    }
                                }
                            }
                        }
                        else
                        {
                            ambito.mensajes.AddLast(mensa.error("La tabla: " + nombre + " solo puede tener primarias compuestas", l, c, "Semantico"));
                        }
                    }
                }
                else
                {
                    if (usuario != null)
                    {
                        Boolean permiso = TablaBaseDeDatos.getPermiso(usuario, ambito.baseD);
                        if (permiso)
                        {
                            Boolean enUso = TablaBaseDeDatos.getEnUso(ambito.baseD, ambito.usuario);
                            if (!enUso)
                            {
                                //------------------------------------  SOLO HAY UNA PRIMARIA ------------------------------------------------------------
                                if (primarias == null)
                                {
                                    if (!(cantidadDePrimarias(lista) > 1))
                                    {
                                        if (!columnasRepetidas(lista, lista, ambito.mensajes))
                                        {
                                            Tabla old = TablaBaseDeDatos.getTabla(db, nombre);
                                            if (old == null)
                                            {
                                                if (searchTipo(lista, ambito.mensajes, db))
                                                {
                                                    Tabla nueva = new Tabla(nombre, lista, new LinkedList <Data>());
                                                    db.objetos.tablas.AddLast(nueva);
                                                    ambito.mensajes.AddLast(mensa.message("Se creo exitosamente la tabla: " + nombre));
                                                    return("");
                                                }
                                            }
                                            else
                                            {
                                                if (flag)
                                                {
                                                    return("");
                                                }
                                                ambito.listadoExcepciones.AddLast(new Excepcion("tablealreadyexists", "La tabla: " + nombre + " ya existe en la DB: " + ambito.baseD));
                                                ambito.mensajes.AddLast(mensa.error("La tabla: " + nombre + " ya existe en la DB: " + ambito.baseD, l, c, "Semantico"));
                                                return(null);
                                            }
                                        }
                                    }
                                    else
                                    {
                                        ambito.mensajes.AddLast(mensa.error("La tabla: " + nombre + " solo puede tener una clave primaria o use llaves compuestas", l, c, "Semantico"));
                                    }
                                }
                                //-------------------------------------- LLAVE PRIMARIA COMPUESTA -------------------------------------------------------
                                else
                                {
                                    if (!(cantidadDePrimarias(lista) > 0))
                                    {
                                        if (!(columnasRepetidas(lista, lista, ambito.mensajes)))
                                        {
                                            if (!hayCounter(primarias, lista, ambito.mensajes))
                                            {
                                                if (existenColumnas(primarias, lista, ambito.mensajes))
                                                {
                                                    Tabla temp = TablaBaseDeDatos.getTabla(db, nombre);
                                                    if (temp == null)
                                                    {
                                                        if (searchTipo(lista, ambito.mensajes, db))
                                                        {
                                                            temp = new Tabla(nombre, lista, new LinkedList <Data>());
                                                            db.objetos.tablas.AddLast(temp);
                                                            ambito.mensajes.AddLast(mensa.message("Se creo exitosamente la tabla: " + nombre));
                                                            return("");
                                                        }
                                                    }
                                                    else
                                                    {
                                                        if (flag)
                                                        {
                                                            return("");
                                                        }
                                                        ambito.mensajes.AddLast(mensa.error("La tabla: " + nombre + " ya existe en la DB: " + ambito.baseD, l, c, "Semantico"));
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    else
                                    {
                                        ambito.mensajes.AddLast(mensa.error("La tabla: " + nombre + " solo puede tener primarias compuestas", l, c, "Semantico"));
                                    }
                                }
                            }
                            else
                            {
                                ambito.mensajes.AddLast(mensa.error("La base de datos: " + ambito.baseD + "esta siendo usada por otro usuario", l, c, "Semantico"));
                            }
                        }
                        else
                        {
                            ambito.mensajes.AddLast(mensa.error("El usuario:  " + ambito.usuario + " no tiene permisos en la base de datos: " + ambito.baseD, l, c, "Semantico"));
                        }
                    }
                    else
                    {
                        ambito.mensajes.AddLast(mensa.error("No existe el usuario: " + ambito.usuario, l, c, "Semantico"));
                    }
                }
            }
            else
            {
                ambito.listadoExcepciones.AddLast(new Excepcion("usedbexception", "No existe la base de datos: " + ambito.baseD + " o no se ha usado el comando use"));

                ambito.mensajes.AddLast(mensa.error("No se encuentra la base de datos: " + ambito.baseD + " o no se ha usado el comando USE", l, c, "Semantico"));
            }
            return(null);
        }