--- parser3/src/classes/table.C 2002/12/09 11:07:40 1.169 +++ parser3/src/classes/table.C 2003/04/04 13:44:59 1.173 @@ -1,11 +1,11 @@ /** @file Parser: @b table parser class. - Copyright (c) 2001, 2002 ArtLebedev Group (http://www.artlebedev.com) + Copyright (c) 2001, 2003 ArtLebedev Group (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char* IDENT_TABLE_C="$Date: 2002/12/09 11:07:40 $"; +static const char* IDENT_TABLE_C="$Date: 2003/04/04 13:44:59 $"; #include "classes.h" #include "pa_common.h" @@ -450,6 +450,9 @@ static void _sort(Request& r, const Stri false; // default=asc Table& old_table=static_cast(r.get_self())->table(&method_name); + if(old_table.size()==0) + return; + Table& new_table=*new(pool) Table(pool, &method_name, old_table.columns()); Table_seq_item *seq=(Table_seq_item *)pool.malloc(sizeof(Table_seq_item)*old_table.size()); @@ -457,8 +460,6 @@ static void _sort(Request& r, const Stri // calculate key values bool key_values_are_strings=true; - // save 'current' - int saved_current=old_table.current(); for(i=0; iAPPEND_TAINTED( - (const char *)ptr, size, - statement_cstr, 0); - columns+=column; - } - void before_rows() { - table=new(pool) Table(pool, &method_name, &columns); - } - void add_row() { - (*table)+=(row=new(pool) Array(pool)); - } - void add_row_cell(void *ptr, size_t size) { - String *cell=new(pool) String(pool); - if(size) - cell->APPEND_TAINTED( + bool add_column(SQL_Error& error, void *ptr, size_t size) { + try { + String *column=new(pool) String(pool); + column->APPEND_TAINTED( (const char *)ptr, size, - statement_cstr, table->size()-1); - (*row)+=cell; + statement_cstr, 0); + columns+=column; + return false; + } catch(...) { + error=SQL_Error("exception occured in Table_sql_event_handlers::add_column"); + return true; + } + } + bool before_rows(SQL_Error& error) { + try { + table=new(pool) Table(pool, &method_name, &columns); + return false; + } catch(...) { + error=SQL_Error("exception occured in Table_sql_event_handlers::before_rows"); + return true; + } + } + bool add_row(SQL_Error& error) { + try { + (*table)+=(row=new(pool) Array(pool)); + return false; + } catch(...) { + error=SQL_Error("exception occured in Table_sql_event_handlers::add_row"); + return true; + } + } + bool add_row_cell(SQL_Error& error, void *ptr, size_t size) { + try { + String *cell=new(pool) String(pool); + if(size) + cell->APPEND_TAINTED( + (const char *)ptr, size, + statement_cstr, table->size()-1); + (*row)+=cell; + return false; + } catch(...) { + error=SQL_Error("exception occured in Table_sql_event_handlers::add_row_cell"); + return true; + } } private: