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()); }
public TabelaSelect returnDados(Metadados tabela) { try { Base.getInstance().desalocarBinarios(tabela.getNome()); } catch { } TabelaSelect ts = null; FileStream file = null; BinaryReader br = null; try { string arquivo = mem.getPath() + "\\" + tabela.getNome() + ".dat"; file = new FileStream(arquivo, FileMode.Open); using (br = new BinaryReader(file)) { int count; ts = new TabelaSelect(); Metadados meta = GerenciadorMemoria.getInstance().recuperarMetadados(tabela.getNome()); int colunas = meta.getNomesColunas().Count; ts.Campos = new string[colunas]; for (int i = 0; i < colunas; i++) { ts.Campos[i] = meta.getNome() + "." + meta.getNomesColunas()[i]; } //lê cada registro while (br.BaseStream.Position != br.BaseStream.Length) { string[] registro = new string[colunas]; RegistroTabela r = new RegistroTabela(br.ReadInt64()); count = br.ReadInt32(); //Lê cada dado dentro do registro for (int i = 0; i < count; i++) { string nomeColuna = meta.getNomesColunas()[i]; TipoDado tipo = meta.getDados()[nomeColuna].getTipoDado(); string valor = ""; if (tipo == TipoDado.Inteiro) { byte tamanho = br.ReadByte(); bool isValido = br.ReadBoolean(); int numero = br.ReadInt32(); valor = isValido ? numero + "" : "NULL"; } else { byte tamanho = br.ReadByte(); bool isValido = br.ReadBoolean(); byte[] literal = br.ReadBytes(tamanho); string texto = new System.Text.ASCIIEncoding().GetString(literal); valor = isValido ? texto : "NULL"; } registro[i] = valor; } ts.Registros.Add(registro); if (ts.Registros.Count >= Base.getInstance().qtd_max_registros) { break; } } } } catch (Exception ex) { Console.WriteLine(ex.StackTrace); Console.ReadLine(); } finally { if (br != null) { br.Close(); } if (file != null) { file.Close(); } } return(ts); }