--- parser3/src/classes/table.C 2002/04/10 09:53:14 1.147 +++ parser3/src/classes/table.C 2002/04/12 11:44:27 1.148 @@ -4,7 +4,7 @@ Copyright (c) 2001, 2002 ArtLebedev Group (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) - $Id: table.C,v 1.147 2002/04/10 09:53:14 paf Exp $ + $Id: table.C,v 1.148 2002/04/12 11:44:27 paf Exp $ */ #include "classes.h" @@ -246,8 +246,7 @@ static void _menu(Request& r, const Stri Value *delim_maybe_code=params->size()>1?¶ms->get(1):0; - VTable& vtable=*static_cast(r.self); - Table& table=vtable.table(); + Table& table=static_cast(r.self)->table(); bool need_delim=false; int saved_current=table.current(); int size=table.size(); @@ -410,8 +409,7 @@ static bool _locate_expression(Request& Value& expression_code=params->as_junction(0, "must be expression"); - VTable& vtable=*static_cast(r.self); - Table& table=vtable.table(); + Table& table=static_cast(r.self)->table(); int saved_current=table.current(); int size=table.size(); for(int row=0; row(r.self); - Table& table=vtable.table(); + Table& table=static_cast(r.self)->table(); return table.locate( params->as_string(0, "column name must be string"), params->as_string(1, "value must be string") @@ -448,9 +445,7 @@ static void _locate(Request& r, const St static void _flip(Request& r, const String& method_name, MethodParams *params) { Pool& pool=r.pool(); - VTable& vtable=*static_cast(r.self); - - Table& old_table=*vtable.get_table(); + Table& old_table=static_cast(r.self)->table(); Table& new_table=*new(pool) Table(pool, &method_name, 0/*nameless*/); if(old_table.size()) if(int old_cols=old_table.at(0).size()) @@ -477,8 +472,7 @@ static void _append(Request& r, const St Array& row=*new(pool) Array(pool); string.split(row, 0, "\t", 1, String::UL_AS_IS); - VTable& vtable=*static_cast(r.self); - vtable.table()+=&row; + static_cast(r.self)->table()+=&row; } static void _join(Request& r, const String& method_name, MethodParams *params) { @@ -646,6 +640,38 @@ static void _columns(Request& r, const S r.write_no_lang(result); } +static void _select(Request& r, const String& method_name, MethodParams *params) { + Pool& pool=r.pool(); + + Value& vcondition=params->as_junction(0, "condition must be expression"); + + Table& source_table=static_cast(r.self)->table(); + Table& result_table=*new(pool) Table(pool, + source_table.origin_string(), + source_table.columns() + ); + + int saved_current=source_table.current(); + int size=source_table.size(); + for(int row=0; row