SimSQL의 초기 개발단계
프로젝트 목적
자료구조 수업을 진행하며 나의 실력을 향상, 공부에 목적이 있다. 수업시간에 배운 내용을 바탕으로 간단한 데이터베이스 관리프로그램을 구현하려한다.
프로젝트 진행상황
Main 과 Table를 구현하였다. 현재는 데이터를 추가하고 조회하는 기능만 있으며 구문처리를 구상하는데 많은시간을 들였지만 결과적으론 별거없는 코드를 작성했다..
void SQLProcessor(string s, Table& table){
QueType<string> commandQ(StringSplit(s, " "));//공백을 기준으로 구문 분리
string command;
commandQ.Dequeue(command);
if (command == "INSERT"){//INSERT시에
commandQ.Dequeue(command);
QueType<string> subQ(StringSplit(command, ","));//넘길 값들 subQ큐에 넣기
table.Insert(subQ);
}
else if (command == "SELECT"){//SELECT시에
commandQ.Dequeue(command);
if (command == "*"){// 별이라면 모든 tupl 출력
table.Select();
}
else{
}
}
}
입력으로 들어오는 SQL을 공백기준으로 split해서 QueueType
에 넣어준다. 그리고 큐에서 차례차례 pop
하며 구문을 처리한다.
void Table::Select() const{
Tupl* location = listData;
for (int i = 0; i < fieldLen; i++){//필드명 출력
cout << fieldName[i] << ' ';
}
cout << endl;
for (int i = 0; i < length; i++){//테이블의 크기만큼
for (int i = 0; i < fieldLen; i++){ //튜플 출력
cout << location->infos[i] << ' ';
}
cout << endl;
location = location->next;
}
}
void Table::Insert(QueType<string>& sql){
string value;
int cnt = 0;
Tupl* location = new Tupl;
while (!sql.IsEmpty()){//날아온 순서대로 value값을 tupl에 넣는다.
sql.Dequeue(value);
location->infos[cnt] = value;// tupl에 차례로 value 저장
cnt++;
}
location->next = listData;
listData = location;
length++;
cout << "SUCCESS!" << endl;
}
조회와 삽입함수이다. 데이터저장은 단일리스트로 했으며 우선순위 큐 혹은 이진탐색트리로 개선해야할 부분이다.
앞으로 해야할 일
사실 어떻게 해야할지 감도 안잡혔다. SQL구문은 어떻게 처리 할것이며(실제로 DB들은 구문처리기를 따로 구현해 사용한다고 한다..) 필드는 어떻게 동적으로 생성할것이고.., 테이블 생성 SQL은 어떻게 처리할 것인가..
- 일단 DML과 DDL을 구분할 수있도록 해야한다. 그리고
SQLProcessor
를 결국엔 클래스로 구현해더 다양한 기능들을 처리할 수 있도록 해야할 것이다. - 데이터 제거, 이진파일
write()
DB의 기본 파일입출력이 가능해야한다.
여담
DB구현하는 방법을 구글링하면 DB를 코드로 구현하기보단 툴을 사용해 모델링하는 방법밖에 안나와 참고할만한 자료가 없다는게 가장 큰 어려움으로 남는다. 앞으로 얼마만큼의 완성도를 이룰 수 있을지는 미지수이지만 자주자주 코딩함으로써 빨리 기능구현을 완료해야한다.