/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#ifndef PARSE_H
#define PARSE_H
#include "../config.h"
#include <stdio.h>
#include <string>
#include <vector>
#include <map>
#include "query.h"
#include "client.h"
#include "dictionary.h"
#include "val.h"
extern int glob_argc;
extern char** glob_argv;
class Table_def
{
public:
Table_def(){}
string create_st;
string min_rows;
string client;
string data_file;
string gen_data_file;
void validate_table(string& name);
};
class Table_def_line
{
public:
string str;
Table_def_line(string& str);
virtual ~Table_def_line() {}
virtual void update_table_def(Table_def* t) = 0;
};
class Table_client_def_line: public Table_def_line
{
public:
Table_client_def_line(string& str): Table_def_line(str){}
void update_table_def(Table_def* t);
};
class Table_create_def_line: public Table_def_line
{
public:
Table_create_def_line(string& str): Table_def_line(str){}
void update_table_def(Table_def* t);
};
class Table_min_rows_def_line: public Table_def_line
{
public:
Table_min_rows_def_line(string& str): Table_def_line(str){}
void update_table_def(Table_def* t);
};
class Table_data_file_def_line: public Table_def_line
{
public:
Table_data_file_def_line(string& str): Table_def_line(str){}
void update_table_def(Table_def* t);
};
class Table_gen_data_file_def_line: public Table_def_line
{
public:
Table_gen_data_file_def_line(string& str): Table_def_line(str){}
void update_table_def(Table_def* t);
};
class Query_def_line
{
public:
string str;
Query_def_line(string& str);
virtual ~Query_def_line() {}
virtual void set_q_param(Query* q) = 0;
};
class Query_name_def_line: public Query_def_line
{
public:
Query_name_def_line(string& str):Query_def_line(str) {}
void set_q_param(Query* q);
};
class Query_query_def_line: public Query_def_line
{
public:
Query_query_def_line(string& str):Query_def_line(str) {}
void set_q_param(Query* q);
};
class Query_parsed_def_line: public Query_def_line
{
public:
Query_parsed_def_line(string& str):Query_def_line(str) {}
void set_q_param(Query* q);
};
class Query_type_def_line: public Query_def_line
{
public:
Query_type_def_line(string& str):Query_def_line(str) {}
void set_q_param(Query* q);
};
class Query_has_result_set_def_line: public Query_def_line
{
public:
Query_has_result_set_def_line(string& str):Query_def_line(str) {}
void set_q_param(Query* q);
};
class Dict_def
{
public:
Dict_def(){}
string source;
string source_type;
string dict_type;
string name;
string file_size_equiv;
string delim;
Dictionary* make_dict();
};
class Dict_def_line
{
public:
string str;
Dict_def_line(string& str): str(str) {}
virtual ~Dict_def_line() {}
virtual void update_dict_def(Dict_def& d) = 0;
};
class Dict_source_def_line: public Dict_def_line
{
public:
Dict_source_def_line(string& str): Dict_def_line(str) {}
void update_dict_def(Dict_def& d);
};
class Dict_source_type_def_line: public Dict_def_line
{
public:
Dict_source_type_def_line(string& str): Dict_def_line(str) {}
void update_dict_def(Dict_def& d);
};
class Dict_delim_def_line: public Dict_def_line
{
public:
Dict_delim_def_line(string& str): Dict_def_line(str) {}
void update_dict_def(Dict_def& d);
};
class Dict_file_size_equiv_def_line: public Dict_def_line
{
public:
Dict_file_size_equiv_def_line(string& str): Dict_def_line(str) {}
void update_dict_def(Dict_def& d);
};
class Dict_dict_type_def_line: public Dict_def_line
{
public:
Dict_dict_type_def_line(string& str): Dict_def_line(str) {}
void update_dict_def(Dict_def& d);
};
class Client_def
{
public:
string name;
string user;
string host;
string db;
string pass;
string socket;
string port;
Query_barrel* qb;
Client_def(): qb(NULL) {}
Client* make_client();
};
class Client_def_line
{
public:
string str;
Client_def_line(string& str): str(str) {}
virtual ~Client_def_line() {}
virtual void update_client_def(Client_def& cd) = 0;
};
class Client_query_barrel_def_line: public Client_def_line
{
public:
Client_query_barrel_def_line(string& str): Client_def_line(str)
{
}
void update_client_def(Client_def& cd);
};
class Client_user_def_line: public Client_def_line
{
public:
Client_user_def_line(string& str): Client_def_line(str)
{
}
void update_client_def(Client_def& cd);
};
class Client_pass_def_line: public Client_def_line
{
public:
Client_pass_def_line(string& str): Client_def_line(str)
{
}
void update_client_def(Client_def& cd);
};
class Client_host_def_line: public Client_def_line
{
public:
Client_host_def_line(string& str): Client_def_line(str)
{
}
void update_client_def(Client_def& cd);
};
class Client_db_def_line: public Client_def_line
{
public:
Client_db_def_line(string& str): Client_def_line(str)
{
}
void update_client_def(Client_def& cd);
};
class Client_port_def_line: public Client_def_line
{
public:
Client_port_def_line(string& str): Client_def_line(str)
{
}
void update_client_def(Client_def& cd);
};
class Client_socket_def_line: public Client_def_line
{
public:
Client_socket_def_line(string& str): Client_def_line(str)
{
}
void update_client_def(Client_def& cd);
};
class Param_list
{
public:
vector<string> params;
void add(string& a) { params.insert(params.end(), a);}
string& operator [] ( int n)
{
if(n >= 0 && n <= params.size())
return params[n];
return *new string("");
}
void print();
unsigned int size() { return params.size();}
int int_val(int n) { return atoi(params[n].c_str()); }
const char* pchar_val(int n) { return params[n].c_str();}
};
class Main_line
{
public:
string client;
string method;
Param_list* param_list;
Main_line(): param_list(NULL) {}
~Main_line() { delete param_list; }
void print();
void execute();
};
extern map<string, Query*, less<string> > query_pool;
extern map<string, Dictionary*, less<string> > dict_pool;
extern map<string, Client*, less<string> > client_pool;
extern string current_client;
extern vector<int> client_pids;
#endif
syntax highlighted by Code2HTML, v. 0.9.1