Compare commits
3 Commits
3c8316ebc4
...
1edf47346f
Author | SHA1 | Date |
---|---|---|
José Henrique Ivanchechen | 1edf47346f | |
José Henrique Ivanchechen | d18b5f2efd | |
José Henrique Ivanchechen | a684fa3fdb |
|
@ -0,0 +1,2 @@
|
|||
__pycache__
|
||||
*.pyc
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,54 +0,0 @@
|
|||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
||||
*/
|
||||
package trabalhobd;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Queue;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author julioc7r
|
||||
*/
|
||||
public class BancoDeDados {
|
||||
List <Tabela> lista_tabelas;
|
||||
int n_tabelas;
|
||||
SQL pesquisa;
|
||||
|
||||
public BancoDeDados() {
|
||||
this.lista_tabelas = new ArrayList<Tabela>();
|
||||
this.n_tabelas = 0;
|
||||
}
|
||||
|
||||
public List<Tabela> getLista_tabelas() {
|
||||
return lista_tabelas;
|
||||
}
|
||||
|
||||
public void setLista_tabelas(List<Tabela> lista_tabelas) {
|
||||
this.lista_tabelas = lista_tabelas;
|
||||
}
|
||||
|
||||
public int getN_tabelas() {
|
||||
return n_tabelas;
|
||||
}
|
||||
|
||||
public void setN_tabelas(int n_tabelas) {
|
||||
this.n_tabelas = n_tabelas;
|
||||
}
|
||||
|
||||
public SQL getPesquisa() {
|
||||
return pesquisa;
|
||||
}
|
||||
|
||||
public void setPesquisa(Queue<String> query,List<Tabela> lista_tabelas) {
|
||||
this.pesquisa = new SQL(query,lista_tabelas);
|
||||
}
|
||||
|
||||
public void executaSQL(Queue<String> query){
|
||||
setPesquisa(query, this.lista_tabelas);
|
||||
pesquisa.resultadoQuery();
|
||||
}
|
||||
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
# jcSQL
|
||||
|
||||
Tentativa de criar um Banco de Dados que aceita alguns comandos SQL em Java.
|
||||
|
||||
A proposta do Trabalho 1 da disciplina de Banco de Dados, foi a de codificar um Banco de Dados em memória para que tenhamos melhor compreensão dos processos que acontencem dentro de um DataBase.
|
||||
|
||||
Comandos Suportados:
|
||||
|
||||
Select, From, Where, Order By
|
||||
|
||||
*os filtros do Where( < , > , = , != )
|
||||
|
588
java/SQL.java
588
java/SQL.java
|
@ -1,588 +0,0 @@
|
|||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
||||
*/
|
||||
package trabalhobd;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Queue;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author julioc7r
|
||||
*/
|
||||
public class SQL {
|
||||
Queue <String> query;
|
||||
List<Tabela> lista_tabelas;
|
||||
List<String> selectList;
|
||||
List<String> fromList;
|
||||
List<String> whereList;
|
||||
List<String> joinList;
|
||||
Boolean whereFlag;
|
||||
Boolean orderBy;
|
||||
String chaveOrder;
|
||||
|
||||
public SQL(Queue<String> query,List<Tabela> lista_tabelas) {
|
||||
this.query = query;
|
||||
this.selectList = new LinkedList();
|
||||
this.fromList = new LinkedList();
|
||||
this.whereList = new LinkedList();
|
||||
this.joinList = new LinkedList();
|
||||
this.orderBy = false;
|
||||
this.whereFlag = false;
|
||||
this.chaveOrder = null;
|
||||
this.lista_tabelas = lista_tabelas;
|
||||
|
||||
}
|
||||
|
||||
public Queue<String> getQuery() {
|
||||
return query;
|
||||
}
|
||||
|
||||
public void setQuery(Queue<String> query) {
|
||||
this.query = query;
|
||||
}
|
||||
|
||||
public Boolean getOrderBy() {
|
||||
return orderBy;
|
||||
}
|
||||
|
||||
public void setOrderBy(Boolean orderBy) {
|
||||
this.orderBy = orderBy;
|
||||
}
|
||||
|
||||
public void processamentoQuery() {
|
||||
|
||||
for(int i = 0;this.query.isEmpty() == false; i++)
|
||||
{
|
||||
System.out.println("Fila["+i +"] = "+ this.query.peek());
|
||||
if(this.query.peek().equals("select")){ //SE ENTROU salva na selectList os atributos requiridos
|
||||
i++;//para printar a ordem dos elementos
|
||||
this.query.poll();
|
||||
int j=0;
|
||||
while(isCommand(query.peek())== false){
|
||||
System.out.println(this.query.peek()+" - "+ "LISTA VAZIA" +j);
|
||||
System.out.println("Fila["+i +"] = "+ this.query.peek());
|
||||
i++;
|
||||
this.selectList.add(this.query.poll());
|
||||
System.out.println(this.query.peek()+" - "+this.selectList.get(j));
|
||||
j++;
|
||||
}
|
||||
}
|
||||
if(this.query.peek().equals("from")){ //SE ENTROU salva na fromList os atributos requiridos
|
||||
i++;
|
||||
this.query.poll();
|
||||
int j=0;
|
||||
while(isCommand(query.peek())== false){
|
||||
System.out.println(this.query.peek()+" - "+"LISTA VAZIA" +j);
|
||||
System.out.println("Fila["+i +"] = "+ this.query.peek());
|
||||
i++;
|
||||
this.fromList.add(this.query.poll());
|
||||
System.out.println(this.query.peek()+" - "+this.fromList.get(j));
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
if(this.query.peek()!=null && this.query.peek().equals("on")){ //SE ENTROU salva na fromList os atributos requiridos
|
||||
i++;
|
||||
this.query.poll();
|
||||
int j=0;
|
||||
while(isCommand(query.peek())== false){
|
||||
System.out.println(this.query.peek()+" - "+"LISTA VAZIA" +j);
|
||||
System.out.println("Fila["+i +"] = "+ this.query.peek());
|
||||
i++;
|
||||
this.joinList.add(this.query.poll());
|
||||
System.out.println(this.query.peek()+" - "+this.joinList.get(j));
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
if(this.query.peek()!=null && this.query.peek().equals("where")){ //SE ENTROU salva na whereList os atributos requiridos
|
||||
this.whereFlag = true;
|
||||
i++;
|
||||
this.query.poll();
|
||||
int j=0;
|
||||
while(isCommand(query.peek())== false){
|
||||
System.out.println(this.query.peek()+" - "+"LISTA VAZIA" +j);
|
||||
System.out.println("Fila["+i +"] = "+ this.query.peek());
|
||||
i++;
|
||||
this.whereList.add(this.query.poll());
|
||||
//System.out.println(this.query.peek()+" - "+this.whereList.get(j));
|
||||
j++;
|
||||
if(query.isEmpty()){
|
||||
return;}
|
||||
}
|
||||
}
|
||||
if(this.query.peek()!=null && this.query.peek().equals("order")){ //SE ENTROU define o elemento pelo qual a lista será ordenada
|
||||
i+=2;
|
||||
this.query.poll();// elimina o "ORDER" da fila
|
||||
this.query.poll();// elimina o "BY" da fila
|
||||
this.orderBy = true;
|
||||
this.chaveOrder = this.query.poll();
|
||||
System.out.println("Fila["+i +"] = "+"CHAVE = "+ this.chaveOrder);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void resultadoQuery(){
|
||||
//Pensar em como fazer
|
||||
processamentoQuery();
|
||||
int whereTabelaPos = -1;
|
||||
|
||||
|
||||
//ENCONTRA AS TABELAS USADAS
|
||||
List<Tabela> tabelas = new LinkedList();
|
||||
System.out.println("LAOSLKDOAKSDOAKS"+this.lista_tabelas.size());
|
||||
for(int i = 0; i<this.lista_tabelas.size();i++){
|
||||
int j = 0;
|
||||
//FAZ A COMPARAÇÃO ENCONTRANDO AS TABELAS ESCOLHIDAS NO FROM E ADICIONANDO NA LISTA TABELAS
|
||||
if(this.fromList.isEmpty() && this.fromList.get(j).equals(this.lista_tabelas.get(i).getNomeTabela())){
|
||||
tabelas.add(this.lista_tabelas.get(i));
|
||||
j++;
|
||||
}
|
||||
}
|
||||
System.out.println("LAOSLKDOAKSDOAKS"+this.lista_tabelas.size());
|
||||
//FAZ A SELECTION(WHERE),ENCONTRA EM PRIMEIRA PARTE OS ATRIBUTOS QUE CORRESPONDE A CONDIÇÃO REQUIRIDA
|
||||
//Busca em qual tabela está o elemento
|
||||
for(int i = 0; i<tabelas.size();i++){
|
||||
if(whereFlag && tabelas.get(i).getColunaPeloNome(this.whereList.get(i))<99){
|
||||
whereTabelaPos = i;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int n_elementos = 0; // número de colunas que a tabela resultado terá
|
||||
int[] pos_tabela = new int[this.fromList.size()]; // guarda a posição da tabela usada na lista_tabela
|
||||
|
||||
int n_linhas = 0;
|
||||
int n_colunas_total = 0;
|
||||
int m;
|
||||
boolean encontrouTabela = false;
|
||||
|
||||
int[] quantidadePorTabela = new int[this.fromList.size()];//Guarda a quantidade de colunas usadas por tabela
|
||||
for(int i = 0 ; i < this.fromList.size();i++){
|
||||
quantidadePorTabela[i] = 0;
|
||||
}
|
||||
|
||||
if(this.selectList.get(0).contains("*")){
|
||||
for(int i = 0; i< this.fromList.size();i++){
|
||||
for( m = 0; m < this.lista_tabelas.size(); m++ ){
|
||||
System.out.println(this.fromList.get(i)+" COMPARAÇÃO "+ this.lista_tabelas.get(m).getNomeTabela());
|
||||
//System.out.println(lista_tabelas.toString());
|
||||
if(this.fromList.get(i).equals(this.lista_tabelas.get(m).getNomeTabela())){
|
||||
|
||||
pos_tabela[i] = m;
|
||||
encontrouTabela = true;
|
||||
}
|
||||
}
|
||||
if( encontrouTabela == false && m == this.lista_tabelas.size()){
|
||||
System.out.println("TABELA NÃO ENCONTRADA");
|
||||
return;
|
||||
}
|
||||
System.out.println("JO"+this.fromList.get(i)+this.lista_tabelas.indexOf(this.fromList.get(i))+ pos_tabela[i]);
|
||||
n_elementos += this.lista_tabelas.get(pos_tabela[i]).getColunas();
|
||||
n_linhas += this.lista_tabelas.get(pos_tabela[i]).getLinhas();
|
||||
n_colunas_total += this.lista_tabelas.get(pos_tabela[i]).getColunas();
|
||||
quantidadePorTabela[i] = this.lista_tabelas.get(pos_tabela[i]).getColunas();
|
||||
}
|
||||
}else{
|
||||
n_elementos = this.selectList.size(); // número de colunas que a tabela resultado terá
|
||||
for(int i = 0; i< this.fromList.size();i++){
|
||||
for(int j = 0; j <this.lista_tabelas.size();j++){
|
||||
if(this.lista_tabelas.get(j).nomeTabela.contentEquals(this.fromList.get(i))){
|
||||
pos_tabela[i] = j; //FALTA IMPLEMENTAR CASO OCORRA O JOIN
|
||||
System.out.println("entrei");
|
||||
quantidadePorTabela[i] += 1;
|
||||
}
|
||||
System.out.println("JO"+this.fromList.get(i) + this.lista_tabelas.get(j).nomeTabela);
|
||||
}
|
||||
n_linhas += this.lista_tabelas.get(pos_tabela[i]).getLinhas();
|
||||
n_colunas_total += this.lista_tabelas.get(pos_tabela[i]).getColunas(); // FAZER IGUAL o tam[] e o pos tabela[] pra dar o JOINs
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
List<String> tabelaResultado = new LinkedList<>();//n_elementos*n_linhas);
|
||||
|
||||
|
||||
int[] tam = new int[n_elementos];
|
||||
|
||||
System.out.println( "QQQQ "+ n_elementos);
|
||||
//n_elementos--;
|
||||
|
||||
|
||||
boolean joinONList = false;
|
||||
if(this.selectList.get(0).contains("*") && fromList.size() == 1){
|
||||
for(int j = 0; j < n_elementos ; j++){
|
||||
tam[j] = j;
|
||||
}
|
||||
}
|
||||
else if(this.selectList.get(0).contains("*") && fromList.size() > 1){
|
||||
int k = 0;
|
||||
for(int i = 0; i < fromList.size();i++){
|
||||
for(int j = 0; j < this.lista_tabelas.get(pos_tabela[i]).getColunas() ; j++){
|
||||
tam[k] = j;
|
||||
k++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
for (int i = 0; i < pos_tabela.length ; i++){
|
||||
for(int j = 0; j < n_elementos ; j++){
|
||||
tam[j] = this.lista_tabelas.get(pos_tabela[i]).getColunaPeloNome(this.selectList.get(j));
|
||||
System.out.println(tam[j] + "QQQ "+ n_elementos);
|
||||
if(tam[j]==99){// PERCORREU A TABELA E NÃO ACHOU
|
||||
System.out.println(" ELEMENTO NÃO ENCONTRADO!!");
|
||||
return;
|
||||
}
|
||||
if((whereFlag==true) && (this.selectList.get(j).contains(whereList.get(0)))){
|
||||
whereTabelaPos = j;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(fromList.size()>1){ // FAZ O JOIN SE A FROMLIST POSSUIR MAIS DE DOIS ELEMENTOS(IMPLEMENTAMOS PARA FUNCIONAR COM 2 ELEMENTOS)
|
||||
tabelaResultado = nestedLoopJoin(tabelaResultado,pos_tabela,tam,quantidadePorTabela);
|
||||
if(whereFlag==true){
|
||||
for(int k = 0; k < pos_tabela.length ; k++){
|
||||
for(int i = 0 ; i < n_linhas;i++){
|
||||
for(int j = 0 ; j < n_elementos ; j++){
|
||||
if(comparaWhere(this.lista_tabelas.get(pos_tabela[k]).getElemento(tam[whereTabelaPos]))==true){
|
||||
tabelaResultado.add(this.lista_tabelas.get(pos_tabela[k]).getElemento(tam[j]));
|
||||
}
|
||||
else if(tabelaResultado.size()<n_elementos){//ADICIONA OS PRIMEIROS ELEMENTOS
|
||||
tabelaResultado.add(this.lista_tabelas.get(pos_tabela[k]).getElemento(tam[j]));
|
||||
}
|
||||
tam[j] += n_colunas_total; //Faz com que os elementos das colunas desejadas sejam achados.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(joinONList == true){
|
||||
|
||||
for(int k = 0; k < pos_tabela.length ; k++){
|
||||
for(int i = 0 ; i < n_linhas;i++){
|
||||
for(int j = 0 ; j < n_elementos ; j++){
|
||||
tabelaResultado.add(this.lista_tabelas.get(pos_tabela[k]).getElemento(tam[j]));
|
||||
tam[j] += n_colunas_total; //Faz com que os elementos das colunas desejadas sejam achados.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
tabelaResultado.add("fim");
|
||||
}
|
||||
|
||||
else{
|
||||
if(whereFlag==true){
|
||||
for(int k = 0; k < pos_tabela.length ; k++){
|
||||
for(int i = 0 ; i < n_linhas;i++){
|
||||
for(int j = 0 ; j < n_elementos ; j++){
|
||||
if(comparaWhere(this.lista_tabelas.get(pos_tabela[k]).getElemento(tam[whereTabelaPos]))==true){
|
||||
tabelaResultado.add(this.lista_tabelas.get(pos_tabela[k]).getElemento(tam[j]));
|
||||
}
|
||||
else if(tabelaResultado.size()<n_elementos){//ADICIONA OS PRIMEIROS ELEMENTOS
|
||||
tabelaResultado.add(this.lista_tabelas.get(pos_tabela[k]).getElemento(tam[j]));
|
||||
}
|
||||
tam[j] += n_colunas_total; //Faz com que os elementos das colunas desejadas sejam achados.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
for(int k = 0; k < pos_tabela.length ; k++){
|
||||
for(int i = 0 ; i < n_linhas;i++){
|
||||
for(int j = 0 ; j < n_elementos ; j++){
|
||||
tabelaResultado.add(this.lista_tabelas.get(pos_tabela[k]).getElemento(tam[j]));
|
||||
tam[j] += n_colunas_total; //Faz com que os elementos das colunas desejadas sejam achados.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tabelaResultado.add("fim");
|
||||
}
|
||||
|
||||
// select * from employees1000,livros-db
|
||||
// select first_name gender from employees1000, livros-db
|
||||
// select first_name gender from employees1000 where gender = F _ FUNCIONA
|
||||
// select first_name gender from employees1000 where first_name = Mary NAO FUNCIONA
|
||||
|
||||
if(this.orderBy == true){
|
||||
orderBy(this.chaveOrder,tabelaResultado,n_elementos);
|
||||
}
|
||||
System.out.println("aaaaaaaaa "+tabelaResultado.size());
|
||||
printTabelaResultado(tabelaResultado,n_elementos,tabelaResultado.size());
|
||||
}
|
||||
|
||||
public void orderBy(String elemento, List<String> tabela, int tam_colunas){
|
||||
int tam = tam_colunas;
|
||||
int ordenado = 0;
|
||||
while(ordenado==1){
|
||||
ordenado = 1;
|
||||
for(int i = 0 ; i < tabela.size();i = i + tam_colunas){
|
||||
if(tabela.get(i).compareTo(tabela.get(i+tam_colunas))<0){
|
||||
for(int j = 0 ; j < tam_colunas ; j++){
|
||||
String swap = tabela.get(i+j);
|
||||
tabela.set(i+j,tabela.get(i+j+tam_colunas));
|
||||
tabela.set(i+j+tam_colunas,swap);
|
||||
}
|
||||
ordenado = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void printTabelaResultado(List<String> tabelaResultado, int tcolunas, int tlinhas) {
|
||||
int tam = 0;
|
||||
System.out.println(" --------------------------------------------------------------");
|
||||
for(int i = 0; i < tlinhas ; i++){
|
||||
|
||||
for(int j = 0; j < tcolunas ; j++){
|
||||
System.out.print(" | " + tabelaResultado.get(tam));
|
||||
tam++;
|
||||
}
|
||||
System.out.print(" | ");
|
||||
System.out.println("\n --------------------------------------------------------------");
|
||||
if(tabelaResultado.get(tam).contains("fim")){
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private int[] maiorTabela(int[] pos_tabela){ //VERIFICA A MENOR TABELA E COLOCA NA POSIÇÃO CENTRAL DO LOOP
|
||||
|
||||
if(this.lista_tabelas.get(pos_tabela[0]).getLinhas() > this.lista_tabelas.get(pos_tabela[1]).getLinhas()){
|
||||
int aux = pos_tabela[0];
|
||||
pos_tabela[0] = pos_tabela[1];
|
||||
pos_tabela[1] = aux;
|
||||
}
|
||||
|
||||
return pos_tabela;
|
||||
|
||||
}
|
||||
|
||||
public List<String> nestedLoopJoin(List<String> tabelaResultado, int[] pos_tabela,int[] select_pos,int[] coluna_select){
|
||||
//TRABALHO 2
|
||||
pos_tabela = maiorTabela(pos_tabela); // A MAIOR TABELA RODA DENTRO DO LOOP DA MENOR TABELA
|
||||
/* for each tuple t.r in r do begin
|
||||
for each tuple t.s in s do begin
|
||||
test pair (t.r,t.s) to see if they satisfy the join condition θ
|
||||
if they do, add t.r • t.s to the result.
|
||||
end
|
||||
end
|
||||
r is called the outer relation and s the inner relation of the join.
|
||||
*/
|
||||
|
||||
//select name from pessoa trabalho on cpf
|
||||
|
||||
for(int i = 0; i< this.joinList.size() ; i++){
|
||||
|
||||
System.out.println("JOIN ON" +this.joinList.get(i));
|
||||
}
|
||||
|
||||
int[] pos_join = new int[2]; // GUARDA A POSIÇÃ) DOS ELEMENTO CHAVE EM SUAS RESPECTIVAS TABELAS [0] = tabela1 ||||| [1] = tabela2
|
||||
|
||||
// pos_tabela -> posição da tabela na lista tabela
|
||||
|
||||
for (int i = 0; i < pos_tabela.length ; i++){
|
||||
for(int j = 0; j < 2 ; j++){
|
||||
|
||||
pos_join[j] = this.lista_tabelas.get(pos_tabela[i]).getColunaPeloNome(this.joinList.get(0));
|
||||
|
||||
System.out.println(pos_join[j] + "LOOPcompareID TABELA - "+ i);
|
||||
|
||||
if(pos_join[j]==99){// PERCORREU A TABELA E NÃO ACHOU
|
||||
System.out.println(" ELEMENTO NÃO ENCONTRADO!!");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//ADICIONANDO OS HEADERS
|
||||
int p = 0;
|
||||
for(int k = 0; k < select_pos.length; k++){
|
||||
System.out.println(pos_join[p] + "DENTRO DO LOOP K - " + k + " COLUNA "+ select_pos[k]+" P - " +p + this.lista_tabelas.get(pos_tabela[p]).getElemento(select_pos[k]));
|
||||
if(k == (coluna_select[p]-1)){
|
||||
|
||||
p = 1;
|
||||
}
|
||||
tabelaResultado.add(this.lista_tabelas.get(pos_tabela[p]).getElemento(select_pos[k]));
|
||||
select_pos[k] = select_pos[k] + this.lista_tabelas.get(pos_tabela[p]).getColunas();
|
||||
}
|
||||
|
||||
|
||||
pos_join[0] = pos_join[0] + this.lista_tabelas.get(pos_tabela[0]).getColunas();
|
||||
pos_join[1] = pos_join[1] + this.lista_tabelas.get(pos_tabela[1]).getColunas();
|
||||
int aux = pos_join[0];
|
||||
int auxb = pos_join[1];
|
||||
|
||||
|
||||
int[] auxSelect = select_pos;
|
||||
|
||||
for (int i = 0; i < select_pos.length ; i++){
|
||||
System.out.println(i + " DENTRO DO SELECT - "+ select_pos[i]);
|
||||
}
|
||||
|
||||
for(int i = 0 ; i < this.lista_tabelas.get(pos_tabela[0]).getLinhas();i++){
|
||||
//System.out.println( " i " + i );
|
||||
if(pos_join[0] > this.lista_tabelas.get(pos_tabela[0]).getTamanho()){
|
||||
break;
|
||||
}
|
||||
if(i>=1){
|
||||
pos_join[0] = aux +( i * this.lista_tabelas.get(pos_tabela[0]).getColunas());
|
||||
}
|
||||
//System.out.println( " POSIÇAO DO JOIN i " + pos_join[0] );
|
||||
|
||||
for(int j = 0 ; j < this.lista_tabelas.get(pos_tabela[1]).getLinhas() ; j++){
|
||||
//System.out.println( " i " + i + " j " + j);
|
||||
// System.out.println( " POSIÇAO DO JOIN j " + pos_join[1] );
|
||||
if(this.lista_tabelas.get(pos_tabela[0]).getElemento(pos_join[0]).contentEquals(this.lista_tabelas.get(pos_tabela[1]).getElemento(pos_join[1]))){
|
||||
p = 0;
|
||||
|
||||
for(int k = 0; k < select_pos.length; k++){
|
||||
System.out.println(pos_join[p] + "DENTRO DO LOOP K - " + k + " COLUNA "+ select_pos[k]+" P - " +p + this.lista_tabelas.get(pos_tabela[p]).getElemento(select_pos[k]));
|
||||
if(k == (coluna_select[p]-1)){
|
||||
|
||||
p = 1;
|
||||
//System.out.println(pos_join[j] + "DENTRO DO LOOP K - " + k + " COLUNA "+ select_pos[k]+" P - " +p);
|
||||
}
|
||||
tabelaResultado.add(this.lista_tabelas.get(pos_tabela[p]).getElemento(select_pos[k]));
|
||||
if(p==1){
|
||||
select_pos[k] = select_pos[k] + this.lista_tabelas.get(pos_tabela[p]).getColunas();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else{
|
||||
for(int k = 0; k < select_pos.length; k++){
|
||||
select_pos[k] = select_pos[k] + this.lista_tabelas.get(pos_tabela[p]).getColunas();
|
||||
}
|
||||
}
|
||||
|
||||
//Faz com que os elementos das colunas desejadas sejam achados.
|
||||
pos_join[1] = pos_join[1] + this.lista_tabelas.get(pos_tabela[1]).getColunas();
|
||||
if(pos_join[1] > this.lista_tabelas.get(pos_tabela[1]).getTamanho()){
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
for(int k = 0; k < coluna_select[0]; k++){
|
||||
select_pos[k] = select_pos[k] + this.lista_tabelas.get(pos_tabela[p]).getColunas();
|
||||
}
|
||||
for(int k = coluna_select[0]; k < select_pos.length; k++){
|
||||
select_pos[k] = auxSelect[k];
|
||||
}
|
||||
pos_join[1] = auxb;
|
||||
}
|
||||
return tabelaResultado;
|
||||
|
||||
/* select * from trabalho pessoa on cpf TESTE
|
||||
|
||||
DUAS FORMAS DE LER
|
||||
|
||||
SELECT *
|
||||
FROM tabela1, tabela2
|
||||
WHERE tabela1.id=tabela2.id
|
||||
|
||||
SELECT *
|
||||
FROM tabela1
|
||||
JOIN tabela2
|
||||
ON tabela1.Key = tabela2.Key
|
||||
*/
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
public void selection(List<String> whereList,Tabela tabela){//PROCESSAMENTO DO WHERE
|
||||
//{=, <, ≤, >, ≥, ≠} OPERADORES PARA TABELAS ORDENADAS
|
||||
//{=, ≠} OPERADORES PARA VALORES DESORDENADOS
|
||||
int i = 0;
|
||||
|
||||
if(whereList.get(i).contentEquals("=")){
|
||||
tabela = tabela.comparaIgual(tabela,elemento,chave);
|
||||
}
|
||||
else if(whereList.get(i).contentEquals("!=")){
|
||||
tabela = tabela.comparaDiferente(tabela,elemento,chave);
|
||||
}
|
||||
else if(whereList.get(i).contentEquals(">")){
|
||||
tabela = tabela.comparaMaior(tabela,elemento,chave);
|
||||
}
|
||||
else if(whereList.get(i).contentEquals("<")){
|
||||
tabela = tabela.comparaMenor(tabela,elemento,chave);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
private boolean isCommand(String elemento){
|
||||
if(elemento == null){
|
||||
return true;
|
||||
}
|
||||
else if(elemento.equals("where")){
|
||||
return true;
|
||||
}
|
||||
else if(elemento.equals("order")){
|
||||
return true;
|
||||
}
|
||||
else if(elemento.equals("on")){
|
||||
return true;
|
||||
}
|
||||
else if(elemento.equals("from")){
|
||||
return true;
|
||||
}
|
||||
else{return false;}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private boolean executaWhere(String elemento){
|
||||
if(whereList.get(1).contains("=")){
|
||||
if(elemento.equals(this.whereList.get(2))){ //IGUAL
|
||||
return true;}
|
||||
}
|
||||
else if(whereList.get(1).contains("!=")){
|
||||
if(!elemento.equals(this.whereList.get(2))){ //DIFERENTE
|
||||
return true;}
|
||||
}
|
||||
else if(whereList.get(1).contains(">")){
|
||||
if(elemento.compareTo(this.whereList.get(2))>0){ //MAIOR
|
||||
return true;}
|
||||
}
|
||||
else if(whereList.get(1).contains("<")){
|
||||
if(elemento.compareTo(this.whereList.get(2))<0){ //MENOR
|
||||
return true;}
|
||||
}
|
||||
else{return false;}
|
||||
|
||||
//boolean resultado = comparaWhere();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean comparaWhere(String elemento){
|
||||
if(whereList.get(1).contains("=")){
|
||||
if(elemento.equals(this.whereList.get(2))){ //IGUAL
|
||||
return true;}
|
||||
}
|
||||
else if(whereList.get(1).contains("!=")){
|
||||
if(!elemento.equals(this.whereList.get(2))){ //DIFERENTE
|
||||
return true;}
|
||||
}
|
||||
else if(whereList.get(1).contains(">")){
|
||||
if(elemento.compareTo(this.whereList.get(2))>0){ //MAIOR
|
||||
return true;}
|
||||
}
|
||||
else if(whereList.get(1).contains("<")){
|
||||
if(elemento.compareTo(this.whereList.get(2))<0){ //MENOR
|
||||
return true;}
|
||||
}
|
||||
else{return false;}
|
||||
return false;
|
||||
}
|
||||
}
|
197
java/Tabela.java
197
java/Tabela.java
|
@ -1,197 +0,0 @@
|
|||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
||||
*/
|
||||
package trabalhobd;
|
||||
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
* @author julioc7r
|
||||
*/
|
||||
public class Tabela {
|
||||
|
||||
String nomeTabela;
|
||||
|
||||
int tamanho;
|
||||
|
||||
private final int linhas;
|
||||
private final int colunas;
|
||||
private List<String> elementos; // mudar para qualquer tipo de variavel
|
||||
|
||||
|
||||
public Tabela(String nomeTabela,int linhas, int colunas) {
|
||||
this.nomeTabela = nomeTabela;
|
||||
this.tamanho = 0;
|
||||
this.linhas = linhas;
|
||||
this.colunas = colunas;
|
||||
elementos = new ArrayList<>(linhas * colunas);
|
||||
}
|
||||
|
||||
public int getTamanho() {
|
||||
return tamanho;
|
||||
}
|
||||
|
||||
public void setTamanho(Integer tamanho) {
|
||||
this.tamanho = tamanho;
|
||||
}
|
||||
|
||||
public int getColunas() {
|
||||
return colunas;
|
||||
}
|
||||
|
||||
public int getLinhas() {
|
||||
return linhas;
|
||||
}
|
||||
|
||||
public String getNomeTabela() {
|
||||
return nomeTabela;
|
||||
}
|
||||
|
||||
public void setNomeTabela(String nomeTabela) {
|
||||
this.nomeTabela = nomeTabela;
|
||||
}
|
||||
|
||||
public String getElemento(int posicao) {
|
||||
return elementos.get(posicao);
|
||||
}
|
||||
|
||||
public void projecao(String elemento){
|
||||
|
||||
if(elemento.compareTo("*")==0){
|
||||
printTabela();
|
||||
}
|
||||
else{
|
||||
int i = 0;
|
||||
while(i < colunas){
|
||||
System.out.println(i + " - "+ elemento + "=" + elementos.get(i));
|
||||
if(elemento.compareTo(elementos.get(i))==0){
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
if(i == colunas){
|
||||
System.out.println(" não foi encontrado ");
|
||||
return;}
|
||||
else{
|
||||
printTabelaColuna(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int getColunaPeloNome(String elemento){
|
||||
int i = 0;
|
||||
while(i < colunas){
|
||||
System.out.println(i + " - "+ elemento + "=" + elementos.get(i));
|
||||
if(elemento.compareTo(elementos.get(i))==0){
|
||||
return i;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return 99;
|
||||
}
|
||||
|
||||
/*
|
||||
public String get(int linha, int coluna) {
|
||||
if (!posicaoValida(linha, coluna)) throw new IllegalArgumentException();
|
||||
return elementos.get(posicaoNaLista(linha, coluna));
|
||||
}*/
|
||||
|
||||
public void adicionaElemento(String[] elemento) {
|
||||
for(int i = 0; i<elemento.length ;i++){
|
||||
elementos.add(elemento[i]);
|
||||
this.tamanho = this.tamanho + 1;
|
||||
}
|
||||
}
|
||||
|
||||
public void printTabela(){
|
||||
System.out.println(" --------------------------------------------------------------");
|
||||
int tam = 0;
|
||||
for(int i = 0; i < linhas ; i++){
|
||||
|
||||
for(int j = 0; j<colunas ; j++){
|
||||
System.out.print(" | " + elementos.get(tam));
|
||||
tam++;
|
||||
}
|
||||
System.out.print(" | ");
|
||||
System.out.println("\n --------------------------------------------------------------");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void printTabelaColuna(int coluna){
|
||||
System.out.println(" ------------------------");
|
||||
int tam = coluna;
|
||||
for(int i = 0; i < linhas ; i++){
|
||||
|
||||
System.out.print(" | " + elementos.get(tam));
|
||||
tam = tam + this.colunas;
|
||||
System.out.print(" | ");
|
||||
System.out.println("\n --------------------------");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Tabela{" + "nomeTabela=" + nomeTabela + ", linhas=" + linhas + ", tamanho=" + tamanho + ", colunas=" + colunas + '}';
|
||||
}
|
||||
|
||||
private void printTabelaResultado(List<String> tabelaResultado, int tcolunas, int tlinhas) {
|
||||
int tam = 0;
|
||||
System.out.println(" --------------------------------------------------------------");
|
||||
for(int i = 0; i < tlinhas ; i++){
|
||||
|
||||
for(int j = 0; j<tcolunas ; j++){
|
||||
System.out.print(" | " + tabelaResultado.get(tam));
|
||||
tam++;
|
||||
}
|
||||
System.out.print(" | ");
|
||||
System.out.println("\n --------------------------------------------------------------");
|
||||
|
||||
}
|
||||
}
|
||||
/*
|
||||
|
||||
private void ordenaTabela(List<String> tabelaResultado, int tcolunas, int tlinhas) { // IMPLEMENTAR O MERGE SORT
|
||||
int tam = 0;
|
||||
System.out.println(" --------------------------------------------------------------");
|
||||
for(int i = 0; i < tlinhas ; i++){
|
||||
|
||||
for(int j = 0; j<tcolunas ; j++){
|
||||
System.out.print(" | " + tabelaResultado.get(tam));
|
||||
tam++;
|
||||
}
|
||||
System.out.print(" | ");
|
||||
System.out.println("\n --------------------------------------------------------------");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public List<String> comparaIgual(List<String> tabela,String elemento,String chave){
|
||||
int n_elementos = selectFila.length;
|
||||
int n_linhas = this.linhas;
|
||||
List<String> tabelaResultado = new ArrayList<>(n_elementos*n_linhas);
|
||||
return tabela;
|
||||
}
|
||||
public List<String> comparaDiferente(List<String> tabela,String elemento,String chave){
|
||||
return tabela;
|
||||
}
|
||||
public List<String> comparaMaior(List<String> tabela,String elemento,String chave){
|
||||
return tabela;
|
||||
}
|
||||
public boolean comparaMenor(List<String> tabela,String elemento,String chave){
|
||||
return false;
|
||||
}*/
|
||||
|
||||
}
|
|
@ -1,237 +0,0 @@
|
|||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Main.java to edit this template
|
||||
*/
|
||||
package trabalhobd;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Queue;
|
||||
import java.util.Scanner;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author julioc7r
|
||||
*/
|
||||
public class TrabalhoBD {
|
||||
|
||||
/**
|
||||
* @param args the command line arguments
|
||||
*/
|
||||
public static void main(String[] args) throws FileNotFoundException, IOException {
|
||||
|
||||
// String[] ma = new String[1];
|
||||
Scanner input = new Scanner(System.in);
|
||||
|
||||
// EscolheArquivo tela1 = new EscolheArquivo(); Tentativa de fazer pela
|
||||
// interface gráfica
|
||||
|
||||
BancoDeDados Banco = new BancoDeDados(); // Cria um Banco de Dados
|
||||
|
||||
System.out.println("Digite o local onde está o arquivo?"); // TESTE /Users/julioc7r/testecsv
|
||||
String caminhoArquivo = "/Users/julioc7r/testecsv";// input.nextLine(); // Fazer a busca por um
|
||||
// repositório************
|
||||
|
||||
File arquivoCSV = new File(caminhoArquivo);
|
||||
File[] lista_arquivosCSV = arquivoCSV.listFiles();
|
||||
System.out.println("Digite o local onde está o arquivo?" + lista_arquivosCSV.length
|
||||
+ Arrays.toString(arquivoCSV.listFiles()));
|
||||
if (arquivoCSV.exists() == false) {
|
||||
System.out.println("Arquivo não encontrado/Verifique novamento o caminho");
|
||||
return;
|
||||
}
|
||||
int n_tabelas = 0;
|
||||
for (int t = 0; t < lista_arquivosCSV.length; t++) {
|
||||
if (lista_arquivosCSV[t].getName().contains(".csv")) {
|
||||
BufferedReader br = new BufferedReader(new FileReader(lista_arquivosCSV[t]));
|
||||
|
||||
int qtd_linhas;
|
||||
String line = "not null";
|
||||
for (qtd_linhas = -1; line != null; qtd_linhas++) {// conta quantas linhas tem o arquivo
|
||||
line = br.readLine();
|
||||
}
|
||||
// overwrite old buffered reader/ reseta o arquivo para a primeira posição
|
||||
br = new BufferedReader(new FileReader(lista_arquivosCSV[t]));
|
||||
|
||||
line = br.readLine();
|
||||
|
||||
String fator_divisor = ",";
|
||||
if (line.contains(",") == true) {
|
||||
fator_divisor = ",";
|
||||
} else if (line.contains(";") == true) {
|
||||
fator_divisor = ";";
|
||||
}
|
||||
|
||||
String[] vect = line.split(fator_divisor); // Divide pela as colunas da tabela
|
||||
String primeiroHeader = vect[0];
|
||||
|
||||
System.out.println(
|
||||
"nome:" + lista_arquivosCSV[t].getName() + " linhas:" + qtd_linhas + " colunas:" + vect.length);
|
||||
Banco.lista_tabelas
|
||||
.add(new Tabela(lista_arquivosCSV[t].getName().replace(".csv", ""), qtd_linhas, vect.length));
|
||||
|
||||
Banco.setN_tabelas(n_tabelas);// atualiza o numero de tabelas no banco
|
||||
|
||||
// Banco.lista_tabelas.get(t).toString();
|
||||
// System.out.println(Banco.lista_tabelas.get(t).toString());
|
||||
|
||||
while (line != null) {
|
||||
System.out.println(line);
|
||||
|
||||
vect = line.split(fator_divisor); // divide no vetor apartir da virgula
|
||||
if (vect[0].equals(primeiroHeader)) {
|
||||
for (int i = 0; i < vect.length; i++) {
|
||||
vect[i].toLowerCase();// NAOFUNCINOANSdkm
|
||||
}
|
||||
}
|
||||
Banco.lista_tabelas.get(n_tabelas).adicionaElemento(vect);
|
||||
line = br.readLine();
|
||||
}
|
||||
|
||||
System.out.println("Tabela:");
|
||||
Banco.lista_tabelas.get(n_tabelas).printTabela();
|
||||
n_tabelas++;
|
||||
|
||||
}
|
||||
}
|
||||
int opção = 0;
|
||||
String pesquisa;
|
||||
char confirma = 'N';
|
||||
String elemento;
|
||||
|
||||
do {
|
||||
System.out.println("TABELAS:");
|
||||
for (int i = 0; i < Banco.getN_tabelas(); i++) {
|
||||
System.out.println("nome:" + Banco.lista_tabelas.get(i).toString());
|
||||
}
|
||||
System.out.println("Bem-vindo!");
|
||||
System.out.println("==========");
|
||||
System.out.println("1 - Query");
|
||||
System.out.println("9 - Sair");
|
||||
System.out.println(":");
|
||||
opção = input.nextInt();
|
||||
|
||||
switch (opção) {
|
||||
case 1:
|
||||
System.out.println("\nDIGITE A SQL QUEUE");
|
||||
elemento = input.nextLine();
|
||||
elemento = input.nextLine();
|
||||
|
||||
String[] vect = elemento.split(" ");
|
||||
|
||||
Queue<String> query = new LinkedList();
|
||||
int orderBy = 0; // Flag para se possuir o orderby
|
||||
|
||||
// QUEUE TEST 1 | select emp_no birth_date from employees where // FUNCIONA
|
||||
// QUEUE TEST 2 | select first_name gender from employees1000 order by gender //
|
||||
// FUNCIONA
|
||||
|
||||
// CAMINHOTESTE /Users/julioc7r/testecsv
|
||||
|
||||
// emp_no,birth_date,first_name,last_name,gender,hire_date
|
||||
|
||||
for (int i = 0; i < vect.length; i++) { // coloca tudo em letra minuscula e retira a virgula e o
|
||||
System.out.println(vect[i]); // ponto e virgula que fica na hora que a string é dividida no
|
||||
// vetor vect[].
|
||||
vect[i].toLowerCase();
|
||||
|
||||
if (vect[i].contains(",")) {
|
||||
vect[i].replace(",", "");
|
||||
}
|
||||
if (vect[i].contains(";")) {
|
||||
vect[i].replace(";", "");
|
||||
}
|
||||
query.add(vect[i]); // Adiciona na fila Query
|
||||
}
|
||||
|
||||
Banco.executaSQL(query);
|
||||
/*
|
||||
*
|
||||
* for(int i = 0 ; i < vect.length ;i ++)
|
||||
* {
|
||||
* System.out.println("entrei"+ i);
|
||||
* if(i == 0 && vect[i].equals("select")){
|
||||
* i++;
|
||||
* query.poll();
|
||||
* int j = 1;
|
||||
* while(vect[i].equals("from")== false){//conta elementos do SELECT
|
||||
* i++;
|
||||
* j++;
|
||||
* }
|
||||
* i--;
|
||||
* selectList = new String[j];
|
||||
* j = 0;
|
||||
* do{
|
||||
* System.out.println(vect[j+1]+" - "+selectList[j]+j);
|
||||
* //selectList[j] = vect[j+1];
|
||||
* selectList[j] = query.poll();
|
||||
* System.out.println(vect[j+1]+" - "+selectList[j]+j);
|
||||
* j++;
|
||||
* }while(vect[j+1].equals("from")== false);
|
||||
* }
|
||||
*
|
||||
* if(vect[i].equals("from")){
|
||||
* //i++;
|
||||
* int j = 0;
|
||||
* while((vect[i+1].equals("where")== false)){//||(vect[i+1].equals("order")==
|
||||
* false)){//conta elementos do SELECT
|
||||
* i++;
|
||||
* j++;
|
||||
* System.out.println("entrei"+ i + j);
|
||||
* }
|
||||
* i-=j-1;
|
||||
* fromList = new String[j];
|
||||
* j = 0;
|
||||
* do{
|
||||
* System.out.println(vect[i]+" - "+fromList[j]+j);
|
||||
* fromList[j] = vect[i];
|
||||
* System.out.println(vect[i]+" - "+fromList[j]+j+"i "+i);
|
||||
* j++;
|
||||
* i++;
|
||||
* }while((vect[i].equals("where")== false));//||(vect[i].equals("order")==
|
||||
* false));
|
||||
* }
|
||||
*
|
||||
* if(vect[i].equals("order") && vect[i+1].equals("by")){
|
||||
* orderBy=1;
|
||||
* i = i + 2;
|
||||
* System.out.println("oi"+i);
|
||||
* int k; // posição do atributo que vai ser usado para ordenar a tabela no
|
||||
* selectList
|
||||
* if(vect[i].equals(selectList[0])== false){
|
||||
* for(k = 1; k < selectList.length; k++){
|
||||
* if(vect[i].equals(selectList[k]))
|
||||
* break;
|
||||
* }
|
||||
* String swap = selectList[0];
|
||||
* selectList[0] = selectList [k];
|
||||
* selectList[k] = swap;
|
||||
* System.out.println("oi");
|
||||
* }
|
||||
* }
|
||||
*
|
||||
* }
|
||||
*
|
||||
* int i;
|
||||
*
|
||||
* Tabela t = lista_tabelas.get(0);
|
||||
* t.resultadoQuery(selectList,orderBy);
|
||||
*/
|
||||
|
||||
case 9:
|
||||
System.out.println("Tem certeza que deseja sair?(S)para sair");
|
||||
confirma = input.next().toUpperCase().charAt(0);
|
||||
break;
|
||||
|
||||
}
|
||||
} while (confirma != 'S');
|
||||
|
||||
input.close();
|
||||
}
|
||||
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
|
|
2
main.py
2
main.py
|
@ -7,7 +7,7 @@ def main():
|
|||
print("Bem vindo ao SGBD")
|
||||
print("Digite a pasta onde está os arquivos CSV:")
|
||||
#csv_folder = input()
|
||||
csv_folder = "/mnt/c/Users/jose/Desktop/jcSQL-main/source"
|
||||
csv_folder = "./source"
|
||||
|
||||
tables = {}
|
||||
|
||||
|
|
42
sql.py
42
sql.py
|
@ -38,19 +38,7 @@ class SQL:
|
|||
# parse TABLE
|
||||
table = self.tables[query_parts[3]]
|
||||
|
||||
# parse SELECT COLUMNS
|
||||
column_list = query_parts[1].split(",")
|
||||
for i in range(len(column_list)):
|
||||
column_list[i] = column_list[i].strip()
|
||||
|
||||
if column_list[0] == '*':
|
||||
column_list = table.columns
|
||||
|
||||
# print the columns
|
||||
print(', '.join(column_list))
|
||||
print('-' * 20)
|
||||
|
||||
# print the rows
|
||||
# join columns
|
||||
tables_columns = table.columns
|
||||
tables_rows = table.rows
|
||||
|
||||
|
@ -58,19 +46,29 @@ class SQL:
|
|||
join_table = join_stmt[0]
|
||||
join_column = join_stmt[1]
|
||||
|
||||
for row in table.rows:
|
||||
column_index = table.columns.index(join_column)
|
||||
row_value = row[column_index]
|
||||
for i in range(len(tables_rows)):
|
||||
for j in range(len(join_table.rows)):
|
||||
row_column_index = table.columns.index(join_column)
|
||||
join_row_column_index = join_table.columns.index(join_column)
|
||||
|
||||
for join_row in join_table.rows:
|
||||
join_column_index = join_table.columns.index(join_column)
|
||||
join_row_value = join_row[join_column_index]
|
||||
|
||||
if row_value == join_row_value:
|
||||
tables_rows.append(row + join_row)
|
||||
if tables_rows[i][row_column_index] == join_table.rows[j][join_row_column_index]:
|
||||
tables_rows[i] += join_table.rows[j]
|
||||
|
||||
tables_columns = table.columns + join_table.columns
|
||||
|
||||
# parse SELECT COLUMNS
|
||||
column_list = query_parts[1].split(",")
|
||||
for i in range(len(column_list)):
|
||||
column_list[i] = column_list[i].strip()
|
||||
|
||||
if column_list[0] == '*':
|
||||
column_list = tables_columns
|
||||
|
||||
# print the columns
|
||||
print(', '.join(column_list))
|
||||
print('-' * 20)
|
||||
|
||||
# print the rows
|
||||
for row in tables_rows:
|
||||
if where_filter is not None:
|
||||
column_index = tables_columns.index(where_filter[0])
|
||||
|
|
Loading…
Reference in New Issue