--- parser3/src/classes/table.C 2008/04/08 12:34:01 1.241 +++ parser3/src/classes/table.C 2008/05/27 19:01:46 1.243 @@ -5,7 +5,7 @@ Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char * const IDENT_TABLE_C="$Date: 2008/04/08 12:34:01 $"; +static const char * const IDENT_TABLE_C="$Date: 2008/05/27 19:01:46 $"; #ifndef NO_STRINGSTREAM #include @@ -623,12 +623,15 @@ static void _menu(Request& r, MethodPara StringOrValue sv_processed=r.process(body_code); Request::Skip lskip=r.get_skip(); r.set_skip(Request::SKIP_NOTHING); + const String* s_processed=sv_processed.get_string(); if(delim_maybe_code && s_processed && s_processed->length()) { // delimiter set and we have body if(need_delim) // need delim & iteration produced string? r.write_pass_lang(r.process(*delim_maybe_code)); - need_delim=true; + else + need_delim=true; } + r.write_pass_lang(sv_processed); if(lskip==Request::SKIP_BREAK) @@ -663,15 +666,13 @@ static void table_row_to_hash(Table::ele if(!key) return; // ignore rows without key [too-short-record_array if-indexed] - bool exist = false; - switch (info->value_type) { - case C_STRING: - { + bool exist=false; + switch(info->value_type) { + case C_STRING: { exist=info->hash->put_dont_replace(*key, new VString(*row->get(info->value_fields->get(0)))); + break; } - break; - case C_HASH: - { + case C_HASH: { VHash* vhash=new VHash; HashStringValue& hash=vhash->hash(); for(Array_iterator i(*info->value_fields); i.has_next(); ) { @@ -683,18 +684,16 @@ static void table_row_to_hash(Table::ele } exist=info->hash->put_dont_replace(*key, vhash); + break; } - break; - case C_TABLE: - { - VTable* vtable=(VTable*)info->hash->get(*key); // put. table existed? - if( info->distinct==D_ILLEGAL ){ - exist=true; - break; - } - + case C_TABLE: { + VTable* vtable=(VTable*)info->hash->get(*key); // table exist? Table* table; if(vtable) { + if(info->distinct==D_ILLEGAL) { + exist=true; + break; + } table=vtable->get_table(); } else { // no? creating table of same structure as source @@ -703,8 +702,8 @@ static void table_row_to_hash(Table::ele info->hash->put(*key, new VTable(table)); } *table+=row; + break; } - break; } if(exist && info->distinct==D_ILLEGAL) throw Exception(PARSER_RUNTIME,