Пример #1
0
int main() {
  //=======================Initialization=========================
  cout << "=======================Initialization=========================" << endl;

  // Initialize the memory, disk and the schema manager
  MainMemory mem;
  Disk disk;
  cout << "The memory contains " << mem.getMemorySize() << " blocks" << endl;
  cout << mem << endl << endl;
  SchemaManager schema_manager(&mem,&disk);
  Schema *schema;

  disk.resetDiskIOs();
  disk.resetDiskTimer();
  // Another way to time
  clock_t start_time;
  start_time=clock();
  
  // TODO Set up a block here??
  
  //=========================Initialization ends ==========================
  string line;
  vector<string> strings;
  ifstream myfile ("TinySQL_linux.txt");
  if(myfile.is_open()) {
    while(getline (myfile,line)) {
      //cout << line << '\n';
      istringstream f(line);
      string s;    
      while(getline(f, s, ' ')) {
        //cout << s << endl;
        strings.push_back(s);
      }
      if(strings[0].compare("CREATE") == 0) {
        // Creating a schema for the create statement.
		schema = processCreate(strings);
		//printSchema(*schema);
		// Creating the relation with the schema above using schema manager.
		string relation_name=strings[2];
		cout << "Creating table " << relation_name << endl;
		Relation* relation_ptr=schema_manager.createRelation(relation_name, *schema);
		//printRelation(relation_ptr);
	  }
	  // TODO Change the command to lower-case and compare
	  else if(strings[0].compare("INSERT") == 0) {
	    cout << "It is an INSERT statement " << endl;
		processInsert(line, strings, schema_manager);
	  }
	  else if(strings[0].compare("SELECT") == 0) {
	    cout << "It is a SELECT statement " << endl;
		processSelect(line, strings, schema_manager, &mem);
	  }
    strings.clear();  
    }
    myfile.close();
  }

  else cout << "Unable to open file"; 

  return 0;
}
Пример #2
0
int main(int argc, char ** argv){
	// Initialize the memory, disk and the schema manager
	MainMemory mem;
	Disk disk;
	//cout << "The memory contains " << mem.getMemorySize() << " blocks" << endl;
	SchemaManager schema_manager(&mem,&disk);
	disk.resetDiskIOs();
	disk.resetDiskTimer();
	resetFreeBlocks();
	clock_t start_time;
	start_time=clock();

	//=======================Read Input=========================
	ifstream input;
	bool interactive_mode = false;
	assert(argv && argc >= 1);

	cout<<endl;
	cout<<"                   ";
	cout<<"============================================="<<endl<<endl;
	cout<<"                   ";
	cout<<"Welcome to TinySQL Database Management System"<<endl<<endl;
	cout<<"                   ";
	cout<<"Develped by Jimmy Jin & Tony Wang, 12/6/2016"<<endl<<endl;
	cout<<"                   ";
	cout<<"============================================="<<endl<<endl;


	if (argc == 1){
		cout<<endl<<"Entering Interactive Mode: Type query and ENTER to execute; Type EXIT to exit the program."<<endl<<endl;
		interactive_mode = true;
	}
	else if (argc == 2){
		string filename = argv[1];
		input.open(filename.c_str());
		if (!input.is_open()){
			cout<<"Cannot Open file: "<<filename<<endl;
			return 0;
		}
	}
	else{
		cout<<"To use TinySQL to read input file, type:   ";
		cout<<"./Tiny <filename>"<<endl; 
		cout<<"To use TinySQL in Interactive Mode, type:  ";
		cout<<"./Tiny"<<endl;
		return 0;
	}
	unsigned long int ios = 0;
	double time = 0;
	string line;
	vector<string> words;

	// for each command line
	while(1){
		if (interactive_mode){
			cout<<">>";
			char console_input[1000];
			cin.getline(console_input, sizeof(console_input));
			line = string(console_input);
			if (line == "EXIT") break;
			cout<<endl;
		}
		else{
			if (!getline(input, line)) break;
			cout<<line<<endl;	
		}
		if(line[0] == '#')	continue;
		if(line.size() == 0)	continue;
		// extract each word into vector words
		words = splitBy(line," ");

		// prepare memory
		resetFreeBlocks();

		if (words[0] == "CREATE"){
			Create(words, schema_manager, mem);
		}
		else if (words[0] == "DROP"){
			string relation_name = words[2];
			schema_manager.deleteRelation(relation_name);
		}
		else if (words[0] == "INSERT"){
			Insert(words, line, schema_manager, mem);
			//	cout<< *(schema_manager.getRelation(relation_name))<<endl;
		}
		else if (words[0] == "DELETE"){
			Delete(words, schema_manager, mem);
		}
		else if (words[0] == "SELECT"){
			Select(words, schema_manager, mem);
		}
		else{
			cout<<"Not a valid Tiny-SQL command!"<<endl<<endl;
			continue;
			//abort();
		}
		words.clear();
		cout << "Elapse time = " << disk.getDiskTimer() - time<< " ms" << endl;
		cout << "Disk I/Os = " << disk.getDiskIOs() - ios<< endl<<endl;
		time = disk.getDiskTimer();
		ios = disk.getDiskIOs();
	}
	if (!interactive_mode)	input.close();
	cout << "==== End of inputs ==== "<<endl;
	cout << "Total elapse time = " << ((double)(clock()-start_time)/CLOCKS_PER_SEC*1000) << " ms" << endl;
	cout << "Total Disk elapse time = " << disk.getDiskTimer() << " ms" << endl;
	cout << "Total Disk I/Os = " << disk.getDiskIOs() << endl;
	return 0;
}