--- parser3/src/classes/table.C 2004/07/14 08:36:40 1.205 +++ parser3/src/classes/table.C 2005/07/28 11:23:01 1.209 @@ -5,7 +5,7 @@ Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char * const IDENT_TABLE_C="$Date: 2004/07/14 08:36:40 $"; +static const char * const IDENT_TABLE_C="$Date: 2005/07/28 11:23:01 $"; #include "classes.h" #include "pa_vmethod_frame.h" @@ -21,7 +21,7 @@ static const char * const IDENT_TABLE_C= class MTable: public Methoded { public: // VStateless_class - Value* create_new_value(Pool&) { return new VTable(); } + Value* create_new_value(Pool&, HashStringValue&) { return new VTable(); } public: MTable(); @@ -263,23 +263,22 @@ static void skip_empty_and_comment_lines } struct TableSeparators { - char column; - char encloser; - const String* sencloser; - - TableSeparators() { - column='\t'; - encloser=0; - } + char column; const String* scolumn; + char encloser; const String* sencloser; + + TableSeparators(): + column('\t'), scolumn(new String("\t", false)), + encloser(0), sencloser(0) + {} void load( HashStringValue& options ) { if(Value* vseparator=options.get(COLUMN_SEPARATOR_NAME)) { options.remove(COLUMN_SEPARATOR_NAME); - const String& sseparator=vseparator->as_string(); - if(sseparator.length()!=1) + scolumn=&vseparator->as_string(); + if(scolumn->length()!=1) throw Exception("parser.runtime", - &sseparator, + scolumn, "separator must be one character long"); - column=sseparator.first_char(); + column=scolumn->first_char(); } if(Value* vencloser=options.get(COLUMN_ENCLOSER_NAME)) { options.remove(COLUMN_ENCLOSER_NAME); @@ -419,7 +418,7 @@ static void _save(Request& r, MethodPara for(Array_iterator i(*table.columns()); i.has_next(); ) { maybe_enclose( sdata, *i.next(), separators.encloser, separators.sencloser ); if(i.has_next()) - sdata.append_know_length("\t", 1, String::L_CLEAN); + sdata<<*separators.scolumn; } } else { // nameless table [we were asked to output column names] if(int lsize=table.count()?table[0]->count():0) @@ -427,7 +426,7 @@ static void _save(Request& r, MethodPara char *cindex_tab=new(PointerFreeGC) char[MAX_NUMBER]; sdata.append_know_length(cindex_tab, snprintf(cindex_tab, MAX_NUMBER, - column c(*i.next()); c.has_next(); ) { maybe_enclose( sdata, *c.next(), separators.encloser, separators.sencloser ); if(c.has_next()) - sdata.append_know_length("\t", 1, String::L_CLEAN); + sdata<<*separators.scolumn; } sdata.append_know_length("\n", 1, String::L_CLEAN); } @@ -659,6 +658,8 @@ static void _hash(Request& r, MethodPara int saved_current=self_table.current(); self_table.for_each(table_row_to_hash, &info); self_table.set_current(saved_current); + + result.extract_default(); } } r.write_no_lang(result); @@ -980,7 +981,7 @@ static void _sql(Request& r, MethodParam #endif r.connection()->query( statement_cstr, - 0, 0, + placeholders_count, placeholders, offset, limit, handlers, statement_string);