Пример #1
0
        public TabelaSelect returnTudo()
        {
            br.BaseStream.Position = 0;
            int        count;
            TabelaDado td   = new TabelaDado(nome);
            Metadados  meta = GerenciadorMemoria.getInstance().recuperarMetadados(nome);

            while (br.BaseStream.Position != br.BaseStream.Length)
            {
                RegistroTabela r = new RegistroTabela(br.ReadInt64());
                count = br.ReadInt32();
                //Form1.addMensagem("Count colunas" + count); // somente para depuração

                try
                {
                    for (int i = 0; i < count; i++)
                    {
                        DadoTabela d;
                        if (meta.getDados()[meta.getNomesColunas()[i]].getTipoDado() == TipoDado.Inteiro)
                        {
                            //Form1.addMensagem("Inteiro"); // somente para depuração
                            d = new DadoTabela(meta.getNomesColunas()[i], meta.getDados()[meta.getNomesColunas()[i]].getTipoDado(), br.ReadByte(), br.ReadBoolean(), br.ReadInt32());
                        }
                        else
                        {
                            //Form1.addMensagem("Char"); // somente para depuração
                            d = new DadoTabela(meta.getNomesColunas()[i], meta.getDados()[meta.getNomesColunas()[i]].getTipoDado(), br.ReadByte(), br.ReadBoolean(), br.ReadString());
                        }

                        r.dados.Add(d);
                    }
                }
                catch (System.Exception e)
                {
                    Form1.addMensagem(e.Message);
                }

                td.registros.Add(r);
            }

            return(TabelaSelect.getTabelaSelect(td));
        }
Пример #2
0
        private void execucaoComandoReal()
        {
            string id;
            if (operacao != acao.InserirDados && anterior == acao.InserirDados)
            {
                //Base.getInstance().naoEhInsert();
                memoria.salvarMetadados();
            }
            switch (operacao)
            {
                case acao.Nada:
                    //throw new SGDBException("Que ação é essa? Favor incluir um comando válido.");
                    break;
                case acao.CriarTabela:
                    metadados.criarIndiciePrimary();
                    memoria.salvarMetadados(metadados);
                    memoria.recuperarMetadados();
                    break;

                case acao.InserirDados:

                    id = identificadores[0];
                    identificadores.RemoveAt(0);
                    RegistroTabela registro = new RegistroTabela(-1);
                    metadados = memoria.recuperarMetadados(id);

                    if (allColunas)
                    {
                        DadoTabela DadoTabela;
                        for (int i = 0; i < identificadores.Count; i++)
                        {
                            if (identificadores[i].Equals("null"))
                            {
                                DadoTabela = new DadoTabela(metadados.getNomesColunas()[i], metadados.getTipoDado(i), (byte)metadados.getDados()[metadados.getNomesColunas()[i]].getTamanho(), false, identificadores[i].Replace("\'", ""));
                            }
                            else
                            {
                                DadoTabela = new DadoTabela(metadados.getNomesColunas()[i], metadados.getTipoDado(i), (byte)metadados.getDados()[metadados.getNomesColunas()[i]].getTamanho(), true, identificadores[i].Replace("\'", ""));
                            }

                            registro.dados.Add(DadoTabela);
                        }
                    }
                    else
                    {
                        DadoTabela dado = null;
                        bool nacho = true;
                        for (int i = 0; i < metadados.getNomesColunas().Count; i++)
                        {
                            nacho = true;
                            for (int j = 0; j < contColunas && nacho; j++)
                            {
                                if (metadados.getNomesColunas()[i].Equals(identificadores[j]))
                                {
                                    if (identificadores[j + contColunas].Equals("null"))
                                    {
                                        dado = new DadoTabela(metadados.getNomesColunas()[i], metadados.getTipoDado(i), (byte)metadados.getDados()[metadados.getNomesColunas()[i]].getTamanho(), false, identificadores[j + contColunas].Replace("\'", ""));
                                    }
                                    else
                                    {
                                        dado = new DadoTabela(metadados.getNomesColunas()[i], metadados.getTipoDado(i), (byte)metadados.getDados()[metadados.getNomesColunas()[i]].getTamanho(), true, identificadores[j + contColunas].Replace("\'", ""));
                                    }
                                    nacho = false;
                                }
                            }
                            if (nacho)
                            {
                                dado = new DadoTabela(metadados.getNomesColunas()[i], metadados.getTipoDado(i), (byte)metadados.getDados()[metadados.getNomesColunas()[i]].getTamanho(), false, "null");
                            }

                            registro.dados.Add(dado);
                        }

                    }
                   // Console.WriteLine("TO STRING DA TABELA");

                    /*TabelaDado tabelaDado = new TabelaDado(id, memoria.getPath());
                    tabelaDado.Registros.Add(RegistroTabela);*/
                    // Form1.addMensagem(tabelaDado.ToString());

                    //arquivoBinario = new ArquivoTabela(memoria.getPath()+"\\"+metadados.getNome()+".dat");
                    //long posi = arquivoBinario.insert(registro);
                    Base.getInstance().insert(metadados.getNome(), registro);

                    metadados.incRegistrosTabela();
                    //metadados.addIndice(registro, posi, memoria.getPath());
                    //memoria.salvarMetadados(metadados);
                    memoria.atualizar();

                    break;
                case acao.Select:
                    Form1.addMensagem(select.ToString());
                    Form1.setResultado(select.run(),select.Retorno);
                    select.clear();
                    break;
                case acao.CriarIndex:
                    id = identificadores[0];
                    identificadores.RemoveAt(0);
                    foreach (string item in identificadores)
                    {
                        if (!metadados.getDados().ContainsKey(item))
                        {
                            new SemanticError("A coluna " + item + "não existe na tabela " + metadados.getNome());
                        }
                    }
                    metadados.criarIndice(id,identificadores.ToArray());
                    memoria.salvarMetadados(metadados);
                    memoria.atualizar();
                    break;

                case acao.ExcluirIndex:
                    memoria.dropIndex(identificadores[0]);
                    memoria.salvarMetadados();
                    memoria.atualizar();
                    break;
                default:
                    throw new SGDBException("Ação Real" + operacao + " não implementada.");
            }
            anterior = operacao;
            //Console.WriteLine(metadados.StringIndices());
        }
Пример #3
0
        public TabelaSelect returnTudo()
        {
            br.BaseStream.Position = 0;
            int count;
            TabelaDado td = new TabelaDado(nome);
            Metadados meta = GerenciadorMemoria.getInstance().recuperarMetadados(nome);
            while (br.BaseStream.Position != br.BaseStream.Length)
            {
                RegistroTabela r = new RegistroTabela(br.ReadInt64());
                count = br.ReadInt32();
                //Form1.addMensagem("Count colunas" + count); // somente para depuração

                try
                {
                    for (int i = 0; i < count; i++)
                    {
                        DadoTabela d;
                        if (meta.getDados()[meta.getNomesColunas()[i]].getTipoDado() == TipoDado.Inteiro)
                        {
                            //Form1.addMensagem("Inteiro"); // somente para depuração
                            d = new DadoTabela(meta.getNomesColunas()[i], meta.getDados()[meta.getNomesColunas()[i]].getTipoDado(), br.ReadByte(), br.ReadBoolean(), br.ReadInt32());
                        }
                        else
                        {
                            //Form1.addMensagem("Char"); // somente para depuração
                            d = new DadoTabela(meta.getNomesColunas()[i], meta.getDados()[meta.getNomesColunas()[i]].getTipoDado(), br.ReadByte(), br.ReadBoolean(), br.ReadString());
                        }

                        r.dados.Add(d);
                    }
                }
                catch (System.Exception e)
                {
                    Form1.addMensagem(e.Message);
                }

                td.registros.Add(r);
            }

            return TabelaSelect.getTabelaSelect(td);
        }
Пример #4
0
        public TabelaSelect returnFiltrado(Dictionary<string, Filtro> filtrosAND)
        {
            br.BaseStream.Position = 0;
            int count;
            int tamRegistro = 12;
            Metadados meta = GerenciadorMemoria.getInstance().recuperarMetadados(nome);
            TabelaDado td = new TabelaDado(nome);

            foreach (DadosTabela dados in meta.getDados().Values)
            {
                tamRegistro += dados.getTamanho() + 2;
                //if (dados.getTipoDado() == TipoDado.String) tamRegistro++;
            }

            //lê cada registro
            while (br.BaseStream.Position != br.BaseStream.Length)
            {
                RegistroTabela r = new RegistroTabela(br.BaseStream.Position);
                count = br.ReadInt32();
                bool insere = true;
                //Lê cada dado dentro do registro
                for (int i = 0; i < count && insere; i++)
                {
                    DadoTabela d;
                    //Form1.addMensagem(i.ToString());

                    // *** erro aqui - inicio ***
                    // select localidade.* from localidade where localidade.cd_localidade = 1;
                    // da erro qdo i = 4
                    // mas quem deve limitar para nao chegar no 4 ?

                    string nomeColuna = meta.getNomesColunas()[i];
                    // *** erro aqui - Fim ***

                    TipoDado tipo = meta.getDados()[nomeColuna].getTipoDado();
                    string campo = meta.getNome() + "." + nomeColuna;
                    Filtro f = filtrosAND.ContainsKey(campo) ? filtrosAND[campo] : null;
                    if (tipo == TipoDado.Inteiro)
                    {
                        d = new DadoTabela(nomeColuna, tipo, br.ReadByte(), br.ReadBoolean(), br.ReadInt32());
                        if (f != null)
                        {
                            switch (f.Op)
                            {
                                case OperadorRel.Igual:
                                    if (f.RValue.ToLower().Equals("null"))
                                    {
                                        if (d.isValido) insere = false;
                                    }
                                    else
                                    {
                                        if (d.getValorInt() != Convert.ToInt32(f.RValue)) insere = false;
                                    }
                                    break;
                                case OperadorRel.MaiorQue:
                                    if (d.getValorInt() <= Convert.ToInt32(f.RValue)) insere = false;
                                    break;
                                case OperadorRel.MenorQue:
                                    if (d.getValorInt() >= Convert.ToInt32(f.RValue)) insere = false;
                                    break;
                                case OperadorRel.MaiorIgualA:
                                    if (d.getValorInt() < Convert.ToInt32(f.RValue)) insere = false;
                                    break;
                                case OperadorRel.MenorIgualA:
                                    if (d.getValorInt() > Convert.ToInt32(f.RValue)) insere = false;
                                    break;
                                case OperadorRel.Diferente:
                                    if (f.RValue.ToLower().Equals("null"))
                                    {
                                        if (!d.isValido) insere = false;
                                    }
                                    else
                                    {
                                        if (d.getValorInt() == Convert.ToInt32(f.RValue)) insere = false;
                                    }
                                    break;
                                default:
                                    throw new SGDBException("Passou onde nao devia: GambiarraSelect.retornaDados.Inteiro.Default.");
                            }
                        }
                    }
                    else
                    {
                        byte tamanho = br.ReadByte();
                        bool isValido = br.ReadBoolean();
                        byte[] valor = br.ReadBytes(tamanho);
                        string texto = new System.Text.ASCIIEncoding().GetString(valor);
                        d = new DadoTabela(nomeColuna, tipo, tamanho, isValido, texto);
                        if (f != null)
                        {
                            switch (f.Op)
                            {
                                case OperadorRel.Igual:
                                    if (f.RValue.ToLower().Equals("null"))
                                    {
                                        if (d.isValido) insere = false;
                                    }
                                    else
                                    {
                                        byte[] filtro = new byte[d.tamanho];
                                        new System.Text.ASCIIEncoding().GetBytes(f.RValue.PadRight(d.tamanho)).CopyTo(filtro, 0);
                                        string filtro2 = new System.Text.ASCIIEncoding().GetString(filtro);
                                        if (!texto.Equals(filtro2)) insere = false;
                                    }
                                    break;
                                case OperadorRel.Diferente:
                                    if (f.RValue.ToLower().Equals("null"))
                                    {
                                        if (!d.isValido) insere = false;
                                    }
                                    else
                                    {
                                        byte[] filtro = new byte[d.tamanho];
                                        new System.Text.ASCIIEncoding().GetBytes(f.RValue.PadRight(d.tamanho)).CopyTo(filtro, 0);
                                        string filtro2 = new System.Text.ASCIIEncoding().GetString(filtro);
                                        if (texto.Equals(filtro2)) insere = false;
                                    }
                                    break;
                                default:
                                    throw new SemanticError("Comparação de literais só pode ser igual ou diferente");
                            }
                        }
                    }

                    r.dados.Add(d);
                }

                if (insere)
                {
                    td.registros.Add(r);
                }

                if (br.BaseStream.Position % tamRegistro != 0)
                    br.BaseStream.Position += tamRegistro - (br.BaseStream.Position % tamRegistro);
            }

            return TabelaSelect.getTabelaSelect(td);
        }
Пример #5
0
        public TabelaSelect returnFiltrado(Dictionary <string, Filtro> filtrosAND)
        {
            br.BaseStream.Position = 0;
            int        count;
            int        tamRegistro = 12;
            Metadados  meta        = GerenciadorMemoria.getInstance().recuperarMetadados(nome);
            TabelaDado td          = new TabelaDado(nome);

            foreach (DadosTabela dados in meta.getDados().Values)
            {
                tamRegistro += dados.getTamanho() + 2;
                //if (dados.getTipoDado() == TipoDado.String) tamRegistro++;
            }

            //lê cada registro
            while (br.BaseStream.Position != br.BaseStream.Length)
            {
                RegistroTabela r = new RegistroTabela(br.BaseStream.Position);
                count = br.ReadInt32();
                bool insere = true;
                //Lê cada dado dentro do registro
                for (int i = 0; i < count && insere; i++)
                {
                    DadoTabela d;
                    //Form1.addMensagem(i.ToString());

                    // *** erro aqui - inicio ***
                    // select localidade.* from localidade where localidade.cd_localidade = 1;
                    // da erro qdo i = 4
                    // mas quem deve limitar para nao chegar no 4 ?

                    string nomeColuna = meta.getNomesColunas()[i];
                    // *** erro aqui - Fim ***

                    TipoDado tipo  = meta.getDados()[nomeColuna].getTipoDado();
                    string   campo = meta.getNome() + "." + nomeColuna;
                    Filtro   f     = filtrosAND.ContainsKey(campo) ? filtrosAND[campo] : null;
                    if (tipo == TipoDado.Inteiro)
                    {
                        d = new DadoTabela(nomeColuna, tipo, br.ReadByte(), br.ReadBoolean(), br.ReadInt32());
                        if (f != null)
                        {
                            switch (f.Op)
                            {
                            case OperadorRel.Igual:
                                if (f.RValue.ToLower().Equals("null"))
                                {
                                    if (d.isValido)
                                    {
                                        insere = false;
                                    }
                                }
                                else
                                {
                                    if (d.getValorInt() != Convert.ToInt32(f.RValue))
                                    {
                                        insere = false;
                                    }
                                }
                                break;

                            case OperadorRel.MaiorQue:
                                if (d.getValorInt() <= Convert.ToInt32(f.RValue))
                                {
                                    insere = false;
                                }
                                break;

                            case OperadorRel.MenorQue:
                                if (d.getValorInt() >= Convert.ToInt32(f.RValue))
                                {
                                    insere = false;
                                }
                                break;

                            case OperadorRel.MaiorIgualA:
                                if (d.getValorInt() < Convert.ToInt32(f.RValue))
                                {
                                    insere = false;
                                }
                                break;

                            case OperadorRel.MenorIgualA:
                                if (d.getValorInt() > Convert.ToInt32(f.RValue))
                                {
                                    insere = false;
                                }
                                break;

                            case OperadorRel.Diferente:
                                if (f.RValue.ToLower().Equals("null"))
                                {
                                    if (!d.isValido)
                                    {
                                        insere = false;
                                    }
                                }
                                else
                                {
                                    if (d.getValorInt() == Convert.ToInt32(f.RValue))
                                    {
                                        insere = false;
                                    }
                                }
                                break;

                            default:
                                throw new SGDBException("Passou onde nao devia: GambiarraSelect.retornaDados.Inteiro.Default.");
                            }
                        }
                    }
                    else
                    {
                        byte   tamanho  = br.ReadByte();
                        bool   isValido = br.ReadBoolean();
                        byte[] valor    = br.ReadBytes(tamanho);
                        string texto    = new System.Text.ASCIIEncoding().GetString(valor);
                        d = new DadoTabela(nomeColuna, tipo, tamanho, isValido, texto);
                        if (f != null)
                        {
                            switch (f.Op)
                            {
                            case OperadorRel.Igual:
                                if (f.RValue.ToLower().Equals("null"))
                                {
                                    if (d.isValido)
                                    {
                                        insere = false;
                                    }
                                }
                                else
                                {
                                    byte[] filtro = new byte[d.tamanho];
                                    new System.Text.ASCIIEncoding().GetBytes(f.RValue.PadRight(d.tamanho)).CopyTo(filtro, 0);
                                    string filtro2 = new System.Text.ASCIIEncoding().GetString(filtro);
                                    if (!texto.Equals(filtro2))
                                    {
                                        insere = false;
                                    }
                                }
                                break;

                            case OperadorRel.Diferente:
                                if (f.RValue.ToLower().Equals("null"))
                                {
                                    if (!d.isValido)
                                    {
                                        insere = false;
                                    }
                                }
                                else
                                {
                                    byte[] filtro = new byte[d.tamanho];
                                    new System.Text.ASCIIEncoding().GetBytes(f.RValue.PadRight(d.tamanho)).CopyTo(filtro, 0);
                                    string filtro2 = new System.Text.ASCIIEncoding().GetString(filtro);
                                    if (texto.Equals(filtro2))
                                    {
                                        insere = false;
                                    }
                                }
                                break;

                            default:
                                throw new SemanticError("Comparação de literais só pode ser igual ou diferente");
                            }
                        }
                    }

                    r.dados.Add(d);
                }

                if (insere)
                {
                    td.registros.Add(r);
                }

                if (br.BaseStream.Position % tamRegistro != 0)
                {
                    br.BaseStream.Position += tamRegistro - (br.BaseStream.Position % tamRegistro);
                }
            }

            return(TabelaSelect.getTabelaSelect(td));
        }