コード例 #1
0
        public object ejecutar()
        {
            SintacticoCQL sintactio = new SintacticoCQL();

            string salida = sintactio.analizar(codigo, usuario).ToString();

            return(salida);
        }
コード例 #2
0
        /*
         * METODO QUE SE ENCARGARA DE VER EL TIPO DE OBJETO DE UNA TABLA
         * @param {atributos} lista de atributos del objeto
         * @param {mensajes} output
         * @return Table|Procedure|USER TYPE
         */
        private object tipoCQLTYPE(LinkedList <Atributo> atributos, LinkedList <string> mensajes)
        {
            int      l    = 0;
            int      c    = 0;
            Atributo resA = buscarAtributo(atributos, "cql-type");

            if (resA == null)
            {
                mensajes.AddLast("Se necesita un CQL-TYPE Linea: " + l + " Columna: " + c);
                return(null);
            }
            string cql_type = resA.valor.ToString();

            //--------------------------------------------- TABLAS ----------------------------------------------------------
            if (cql_type.Equals("table"))
            {
                resA = buscarAtributo(atributos, "name");
                if (resA == null)
                {
                    mensajes.AddLast("Se necesita un Nombre para la tabla Linea: " + l + " Columna: " + c);
                    return(null);
                }
                string name = resA.valor.ToString();

                resA = buscarAtributo(atributos, "columns");
                if (resA == null)
                {
                    mensajes.AddLast("Se necesitan Columnas para la tabla Linea: " + l + " Columna: " + c);
                    return(null);
                }
                LinkedList <Columna> columnas = (LinkedList <Columna>)resA.valor;

                resA = buscarAtributo(atributos, "data");
                if (resA == null)
                {
                    mensajes.AddLast("Se necesitan Data para la tabla Linea: " + l + " Columna: " + c);
                    return(null);
                }
                LinkedList <Data> data = (LinkedList <Data>)resA.valor;
                return(new Tabla(name, columnas, data));
            }

            // ----------------------------------------------- USER TYPES -----------------------------
            else if (cql_type.Equals("object"))
            {
                resA = buscarAtributo(atributos, "name");
                if (resA == null)
                {
                    mensajes.AddLast("Se necesita un Nombre para el User type Linea: " + l + " Columna: " + c);
                    return(null);
                }
                string name = resA.valor.ToString();

                resA = buscarAtributo(atributos, "attrs");
                if (resA == null)
                {
                    mensajes.AddLast("Se necesita un ATTRS para el User type Linea: " + l + " Columna: " + c);
                    return(null);
                }
                LinkedList <Attrs> attrs = (LinkedList <Attrs>)resA.valor;

                return(new User_Types(name, attrs));
            }

            //------------------------------------------------ PROCEDURE -------------------------------------------------
            else if (cql_type.Equals("procedure"))
            {
                resA = buscarAtributo(atributos, "name");
                if (resA == null)
                {
                    mensajes.AddLast("Se necesita un Nombre para el Procedure Linea: " + l + " Columna: " + c);
                    return(null);
                }
                string name = resA.valor.ToString();

                resA = buscarAtributo(atributos, "parameters");
                if (resA == null)
                {
                    mensajes.AddLast("Se necesita un Parameters para el PROCEDURE Linea: " + l + " Columna: " + c);
                    return(null);
                }
                LinkedList <listaParametros> parametros = new LinkedList <listaParametros>();
                LinkedList <listaParametros> retornos   = new LinkedList <listaParametros>();
                setearParemetrosINOUT(parametros, retornos, (LinkedList <Atributo>)resA.valor);

                resA = buscarAtributo(atributos, "instr");
                if (resA == null)
                {
                    mensajes.AddLast("Se necesita un Instr para el PROCEDURE Linea: " + l + " Columna: " + c);
                    return(null);
                }

                string codigo = resA.valor.ToString();

                SintacticoCQL sintactico        = new SintacticoCQL();
                object        respuestaAnalisis = sintactico.analizarProcedure(codigo, mensajes);
                if (respuestaAnalisis != null)
                {
                    return(new Procedures(name, codigo, getIdentificador(name, parametros), parametros, getIdentificador("", retornos), retornos, (LinkedList <InstruccionCQL>)respuestaAnalisis));
                }
                else
                {
                    mensajes.AddLast("Hubo un error en el analisis del INSR para el procedure: " + name);
                }
            }


            return(null);
        }