--- parser3/src/classes/table.C 2001/07/23 11:19:25 1.94 +++ parser3/src/classes/table.C 2001/07/25 11:22:46 1.96 @@ -5,7 +5,7 @@ Author: Alexander Petrosyan (http://design.ru/paf) */ -static const char *RCSId="$Id: table.C,v 1.94 2001/07/23 11:19:25 parser Exp $"; +static const char *RCSId="$Id: table.C,v 1.96 2001/07/25 11:22:46 parser Exp $"; #include "pa_config_includes.h" @@ -349,34 +349,6 @@ static void _empty(Request& r, const Str r.write_no_lang(*new(pool) VBool(pool, table.size()==0)); } -/// used by table: _record / store_column_item_to_hash -struct Record_info { - Pool *pool; - Table *table; - Hash *hash; -}; -static void store_column_item_to_hash(Array::Item *item, void *info) { - Record_info& ri=*static_cast(info); - String& column_name=*static_cast(item); - Value *value; - if(const String *column_item=ri.table->item(column_name)) - value=new(*ri.pool) VString(*column_item); - else - value=new(*ri.pool) VVoid(*ri.pool); - ri.hash->put(column_name, value); -} -static void _record(Request& r, const String& method_name, MethodParams *) { - Table& table=static_cast(r.self)->table(); - if(const Array *columns=table.columns()) { - Pool& pool=r.pool(); - Value& result=*new(pool) VHash(pool); - Record_info record_info={&pool, &table, result.get_hash()}; - columns->for_each(store_column_item_to_hash, &record_info); - result.set_name(method_name); - r.write_no_lang(result); - } -} - /// used by table: _hash / table_row_to_hash struct Row_info { Table *table; @@ -676,14 +648,13 @@ static void _sql(Request& r, const Strin PTHROW(rethrow_me.type(), rethrow_me.code(), &statement_string, // setting more specific source [were url] rethrow_me.comment()); - - if(!handlers.table) - PTHROW(0, 0, - &statement_string, - "no table result"); + + Table *result= + handlers.table?handlers.table: // query resulted in table? return it + new(pool) Table(pool, &method_name, 0); // query returned no table, fake it // replace any previous table value - static_cast(r.self)->set_table(*handlers.table); + static_cast(r.self)->set_table(*result); } static void _dir(Request& r, const String& method_name, MethodParams *params) { @@ -821,9 +792,6 @@ MTable::MTable(Pool& apool) : Methoded(a // ^table.empty[] add_native_method("empty", Method::CT_DYNAMIC, _empty, 0, 0); - // ^table.record[] - add_native_method("record", Method::CT_DYNAMIC, _record, 0, 0); - // ^table:hash[key field name] // ^table:hash[key field name][value field name;...] add_native_method("hash", Method::CT_DYNAMIC, _hash, 1, 1000);