--- parser3/src/classes/hash.C 2002/09/18 08:52:47 1.50 +++ parser3/src/classes/hash.C 2002/12/09 11:07:39 1.52 @@ -5,7 +5,7 @@ Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char* IDENT_HASH_C="$Date: 2002/09/18 08:52:47 $"; +static const char* IDENT_HASH_C="$Date: 2002/12/09 11:07:39 $"; #include "classes.h" #include "pa_request.h" @@ -31,12 +31,12 @@ public: // Methoded // methods #ifndef DOXYGEN -class Hash_sql_event_handlers : public SQL_Driver_query_event_handlers { +class Hash_sql_event_handlers: public SQL_Driver_query_event_handlers { public: Hash_sql_event_handlers(Pool& apool, const String& amethod_name, const String& astatement_string, const char *astatement_cstr, bool adistinct, - Hash& arows_hash) : + Hash& arows_hash): pool(apool), method_name(amethod_name), statement_string(astatement_string), @@ -55,7 +55,7 @@ public: } void before_rows() { if(columns.size()<=1) - throw Exception("parser.runtime", + throw SQL_Exception("parser.runtime", &method_name, "column count must be more than 1 to create a hash"); } @@ -73,7 +73,7 @@ public: row_hash=row_vhash->get_hash(0); if(rows_hash.put_dont_replace(*cell, row_vhash)) // put. existed? if(!distinct) - throw Exception("parser.runtime", + throw SQL_Exception("parser.runtime", cell, "duplicate key"); } else @@ -295,8 +295,9 @@ static void one_foreach_cycle(const Hash Foreach_info& i=*static_cast(info); i.vkey->set_string(akey); - i.r->get_method_frame()->put_element(*i.key_var_name, i.vkey, false); - i.r->get_method_frame()->put_element(*i.value_var_name, static_cast(avalue), false); + Value& ncontext=*i.r->get_method_frame()->caller(); + ncontext.put_element(*i.key_var_name, i.vkey, false); + ncontext.put_element(*i.value_var_name, static_cast(avalue), false); StringOrValue sv_processed=i.r->process(*i.body_code); const String *s_processed=sv_processed.get_string();