00001
00002
00003 #ifndef CLASS_DEFINITION_DEFINED
00004 #define CLASS_DEFINITION_DEFINED
00005
00006 namespace class_def {
00007
00010 class class_definition {
00011 public:
00012 static std::vector<class_def::class_definition*> _univ;
00013
00014 std::string _name ;
00015 int _inheritance ;
00016 std::vector<std::string> _class_qualifiers ;
00017 std::vector<std::string> _parents ;
00018 std::vector<class_def::key_attribute> _key_attributes ;
00019 std::vector<class_def::functional_attribute> _functional_attributes ;
00020 std::vector<class_def::derived_attribute> _derived_attributes ;
00021 std::vector<std::string> _other_lines_at_begining;
00022 std::vector<class_def::enum_constant> _enum_constants ;
00023 std::vector<class_def::static_constant> _static_constants ;
00024 std::vector<std::string> _other_lines_at_end ;
00025 bool _protected_constructor ;
00026 bool _singleton ;
00027
00028
00029 std::vector<class_def::attribute*> _defined_attributes;
00030
00032 std::vector<class_def::attribute*> _row_attributes;
00033
00035 std::vector<class_def::attribute*> _non_key_attributes;
00036
00037 std::vector<class_def::attribute*> _all_key_attributes;
00038 std::vector<class_def::attribute*> _all_functional_attributes;
00039 std::vector<class_def::attribute*> _all_derived_attributes;
00040 std::vector<class_def::attribute*> _all_defined_attributes;
00041 std::vector<class_def::attribute*> _all_row_attributes;
00042 std::vector<class_def::attribute*> _all_non_key_attributes;
00043
00044
00045 static std::string _input_line;
00046 static std::vector<std::string> _arg_vect, _com_vect;
00047
00048 static int _erno;
00049 static const char *_error_msg;
00050
00051 protected:
00052
00053 static void read_num_param(
00054 std::istream& from ,
00055 const char *param_name,
00056 int& param );
00057
00058 static std::string _output_format;
00059 static bool _lower_case_mysql_names;
00060 static int _error_function;
00061 static int _domain_error;
00062 static int _back_white;
00063
00064 static string mysql_case_adjusted_name( const string& rhs) {
00065 if (_lower_case_mysql_names) {
00066 return string_to_lower(rhs);
00067 } else {
00068 return rhs;
00069 }
00070 }
00071
00072 void print_throw_message(
00073 const std::string& funcname,
00074 int numspace,
00075 std::ostream &os) const;
00076
00077 public:
00078
00079 static const char* _class_name() { return "class_def::class_definition";}
00080 const char *get_class_name() const { return _class_name();}
00081
00082 void set_null();
00083
00084 void init_calc_derived_attributes();
00085
00086 void init(
00087 const std::string& Name ,
00088 int Inheritance ,
00089 const std::vector<std::string>& Class_qualifiers ,
00090 const std::vector<std::string>& Parents ,
00091 const std::vector<class_def::key_attribute>& Key_attributes ,
00092 const std::vector<class_def::functional_attribute>& Functional_attributes ,
00093 const std::vector<class_def::derived_attribute>& Derived_attributes ,
00094 const std::vector<std::string>& other_lines_at_begining,
00095 const std::vector<class_def::enum_constant>& Enum_constants ,
00096 const std::vector<class_def::static_constant>& Static_constants ,
00097 const std::vector<std::string>& other_lines_at_end ,
00098 bool Protected_constructor ,
00099 bool Singleton );
00100
00101 class_definition() {
00102 set_null();
00103 }
00104
00105 friend std::istream& operator >> ( std::istream& s, class_definition& atr);
00106 friend std::ostream& operator << ( std::ostream& s, const class_definition& atr);
00107
00108 static int is_white( char c);
00109 static void get_arg_vect( std::istream& , std::vector<std::string>& , std::vector<std::string>&);
00110
00111 friend class attribute;
00112 friend class derived_attribute;
00113
00114 void print( std::ostream& s) const;
00115
00116 void print_header_output( std::ostream& s) const;
00117 void print_simple_output( std::ostream& s) const;
00118 void print_init_static_attributes( std::ostream& s) const;
00119 void print_exists( std::ostream& s) const;
00120 void print_singleton_select( std::ostream& s) const;
00121
00126 void print_insert( std::ostream& s) const;
00127 void print_update( std::ostream& s) const;
00128 void print_mysql_exists( std::ostream& os) const;
00129 void print_mysql_delete( std::ostream& os) const;
00130 void print_mysql_insert( std::ostream& os) const;
00131 void print_mysql_update( std::ostream& os) const;
00132 void print_mysql_singleton_select( std::ostream& os) const;
00133 void print_mysql_insert_or_update( std::ostream& os) const;
00134
00135 void print_tag(
00136 std::ostream& os,
00137 const std::string& tag,
00138 const std::string& nmspc,
00139 const std::string& consttag) const;
00140
00141 void print_read_binary( std::ostream& s) const;
00142 void print_write_binary( std::ostream& s) const;
00143 void print_send_binary( std::ostream& s) const;
00144 void print_recv_binary( std::ostream& s) const;
00145 void print_map_by_offset( std::ostream& s) const;
00146
00147
00148 void Read( std::istream& s);
00149
00150 static void set_output_format( const char *fmt) {
00151 _output_format = fmt;
00152 }
00153
00154 static void set_lower_case_mysql_names( bool newval) {
00155 _lower_case_mysql_names = newval;
00156 }
00157
00158 static void set_error_function( int i) { _error_function = i;}
00159
00160 static void set_domain_error( int i) { _domain_error = i; }
00161
00162 static void set_back_white( int i) { _back_white = i;}
00163
00164 static int stricmp( const char *lhs, const char *rhs);
00165
00166 static bool is_string( const char* str);
00167
00168 static const char *int_alias[];
00169
00170 static bool is_int( const char *str);
00171
00172 static const char *double_alias[];
00173
00174 static bool is_double( const char *str);
00175
00180 void print_mysql_create_table( std::ostream& os) const ;
00181
00182 static string eat_white( const std::string& str, const std::string& seps);
00183
00184 static string eat_back_white( const std::string& str, const std::string& seps);
00185
00186 };
00187 }
00188
00189 #endif